<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dave's Occasional Brainfart</title>
	<atom:link href="http://blog.kayosdesign.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.kayosdesign.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Tue, 31 Jan 2012 02:26:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Encrypted offsite backup with EncFS, Amazon S3, and s3cmd</title>
		<link>http://blog.kayosdesign.com/2012/01/31/encrypted-offsite-backup-with-encfs-amazon-s3-and-s3cmd/</link>
		<comments>http://blog.kayosdesign.com/2012/01/31/encrypted-offsite-backup-with-encfs-amazon-s3-and-s3cmd/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 02:26:27 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=235</guid>
		<description><![CDATA[Stolen from here: http://shrp.me/docs/encrypted_offsite_backup.php I&#8217;ve been using Jungle Disk to do offsite backups of my data. Jungle Disk uses Amazon&#8217;s cheap online storage service, Amazon S3, to host backups. (15 cents a gig!) I don&#8217;t like Jungle Disk because it&#8217;s not open source and because the app is a little clunky, at least on Linux. [...]]]></description>
			<content:encoded><![CDATA[<h2>Stolen from here: http://shrp.me/docs/encrypted_offsite_backup.php</h2>
<p>I&#8217;ve been using <a href="http://www.jungledisk.com/">Jungle Disk</a> to do offsite backups of my data. Jungle Disk uses Amazon&#8217;s cheap online storage service, <a href="http://aws.amazon.com/s3/">Amazon S3</a>, to host backups. (15 cents a gig!) I don&#8217;t like Jungle Disk because it&#8217;s not open source and because the app is a little clunky, at least on Linux. I recently found that <a href="http://s3tools.logix.cz/s3cmd">s3cmd</a> could do an rsync-like sync of a directory. That&#8217;s cool, but it doesn&#8217;t do encrypted backups like Jungle Disk did. In this post, I&#8217;ll demonstrate how to make an encrypted backup of locally unencrypted data using <a href="http://www.arg0.net/encfs">EncFS</a>, <a href="http://aws.amazon.com/s3/">Amazon S3</a>, and <a href="http://s3tools.logix.cz/s3cmd">s3cmd</a>.</p>
<p>Enter <a href="http://www.arg0.net/encfs">EncFS</a>. EncFS transparently encrypts files with AES encryption from a <a href="http://en.wikipedia.org/wiki/Filesystem_in_Userspace">FUSE</a> mountpoint to a local directory. That means I could have an encrypted directory, like /home/user/encrypted, and a encfs mountpoint at /home/user/unencrypted. The unencrypted directory would contain all the plaintext (unencrypted) data, and the encrypted directory would contain a mirror of the unencrypted directory&#8217;s directory structure as well as all of the individual files, except that the file names and contents have been encrypted. (Note that this could be a disadvantage of EncFS depending on your needs: the files contents and filenames have been scrambled, but an attacker who has accessed your data still encypted can still see approximate file sizes, approximate file name lengths, and file attributes. Jungle Disk shares these disadvantages with its encryption.) More on EncFS <a href="http://www.arg0.net/encfsintro">here</a>&#8230;</p>
<p>You might already see how EncFS can make it really easy to back up your encrypted data without any hassle, but what about if you already have a ton of unencrypted files which you don&#8217;t care to encrypt on your local disk? Well EncFS has a cool little &#8220;reverse&#8221; mode that lets you create an encrypted mountpoint from an unencrypted directory, suitable for rsyncing against, or in this case, for using s3cmd sync with.</p>
<h2>How to do it</h2>
<p>Before you get started, you have to have an Amazon S3 account. You can <a href="http://aws-portal.amazon.com/gp/aws/developer/subscription/index.html?productCode=AmazonS3">sign up here</a> if you&#8217;re not signed up already. You should also have <a href="http://www.ubuntu.com/">a modern Linux distro</a> with FUSE, as well as encfs and the s3cmd utility. Now lets go to a terminal and configure s3cmd:</p>
<pre>sharp@blue:~$ <strong>s3cmd --configure</strong>

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3
Access Key: <em><strong>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</strong></em>
Secret Key: <em><strong>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</strong></em>

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: <em><strong>(just hit enter, if you want)</strong></em>
Path to GPG program [/usr/bin/gpg]: <em><strong>(hit enter)</strong></em>

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: <strong>Yes</strong>

New settings:
  Access Key: <em>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</em>
  Secret Key: <em>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</em>
  Encryption password:
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: True
  HTTP Proxy server name:
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] <strong>y</strong>
Please wait...
Success. Your access key and secret key worked fine <img src='http://blog.kayosdesign.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] <strong>y</strong>
Configuration saved to '/home/sharp/.s3cfg'</pre>
<p>You may have noticed my access key and secret key blocked out with Xs. These are unique to your account and can be found <a href="http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key">at this page</a>. Now that s3cmd is configured and working, we can make a bucket to keep our backup. (You can keep multiple backups per bucket.) Keep in mind that nobody else on S3 may be using the same bucket name, so you&#8217;ll have to pick one thats unique. This is because lots of S3 users make whatever content is in their buckets public (although the default is to keep it private.) So lets create our bucket:</p>
<pre>sharp@blue:~$ <strong>s3cmd mb s3://sharpbackup</strong>
Bucket 'sharpbackup' created</pre>
<p>Now we need a temporary directory to mount the encrypted filesystem on.</p>
<pre>sharp@blue:~$ <strong>mkdir Music_enc</strong></pre>
<p>You might make this in /tmp, especially if you are scripting the process. In this example I&#8217;m trying to back up my music (which is in /home/sharp/Music, so I&#8217;ve given the mountpoint the name /home/sharp/Music_enc.) Now finally we can create our key and reverse mount this unencrypted directory to an encrypted mountpoint. Be sure to use the full path of both the directory you are backing up and the mountpoint.</p>
<pre>sharp@blue:~$ <strong>encfs --reverse /home/sharp/Music /home/sharp/Music_enc</strong>
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?&gt; <strong><em>(press enter here)</em></strong>

Standard configuration selected.
--reverse specified, not using unique/chained IV

Configuration finished.  The filesystem to be created has
the following properties:
Filesystem cipher: "ssl/aes", version 2:1:1
Filename encoding: "nameio/block", version 3:0:1
Key Size: 192 bits
Block Size: 1024 bytes

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

New Encfs Password: <strong><em>(enter password here)</em></strong>
Verify Encfs Password: <strong><em>(again...)</em></strong></pre>
<p>Now we&#8217;ll want to back up the EncFS config file. EncFS puts this file in the <em>rootDir</em> you specify. It contains the key used to decrypt the file system. The key itself is encrypted with your EncFS password, so if Mallory gets this file, he&#8217;ll still have to have your password. If you&#8217;re paranoid you can keep this file and put it somewhere safe, but since I&#8217;m not <em>that</em> paranoid about keeping my music unreadable, and because I don&#8217;t want to lose it (we <em>are</em> making a backup, after all,) I&#8217;ll put it in my bucket:</p>
<pre>sharp@blue:~$ <strong>s3cmd put Music/.encfs6.xml s3://sharpbackup/music.xml</strong>
File 'Music/.encfs6.xml' stored as s3://sharpbackup/music.xml (911 bytes in 0.0 seconds, 3.28 MB/s) [1 of 1]</pre>
<p>Now that file is safe, we can use <strong>s3cmd sync</strong> to sync all the encrypted versions of the files to the bucket.</p>
<pre>sharp@blue:~$ <strong>s3cmd --delete-removed sync Music_enc/ s3://sharpbackup/music</strong>
Compiling list of local files...
Retrieving list of remote files...
Found 11 local files, 0 remote files
Verifying checksums...
Summary: 11 local files to upload, 0 remote files to delete
...</pre>
<p>&#8230;and we&#8217;re done. If you stop this command and then start it again it will pick up where it left off. That&#8217;s actually true for any point in this process. You can even change files, add files or delete files, and s3cmd will only transfer the files it has to to make the backup up-to-date. This is the beauty of using EncFS with an rsync-like system. One last thing. When we&#8217;re done you should unmount the EncFS mountpoint:</p>
<pre>sharp@blue:~$ <strong>fusermount -u Music_enc/</strong></pre>
<h2>Restoring the backup</h2>
<p>Now lets pretend our hard disk crashes, and we&#8217;ve lost all our data. We install <a href="/category/linux/" title="View all posts filed under Linux">Linux</a> along with EncFS and s3cmd. At this point you could sync back all the data and use it like a regular EncFS folder. The problem is that we never intended for the data to be encrypted locally, and it would be a hassle to mount it as a regular EncFS folder and copy all the data out of there. Luckily we can reverse mount the same way we did before and sync all our music back. First, lets create our folders:</p>
<pre>sharp@blue:~$ <strong>mkdir Music</strong>
sharp@blue:~$ <strong>mkdir Music_enc</strong></pre>
<p>Now we have to pull our config file back into the directory we want all of our files to go into:</p>
<pre>sharp@blue:~$ <strong>s3cmd get s3://sharpbackup/music.xml Music/.encfs6.xml</strong>
Object s3://sharpbackup/music.xml saved as 'Music/.encfs6.xml' (911 bytes in 0.0 seconds, 1569.16 kB/s)</pre>
<p>Now all we have to do is sync the encrypted files back into our Music_enc directory, and EncFS handles the rest:</p>
<pre>sharp@blue:~$ <strong>s3cmd sync s3://sharpbackup/music Music_enc/</strong>
Retrieving list of remote files...
Compiling list of local files...
Found 11 remote files, 1 local files
Verifying checksums...
Summary: 11 remote files to download, 1 local files to delete
not-deleted 'UO5JPyI9Q3Q7hcnRW0kz8d6H'
...

sharp@blue:~$ <strong>cd Music</strong>
sharp@blue:~/Music$ <strong>ls</strong>
Minor Threat

sharp@blue:~$ <strong>fusermount -u Music_enc/</strong></pre>
<h2>Final thoughts</h2>
<ul>
<li>EncFS makes a ton of stuff like this really easy. You could do pretty much the same process with rsync and <a href="http://www.rsync.net/">rsync.net</a>. Or with rsync and another FUSE filesystem like <a href="http://fuse.sourceforge.net/sshfs.html">sshfs</a> or <a href="http://richard.jones.name/google-hacks/gmail-filesystem/gmail-filesystem.html">GmailFS</a>, although I wouldn&#8217;t recommend the latter because Google looks down upon that sort of thing and is known to remove accounts that use tons of bandwidth. The upside to S3 is that it is cheap storage.</li>
<li>This whole process can be easily scripted. I may (or may not) be releasing a script soon that just does this whole thing if you give it a directory you want to back up and a name of a bucket and prefix.</li>
<li>Metadata (file size, file name size, attributes, etc) is still easy to see. The contents and file names may be encrypted, but it is not hard to figure out that a bunch of folders containing 10 or so files that are about 2-4 megs are folders containing music.</li>
<li>Backing up folders already encrypted with EncFS is even easier. Just sync them.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2012/01/31/encrypted-offsite-backup-with-encfs-amazon-s3-and-s3cmd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cupboard Remodelling</title>
		<link>http://blog.kayosdesign.com/2010/11/01/cupboard-remodelling/</link>
		<comments>http://blog.kayosdesign.com/2010/11/01/cupboard-remodelling/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 04:00:02 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=213</guid>
		<description><![CDATA[Working out of a cupboard blows. Especially when it&#8217;s a tiny dank hole in the wall. So I decided to spruce it up somewhat and improve the atmosphere. To do this I would remove the pc from the environment entirely. Luckily my cupboard is directly above my garage where I have pleanty of room for [...]]]></description>
			<content:encoded><![CDATA[<p>Working out of a cupboard blows. Especially when it&#8217;s a tiny dank hole in the wall.</p>
<p>So I decided to spruce it up somewhat and improve the atmosphere. To do this I would remove the pc from the environment entirely. Luckily my cupboard is directly above my garage where I have pleanty of room for computers and other assorted paraphenalia.</p>
<p>The goal decided, it was time to plan.</p>
<div id="attachment_214" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/CupboardDataWiring.png"><img class="size-thumbnail wp-image-214" title="Cupboard Data Wiring" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/CupboardDataWiring-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Schematic for wiring of a cupboard</p></div>
<div id="attachment_217" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/Downstairs.png"><img class="size-thumbnail wp-image-217" title="Downstairs cabling" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/Downstairs-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">Downstairs Cabling</p></div>
<p>With all the computer crap I do it&#8217;s necessary for me to be able to plug in extra computing gear as required. So I tried to make sure there would be enough ports to handly anything I could reasonable think of.</p>
<p>In addition to the cupboard wiring I also decided to network the house with Cat6. Just because I could.</p>
<p>To begin I ripped out the cupboard walls, replaced some joists then put all the cables in place.</p>
<div id="attachment_215" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/1allcables.jpg"><img class="size-thumbnail wp-image-215" title="All the cables in place" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/1allcables-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">All the cables in place</p></div>
<p style="text-align: left;">The left hand side shows all the cat6 from the rest of the house in place. There are 7 network ports around the house with an additional 4 to be put in the cupboard.</p>
<div id="attachment_216" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/2plasterup.jpg"><img class="size-thumbnail wp-image-216" title="Gyprock sheets are up." src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/2plasterup-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">The gyprock sheets are in place</p></div>
<p>Putting the plaster up was the easy bit, finishing it off is a skill I do not inately possess. It&#8217;s somewhat hidden with the undercoat, but really I should have sanded it more.</p>
<div id="attachment_225" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/3undercoat.jpg"><img class="size-thumbnail wp-image-225" title="Undercoat on" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/3undercoat-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Undercoat on</p></div>
<p>Due to delays in getting some of the cabling I wasn&#8217;t able to fully test it until after I had painted, but I couldn&#8217;t change my mind anyway so it&#8217;s a good thing it worked.</p>
<div id="attachment_226" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/4testing.jpg"><img class="size-thumbnail wp-image-226" title="Testing" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/4testing-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">Yay! It Works!</p></div>
<p style="text-align: left;">The mostly finished product can be seen here</p>
<p style="text-align: left;">
<div id="attachment_228" class="wp-caption aligncenter" style="width: 160px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/11/5sherides.jpg"><img class="size-thumbnail wp-image-228" title="She Rides!" src="http://blog.kayosdesign.com/wp-content/uploads/2010/11/5sherides-150x150.jpg" alt="" width="150" height="150" /></a><p class="wp-caption-text">She Rides!</p></div>
<p style="text-align: left;">Still to come:</p>
<ol>
<li>Wall mounts for the monitors.</li>
<li>Cleaning up the cables so you can&#8217;t see any.</li>
<li>Desk made out of something decent.</li>
<li>Set of speakers.</li>
<li>Top half of the cupboard (I have yet to decide what to do with it, but eventually it&#8217;ll all be ripped out and replaced as well).</li>
</ol>
<p>Downstairs is similarly incomplete. I am going to make a server cupboard to hide everything in, but that can wait a bit longer.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/11/01/cupboard-remodelling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solar Panels</title>
		<link>http://blog.kayosdesign.com/2010/05/08/solar-panels/</link>
		<comments>http://blog.kayosdesign.com/2010/05/08/solar-panels/#comments</comments>
		<pubDate>Sat, 08 May 2010 07:21:39 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=210</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0328.jpg"><img class="aligncenter size-medium wp-image-207" title="17 Panels #1" src="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0328-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0329.jpg"><img class="aligncenter size-medium wp-image-208" title="17 Panels #2" src="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0329-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0329.jpg"></a><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0330.jpg"><img class="aligncenter size-medium wp-image-209" title="17 Panels #3" src="http://blog.kayosdesign.com/wp-content/uploads/2010/05/100_0330-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/05/08/solar-panels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Snakes revisited</title>
		<link>http://blog.kayosdesign.com/2010/04/27/snakes-revisited/</link>
		<comments>http://blog.kayosdesign.com/2010/04/27/snakes-revisited/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 01:05:17 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=203</guid>
		<description><![CDATA[Had the trees along the side of my house cut down and the guys doing the work brought me these as presents Picture doesn&#8217;t show it too clearly, but they are all from different snakes. The scales and size change in each one.]]></description>
			<content:encoded><![CDATA[<p>Had the trees along the side of my house cut down and the guys doing the work brought me these as presents</p>
<div id="attachment_204" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/04/100_0322.jpg"><img class="size-medium wp-image-204" title="Skins" src="http://blog.kayosdesign.com/wp-content/uploads/2010/04/100_0322-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Three different snake skins - peg for scale.</p></div>
<p>Picture doesn&#8217;t show it too clearly, but they are all from different snakes. The scales and size change in each one.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/04/27/snakes-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTPC</title>
		<link>http://blog.kayosdesign.com/2010/04/26/htpc/</link>
		<comments>http://blog.kayosdesign.com/2010/04/26/htpc/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 08:56:44 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Toys]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=189</guid>
		<description><![CDATA[There are too many choices for a HTPC. I already have RAM &#38; SATA HDD so they are not included. Will probably get an SSD for the box at a later date. Have narrowed it down to the following Shiny Case Remote - Logitech Harmony 785 Advanced Universal Remote http://www.logitech.com/en-nz/remotes/universal_remotes/devices/370 U Keyboard - Logitech diNovo [...]]]></description>
			<content:encoded><![CDATA[<p>There are too many choices for a HTPC.</p>
<p>I already have RAM &amp; SATA HDD so they are not included. Will probably get an SSD for the box at a later date.</p>
<p>Have narrowed it down to the following</p>
<h2>Shiny Case</h2>
<p><strong>Remote </strong>- Logitech Harmony 785 Advanced Universal Remote</p>
<p><a href="http://www.logitech.com/en-nz/remotes/universal_remotes/devices/370">http://www.logitech.com/en-nz/remotes/universal_remotes/devices/370</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=&amp;&amp;bid=5&amp;sid=21250">U</a></p>
<p><strong>Keyboard </strong>- Logitech diNovo Cordless Mini Keyboard</p>
<p><a href="http://www.logitech.com/en-au/keyboards/keyboard/devices/3848">http://www.logitech.com/en-au/keyboards/keyboard/devices/3848</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=40&amp;bid=5&amp;sid=30535">U</a></p>
<p><strong>Case </strong>- Silverstone ML02B-MXR Slim MoDT Case</p>
<p><a href="http://www.silverstonetek.com/products/p_spec.php?pno=ml02&amp;area=usa" target="_blank">http://www.silverstonetek.com/products/p_spec.php?pno=ml02&amp;area=usa</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=139&amp;bid=5&amp;sid=31638" target="_blank">U</a></p>
<p><strong>Motherboard </strong>- Zotac IONITX-F-E ION N330 Dual Core PCIE</p>
<p><a href="http://www.zotacusa.com/zotac-ionitx-f-e-atom-n330-1-6ghz-dual-core-mini-itx-intel-motherboard.html" target="_blank">http://www.zotacusa.com/zotac-ionitx-f-e-atom-n330-1-6ghz-dual-core-mini-itx-intel-motherboard.html</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=107&amp;bid=5&amp;sid=51247" target="_blank">U</a></p>
<p><strong>Optical Drive</strong> &#8211; SONY AD7590S SATA Internal Slim DVD Burner(OEM) <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=20&amp;bid=5&amp;sid=47239" target="_blank">U</a></p>
<p><strong>Tuner </strong>- Leadtek PCI-E PxDVR3200H Hybrid TV Tuner HDTV/AC3</p>
<p><a href="http://www.leadtek.com/eng/tv_tuner/overview.asp?lineid=6&amp;pronameid=377" target="_blank">http://www.leadtek.com/eng/tv_tuner/overview.asp?lineid=6&amp;pronameid=377</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=&amp;&amp;bid=5&amp;sid=31547" target="_blank">U</a></p>
<p><span style="text-decoration: underline;">Total Price &#8211; $1013</span></p>
<h2>Cheaper Alternative</h2>
<p>Replace the Case/Motherboard/ODD &amp; Tuner with a<br />
<strong></strong></p>
<p><strong>Case </strong>- ASRock ION330 NV ION GBL DVDRW HDMI BK</p>
<p><a href="http://www.asrock.com/nettop/spec/ion%20330.asp" target="_blank">http://www.asrock.com/nettop/spec/ion%20330.asp</a> <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=70&amp;bid=5&amp;sid=52975" target="_blank">U</a></p>
<p><strong>Tuner </strong>- KWorld TV Tuner DVB-T HDTV USB <a href="http://www.umart.com.au/pro/products_listnew.phtml?id=10&amp;id2=&amp;&amp;bid=5&amp;sid=47758" target="_blank">U</a></p>
<p>Brings the price down to <span style="text-decoration: underline;">$628.00</span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/04/26/htpc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solar Hot Water</title>
		<link>http://blog.kayosdesign.com/2010/03/22/solar-hot-water/</link>
		<comments>http://blog.kayosdesign.com/2010/03/22/solar-hot-water/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 05:25:33 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=163</guid>
		<description><![CDATA[Had solar hotwater installed today. With a Hills Solar 22 tube solar tube collector and a 250L tank. Theoretically we should reduce our power usage by ~40% according to the literature. Only time will tell.]]></description>
			<content:encoded><![CDATA[<p>Had solar hotwater installed today.</p>
<p style="text-align: center;"><img src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes4-300x225.jpg" alt="" width="300" height="225" /> <img src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank4-225x300.jpg" alt="" width="225" height="300" /></p>
<p>With a Hills Solar <a href="http://www.hillssolar.com/arbitrage/pages/95" target="_blank">22 tube solar tube collector</a> and a 250L tank. Theoretically we should reduce our power usage by ~40% according to the literature. Only time will tell.</p>
<div id="attachment_164" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold1.jpg"><img class="size-medium wp-image-164" title="Installing the manifold." src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold1-300x225.jpg" alt="Installing the manifold." width="300" height="225" /></a><p class="wp-caption-text">Installing the manifold.</p></div>
<div id="attachment_165" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold2.jpg"><img class="size-medium wp-image-165" title="The manifold installed." src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold2-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The manifold installed.</p></div>
<div id="attachment_168" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold5.jpg"><img class="size-medium wp-image-168" title="Installing the tubes" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold5-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Installing the tubes</p></div>
<div id="attachment_167" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold4.jpg"><img class="size-medium wp-image-167" title="Installing the tubes" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Manifold4-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">Installing the tubes</p></div>
<div id="attachment_175" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes4.jpg"><img class="size-medium wp-image-175" title="The tubes" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes4-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The tubes</p></div>
<div id="attachment_174" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes3.jpg"><img class="size-medium wp-image-174" title="The tubes" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes3-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The tubes</p></div>
<div id="attachment_176" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes5.jpg"><img class="size-medium wp-image-176" title="The tubes" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tubes5-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">The tubes</p></div>
<div id="attachment_169" class="wp-caption aligncenter" style="width: 235px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank1.jpg"><img class="size-medium wp-image-169" title="The tank arrives" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank1-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">The tank arrives</p></div>
<div id="attachment_170" class="wp-caption aligncenter" style="width: 235px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank2.jpg"><img class="size-medium wp-image-170" title="Installing the tank" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank2-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">Installing the tank</p></div>
<div id="attachment_172" class="wp-caption aligncenter" style="width: 235px"><a href="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank4.jpg"><img class="size-medium wp-image-172" title="The finished tank" src="http://blog.kayosdesign.com/wp-content/uploads/2010/03/Tank4-225x300.jpg" alt="" width="225" height="300" /></a><p class="wp-caption-text">The finished tank</p></div>
<p style="text-align: center;">
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/03/22/solar-hot-water/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Openfire/Jabber/FreePBX integration #2</title>
		<link>http://blog.kayosdesign.com/2010/01/06/openfirejabberfreepbx-integration-2/</link>
		<comments>http://blog.kayosdesign.com/2010/01/06/openfirejabberfreepbx-integration-2/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 06:55:06 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[FreePBX]]></category>
		<category><![CDATA[Openfire]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=133</guid>
		<description><![CDATA[Having played some more I&#8217;ve come up with the following solution &#8211; I&#8217;m not overly happy with it but it allows me to get what I wanted. All of the following occurs in extensions_override_freepbx.conf NOTE: This assumes you have gotten the Openfire Asterisk-IM plugin working and that you have jabber.conf configured correctly to talk to [...]]]></description>
			<content:encoded><![CDATA[<p>Having played some more I&#8217;ve come up with the following solution &#8211; I&#8217;m not overly happy with it but it allows me to get what I wanted.<br />
All of the following occurs in extensions_override_freepbx.conf<br />
<strong>NOTE:</strong> This assumes you have gotten the <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a> <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a>-IM plugin working and that you have jabber.conf configured correctly to talk to your openfire server.</p>
<h3><a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a> obeying <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a> Status</h3>
<p>eg. When you mark yourself as away/DND inbound calls will be directed to Voicemail.</p>
<p>This inserts itself into the standard <a href="/category/voip/asterisk/freepbx/" title="View all posts filed under FreePBX">FreePBX</a> call queue for internal calls. I haven&#8217;t got an inbound link setup yet so I haven&#8217;t figured out how to get that bit working.</p>
<p>The jabber-notify block must contain every extension in the system this is to work on. It could be altered to return to the normal call path if a desired extension isn&#8217;t in the list &#8211; but I haven&#8217;t implemented that.</p>
<p>Basically a call to an extension picks up the appropriate jabber information and runs the macro &#8220;reach_user_with_presence&#8221;. There is probably some way to hook this into a db/ldap server so you don&#8217;t have to enter everyone in manually.</p>
<p>This then checks the users jabber status and if they are not available it jumps to their voicemail. Else it returns to the normal call path.</p>
<pre lang="bash">[from-internal]
include =&gt; jabber-notify

[jabber-notify]
;include =&gt; macro-reach_user_with_presence
exten =&gt; 10,1,Macro(reach_user_with_presence,user10@jabber.kayosdesign.com,${EXTEN})
exten =&gt; 11,1,Macro(reach_user_with_presence,user20@jabber.kayosdesign.com,${EXTEN})
exten =&gt; 12,1,Macro(reach_user_with_presence,user30@jabber.kayosdesign.com,${EXTEN})
exten =&gt; 13,1,Macro(reach_user_with_presence,user40@jabber.kayosdesign.com,${EXTEN})

[from-internal-original]
include =&gt; from-internal-xfer
include =&gt; bad-number

[macro-reach_user_with_presence]
; ${ARG1} is a jabber address such as test@jabber.server
; ${ARG2} is the voicemail box of the user

exten =&gt; s,1,jabberstatus(asterisk,${ARG1},STATUS)
;presence in will be 1-6.
;In order : Online, Chatty, Away, XAway, DND, Offline
;If not in roster variable will = 7
exten =&gt; s,n,gotoif($[$[${STATUS}]&lt;3]?available:unavailable) ;GotoIf(condition?label_if_true:label_if_false) ;exten =&gt; s,n(available),jabbersend(asterisk,${ARG2},"Call from ${CALLERID(name)} at number ${CALLERID(num)} on ${STRFTIME(,GMT-1,%A %B %d %G at %l:%M:%S %p)}")
exten =&gt; s,n(available),Goto(from-internal-original,${ARG2},1)
exten =&gt; s,n(unavailable),VoiceMail(${ARG2},u)
exten =&gt; s,1,Goto(from-internal-original,s,1)
exten =&gt; h,1,Macro(hangupcall)</pre>
<h3>Call groups being notified by jabber for inbound calls.</h3>
<p>We utilise the Counterpath Bria softphone. It&#8217;s a bit stupid and does not follow ALERT notifications such as  different ring tones.  As such there is no way for a user to know if an inbound call is implicitely for them or if it is coming in on the call group.</p>
<p>As such I hooked <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a> into jabber to broadcast a message to all people in the call group. I don&#8217;t particularly like this as you cannot create call groups dynamically using the <a href="/category/voip/asterisk/freepbx/" title="View all posts filed under FreePBX">FreePBX</a> interface. If you do create one you <span style="text-decoration: underline;">MUST</span> rebuild this section appropriately. Basically all it does is override the default settings and sends out an IM to everyone listed (you have to add each individual in the group to the ext-group section), after that it returns to the setup created by <a href="/category/voip/asterisk/freepbx/" title="View all posts filed under FreePBX">FreePBX</a>.</p>
<pre>[ext-group]
exten =&gt; 330,1,jabbersend(asterisk,user10@jabber.kayosdesign.com,"Group call")
exten =&gt; 330,n,jabbersend(asterisk,user20@jabber.kayosdesign.com,"Group call")

exten =&gt; 330,n,Goto(ext-group-original,330,1)

[ext-group-original]
exten =&gt; 330,1,Macro(user-callerid,)
exten =&gt; 330,n,GotoIf($["foo${BLKVM_OVERRIDE}" = "foo"]?skipdb)
exten =&gt; 330,n,GotoIf($["${DB(${BLKVM_OVERRIDE})}" = "TRUE"]?skipov)
exten =&gt; 330,n(skipdb),Set(__NODEST=)
exten =&gt; 330,n,Set(__BLKVM_OVERRIDE=BLKVM/${EXTEN}/${CHANNEL})
exten =&gt; 330,n,Set(__BLKVM_BASE=${EXTEN})
exten =&gt; 330,n,Set(DB(${BLKVM_OVERRIDE})=TRUE)
exten =&gt; 330,n(skipov),Set(RRNODEST=${NODEST})
exten =&gt; 330,n(skipvmblk),Set(__NODEST=${EXTEN})
exten =&gt; 330,n,Set(RecordMethod=Group)
exten =&gt; 330,n,Macro(record-enable,11-13,${RecordMethod})
exten =&gt; 330,n,Set(RingGroupMethod=ringall)
exten =&gt; 330,n,Set(__ALERT_INFO='\\;info=ring_two')

exten =&gt; 330,n(DIALGRP),Macro(dial,20,${DIAL_OPTIONS},11-13)
exten =&gt; 330,n,Set(RingGroupMethod=)
exten =&gt; 330,n,GotoIf($["foo${RRNODEST}" != "foo"]?nodest)
exten =&gt; 330,n,Set(__NODEST=)
exten =&gt; 330,n,dbDel(${BLKVM_OVERRIDE})
exten =&gt; 330,n,Hangup
exten =&gt; 330,n(nodest),Noop(SKIPPING DEST, CALL CAME FROM Q/RG: ${RRNODEST})</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/01/06/openfirejabberfreepbx-integration-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenLDAP &amp; Ubuntu Karmic for an LDAP Addressbook</title>
		<link>http://blog.kayosdesign.com/2010/01/06/openldap-ubuntu-karmic-for-an-ldap-addressbook/</link>
		<comments>http://blog.kayosdesign.com/2010/01/06/openldap-ubuntu-karmic-for-an-ldap-addressbook/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 06:27:13 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Karmic Koala]]></category>
		<category><![CDATA[OpenLDAP]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=125</guid>
		<description><![CDATA[With the advent of Ubuntu Karmic setting up OpenLDAP has gotten stupid and difficult. Below are the steps I used to get OpenLDAP working as an LDAP addressbook. NOTE: Change the domain to something appropriate for you. NOTE: This is not a step by step instruction manual. It&#8217;s for my edification so I can figure [...]]]></description>
			<content:encoded><![CDATA[<p>With the advent of <a href="/category/linux/ubuntu/" title="View all posts filed under Ubuntu">Ubuntu</a> Karmic setting up <a href="/category/linux/openldap/" title="View all posts filed under OpenLDAP">OpenLDAP</a> has gotten stupid and difficult.</p>
<p>Below are the steps I used to get <a href="/category/linux/openldap/" title="View all posts filed under OpenLDAP">OpenLDAP</a> working as an LDAP addressbook.</p>
<p><strong>NOTE:</strong> Change the domain to something appropriate for you.</p>
<p><strong>NOTE:</strong> This is not a step by step instruction manual. It&#8217;s for my edification so I can figure it out again later without perusing 30 odd different sites. It will require some thought and intelligence to use.</p>
<hr />
First start off by installing <a href="/category/linux/openldap/" title="View all posts filed under OpenLDAP">OpenLDAP</a></p>
<pre>apt-get install slapd ldap-utils</pre>
<p>This results in a basic setup of <a href="/category/linux/openldap/" title="View all posts filed under OpenLDAP">OpenLDAP</a> with bugger all configured, even the old school slapd.conf is missing. You need to install all the extra schemas and set up passwords yourself as the installer does nothing at all.</p>
<p>Next install some schemas</p>
<pre>ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif</pre>
<p>NIS can be left out if you don&#8217;t intend on using the LDAP server for authentication.</p>
<p>The following ldif contains all the configuration to get a new database up and running, stash it in a file somewhere.</p>
<p>If you are not using NIS then leave out the shadowLastChange attribute. Also set the passwords to whatever you want using the slappasswd tool, or you can probably type a password in cleartext.</p>
<pre>
###########################################################
# DATABASE SETUP
###########################################################
# Load modules for database type
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb

# Create directory database
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=kayosdesign,dc=com
olcRootDN: cn=admin,dc=kayosdesign,dc=com
olcRootPW: {SSHA}8QDckoodrIsXgv/BG43Hf5WAbgmzZYEf
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=kayosdesign,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=kayosdesign,dc=com" write by * read
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq

##########################################################
# DEFAULTS MODIFICATION
###########################################################
# Some of the defaults need to be modified in order to allow
# remote access to the LDAP config. Otherwise only root
# will have administrative access.
dn: cn=config
changetype: modify
delete: olcAuthzRegexp

dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}8QDckoodrIsXgv/BG43Hf5WAbgmzZYEf

dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess
</pre>
<p>Install this by using</p>
<pre>ldapadd -Y EXTERNAL -H ldapi:/// -f /root/db.ldif</pre>
<p>Now create an ldif for an admin user</p>
<pre>
# Root of the LDAP tree
dn: dc=kayosdesign,dc=com
objectClass: dcObject
objectClass: organization
o: kayosdesign.com
dc: kayosdesign
description: Tree Root

#LDAP admin
dn: cn=admin,dc=kayosdesign,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {SSHA}8QDckoodrIsXgv/BG43Hf5WAbgmzZYEf
description: LDAP administrator account</pre>
<p>Insert this into the directory with the following</p>
<pre>
ldapadd -x -D cn=admin,dc=home,dc=com -W -f /root/base.ldif
</pre>
<p>You should now be able to search the directory</p>
<pre>ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W
ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb
ldapsearch -xLLL -b dc=home,dc=com</pre>
<p>Once the above is working you can now move on to creating the Addressbook.</p>
<p>Create yet another ldif file with data such as</p>
<pre># Addressbook branch
dn: ou=addressbook,dc=kayosdesign,dc=com
objectClass: organizationalUnit
ou: addressbook
description: LDAP Addressbook

# Addressbook entry
dn: cn=Test Account+mail=test@kayosdesign.com,ou=addressbook,dc=kayosdesign,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
givenName: Test
sn: Account
cn: Test Account
mail: test@kayosdesign.com
homePhone: 1234567
telephoneNumber: 76543421
fax: 01928374
mobile: 44556677
street: 1 Street
l: MyTown
st: MyState
postalCode: 666
title: Grand Poo Bah
o: Snorks Anonymous</pre>
<p>Insert the entry into the directory with the following</p>
<pre>ldapadd -x -D cn=admin,dc=kayosdesign,dc=com -W -f /root/addressbook.ldif</pre>
<p>You can now hook whatever addressbook system you want into the LDAP server using the BaseDN</p>
<pre>ou=addressbook,dc=kayosdesign,dc=com</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/01/06/openldap-ubuntu-karmic-for-an-ldap-addressbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Torchlight Gems</title>
		<link>http://blog.kayosdesign.com/2010/01/05/torchlightgems/</link>
		<comments>http://blog.kayosdesign.com/2010/01/05/torchlightgems/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 06:14:02 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=116</guid>
		<description><![CDATA[I spent too much time playing Torchlight Below is a table showing all the different socketable gems that can be upgraded. Deep Flow Pure Life Eyeball Core Fire Cold Skull Cracked 1 Armor Degraded/+2 Dexterity +3 Electric Damage/+2 Electrical Resistance +4 Damage/+3 Armor +3 Poison Damage/+2 Poison Resistance 2 Mana Stolen/+2 Magic 2 Health per [...]]]></description>
			<content:encoded><![CDATA[<p>I spent too much time playing Torchlight</p>
<p>Below is a table showing all the different socketable gems that can be upgraded.</p>
<style>td { border: 1px solid black; }</style>
<table style="font-size: 50%; text-align: left; border: 1px solid black;">
<tbody>
<tr>
<td></td>
<td>Deep</td>
<td>Flow</td>
<td>Pure</td>
<td>Life</td>
<td>Eyeball</td>
<td>Core</td>
<td>Fire</td>
<td>Cold</td>
<td>Skull</td>
</tr>
<tr>
<td>Cracked</td>
<td>1 Armor Degraded/+2 Dexterity</td>
<td>+3 Electric Damage/+2 Electrical Resistance</td>
<td>+4 Damage/+3 Armor</td>
<td>+3 Poison Damage/+2 Poison Resistance</td>
<td>2 Mana Stolen/+2 Magic</td>
<td>2 Health per Second/+2 Strength</td>
<td>+3 Fire Damage/+3 Fire Resistance</td>
<td>+3 Ice Damage/+3 Ice Resistance</td>
<td>1 Health Stolen/+2 Defense</td>
</tr>
<tr>
<td>Dull</td>
<td>3 Armor Degraded/+3 Dexterity</td>
<td>+6 Electric Damage/+4 Electrical Resistance</td>
<td>+9 Damage/+5 Armor</td>
<td>+6 Poison Damage/+4 Poison Resistance</td>
<td>3 Mana Stolen/+3 Magic</td>
<td>4 Health per Second/+3 Strength</td>
<td>+6 Fire Damage/+4 Fire Resistance</td>
<td>+6 Ice Damage/+4 Ice Resistance</td>
<td>5 Health Stolen/+3 Defense</td>
</tr>
<tr>
<td>Discoloured</td>
<td>6 Armor Degraded/+4 Dexterity</td>
<td>+9 Electric Damage/+7 Electrical Resistance</td>
<td>+14 Damage/+9 Armor</td>
<td>+9 Poison Damage/+7 Poison Resistance</td>
<td>5 Mana Stolen/+4 Magic</td>
<td>6 Health per Second/+4 Strength</td>
<td>+9 Fire Damage/+7 Fire Resistance</td>
<td>+9 Ice Damage/+7 Ice Resistance</td>
<td>10 Health Stolen/+4 Defense</td>
</tr>
<tr>
<td>-</td>
<td>10 Armor Degraded/+5 Dexterity</td>
<td>+12 Electric Damage/+10 Electrical Resistance</td>
<td>+18 Damage/+12 Armor</td>
<td>+12 Poison Damage/+10 Poison Resistance</td>
<td>6 Mana Stolen/+5 Magic</td>
<td>8 Health per Second/+5 Strength</td>
<td>+12 Fire Damage/+10 Fire Resistance</td>
<td>+12 Ice Damage/+10 Ice Resistance</td>
<td>14 Health Stolen/+5 Defense</td>
</tr>
<tr>
<td>Cut</td>
<td>14 Armor Degraded/+6 Dexterity</td>
<td>+16 Electric Damage/+13 Electrical Resistance</td>
<td>+24 Damage/+16 Armor</td>
<td>+16 Poison Damage/+13 Poison Resistance</td>
<td>8 Mana Stolen/+6 Magic</td>
<td>10 Health per Second/+6 Strength</td>
<td>+16 Fire Damage/+13 Fire Resistance</td>
<td>+16 Ice Damage/+13 Ice Resistance</td>
<td>19 Health Stolen/+6 Defense</td>
</tr>
<tr>
<td>Polished</td>
<td>19 Armor Degraded/+7 Dexterity</td>
<td>+19 Electric Damage/+15 Electrical Resistance</td>
<td>+28 Damage/+19 Armor</td>
<td>+19 Poison Damage/+15 Poison Resistance</td>
<td>9 Mana Stolen/+7 Magic</td>
<td>11 Health per Second/+7 Strength</td>
<td>+19 Fire Damage/+15 Fire Resistance</td>
<td>+19 Ice Damage/+15 Ice Resistance</td>
<td>23 Health Stolen/+7 Defense</td>
</tr>
<tr>
<td>Star</td>
<td>25 Armor Degraded/+9 Dexterity</td>
<td>+22 Electric Damage/+19 Electrical Resistance</td>
<td>+33 Damage/+23 Armor</td>
<td>+22 Poison Damage/+19 Poison Resistance</td>
<td>11 Mana Stolen/+9 Magic</td>
<td>13 Health per Second/+9 Strength</td>
<td>+22 Fire Damage/+19 Fire Resistance</td>
<td>+22 Ice Damage/+19 Ice Resistance</td>
<td>28 Health Stolen/+9 Defense</td>
</tr>
<tr>
<td>Flawless</td>
<td>31 Armor Degraded/+10 Dexterity</td>
<td>+25 Electric Damage/+21 Electrical Resistance</td>
<td>+38 Damage/+26 Armor</td>
<td>+25 Poison Damage/+21 Poison Resistance</td>
<td>12 Mana Stolen/+10 Magic</td>
<td>15 Health per Second/+10 Strength</td>
<td>+25 Fire Damage/+21 Fire Resistance</td>
<td>+25 Ice Damage/+21 Ice Resistance</td>
<td>32 Health Stolen/+10 Defense</td>
</tr>
<tr>
<td>Perfected</td>
<td>39 Armor Degraded/+11 Dexterity</td>
<td>+29 Electric Damage/+24 Electrical Resistance</td>
<td>+43 Damage/+30 Armor</td>
<td>+29 Poison Damage/+24 Poison Resistance</td>
<td>14 Mana Stolen/+11 Magic</td>
<td>17 Health per Second/+11 Strength</td>
<td>+29 Fire Damage/+24 Fire Resistance</td>
<td>+29 Ice Damage/+24 Ice Resistance</td>
<td>37 Health Stolen/+11 Defense</td>
</tr>
<tr>
<td>Named</td>
<td>48 Armor Degraded/+12 Dexterity</td>
<td>+33 Electric Damage/+28 Electrical Resistance</td>
<td>+49 Damage/+34 Armor</td>
<td>+33 Poison Damage/+28 Poison Resistance</td>
<td>15 Mana Stolen/+12 Magic</td>
<td>19 Health per Second/+12 Strength</td>
<td>+33 Fire Damage/+28 Fire Resistance</td>
<td>+33 Ice Damage/+28 Ice Resistance</td>
<td>42 Health Stolen/+12 Defense</td>
</tr>
<tr>
<td></td>
<td>The Grand Depths Ember Shard</td>
<td>The Eternal Flow-Ember Shard</td>
<td>The Infinite Pure Ember Shard</td>
<td>The Spire City Life Ember Shard</td>
<td>Etlitch&#8217;s Eyeball</td>
<td>The Sea Kings Core Ember Shard</td>
<td>The Fire Queen Fire Ember Shard</td>
<td>The Earthstar Cold Ember Shard</td>
<td>The Pirates Skull</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2010/01/05/torchlightgems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk &#8211; Jabber integration</title>
		<link>http://blog.kayosdesign.com/2009/12/31/asterisk-jabber-integration/</link>
		<comments>http://blog.kayosdesign.com/2009/12/31/asterisk-jabber-integration/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 00:03:33 +0000</pubDate>
		<dc:creator>Dave</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[FreePBX]]></category>
		<category><![CDATA[Openfire]]></category>
		<category><![CDATA[VoIP]]></category>

		<guid isPermaLink="false">http://blog.kayosdesign.com/?p=112</guid>
		<description><![CDATA[I have a test server running Asterisk &#38; Openfire. Integrating Openfire to Asterisk was pretty simple using the Asterisk-IM plugin. It is configured and working using the documentation provided by Openfire. No when someone receives/makes a call Openfire updates their IM status to &#8220;On the phone&#8221;. However, it does not appear to be bi-directional eg. [...]]]></description>
			<content:encoded><![CDATA[<p>I have a test server running <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a> &amp; <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a>. Integrating <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a> to <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a> was pretty simple using the <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a>-IM plugin.</p>
<p>It is configured and working using the documentation provided by <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a>. No when someone receives/makes a call <a href="/category/linux/openfire/" title="View all posts filed under Openfire">Openfire</a> updates their IM status to &#8220;On the phone&#8221;.</p>
<p>However, it does not appear to be bi-directional eg. Setting jabber status to DND does not tell <a href="/category/voip/asterisk/" title="View all posts filed under Asterisk">Asterisk</a> to send your calls to voicemail.</p>
<p>Having played with the config I now have bi directional communication between asterisk/openfire working within the <a href="/category/voip/asterisk/freepbx/" title="View all posts filed under FreePBX">FreePBX</a> framework.</p>
<p>The code below will check extensions to see what their status is in jabber before passing the call on to them.</p>
<p>If they are flagged as available, the server will send them an IM telling them about the incoming call &amp; then pass the call through.</p>
<p>If they are not available, the server will direct the incoming call to voicemail.</p>
<p>editing extensions_custom.conf you need the following</p>
<pre>[from-internal-custom]
include =&gt; macro-reach_user_with_presence
exten =&gt; 10,1,Macro(reach_user_with_presence,SIP/10,test@jabber.server,${EXTEN})
[macro-reach_user_with_presence]
; ${ARG1} is a destination such as SIP/10
; ${ARG2} is a jabber address such as test@jabber.server
; ${ARG3} is the voicemail box of the user

exten =&gt; s,1,jabberstatus(asterisk,${ARG2},STATUS)
;presence in will be 1-6.
;In order : Online, Chatty, Away, XAway, DND, Offline
;If not in roster variable will = 7
exten =&gt; s,n,gotoif($[$[${STATUS}]&lt;3]?available:unavailable)
;GotoIf(condition?label_if_true:label_if_false)
exten =&gt; s,n(available),jabbersend(asterisk,${ARG2},"Call from ${CALLERID(name)} at number ${CALLERID(num)} on ${STRFTIME(,GMT-1,%A %B %d %G at %l:%M:%S %p)}")
exten =&gt; s,n,Goto(from-trunk,${ARG3},1)
exten =&gt; s,n(unavailable),VoiceMail(${ARG3},u)</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.kayosdesign.com/2009/12/31/asterisk-jabber-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

