<?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>Donald Jackson &#187; General</title>
	<atom:link href="http://www.ddj.co.za/archives/category/general/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ddj.co.za</link>
	<description>Kannel, mobile and web development</description>
	<lastBuildDate>Mon, 05 Jul 2010 09:18:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>How to motivate software developers</title>
		<link>http://www.ddj.co.za/archives/130/how-to-motivate-software-developers</link>
		<comments>http://www.ddj.co.za/archives/130/how-to-motivate-software-developers#comments</comments>
		<pubDate>Mon, 05 Jul 2010 09:18:13 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[motivate]]></category>
		<category><![CDATA[software developers]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/?p=130</guid>
		<description><![CDATA[I was thinking the other day about the importance of quality software architecture and about how the planning of such software architecture can fundamentally affect the success of a business. Indeed, the benefits of adequate planning are painfully obvious to those who have worked on projects- both badly planned and well planned ones. The following [...]]]></description>
			<content:encoded><![CDATA[<p>I was thinking the other day about the importance of quality software architecture and about how the planning of such software architecture can fundamentally affect the success of a business. Indeed, the benefits of adequate planning are painfully obvious to those who have worked on projects- both badly planned and well planned ones.</p>
<p><img class="alignleft size-medium wp-image-134" title="Frustrated Computer Geek" src="http://www.ddj.co.za/wp-content/uploads/2010/07/office-space-300x225.jpg" alt="" width="300" height="225" />The following question then occurred to me: “How does one motivate software developers to do the right thing while they are developing?” As we all know, there is an &#8216;easy&#8217; way to do things and a &#8216;hard&#8217; way. At this point it may be useful to use the analogy of building a house to explain my point. The first (easy) option of building a house would be to build it out of wood, with merely satisfactory foundations. The second (harder) option would be to build it out of cement and concrete, with deep foundations. Both options would serve their purpose; however, under extreme weather conditions, (and, in fact, inevitably over time), the first house would start to creak and no longer be able to perform its task, while the second would remain strong.</p>
<p>The same principle applies to software development. The question is thus raised regarding how to motivate the developers in a company (or on a project) to make the right choices; to lay the right foundations; and stick to these principles over time. Importantly, the issue is not simply how to motivate them to work, but rather, how to motivate them to do their job to the best of their ability.</p>
<p>I would argue that there are two major categories of developers. The first kind of developer is a developer who may have needed to make a career choice after school, and who chose IT because it was the option people suggested (s)he decide on. The choice to become a developer was, as such, essentially reducible to the choice to pursue a seemingly “good” job. The second kind of developer, however, is passionate about technology and would most likely be involved in IT regardless of any career potentials offered by the field.</p>
<p>I would not know how to motivate the first kind of developer in this example- I believe that these types rarely elevate themselves to the heights that are truly needed in the industry (unless they transition to the second type). I suppose that the pay-check at the end of each month would probably be enough motivation in most cases, although this is only likely to be motivation to simply show up at work; not to go the extra mile. If a company’s developers are of the first type only, the company or project would almost certainly need a strong architect to set policies and expectations in place, and to make sure that these are carried out.</p>
<p>The real question I would like to address here concerns the issue of motivating the second type of developer- the passionate one. (I believe that I am personally passionate about technology and software development so forgive me if I have related this question to myself too readily). Luckily, I work for myself now, so my motivation to offer excellent client service is certainly present. However, since I have begun to outsource more work, I have also been urged to think back to a time during which I worked for companies, and not for myself. In retrospect, a pressing question for me concerns what these companies did to make me lose interest. What would have kept me motivated? And more importantly, how do I keep my people motivated now? I have identified four issues that may help add clarity to this issue, and these are what I would like to share with you here.</p>
<h3><img class="alignright size-medium wp-image-131" title="Software Architecture" src="http://www.ddj.co.za/wp-content/uploads/2010/07/softDev-300x114.jpg" alt="" width="300" height="114" />1) Listen to the Senior Developers</h3>
<p>At almost every company I have worked, there has been a power-struggle about delivery and priorities, between the top levels of management and development teams. The developers are desperate for time to update the architecture and design of  software, while management push only for new features to drive short term sales. In the long term, if these managers consistently win  this debate without making any compromises, the software will inevitably fall short, as developers are not able to see their proposals met and the architecture ultimately fails. Technology is ever-changing; and if you are still developing the same way you did five years ago, your competitors are getting ahead of you and your developers will remain frustrated.</p>
<h3>2) Keep innovating</h3>
<p>Nobody who is passionate about technology wants to do the same thing for three years. They want to do new things; use new tools; use new technology and generally-speaking, innovate. This is not always an easy goal to achieve, but if followed out, it will serve two purposes. Not only will the developers be more satisfied with and excited about their day-to-day work, but innovation will also open up new revenue streams within a business.</p>
<h3>3) Give a sense of ownership</h3>
<p>By this I don&#8217;t mean giving someone a &#8220;Team Leader&#8221; title and telling them to run with it. I mean genuine ownership. I would suggest that software or technology companies should have an optional staff share plan in place. This would encourage developers to make sure that the work they conduct is sustainable for years to come, since they will benefit directly from the company&#8217;s success. Giving staff ownership options will ensure that staff remains motivated on a second account, too: When they leave the company, their software will continue to generate income for them.</p>
<h3>4) Financial reward</h3>
<p>In most organizations the senior developers are well aware of the kind of money that they are generating for the business. Therefore, if for example, a developer makes your business $10 million in revenue, why not give them a $100,000 bonus? Don&#8217;t base rewards on a percentage of their salary- base it on the revenue they generate. This will ensure that developers keep pushing to make your systems perform better, as well as ensuring that they are always available to do so, etc. (This is partially related to my third point, but direct bonuses are also a good way to keep the developer enthused).</p>
<p><img class="alignleft size-medium wp-image-132" title="tech2" src="http://www.ddj.co.za/wp-content/uploads/2010/07/tech2-300x261.gif" alt="" width="300" height="261" />In closing, I feel that any business that can develop these principles will create a place of innovation and of performance. And inevitably, this cycle is reversible, too. If for example, I was a developer and the company interviewing me had no passion, I would certainly pick up on that fact, and would no longer be interested in joining the company. If, however, they were genuinely passionate about their jobs, their rewards and their systems, that fact would be obvious to me, too, and would immediately incite me to become involved. Indeed, for a company to portray passion in interviewing potential developers is an invaluable objective, and will ultimately ensure that the right kind of developers enter the business.</p>
<p>If you’d like to share your thoughts on this topic with me, please don’t hesitate to do so. I would love to hear from other passionate guys out there, and to gain insight into what they think may be the motivating factors for software developers in today’s ever-changing, technology-driven society.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/130/how-to-motivate-software-developers/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Birthday Wishlist 2010</title>
		<link>http://www.ddj.co.za/archives/126/birthday-wishlist-2010</link>
		<comments>http://www.ddj.co.za/archives/126/birthday-wishlist-2010#comments</comments>
		<pubDate>Wed, 19 May 2010 21:17:38 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[birthday]]></category>
		<category><![CDATA[wishlist]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/?p=126</guid>
		<description><![CDATA[Yes ladies and gentlemen it&#8217;s time for my annual Birthday wish list for all you thousands of would-be gift buyers out there. Apparently I&#8217;m nearly impossible to buy gifts for, so instead of getting 50 pairs of socks, I use this list&#8230; As always I will break it up into 3 categories to fit your [...]]]></description>
			<content:encoded><![CDATA[<p>Yes ladies and gentlemen it&#8217;s time for my annual Birthday wish list for all you thousands of would-be gift buyers out there. Apparently I&#8217;m nearly impossible to buy gifts for, so instead of getting 50 pairs of socks, I use this list&#8230; As always I will break it up into 3 categories to fit your wallet size!</p>
<h3>Very Expensive</h3>
<ul>
<li>Pay off all my bonds</li>
<li>Double cab bakkie (newer than 2007!)</li>
<li><a href="http://www.bhphotovideo.com/c/product/423691-USA/Canon_1056B002AA_EF_85mm_f_1_2L_II.html" target="_blank">Canon f/1.2 85 mm L series lens</a></li>
<li>Audi R8</li>
<li>Trip to Thailand</li>
</ul>
<p><strong>Medium expensive</strong></p>
<ul>
<li>Espresso/coffee machine</li>
<li><a href="http://www.amazon.com/Corsair-Performance-Internal-Solid-CMFSSD-256GBG2D/dp/B0026V5MY0" target="_blank">Corsair 256GB Performance Series SSD</a></li>
<li>Canvas print vouchers</li>
<li>Clothes that will make me look cool (not sure these exist)</li>
<li><a href="http://www.amazon.com/Vanguard-ELITE-CP324-Lightweight-Professional-Monopod/dp/B000YH49OC">Monopod</a></li>
</ul>
<p><strong>Less expensive</strong></p>
<ul>
<li>Woolworths short sleeve large white T-Shirt&#8217;s</li>
<li>Nivea roll-on</li>
<li>Socks</li>
<li>Rechargeable batteries</li>
<li>Titleist Pro V1x golf balls</li>
<li>Footjoy softjoy golf gloves</li>
<li>Double adapters</li>
<li>Buy a big issue from someone who needs the cash</li>
<li>Wash my car + scooter</li>
<li>Give me hugs</li>
<li>High five me</li>
<li>Say Happy Birthday</li>
</ul>
<p>Something for everyone&#8217;s budget, hopefully <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/126/birthday-wishlist-2010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kannel for Windows &#8211; Some Cygwin Binaries</title>
		<link>http://www.ddj.co.za/archives/74/kannel-for-windows-some-cygwin-binaries</link>
		<comments>http://www.ddj.co.za/archives/74/kannel-for-windows-some-cygwin-binaries#comments</comments>
		<pubDate>Wed, 08 Apr 2009 15:56:27 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Kannel]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Binaries]]></category>
		<category><![CDATA[Cygwin]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/72/kannel-for-windows-some-cygwin-binaries</guid>
		<description><![CDATA[A customer of mine recently asked me for a windows version of Kannel. Prior to this I had no experience with Cygwin/Windows development at all. It was actually extremely simple to build Kannel using Cygwin (thanks to the Kannel developers for being, well, pretty cool ). Obviously it&#8217;s not the easiest thing in the world [...]]]></description>
			<content:encoded><![CDATA[<p>A customer of mine recently asked me for a windows version of Kannel. Prior to this I had no experience with Cygwin/Windows development at all. It was actually extremely simple to build Kannel using Cygwin (thanks to the Kannel developers for being, well, pretty cool <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). </p>
<p>Obviously it&#8217;s not the easiest thing in the world for non-developers so I thought I would make it easy for everyone to just simply download some binaries of Kannel and get going.</p>
<p>So with that said, I have built two installers for Kannel to run on windows. I have built against the stable release 1.4.3 and then I have done a CVS snapshot build against CVS dated 2009-04-07.</p>
<p>If you are interested in these, please navigate to my <a href="http://www.ddj.co.za/kannel-for-windows">kannel for windows</a> page which I will keep up to date as more stable releases get done.</p>
<p>Just a bit of background of how to build your own versions on Cygwin below:</p>
<ol>
<li>Download latest version of Cygwin</li>
<li>Install, making sure you select the development packages (gcc, automake, libxml2-devel, openssl-devel, etc)</li>
<li>Download and extract the source of Kannel from <a href="http://www.kannel.org">www.kannel.org</a></li>
<li>Change directory to the extracted source</li>
<li>Run ./configure</li>
<li>Run make</li>
<li>Then if you wish, run make install to install (need privileges unless alternative &#8211;prefix was specified)</li>
</ol>
<p>Easy !</p>
<p>Just as a final note, Kannel on windows should NOT be treated as a production ready piece of software, so this should be used strictly for convenience, testing, development, etc.</p>
<p>As always, if you have any questions, leave a comment or mail me via <a href="mailto:blog@ddj.co.za">blog@ddj.co.za</a></p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/Kannel" rel="tag">Kannel</a>, <a class="performancingtags" href="http://technorati.com/tag/Windows" rel="tag">Windows</a>, <a class="performancingtags" href="http://technorati.com/tag/Cygwin" rel="tag">Cygwin</a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=ffdb99eb-2d6f-895b-be9b-c071d4b1408a" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/74/kannel-for-windows-some-cygwin-binaries/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Extracting meta-data from SMPP TLV’s with Kannel</title>
		<link>http://www.ddj.co.za/archives/71/extracting-meta-data-from-smpp-tlvs-with-kannel</link>
		<comments>http://www.ddj.co.za/archives/71/extracting-meta-data-from-smpp-tlvs-with-kannel#comments</comments>
		<pubDate>Sun, 15 Mar 2009 13:18:13 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Kannel]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[SMPP]]></category>
		<category><![CDATA[TLV]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/69/extracting-meta-data-from-smpp-tlvs-with-kannel</guid>
		<description><![CDATA[I have been relatively quiet the past few weeks with various operations going on, but seeing as I have a few minutes to spare I thought I would do a quick post explaining how to extract SMPP TLV&#8217;s using the new Kannel meta data features which are in the current CVS branch. These are scheduled [...]]]></description>
			<content:encoded><![CDATA[<p>I have been relatively quiet the past few weeks with various operations going on, but seeing as I have a few minutes to spare I thought I would do a quick post explaining how to extract SMPP TLV&#8217;s using the new Kannel meta data features which are in the current CVS branch.</p>
<p>These are scheduled for the 1.5.0 stable release of Kannel, so for now you&#8217;ll need to do a CVS checkout of the main branch (as described in my previous posts).</p>
<p>I will be demonstrating how to set a test TLV and then extracting this data when a reply is received. Once you have setup your &#8216;smpp-tlv&#8217; group, you simply need to specify an additional parameter in your smsbox request. This parameter is named &#8216;meta-data&#8217;. The format for this variable is &#8216;?&lt;bind_type&gt;?&lt;dataset&gt;&#8217; currently the only supported bind type is &#8216;smpp&#8217; but it was done this way to allow future support.</p>
<p>The dataset argument, is a URL encoded key/value pair string. So for these tests I have configured a smpp-tlv group called &#8216;my-custom-var&#8217;. In order to set this, I need to build a string like this for meta-data purposes.</p>
<p><code><br />?smpp?my-custom-var=This+is+a+cool+var<br /></code></p>
<p>As you can see my-custom-var is set as a URL encoded variable, this will still need to be URL-encoded for submission in the meta-data parameter sent to smsbox.</p>
<p>So just to demonstrate, using PHP how you would build this string, you would use.</p>
<p><code></p>
<p>$bind_type = "smpp";<br />$my_custom_var = "This is a cool var";<br />$meta_data = "?".$bind_type."?my-custom-var=".urlencode($my_custom_var);<br />/* Now we need to urlencode this string */<br />$meta_data = urlencode($meta_data);<br />/* So URL would look like */<br />/* cgi-bin/sendsms?to=...&amp;from=...&amp;meta-data=$meta_data */</p>
<p></code></p>
<p>So now, when you set this to smsbox, it will be sent via the smpp bind as a TLV. Easy!</p>
<p>Now on the converse, if your smpp bind returns a TLV in a deliver_sm or other PDU, this will also passed to your URL (if you have configured it. Here below is a basic function for parsing the meta data out of this string.</p>
<p><code></p>
<p>/* This function will take the meta-data string and return an associative array */<br />function parse_metadata($var) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $pos = strpos($var, "?", 1) + 1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Simply stripping out bind type 'smpp', this can be modified if you need it <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  */<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $var = substr($var, $pos);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $data = parse_str($var, $out);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $out;<br />}</p>
<p>/* Example: */<br />$meta_data = parse_metadata($_GET['meta-data']);</p>
<p>echo "My custom var = ".$meta_data['my-custom-var'];</p>
<p></code></p>
<p>I hope this helps you with your SMPP TLV requirements. Good luck, don&#8217;t forget to email me if you need any assistance with Kannel/SMS, etc and I will do my best to help you as best I can.</p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/Kannel" rel="tag">Kannel</a>, <a class="performancingtags" href="http://technorati.com/tag/SMPP" rel="tag">SMPP</a>, <a class="performancingtags" href="http://technorati.com/tag/TLV" rel="tag">TLV</a>, <a class="performancingtags" href="http://technorati.com/tag/Kannel%20Support" rel="tag">Kannel Support</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/71/extracting-meta-data-from-smpp-tlvs-with-kannel/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Send SMS using Java Midlet/J2ME and Clickatell</title>
		<link>http://www.ddj.co.za/archives/68/send-sms-using-java-midletj2me-and-clickatell</link>
		<comments>http://www.ddj.co.za/archives/68/send-sms-using-java-midletj2me-and-clickatell#comments</comments>
		<pubDate>Fri, 23 Jan 2009 17:31:08 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Lightbulbs]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[Clickatell]]></category>
		<category><![CDATA[J2ME]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/66/send-sms-using-java-midletj2me-and-clickatell</guid>
		<description><![CDATA[I have had some time to experiment with J2ME which is something I&#8217;ve always wanted the time to do. So during the course of this week (maybe a few hours total) I have put together my first Midlet. It&#8217;s a simple piece of software which allows you to send an SMS via the Clickatell SMS [...]]]></description>
			<content:encoded><![CDATA[<p>I have had some time to experiment with J2ME which is something I&#8217;ve always wanted the time to do. So during the course of this week (maybe a few hours total) I have put together my first Midlet. It&#8217;s a simple piece of software which allows you to send an SMS via the Clickatell SMS gateway.</p>
<p>You&#8217;ll need a Clickatell HTTP API Account to do so, if you don&#8217;t already have one click <a href="http://affiliates.clickatell.com/central/campaigns/redir.php?cid=89753" target="_blank">here</a> to get one.      </p>
<p>I have posted the source code <a href="http://www.ddj.co.za/sendsms.tar.gz">here</a> or you can point your mobile device directly at:</p>
<p><a href="http://www.ddj.co.za/s.jad">http://www.ddj.co.za/s.jad</a></p>
<p>Alternatively, download the jar file directly (I had to do this to get it working on my Windows Mobile 6.1 phone) at <a href="http://www.ddj.co.za/s.jar">http://www.ddj.co.za/s.jar</a></p>
<p>I wrote it using a Mac with Eclipse (with ME add-on&#8217;s) using mpowerplayer as the emulator. It is *just* a prototype and by no means uses best practice programming so don&#8217;t judge me on this quick hack <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> <br />Enjoy! If you like this app and you want me to modify it for you please get in touch via <a href="mailto:midlet@ddj.co.za">midlet@ddj.co.za</a></p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/SMS" rel="tag">SMS</a>, <a class="performancingtags" href="http://technorati.com/tag/J2ME" rel="tag">J2ME</a>, <a class="performancingtags" href="http://technorati.com/tag/Midlet" rel="tag">Midlet</a>, <a class="performancingtags" href="http://technorati.com/tag/Clickatell" rel="tag">Clickatell</a><br />
<center><br />
<a href='http://new.ddj.co.za/wp-content/uploads/2009/01/picture-21.png' title='J2ME Midlet Running in mpowerplayer'><img src='http://new.ddj.co.za/wp-content/uploads/2009/01/picture-21.png' alt='J2ME Midlet Running in mpowerplayer' /></a><br />
Midlet running in mpowerplayer<br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/68/send-sms-using-java-midletj2me-and-clickatell/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HOWTO: Connect Kannel to an SMPP Server</title>
		<link>http://www.ddj.co.za/archives/48/howto-connect-kannel-to-an-smpp-server</link>
		<comments>http://www.ddj.co.za/archives/48/howto-connect-kannel-to-an-smpp-server#comments</comments>
		<pubDate>Fri, 05 Dec 2008 10:36:04 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Kannel]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[SMPP Client]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/48/howto-connect-kannel-to-an-smpp-server</guid>
		<description><![CDATA[Today I will be covering how to connect Kannel gateway to an SMPP Server. Following on from my previous post, you should have a wapbox, smsbox and bearerbox binary now compiled on your machine. Just to put your minds at ease, I want to cover some basic architecture of Kannel, so you can understand how [...]]]></description>
			<content:encoded><![CDATA[<p>Today I will be covering how to connect Kannel gateway to an SMPP Server.</p>
<p>Following on from my <a href="http://www.ddj.co.za/archives/46/howto-compile-kannel-on-ubuntukubuntu-804">previous post</a>, you should have a wapbox, smsbox and bearerbox binary now compiled on your machine. Just to put your minds at ease, I want to cover some basic architecture of Kannel, so you can understand how your messages flow through the system, and potentially give you an idea of where to start your troubleshooting.</p>
<p><a href="http://new.ddj.co.za/wp-content/uploads/2008/12/kannelarch.jpg" rel="lightbox" title="Kannel Architecture Diagram"><img style="max-width: 520px;" src="http://new.ddj.co.za/wp-content/uploads/2008/12/kannelarch.jpg" border="0" /></a></p>
<p>What this diagram indicates is, the bearerbox is the binary with &#8216;the muscle&#8217;, it directs the flow of messaging traffic, and connects to all your upstream SMSC&#8217;s, GSM modems, etc.&nbsp; These upstream SMSC type&#8217;s include, by default in Kannel, just to name a few, CIMD2, EMI, SMPP, AT modems, HTTP SMSCs and a few others. Seeing as Kannel is open source with a really flexible license, its easy to write your own custom SMSC&#8217;s, but that is way out of the scope of this document <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So today, we will be focusing on getting the bearerbox, to connect to an SMPP server, seems simple enough!</p>
<p>Before you connect to something, you&#8217;ll need some basic details which your SMPP service operator will give you. This will include a system-id (username), password, hostname / ip address. This is what is required at minimum. Some operators will also give you things like default character set, system type and so forth. For todays demo I am going to connect to an SMPP server I have setup on my machine (should be fast! <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>So my details for connection (yours to be provided by operator):</p>
<ul>
<li>IP address : internal.smpp.ddj.co.za</li>
<li>System-id (username): donsmpp</li>
<li>Password: strngpas</li>
<li>Port: 9102
</li>
</ul>
<p>So, at this stage my &#8216;bearerbox&#8217; configuration looks as follows:</p>
<p><code><br />
group = core<br />
admin-port = 13000<br />
smsbox-port = 13001<br />
admin-password = bar<br />
log-file = "/tmp/kannel.log"<br />
log-level = 0<br />
box-deny-ip = "*.*.*.*"<br />
box-allow-ip = "127.0.0.1"</p>
<p>group=smsc<br />
smsc=smpp<br />
smsc-id=internal<br />
interface-version=34<br />
host=internal.smpp.ddj.co.za<br />
port=9102<br />
system-id=donsmpp<br />
smsc-password=strngpas<br />
system-type=default<br />
transceiver-mode=1</p>
<p>group = smsbox<br />
bearerbox-host = 127.0.0.1<br />
sendsms-port = 13013<br />
log-level = 0<br />
</code></p>
<p>Now you&#8217;re probably wondering where those other config settings came from, I&#8217;ll attempt to give you a really quick explanation.</p>
<ul>
<li>group = core, all settings under this group, are related to the core bearerbox configuration, ie which ports to listen on, log level etc, as you can see I have put the log-level on 0 which will give me tons of debugging information which is pretty useful (not recommended for production servers though <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</li>
<li>group = smsbox, this group specifies on which port/ip address to allow inbound connections from smsbox/wapbox/sqlbox/smppbox (see architecture) and isn&#8217;t really covered in this post, maybe next time <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>So that just leaves our smsc group, which is to connect to our smpp server. I&#8217;ll quickly try to explain the non trivial configuration directives.
<ul>
<li>smsc-id &#8211; this is a name given to the smsc, which can be used later for routing etc</li>
<li>interface-version &#8211; This is to tell us what version of SMPP to speak to the server with, I have specified 34 which indicates version 3.4</li>
<li>system-type &#8211; This is required by Kannel, but its not always required by the server, I have just specified a &#8216;junk&#8217; value to stop Kannel from complaining.</li>
<li>trancseiver-mode &#8211; This indicates that I want to bind as a transceiver to the server (as opposed to transmitter / receiver) what this will allow me to do is send AND receive messages over the same connection. This is a SMPP 3.4 specific option.</li>
</ul>
</li>
</ul>
<p>I&#8217;m sure you&#8217;re tired of reading now and just want to see ! So let&#8217;s start this sucker up. I will start it up from command line, some of you (using Ubuntu, CentOS etc) will start it via init scripts, ie, /etc/init.d/kannel start, I will start it up simply by executing /usr/local/sbin/bearerbox /opt/kannel/etc/my_bbox.conf &#8211; this will of course only start the bearerbox, not the smsbox/wapbox, etc. Here we go!</p>
<p><code><br />
2008-12-05 09:26:08 [28431] [6] DEBUG: Thread 6 (gw/smsc/smsc_smpp.c:io_thread) maps to pid 28431.<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP[internal]: Sending PDU:<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP PDU 0x50dab0 dump:<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   type_name: bind_transceiver<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   command_id: 9 = 0x00000009<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   command_status: 0 = 0x00000000<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   sequence_number: 1 = 0x00000001<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   system_id: "donsmpp"<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   password: "strngpas"<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   system_type: "default"<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   interface_version: 52 = 0x00000034<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   addr_ton: 0 = 0x00000000<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   addr_npi: 0 = 0x00000000<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   address_range: NULL<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP PDU dump ends.<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP[internal]: Got PDU:<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP PDU 0x50dab0 dump:<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   type_name: bind_transceiver_resp<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   command_id: 2147483657 = 0x80000009<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   command_status: 0 = 0x00000000<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   sequence_number: 1 = 0x00000001<br />
2008-12-05 09:26:08 [28431] [6] DEBUG:   system_id: "DDJSMPP"<br />
2008-12-05 09:26:08 [28431] [6] DEBUG: SMPP PDU dump ends.<br />
2008-12-05 09:26:12 [28431] [6] DEBUG: SMPP[internal]: Sending unbind:<br />
2008-12-05 09:26:12 [28431] [6] DEBUG: SMPP PDU 0x50dab0 dump:<br />
2008-12-05 09:26:12 [28431] [6] DEBUG:   type_name: unbind<br />
2008-12-05 09:26:12 [28431] [6] DEBUG:   command_id: 6 = 0x00000006<br />
2008-12-05 09:26:12 [28431] [6] DEBUG:   command_status: 0 = 0x00000000<br />
2008-12-05 09:26:12 [28431] [6] DEBUG:   sequence_number: 2 = 0x00000002<br />
2008-12-05 09:26:12 [28431] [6] DEBUG: SMPP PDU dump ends.<br />
2008-12-05 09:26:12 [28431] [6] DEBUG: SMPP[internal]: io_thread: break and shutting down<br />
2008-12-05 09:26:12 [28431] [6] DEBUG: Thread 6 (gw/smsc/smsc_smpp.c:io_thread) terminates.<br />
</code></p>
<p>Success! Due to the log level, being on debug, we can see almost too much info, but great because our bind was successful! Our bearerbox is now bound to the SMPP server and ready to start sending messages. The great thing about Kannel is, its built in status page, so even if you don&#8217;t see this output, you can browse to the local web status page, http://&lt;host&gt;:&lt;port&gt;/status (or http://localhost:13000/status in my case) which will give you an output like this:</p>
<blockquote>
<p>Kannel bearerbox version `cvs-20080824&#8242;.<br />
Build `Sep  7 2008 12:04:32&#8242;, compiler `4.0.1 (Apple Inc. build 5465)&#8217;.<br />
System Darwin, release 9.5.0, version Darwin Kernel Version 9.5.0: Wed Sep  3 11:29:43 PDT 2008; root:xnu-1228.7.58~1/RELEASE_I386, machine i386.<br />
Hostname donald-jacksons-macbook-pro-6.local, IP 192.168.1.82.<br />
Libxml version 2.6.16.<br />
Using OpenSSL 0.9.7l 28 Sep 2006.<br />
Compiled with MySQL 5.0.67, using MySQL 5.0.67.<br />
Using native malloc.</p>
<p>Status: running, uptime 0d 0h 0m 55s</p>
<p>WDP: received 0 (0 queued), sent 0 (0 queued)</p>
<p>SMS: received 0 (0 queued), sent 0 (0 queued), store size -1</p>
<p>SMS: inbound 0.00 msg/sec, outbound 0.00 msg/sec</p>
<p>DLR: 0 queued, using internal storage</p>
<p>No boxes connected</p>
<p>SMSC connections:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<b>internal</b>&nbsp;&nbsp;&nbsp;&nbsp;SMPP:internal.smpp.ddj.co.za:9102/9102:donsmpp:default (online 55s, rcvd 0, sent 0, failed 0, queued 0 msgs)</p>
</blockquote>
<p>As you can see by this status output, I have no smsbox&#8217;s connected and am just demonstrating the bearerbox part. I will probably do a part 3 tutorial which will cover configuring smsbox and sending a few messages.</p>
<p>If you have any questions for me I&#8217;ll be happy to answer, even via comments or email. I hope this helps some of you connect your Kannel instances!</p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/Kannel" rel="tag">Kannel</a>, <a class="performancingtags" href="http://technorati.com/tag/SMPP" rel="tag">SMPP</a>, <a class="performancingtags" href="http://technorati.com/tag/Architecture" rel="tag">Architecture</a>, <a class="performancingtags" href="http://technorati.com/tag/Smsbox" rel="tag">Smsbox</a>, <a class="performancingtags" href="http://technorati.com/tag/Bearerbox" rel="tag">Bearerbox</a>, <a class="performancingtags" href="http://technorati.com/tag/SMS" rel="tag">SMS</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/48/howto-connect-kannel-to-an-smpp-server/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>HOWTO: Compile Kannel on Ubuntu / Kubuntu 8.04</title>
		<link>http://www.ddj.co.za/archives/46/howto-compile-kannel-on-ubuntukubuntu-804</link>
		<comments>http://www.ddj.co.za/archives/46/howto-compile-kannel-on-ubuntukubuntu-804#comments</comments>
		<pubDate>Mon, 03 Nov 2008 13:33:05 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Compile]]></category>
		<category><![CDATA[HOWTO]]></category>
		<category><![CDATA[Kannel]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/46</guid>
		<description><![CDATA[Hey everyone, I am putting together a multi-part post on how to compile Kannel as well as connect it to an SMPP Server and send a few messages through it. I will be using Kubuntu 8.04 for the tutorial but it should apply to most Linux distro&#8217;s. Step 1 &#8211; Satisfying requirements / dependencies Install [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone, I am putting together a multi-part post on how to compile Kannel as well as connect it to an SMPP Server and send a few messages through it. I will be using Kubuntu 8.04 for the tutorial but it should apply to most Linux distro&#8217;s.</p>
<p><b>Step 1 &#8211; Satisfying requirements / dependencies</b></p>
<p>Install CVS client:</p>
<p>sudo apt-get install cvs</p>
<p><u>Build dependencies:</u></p>
<p>Install build tools (gcc, mac, g++, etc. Not all necessary but you should have them!)
<ul>
<li>sudo apt-get install build-essential</li>
</ul>
<p>Install required Kannel dependencies (there are obviously way more, but this is all required on Kubuntu 8.04)
<ul>
<li>sudo apt-get install libxml2-dev</li>
</ul>
<p>Install optional Kannel dependencies (These are only required if you would like to use SSL enabled servers, alternate DLR storage options etc. For the purposes of this example I will enable our Kannel build for SSL and PostgreSQL DLR storage)
<ul>
<li>sudo apt-get install openssl-dev</li>
<li>sudo apt-get install libpq-dev</li>
</ul>
<p><b>Step 2 &#8211; Getting the source of Kannel.</p>
<p>Option a) Downloading latest stable</p>
<p></b>Visit the <a href="http://www.kannel.org/download.shtml">kannel download page</a> and download the source as gzip tarball (or bzip2 tarball if you prefer). In the directory you downloaded execute:</p>
<p>tar zxvf gateway-X.X.X.tar.gz</p>
<p><b>Option b) Getting the latest CVS (my preferred method)</b></p>
<p>You will need a CVS client installed.</p>
<p>Log in using the following command (just press Enter when it asks for<br />a password):<tt><br /></tt>
<ul>
<li><tt>cvs -d:pserver:anonymous@cvs.kannel.org:/home/cvs login</tt></li>
</ul>
<p>Check out the current version of the Kannel gateway:</p>
<p>
<ul>
<li><tt>cvs -d:pserver:anonymous@cvs.kannel.org:/home/cvs co -d gateway-cvs gateway</tt></li>
</ul>
<p>Once the gateway is checked out, it will be in the gateway-cvs directory (as specified above)</p>
<p><b>Step 3 &#8211; Building Kannel</b></p>
<p>Change directory to the directory you downloaded the source to (gateway-X.X.X or gateway-cvs)</p>
<p>Execute:
<ul>
<li>./configure &#8211;with-pgsql &#8211;enable-ssl</li>
</ul>
<p>This should configure the build correctly with OpenSSL and PostgreSQL support.</p>
<p>Once that&#8217;s done, execute:</p>
<ul>
<li>make</li>
</ul>
<p>This will build the binaries for Kannel, if you want to install them system wide at this point you can by executing:
<ul>
<li>sudo make install&nbsp;</li>
</ul>
<p>You now have the Kannel binaries built for your use. These include smsbox, wapbox and bearerbox. You can either consult the Kannel user guide for how to use these or wait for my next post where I will cover setting and starting up Kannel (and some architecture stuff <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ).</p>
<p></p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/Kannel" rel="tag">Kannel</a>, <a class="performancingtags" href="http://technorati.com/tag/SMPP" rel="tag">SMPP</a>, <a class="performancingtags" href="http://technorati.com/tag/Build" rel="tag">Build</a>, <a class="performancingtags" href="http://technorati.com/tag/Ubuntu" rel="tag">Ubuntu</a>, <a class="performancingtags" href="http://technorati.com/tag/Kubuntu" rel="tag">Kubuntu</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/46/howto-compile-kannel-on-ubuntukubuntu-804/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I want more HD</title>
		<link>http://www.ddj.co.za/archives/45/i-want-more-hd</link>
		<comments>http://www.ddj.co.za/archives/45/i-want-more-hd#comments</comments>
		<pubDate>Mon, 27 Oct 2008 09:49:17 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Lightbulbs]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/45</guid>
		<description><![CDATA[Been a long time since a post, sorry to my massive audience Being the nerd that I am I adopted Multichoice&#8217;s HD offering as it was released. There were/are numerous things that I hate(d) about the new HD decoder. It&#8217;s buggy, it&#8217;s slow, and so on. But most of all what I hate is the [...]]]></description>
			<content:encoded><![CDATA[<p>Been a long time since a post, sorry to my massive audience <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Being the nerd that I am I adopted Multichoice&#8217;s HD offering as it was released. There were/are numerous things that I hate(d) about the new HD decoder. It&#8217;s buggy, it&#8217;s slow, and so on. But most of all what I hate is the seriously limited content that is available on the DSTV bouquet.</p>
<p>I am absolutely in love with the picture quality of the HD broadcasts, but it seems to me as Multichoice was just not prepared when they launched this system. The decoder out the box was buggy with debugging messages all over the place. The Olympics was a good platform to launch from, after it was over, I got really excited to see M-Net in HD, to be disappointed, there was no Carte Blanche at the usual 7pm timeslot. What Multichoice failed to mention was that M-Net HD is not normal M-Net, its basically a new channel with the odd &#8216;Simulcast&#8217; (eg: Show&#8217;s run concurrently on standard M-Net and M-Net HD). I was looking forward to was the Saturday sport, Carte Blanche and other shows in HD. Only recently (this weekend) did they show some rugby in HD. It was BRILLIANT (ok and the Shark&#8217;s won <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ).</p>
<p>All I ask now of Multichoice is to add some more HD content/channels to the bouquet, there is simply not enough available at the moment and the HD decoder is not worth the investment at this point. I would like to see a roadmap from Multichoice showing the plans of when they are going to add more HD channels, so people can plan when they want to buy and not be fooled as I was into believing that there is an abundance of HD programming.</p>
<p>With that said, HD is the future and is brilliant, I just want more now.</p>
<p>Technorati Tags: <a class="performancingtags" href="http://technorati.com/tag/DSTV" rel="tag">DSTV</a>, <a class="performancingtags" href="http://technorati.com/tag/Multichoice" rel="tag">Multichoice</a>, <a class="performancingtags" href="http://technorati.com/tag/HD" rel="tag">HD</a>, <a class="performancingtags" href="http://technorati.com/tag/M-Net" rel="tag">M-Net</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/45/i-want-more-hd/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My new chip credit card</title>
		<link>http://www.ddj.co.za/archives/43/my-new-chip-credit-card</link>
		<comments>http://www.ddj.co.za/archives/43/my-new-chip-credit-card#comments</comments>
		<pubDate>Mon, 21 Apr 2008 08:04:53 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/43</guid>
		<description><![CDATA[I recently got a new credit card from my bank with one of these &#8216;fantastic&#8217; new smart chips on it. Wow, all shiny and pretty this thing must be good! Wrong. I knew this card required a PIN as opposed to my previous one, seems simple enough, I can deal with that I went to [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got a new credit card from my bank with one of these &#8216;fantastic&#8217; new smart chips on it.</p>
<p>Wow, all shiny and pretty this thing must be good!</p>
<p>Wrong.</p>
<p>I knew this card required a PIN as opposed to my previous one, seems simple enough, I can deal with that <img src='http://www.ddj.co.za/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I went to three, different shops this Saturday to spend my hard earned money and at the first shop, *swipe* *try to use chip* &#8220;Sorry its not working&#8230;&#8221;. Next shop, *swipe*, call the supervisor, supervisor manages to get the transaction through! And the final straw was when I simply went to the Spar, you would think a big retail chain would be fully ready to deal with these new cards. Nope. Supervisor again, enter passwords and all sorts of things.</p>
<p>So yes, the bank tells you all the things that are great with this card. Its secure, safe and shiny! What they don&#8217;t tell is that the shops are not ready to use it properly, and that it will completely inconvenience you and waste your time every time you shop!</p>
<p>My recommendation is to avoid getting one of these for now wherever possible!</p>
<p>http://www.chipandspin.co.uk/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/43/my-new-chip-credit-card/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The irony of the gym parking lot.</title>
		<link>http://www.ddj.co.za/archives/41/the-irony-of-the-gym-parking-lot</link>
		<comments>http://www.ddj.co.za/archives/41/the-irony-of-the-gym-parking-lot#comments</comments>
		<pubDate>Tue, 08 Apr 2008 06:08:40 +0000</pubDate>
		<dc:creator>Donald Jackson</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[Sport]]></category>

		<guid isPermaLink="false">http://www.ddj.co.za/archives/41</guid>
		<description><![CDATA[I am writing this post because I am completely confused. People go to gym to exercise right? Do weights, run on the treadmill, take classes, etc? If they are there to exercise, why on earth do people have to park so close to the front door? Surely a few extra steps wouldn&#8217;t hurt, maybe it [...]]]></description>
			<content:encoded><![CDATA[<p>I am writing this post because I am completely confused.</p>
<p>People go to gym to exercise right? Do weights, run on the treadmill, take classes, etc?</p>
<p>If they are there to exercise, why on earth do people have to park so close to the front door? Surely a few extra steps wouldn&#8217;t hurt, maybe it would be good for people to warm up a little.</p>
<p>I go to gym at the Virgin Active at Tygervalley and on a daily basis my mind is blown by people, who park on curbs, in bushes and all over the place, to avoid taking ten extra steps for a parking slightly further from the entrance. I&#8217;m not talking about there being no other parking available, just pure lazyness (or crazyness?).</p>
<p>Am I the only person who sees the irony?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ddj.co.za/archives/41/the-irony-of-the-gym-parking-lot/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
