<?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>Aaron Baer - Connect the Dots &#187; slyness</title>
	<atom:link href="http://aaron.slyness.org/tag/slyness/feed/" rel="self" type="application/rss+xml" />
	<link>http://aaron.slyness.org</link>
	<description>It&#039;s no BlockOLand</description>
	<lastBuildDate>Sun, 29 Jan 2012 00:02:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Keep it simple</title>
		<link>http://aaron.slyness.org/2009/12/06/keep-it-simple/</link>
		<comments>http://aaron.slyness.org/2009/12/06/keep-it-simple/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 06:33:42 +0000</pubDate>
		<dc:creator>Aaron Baer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[KISS]]></category>
		<category><![CDATA[slyness]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://aaron.slyness.org/2009/12/06/keep-it-simple/</guid>
		<description><![CDATA[Sometimes making things more complicated than they need to be because it sounds awesome is really fun. However, when it really comes down to it simplifying things is the way to go.]]></description>
			<content:encoded><![CDATA[<p>Sometimes making things more complicated than they need to be because it sounds awesome is really fun. However, when it really comes down to it simplifying things is the way to go.</p>
]]></content:encoded>
			<wfw:commentRss>http://aaron.slyness.org/2009/12/06/keep-it-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding voice with Asterisk, Gizmo, and Google Voice</title>
		<link>http://aaron.slyness.org/2009/11/06/finding-voice-with-asterisk-gizmo-and-google-voice/</link>
		<comments>http://aaron.slyness.org/2009/11/06/finding-voice-with-asterisk-gizmo-and-google-voice/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 01:03:29 +0000</pubDate>
		<dc:creator>Aaron Baer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Self]]></category>
		<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[Gizmo]]></category>
		<category><![CDATA[Google Voice]]></category>
		<category><![CDATA[SIP]]></category>
		<category><![CDATA[slyness]]></category>
		<category><![CDATA[VOIP]]></category>

		<guid isPermaLink="false">http://aaron.slyness.org/?p=314</guid>
		<description><![CDATA[After my monthly billing for my Internet and Phone service rose $25 dollars in one month, sending my fees for Internet and phone from $75 to $98,  I decided that it was time to buckle down and work on something that I had been thinking about for a long time. Zero dollar per year phone [...]]]></description>
			<content:encoded><![CDATA[<p><span style="background-color: #ffffff;">After my monthly billing for my Internet and Phone service rose $25 dollars in one month, sending my fees for Internet and phone from $75 to $98,  I decided that it was time to buckle down and work on something that I had been thinking about for a long time. Zero dollar per year phone service including long distance. The goal was building a highly functioning personal VOIP environment to entirely replace my traditional land line phone service and include complete integration with Google Voice. My monthly fees were pulled back down to a more manageable $60 dollars for Internet and a purely basic local only phone line with no frills because the bundled package was still cheaper than just Internet. More for less go figure. My phone feature frills are handled elsewhere now. </span></p>
<p><span style="background-color: #ffffff;">What I&#8217;ve ended up with is <a title="Asterisk" href="http://www.asterisk.org" target="_blank">Asterisk</a> configured as my PBX, all extensions are currently SIP VOIP users, with registered trunks to <a title="Gizmo5" href="http://www.gizmo5.com" target="_blank">Gizmo5</a> for each <a title="Google Voice" href="http://www.google.com/voice" target="_blank">Google Voice</a> account I want to integrate. Google Voice dialing can be done straight from the client/phone which means there is no need to initiate the call manually from the Google Voice webpage. I just assign a unique extension per account and within the dial plan  call the script  gvoice  provided by <a title="pygooglevoice" href="http://code.google.com/p/pygooglevoice/" target="_blank">pygooglevoice</a> using <a title="System()" href="http://www.voip-info.org/wiki/view/Asterisk+cmd+System" target="_blank">System()</a> to complete the call. More details on that later.</span></p>
<p><span style="background-color: #ffffff;">Inspired by an article I read <a title="Nerd Vittles - Tweaking Asterisk for Free Google Voice Calling" href="http://nerdvittles.com/?p=635" target="_blank">here</a> there was enough detail to get things started. There are many limitations to the details described in that article but I&#8217;ve been able to work through most of them over the past week and I think I&#8217;ve made some excellent improvements. Two things that I was able to improve on are your outgoing calls do not depend on Gizmo&#8217;s 3 minutes free/outgoing minutes charges and dialing directly from the web is no longer high jacked by a potentially non-existent parked line on incoming calls from your Google account. </span></p>
<p>I will make the assumption here that you already have Asterisk installed, you&#8217;ve configured pygooglevoice to be usable on the asterisk server and that you have a Google Voice <a title="Request an account" href="https://services.google.com/fb/forms/googlevoiceinvite/" target="_blank">account</a>. There are many other posts out there on the Internet that cover getting asterisk up and running. When I began to install my asterisk environment I tried to use <a title="FreePBX" href="http://www.freepbx.org/" target="_blank">FreePBX</a> but really felt as though it was in my way. I could never get things working using it. I&#8217;m sure that it has it&#8217;s place and works well, most other posts about configuring asterisk and out of the box Linux PBX distributions use it, but it was not working for me. Not understanding yet what it took to make asterisk work probably was the main issue with not being able to use it. Instead I just wrote the config files for asterisk manually. The two most important configuration files in this discussion are extensions.conf (where the dial plans and dirty stuff goes on) and sip.conf (user accounts, SIP registrations and sip configuration).</p>
<h3>My Goals</h3>
<ul>
<li>Make calls between extensions</li>
<li>Have calls from multiple Google Voice phone numbers ring to desired extensions</li>
<li>Dial regular phone numbers from phones to provide unlimited call out support (no fees)</li>
</ul>
<h3><span style="background-color: #ffffff;">Basic Asterisk Configuration</span></h3>
<p><span style="background-color: #ffffff;">There are two important configurations to get asterisk off the ground. User accounts for SIP users and Dial plans defined for system extensions. The first is created in the file <a title="sip.conf" href="http://www.voip-info.org/wiki/view/Asterisk+config+sip.conf" target="_blank">sip.conf</a> and the later in <a title="extensions.conf" href="http://www.voip-info.org/wiki/view/Asterisk+config+extensions.conf" target="_blank">extensions.conf</a>.  Things to keep in mind here that come in handy later are setting useful context and defining your user sections [phone1], [GizmoUser1] etc.. </span></p>
<p><span style="background-color: #ffffff;">Let&#8217;s set up the basics. Two sip accounts and extensions to allow them to be dialed.</span></p>
<p><span style="background-color: #ffffff;">sip.conf</span></p>
<pre><span style="background-color: #ffffff;">[1111]
type=friend
context=from-internal
host=dynamic
secret=URPASSWORD
callerid=User1 &lt;1111&gt;
canreinvite=yes
dtmfmode=auto
disallow=all
allow=ulaw
;allow=ilbc
callingpres=allowed_passed_screen

[2222]
type=friend
context=from-internal
nat=yes
host=dynamic
secret=URPASSWORD
callerid=User2 &lt;2222&gt;
canreinvite=yes
dtmfmode=auto
disallow=all
allow=ulaw
;allow=ilbc
callingpres=allowed_passed_screen</span></pre>
<p><span style="background-color: #ffffff;"> </span></p>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">[1111]</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">type=friend</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">context=from-internal</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">host=dynamic</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">secret=URPASSWORD</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">callerid=User1 &lt;1111&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">canreinvite=yes</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">dtmfmode=auto</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">disallow=all</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">allow=ulaw</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">;allow=ilbc</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">callingpres=allowed_passed_screen</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">[2222]</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">type=friend</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">context=from-internal</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">nat=yes</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">host=dynamic</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">secret=URPASSWORD</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">callerid=User2 &lt;2222&gt;</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">canreinvite=yes</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">dtmfmode=auto</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">disallow=all</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">allow=ulaw</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">;allow=ilbc</div>
<div id="_mcePaste" style="position: absolute; left: -10000px; top: 241px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">callingpres=allowed_passed_screen</div>
<p><span style="background-color: #ffffff;">extension.conf &#8211; notice that above we defined these accounts within the context=from-internal so extensions must be associated with that context.</span></p>
<pre>[from-internal]

exten =&gt; 1111,1,Dial(SIP/1111,120,t)
exten =&gt; 1111,n,Macro(fastbusy)

exten =&gt; 2222,1,Dial(SIP/2222,120,t)
exten =&gt; 2222,n,Macro(fastbusy)</pre>
<h3>Hooking up to Gizmo</h3>
<p><span style="background-color: #ffffff;">Next we define how we&#8217;re are going to go about communicating with Gizmo5 (sipphone.com). This happens in sip.conf in two places.</span></p>
<p><span style="background-color: #ffffff;">First we register with the network. The key here is that if you have multiple accounts that you are registering make sure to define their context with /CONTEXT at the end of the register entry. This allows you to uniquely identify incoming calls from the separate accounts later in extensions.conf.</span></p>
<pre><span style="background-color: #ffffff;">register =&gt; 1747XXXXXXX:PASSWORD@proxy01.sipphone.com/GizmoAct1
register =&gt; 1747XXXXXXX:PASSWORD@proxy01.sipphone.com/GizmoAct2</span></pre>
<p>Next we define a sip user for each account. Again notice here the context is set as from-google this is important for all incoming calls coming from these accounts when we configure the dial plans.</p>
<p>It would make sense here to name them in a way that tie to the register entries. i.e. GizmoUser1 &lt;-&gt; GizmoAct1</p>
<pre>[GizmoUser1]
type=friend
context=from-google
disallow=all
allow=ulaw
;allow=ilbc
dtmfmode=rfc2833
host=proxy01.sipphone.com
fromdomain=proxy01.sipphone.com
insecure=port,invite
;qualify=yes
fromuser=1747XXXXXXX
authuser=1747XXXXXXX
username=1747XXXXXXX
secret=PASSWORD
canreinvite=yes

[GizmoUser2]
type=friend
context=from-google
disallow=all
allow=ulaw
;allow=ilbc
dtmfmode=rfc2833
host=proxy01.sipphone.com
fromdomain=proxy01.sipphone.com
insecure=port,invite
;qualify=yes
fromuser=1747XXXXXXX
authuser=1747XXXXXXX
username=1747XXXXXXX
secret=PASSWORD
canreinvite=yes</pre>
<h3>Dial Plans for Google Voice fancy pants</h3>
<p>Alright back to extensions.conf,  here are the good bits in my opinion.</p>
<p>Set some global variables for the various accounts, some bits and pieces regarding where you&#8217;re going to park calls while the gvoice script goes and does it&#8217;s thing, account information so it&#8217;s easily reused and anything else that seems exciting.</p>
<pre>[globals]

; LOCAL CONFIGURATION

MYGOO-ACCTNAME=mygoogle@gmail.com
MYGOO-ACCTPASS=PASSWORD
MYGOO-GVNUM=
MYGOO-RINGBACK=1747XXXXXXX     ; Gizmo DID
MYGOO-ISPARK=0
MYGOO-CALLPARK=705

OTHERGOO-ACCTNAME=othergoogle@gmail.com
OTHERGOO-ACCTPASS=PASSWORD
OTHERGOO-GVNUM=
OTHERGOO-RINGBACK=1747XXXXXXX
OTHERGOO-ISPARK=0
OTHERGOO-CALLPARK=706</pre>
<p><span style="background-color: #ffffff; ">Create a unique dial extension for your accounts so that the outgoing is associated with the right Google Voice account. </span></p>
<pre>[GizmoAct1-google-out]
exten =&gt; _8.,1,Dial(local/${EXTEN:1}@GizmoAct1-google-voice,300)

[GizmoAct2-google-out]
exten =&gt; _9.,1,Dial(local/${EXTEN:1}@GizmoAct2-google-voice,300)</pre>
<p>Define what happens when the call is made.  Here we initiate the call to @GizmoAct1-google-voice, play back a message, poke Google Voice using the gvoice script to us call back and park the call.  I set a global variable here, ISPARK, to indicate that this call was generated from my SIP client and parked. This helps fix an issue with the other dial plan examples that I found where the ability to initiate calls from the web would break and treat every incoming call from Google Voice the same and try to attach it to an existing parked call even if that parked call did not exist. You see later that I check for the ISPARK flag.</p>
<pre>[GizmoAct1-google-voice]
exten =&gt; _X.,1,Wait(5)
exten =&gt; _X.,n,Playback(wait-moment)
exten =&gt; _X.,n,System(gvoice -e ${MYGOO-ACCTNAME} -p ${MYGOO-ACCTPASS} call ${EXTEN} ${MYGOO-RINGBACK})
exten =&gt; _X.,n,Set(GLOBAL(MYGOO-ISPARK)=1)
exten =&gt; _X.,n,Set(PARKINGEXTEN=${MYGOO-CALLPARK})
exten =&gt; _X.,n,Park()
exten =&gt; _X.,n,Hangup</pre>
<pre>[GizmoAct2-google-voice]
exten =&gt; _X.,1,Wait(5)
exten =&gt; _X.,n,Playback(wait-moment)
exten =&gt; _X.,n,System(gvoice -e ${OTHERGOO-ACCTNAME} -p ${OTHERGOO-ACCTPASS} call ${EXTEN} ${OTHERGOO-RINGBACK})
exten =&gt; _X.,n,Set(GLOBAL(OTHERGOO-ISPARK)=1)
exten =&gt; _X.,n,Set(PARKINGEXTEN=${OTHERGOO-CALLPARK})
exten =&gt; _X.,n,Park()
exten =&gt; _X.,n,Hangup</pre>
<p>Once that happens and your original call is parked you should hear the wonderful hold music you configured for your asterisk environment. gvoice has fired, logs into Google Voice and has initiated the call back to your Gizmo DID which immediately comes back into your own PBX. Otherwise, someone has called your Google Voice number and you are receiving the incoming call or you&#8217;ve started a call from the web. So we have to figure out what to do with the incoming call. These calls come in via the from-google context.</p>
<pre>[from-google]
include =&gt; from-internal

exten =&gt; GizmoAct1,1,Wait(1)
exten =&gt; GizmoAct1,n,Set(GVNUM=${MYGOO-GVNUM})
exten =&gt; GizmoAct1,n,NoOp(**CALLERID: ${CALLERID(number)})
; does the call come from our Google voice caller id and is there a parked call 

*** line breaks here for blog readability ***
exten =&gt; GizmoAct1,n,
GotoIf($[$["${CALLERID(number)}"="${MYGOO-GVNUM}"]
&amp; $["${MYGOO-ISPARK}" = "1"]]?gopark:direct)
*** line breaks here for blog readability ***

exten =&gt; GizmoAct1,n(gopark),Set(GLOBAL(MYGOO-ISPARK)=0)
exten =&gt; GizmoAct1,n(gopark),ParkedCall(${MYGOO-CALLPARK})
; otherwise it's a direct call.
exten =&gt; GizmoAct1,n(direct),Dial(SIP/2222,120,t)
exten =&gt; GizmoAct1,n(direct),Goto(GizmoAct1-next-${DIALSTATUS},1)
 ; first line is unavailable try the next extension
exten =&gt; GizmoAct1-next-CHANUNAVAIL,1,Dial(SIP/2222,120,t)
exten =&gt; GizmoAct1-next-.,n,NoOp

exten =&gt; GizmoAct2,1,Wait(1)
exten =&gt; GizmoAct2,n,Set(GVNUM=${OTHERGOO-GVNUM})
exten =&gt; GizmoAct2,n,NoOp(**CALLERID: ${CALLERID(number)})

*** line breaks here for blog readability ***
exten =&gt; GizmoAct2,n,
GotoIf($[$["${CALLERID(number)}"="${OTHERGOO-GVNUM}"]
&amp; $["${OTHERGOO-ISPARK}" = "1"]]?gopark:direct)
*** line breaks here for blog readability ***

exten =&gt; GizmoAct2,n(gopark),Set(GLOBAL(OTHERGOO-ISPARK)=0)
exten =&gt; GizmoAct2,n(gopark),ParkedCall(${OTHERGOO-CALLPARK})
exten =&gt; GizmoAct2,n(direct),Dial(SIP/1111,120,t)</pre>
<p>And there you have it.</p>
<p>Here are full examples of <a title="sip.conf" href="http://aaron.slyness.org/grab/sip.conf.txt">sip.conf</a> and <a title="extensions.conf" href="http://aaron.slyness.org/grab/extensions.conf.txt">extensions.conf</a> which should pull it all together.</p>
<p>You&#8217;ll notice there is a dial plan and extension in there called GizmoAct1-land-google-callback which is an example of dialing a phone number from a SIP extension that rings back to an existing land line outside of your asterisk network. This allows for an existing phone line to be included  into your  PBX without having to configure it as a zap device. When you read the configuration it should make sense and it works well, dial from SIP line and walk away, rings back to land line which you answer and the call connects, SIP line hangs itself up.</p>
<p>rinse, repeat, serve hot with a double shot of espresso.</p>
]]></content:encoded>
			<wfw:commentRss>http://aaron.slyness.org/2009/11/06/finding-voice-with-asterisk-gizmo-and-google-voice/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>rolling from the blackberry</title>
		<link>http://aaron.slyness.org/2009/07/07/rolling-from-the-blackberry/</link>
		<comments>http://aaron.slyness.org/2009/07/07/rolling-from-the-blackberry/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 05:15:07 +0000</pubDate>
		<dc:creator>Aaron Baer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[slyness]]></category>

		<guid isPermaLink="false">http://aaron.slyness.org/?p=240</guid>
		<description><![CDATA[Ok so there is a new wordpress blackberry application for that integrates with your wordpress blog. That&#8217;s what i&#8217;m using to post this as a test. Nice features simple to use and it will be interesting to see what the result is. I&#8217;ve added a wicked cool picture for some true blogging from you phone [...]]]></description>
			<content:encoded><![CDATA[<p>Ok so there is a new wordpress blackberry application for that integrates with your wordpress blog. That&#8217;s what i&#8217;m using to post this as a test. Nice features simple to use and it will be interesting to see what the result is. I&#8217;ve added a wicked cool picture for some true blogging from you phone excitement. </p>
<p>I think they&#8217;ve also just put out a iPhone/Touch app too that i&#8217;m looking forward to testing. </p>
<p>Hope everyone is finding themselves well as we make our way into the summer. We&#8217;re doing well here. Weekend at the coast coming up. Can&#8217;t wait!<br />
 <a href="http://aaron.slyness.org/wp-content/uploads/2009/07/IMG00417.jpg"><img class="alignnone size-full wp-image-364" src="http://aaron.slyness.org/wp-content/uploads/2009/07/IMG00417.jpg" alt="" width="640" height="480" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://aaron.slyness.org/2009/07/07/rolling-from-the-blackberry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dude Knows how to Dance</title>
		<link>http://aaron.slyness.org/2009/05/08/dude-knows-how-to-dance/</link>
		<comments>http://aaron.slyness.org/2009/05/08/dude-knows-how-to-dance/#comments</comments>
		<pubDate>Fri, 08 May 2009 22:28:22 +0000</pubDate>
		<dc:creator>Aaron Baer</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[dancing]]></category>
		<category><![CDATA[Lavi]]></category>
		<category><![CDATA[slyness]]></category>

		<guid isPermaLink="false">http://aaron.slyness.org/2009/05/08/dude-knows-how-to-dance/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/tCdd_jxTXKo&#038;hl=en&#038;fs=1&#038;rel=0&#038;hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tCdd_jxTXKo&#038;hl=en&#038;fs=1&#038;rel=0&#038;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://aaron.slyness.org/2009/05/08/dude-knows-how-to-dance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

