<?xml version="1.0" encoding="UTF-8" ?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
			<title>RSS Feed</title>
			<link>http://boydlee.com/feed.html</link>
			<description></description>
			<language>en</language>
			<copyright>Learn iOS, Cocos2D and Appcelerator Titanium || boydlee.com 2006</copyright>
			<ttl>120</ttl><item>
		<title>Appcelerator Titanium Workshops</title>
		<link>http://boydlee.com/appcelerator-titanium/appcelerator-titanium-workshops.html</link>
		<description><![CDATA[ <p>Thanks to everyone who signed up for my trial workshop in Norwich - it sold out within the hour! I am going to be running more workshops in the future so please if you're interested, sign up using the form below.</p>
<p>Best regards,<br />Boydlee</p>
<p>&nbsp;</p>
<form id="subForm" action="http://pollypolish.createsend.com/t/j/s/iyhrll/" method="post">
<div>
<label for="name">Name:</label><br /><input id="name" style="width: 200px;" name="cm-name" type="text" /><br />
<label for="iyhrll-iyhrll">Email:</label><br /><input id="iyhrll-iyhrll" style="width: 200px;" name="cm-iyhrll-iyhrll" type="text" /><br />
<label for="Location">Location:</label><br /><input id="Location" style="width: 200px;" name="cm-f-eltyk" type="text" /><br />
<label for="Country">Country:</label><br /><select style="width: 200px;" name="cm-fo-eltyu">
<option value="387767">Afghanistan</option>
<option value="387768">Albania</option>
<option value="387769">Algeria</option>
<option value="387770">American Samoa</option>
<option value="387771">Andorra</option>
<option value="387772">Angola</option>
<option value="388012">Anguilla</option>
<option value="388013">Antigua &amp; Barbuda</option>
<option value="388014">Argentina</option>
<option value="388015">Armenia</option>
<option value="388016">Aruba</option>
<option value="388017">Australia</option>
<option value="388006">Austria</option>
<option value="388007">Azerbaijan</option>
<option value="388008">Azores</option>
<option value="388009">Bahamas</option>
<option value="388010">Bahrain</option>
<option value="388011">Bangladesh</option>
<option value="388000">Barbados</option>
<option value="388001">Belarus</option>
<option value="388002">Belgium</option>
<option value="388003">Belize</option>
<option value="388004">Benin</option>
<option value="388005">Bermuda</option>
<option value="387994">Bhutan</option>
<option value="387995">Bolivia</option>
<option value="387996">Bonaire</option>
<option value="387997">Bosnia &amp; Herzegovina</option>
<option value="387998">Botswana</option>
<option value="387999">Brazil</option>
<option value="387988">British Indian Ocean Ter</option>
<option value="387989">Brunei</option>
<option value="387990">Bulgaria</option>
<option value="387991">Burkina Faso</option>
<option value="387992">Burundi</option>
<option value="387993">Cambodia</option>
<option value="387982">Cameroon</option>
<option value="387983">Canada</option>
<option value="387984">Canary Islands</option>
<option value="387985">Cape Verde</option>
<option value="387986">Cayman Islands</option>
<option value="387987">Central African Republic</option>
<option value="387976">Chad</option>
<option value="387977">Channel Islands</option>
<option value="387978">Chile</option>
<option value="387979">China</option>
<option value="387980">Christmas Island</option>
<option value="387981">Cocos Island</option>
<option value="387970">Colombia</option>
<option value="387971">Comoros</option>
<option value="387972">Congo</option>
<option value="387973">Congo Democratic Rep</option>
<option value="387974">Cook Islands</option>
<option value="387975">Costa Rica</option>
<option value="387964">Cote D'Ivoire</option>
<option value="387965">Croatia</option>
<option value="387966">Cuba</option>
<option value="387967">Curacao</option>
<option value="387968">Cyprus</option>
<option value="387969">Czech Republic</option>
<option value="387958">Denmark</option>
<option value="387959">Djibouti</option>
<option value="387960">Dominica</option>
<option value="387961">Dominican Republic</option>
<option value="387962">East Timor</option>
<option value="387963">Ecuador</option>
<option value="387952">Egypt</option>
<option value="387953">El Salvador</option>
<option value="387954">Equatorial Guinea</option>
<option value="387955">Eritrea</option>
<option value="387956">Estonia</option>
<option value="387957">Ethiopia</option>
<option value="387946">Falkland Islands</option>
<option value="387947">Faroe Islands</option>
<option value="387948">Fiji</option>
<option value="387949">Finland</option>
<option value="387950">France</option>
<option value="387951">French Guiana</option>
<option value="387940">French Polynesia</option>
<option value="387941">French Southern Ter</option>
<option value="387942">Gabon</option>
<option value="387943">Gambia</option>
<option value="387944">Georgia</option>
<option value="387945">Germany</option>
<option value="387934">Ghana</option>
<option value="387935">Gibraltar</option>
<option value="387936">Great Britain</option>
<option value="387937">Greece</option>
<option value="387938">Greenland</option>
<option value="387939">Grenada</option>
<option value="387928">Guadeloupe</option>
<option value="387929">Guam</option>
<option value="387930">Guatemala</option>
<option value="387931">Guernsey</option>
<option value="387932">Guinea</option>
<option value="387933">Guinea-Bissau</option>
<option value="387922">Guyana</option>
<option value="387923">Haiti</option>
<option value="387924">Honduras</option>
<option value="387925">Hong Kong</option>
<option value="387926">Hungary</option>
<option value="387927">Iceland</option>
<option value="387916">India</option>
<option value="387917">Indonesia</option>
<option value="387918">Iran</option>
<option value="387919">Iraq</option>
<option value="387920">Ireland</option>
<option value="387921">Isle of Man</option>
<option value="387910">Israel</option>
<option value="387911">Italy</option>
<option value="387912">Jamaica</option>
<option value="387913">Japan</option>
<option value="387914">Jersey</option>
<option value="387915">Jordan</option>
<option value="387904">Kazakhstan</option>
<option value="387905">Kenya</option>
<option value="387906">Kiribati</option>
<option value="387907">Korea North</option>
<option value="387908">Korea South</option>
<option value="387909">Kuwait</option>
<option value="387898">Kyrgyzstan</option>
<option value="387899">Laos</option>
<option value="387900">Latvia</option>
<option value="387901">Lebanon</option>
<option value="387902">Lesotho</option>
<option value="387903">Liberia</option>
<option value="387892">Libya</option>
<option value="387893">Liechtenstein</option>
<option value="387894">Lithuania</option>
<option value="387895">Luxembourg</option>
<option value="387896">Macau</option>
<option value="387897">Macedonia</option>
<option value="387886">Madagascar</option>
<option value="387887">Malawi</option>
<option value="387888">Malaysia</option>
<option value="387889">Maldives</option>
<option value="387890">Mali</option>
<option value="387891">Malta</option>
<option value="387880">Marshall Islands</option>
<option value="387881">Martinique</option>
<option value="387882">Mauritania</option>
<option value="387883">Mauritius</option>
<option value="387884">Mayotte</option>
<option value="387885">Mexico</option>
<option value="387874">Midway Islands</option>
<option value="387875">Moldova</option>
<option value="387876">Monaco</option>
<option value="387877">Mongolia</option>
<option value="387878">Montenegro</option>
<option value="387879">Montserrat</option>
<option value="387868">Morocco</option>
<option value="387869">Mozambique</option>
<option value="387870">Myanmar</option>
<option value="387871">Namibia</option>
<option value="387872">Nauru</option>
<option value="387873">Nepal</option>
<option value="387862">Netherland Antilles</option>
<option value="387863">Netherlands</option>
<option value="387864">Nevis</option>
<option value="387865">New Caledonia</option>
<option value="387866">New Zealand</option>
<option value="387867">Nicaragua</option>
<option value="387856">Niger</option>
<option value="387857">Nigeria</option>
<option value="387858">Niue</option>
<option value="387859">Norfolk Island</option>
<option value="387860">Norway</option>
<option value="387861">Oman</option>
<option value="387850">Pakistan</option>
<option value="387851">Palau Island</option>
<option value="387852">Palestine</option>
<option value="387853">Panama</option>
<option value="387854">Papua New Guinea</option>
<option value="387855">Paraguay</option>
<option value="387844">Peru</option>
<option value="387845">Philippines</option>
<option value="387846">Pitcairn Island</option>
<option value="387847">Poland</option>
<option value="387848">Portugal</option>
<option value="387849">Puerto Rico</option>
<option value="387838">Qatar</option>
<option value="387839">Reunion</option>
<option value="387840">Romania</option>
<option value="387841">Russia</option>
<option value="387842">Rwanda</option>
<option value="387843">Saipan</option>
<option value="387832">Samoa</option>
<option value="387833">Samoa American</option>
<option value="387834">San Marino</option>
<option value="387835">Sao Tome &amp; Principe</option>
<option value="387836">Saudi Arabia</option>
<option value="387837">Senegal</option>
<option value="387826">Serbia</option>
<option value="387827">Serbia &amp; Montenegro</option>
<option value="387828">Seychelles</option>
<option value="387829">Sierra Leone</option>
<option value="387830">Singapore</option>
<option value="387831">Slovakia</option>
<option value="387820">Slovenia</option>
<option value="387821">Solomon Islands</option>
<option value="387822">Somalia</option>
<option value="387823">South Africa</option>
<option value="387824">South Sudan</option>
<option value="387825">Spain</option>
<option value="387814">Sri Lanka</option>
<option value="387815">St Barthelemy</option>
<option value="387816">St Eustatius</option>
<option value="387817">St Helena</option>
<option value="387818">St Kitts-Nevis</option>
<option value="387819">St Lucia</option>
<option value="387808">St Maarten</option>
<option value="387809">St Pierre &amp; Miquelon</option>
<option value="387810">St Vincent &amp; Grenadines</option>
<option value="387811">Sudan</option>
<option value="387812">Suriname</option>
<option value="387813">Swaziland</option>
<option value="387802">Sweden</option>
<option value="387803">Switzerland</option>
<option value="387804">Syria</option>
<option value="387805">Tahiti</option>
<option value="387806">Taiwan</option>
<option value="387807">Tajikistan</option>
<option value="387796">Tanzania</option>
<option value="387797">Thailand</option>
<option value="387798">Togo</option>
<option value="387799">Tokelau</option>
<option value="387800">Tonga</option>
<option value="387801">Trinidad &amp; Tobago</option>
<option value="387790">Tunisia</option>
<option value="387791">Turkey</option>
<option value="387792">Turkmenistan</option>
<option value="387793">Turks &amp; Caicos Is</option>
<option value="387794">Tuvalu</option>
<option value="387795">Uganda</option>
<option value="387784">Ukraine</option>
<option value="387785">United Arab Emirates</option>
<option selected="selected" value="387786">United Kingdom</option>
<option value="387787">United States of America</option>
<option value="387788">Uruguay</option>
<option value="387789">Uzbekistan</option>
<option value="387778">Vanuatu</option>
<option value="387779">Vatican City State</option>
<option value="387780">Venezuela</option>
<option value="387781">Vietnam</option>
<option value="387782">Virgin Islands (Brit)</option>
<option value="387783">Virgin Islands (USA)</option>
<option value="387773">Wake Island</option>
<option value="387774">Wallis &amp; Futana Is</option>
<option value="387775">Yemen</option>
<option value="387776">Zambia</option>
<option value="387777">Zimbabwe</option>
</select><br /><br />
<input type="submit" value="Subscribe" />
</div>
</form> ]]></description>
		<pubDate>Mon, 05 Nov 2012 04:47:52 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/appcelerator-titanium-workshops.html</guid>
</item><item>
		<title>Titanium Europe Meetup</title>
		<link>http://boydlee.com/appcelerator-titanium/titanium-europe-meetup.html</link>
		<description><![CDATA[ <p>Hey All!</p>
<p>Following on from a conversation between a bunch of Titanium and JavaScript devs and Titans on Twitter we all go to thinking - why doesn't Europe have its own big, annual meetup? A place for like minded Ti Devs to get together every year, have some good times and share some knowledge? </p>
<p>If you're in Europe (or hell, if you want to visit us!) please sign up, retweet this page, share it via Facebook or any other means you want. The more people we can get interested the better off we'll be. Note the max travel distance and spend below is just an approximate - we want to make sure wherever we host the event that as many people are able to attend as possible.</p>
<p>We'd love to share this around every year between our countries so please, sign up and join in the conversation!</p>
<p><form action="http://pollypolish.createsend.com/t/j/s/jjyhut/" method="post" id="subForm">
<div>
<p><label for="name" style="width: 150px; clear: both;">Name:</label><br /><input type="text" name="cm-name" id="name" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="jjyhut-jjyhut" style="width: 150px; clear: both;">Email:</label><br /><input type="text" name="cm-jjyhut-jjyhut" id="jjyhut-jjyhut" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="Titanium Proficiency">Titanium Proficiency:</label><br /><select name="cm-fo-pbdk">
<option value="259080">Beginner</option>
<option value="259081">Intermediate</option>
<option value="259082">Expert</option>
<option value="259083">Titan</option>
</select></p>

<p><label for="Twitter Handle (inc @)" style="width: 150px; clear: both;">Twitter Handle (inc @):</label><br /><input type="text" name="cm-f-plig" id="TwitterHandle(inc@)" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="City" style="width: 150px; clear: both;">City:</label><br /><input type="text" name="cm-f-pliw" id="City" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="Country" style="width: 150px; clear: both;">Country:</label><br /><input type="text" name="cm-f-pliyd" id="Country" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="Max Travel Distance" style="width: 150px; clear: both;">Max Travel Distance:</label><br /><input type="text" name="cm-f-pliyh" id="MaxTravelDistance" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><label for="Max Travel Spend" style="width: 150px; clear: both;">Max Travel Spend:</label><br /><input type="text" name="cm-f-pliyk" id="MaxTravelSpend" style="border: 1px solid #959183; padding: 4px; width: 300px; margin-bottom: 10px;" /></p>

<p><input type="submit" value="Subscribe" style="clear: both; margin-top: 10px; border: 1px solid #959183; background-color: #E1DED4; padding: 6px 10px; font-size: 14px; text-transform: uppercase;" /></p>
</div>
</form></p> ]]></description>
		<pubDate>Sat, 21 Jul 2012 15:09:50 -0500</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/titanium-europe-meetup.html</guid>
</item><item>
		<title>Connecting and uploading to CloudFiles Rackspace Storage</title>
		<link>http://boydlee.com/appcelerator-titanium/connecting-and-uploading-to-cloudfiles-rackspace-storage.html</link>
		<description><![CDATA[ <p>I wrote this about 8 months ago in order to connect to Rackspace's "CloudFiles" platform, which is basically a CDN like Amazons S3 or a stack of others out there.</p>
<p>I use Rackspace for pretty much all my hosting and recommend them to all my clients, so CloudFiles made more sense for my purposes than S3 did. Here's a link to the CloudFiles page and there's a PDF there with the API specifications:&nbsp;<a href="http://www.rackspace.com/cloud/cloud_hosting_products/files/api/" target="_blank">http://www.rackspace.com/cloud/cloud_hosting_products/files/api/</a>.</p>
<p>Anyway, here's the CommonJS module free for you to use. I've not implemented all the CloudFiles features, so feel free to extend this and share it again. One thing to note - at the time I wrote this there was a bug in the Appcelerator SDK whereby you couldn't set the Content-Length parameter under Android when using the PUT command - Rackspace requires this to be set. I'm not 100% sure if this bug has since been fixed in 2.0+ releases of the Titanium SDK.</p>
<p>The CommonJS module (copy, paste and save as "CloudFiles.js")</p>
<p>
<script src="https://snipt.net/embed/05a741ae969521053fc2649fb34bd9d8/" type="text/javascript"></script>
</p>
<p>Here's a sample of using it to authenticate and push an image file (Snippt not fully tested!). The module does work, I have it in a few production apps, but I don't have time to write a full sample... I'm sure you can all work it out anyway!</p>
<p>
<script src="https://snipt.net/embed/76c41f5da129a0677aede56506bd2f0d/" type="text/javascript"></script>
</p> ]]></description>
		<pubDate>Tue, 10 Jul 2012 04:19:48 -0500</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/connecting-and-uploading-to-cloudfiles-rackspace-storage.html</guid>
</item><item>
		<title>JavaScript Patterns &amp; Titanium Mobile</title>
		<link>http://boydlee.com/blog/javascript-patterns-titanium-mobile.html</link>
		<description><![CDATA[ <p>Understanding good JavaScript pattern and practice is essential to ensuring that you write good Titanium Mobile apps. One of the best all round books I have read that goes a long way to explaining good JavaScript practices is <a href="http://www.amazon.co.uk/gp/product/0596806752/ref=as_li_tf_tl?ie=UTF8&tag=boydleecom07-21&linkCode=as2&camp=1634&creative=6738&creativeASIN=0596806752">JavaScript Patterns <img src="http://www.assoc-amazon.co.uk/e/ir?t=boydleecom07-21&l=as2&o=2&a=0596806752" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> by Stoyan Stefanov</a>. It's a moderately light read, weighing in at only around 200 pages, but there is no fluff here. It's straight to the point, there's tonnes of examples, and this will make you a better JS coder and a better Titanium Developer - period.</p>
<p>
<a href="http://www.amazon.co.uk/gp/product/0596806752/ref=as_li_tf_tl?ie=UTF8&tag=boydleecom07-21&linkCode=as2&camp=1634&creative=6738&creativeASIN=0596806752">Go and buy JavaScript Patterns now - you won't regret it. <img src="http://www.assoc-amazon.co.uk/e/ir?t=boydleecom07-21&l=as2&o=2&a=0596806752" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /></a></p>
<p>As suggested below, another must have JavaScript book is Douglas Crockford's <a href="http://www.amazon.co.uk/gp/product/0596517742/ref=as_li_tf_tl?ie=UTF8&tag=boydleecom07-21&linkCode=as2&camp=1634&creative=6738&creativeASIN=0596517742">JavaScript: The Good Parts</a><img src="http://www.assoc-amazon.co.uk/e/ir?t=boydleecom07-21&l=as2&o=2&a=0596517742" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />. I don't have this one personally (yet) but it's on my list and comes highly recommended.</p> ]]></description>
		<pubDate>Thu, 08 Mar 2012 12:33:08 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/blog/javascript-patterns-titanium-mobile.html</guid>
</item><item>
		<title>Appcelerator + Cocoafish - First Impressions</title>
		<link>http://boydlee.com/appcelerator-titanium/appcelerator-cocoafish-first-impressions.html</link>
		<description><![CDATA[ <p>In case you hadn't heard, <a href="http://www.cocoafish.com">Cocoafish</a> is an application "backend service" in the Cloud, and allows you to build your apps against their API's instead of having to go through the process of buildling your own and hosting them. It's a great idea, and one that has been done before by StackMob and others, but of course for a Titanium developer the most interesting aspect of Cocoafish is that <a href="http://developer.appcelerator.com/blog/2012/02/appcelerator-acquires-cocoafish.html">it was recently bought by Appcelerator</a>, who intends to build its API's smack-bang into the Titanium framework.</p>
<p>As someone who got an early invite and has built a client application on this framework already, I thought I'd give everyone a brief heads up of what to expect when Appcelerator rolls it out as "Ti.Cloud" sometime in March or April.</p>
<p>&nbsp;</p>
<p><strong>The Pros:</strong></p>
<ol>
<li><span style="color: #333333;">It's quick. That's quick to get setup, quick to build against, and quick to both query and return data. I'd estimate it's saved me about 10-15% of development time so far, and once the API's are built into Titanium directly and I'm more used to building against Cocoafish's "types", it could legitimately save me even more time.</span></li>
<li><span style="color: #333333;">It's nice and standardised... I have obviously used JavaScript to hook into it from Titanium mobile, but I've also written some PHP classes to interact and perform some routine tasks against my CF objects via CRON scripts. Writing the PHP API was a breeze.</span></li>
<li><span style="color: #333333;">I like the way all requests generally bring back the attached user object in question as well. For example, querying photos will always return the basic user information&nbsp;associated with those photos.</span></li>
<li><span style="color: #333333;">It's stable - even in Beta I have had zero problems with uptime or stability. Everything has worked. Nothing to complain about here.</span></li>
<li><span style="color: #333333;">There's no need to worry about hosting uptime, bandwidth, storage permissions, etc. For anyone who has ever managed a large web service system, that's a good thing.</span></li>
<li><span style="color: #333333;">No f**king around with photos. You upload them, they thumbnail, crop and store them in a variety of sizes.</span></li>
<li><span style="color: #333333;">I can imagine all the checkin and place data is very very useful, though I have personally had no need to use it yet.</span></li>
</ol>
<p>&nbsp;</p>
<p><strong>The Cons:</strong></p>
<ol>
<li><span style="color: #333333;">The backend data entry interface needs work. Specifically, I'm creating a lot of objects in my database to seed it, but each time you add an object entry you have to do it from scratch - if there was some kind of template mechanism or "duplicate" entry thing that'd be great. I have heard that this backend will be updated in the coming months anyway.</span></li>
<li><span style="color: #333333;">There needs to be an overall "administration" account login, whereby I can access CF via the API's and update ANY photo, ANY user account, etc. I have a need to update a custom data field for each of my users every day, based on some outside factors (we'll call the field "rank"). I currently can't do this against the user accounts via my scripts, it requires another object to be set in key-value pairs or custom objects.&nbsp;</span></li>
<li><span style="color: #333333;">Limiting of page sets. I realise this probably has more to do with the platform performance than anything, but I'd really rather not be limited to 100 records. By all means, default to a 100 max unless otherwise specified, but I have objects in CF that I want to update via some scripts on an Ad-Hoc basis and having to do that with paging is just a bit of a pain more than anything.</span></li>
<li><span style="font-style: normal; color: #333333;">No real "randomization" ordering. I'd like to be able to set an order parameter of "random", which can't really be done yet. The CF guys were helpful and pointed out a way I could kind of do it by assign a random number to an object and then doing <strong>$GTE</strong> where clause based on a random input, but that's not really random. It would be good to see a random order set for all API calls implemented.</span></li>
<li><span style="color: #333333;">Cross-object joins. Probably not something everyone would want, but if I have 2 custom objects I would like to fetch at the same time then a cross-object join API call would be great. For example let's say we have a user record, and that user has a role_id attached to it as a custom field. If I want to then fetch a set of custom objects called "role_permissions" and another called "role_details" (both of which have a role_id field) I would have to now make two separate calls and pull back the objects separately. It'd be great if you could do a request for multiple objects that join on the same custom field.</span></li>
</ol>
<p>&nbsp;</p>
<p>Have you used Cocoafish yet? I'd be interested in your opinions of it so far!</p> ]]></description>
		<pubDate>Mon, 05 Mar 2012 04:42:08 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/appcelerator-cocoafish-first-impressions.html</guid>
</item><item>
		<title>Survey on the future of Titanium Desktop</title>
		<link>http://boydlee.com/blog/survey-on-the-future-of-titanium-desktop.html</link>
		<description><![CDATA[ <p>Hi All,
Please take the following survey if you are interested in the future of Titanium Desktop. Doesn't matter if you're just a user or you wish to contribute, all opinions are welcome.
<br /><br />
The survey will be closing on the 1st of March, 2012.
<br /><br />
<a href="http://www.surveymonkey.com/s/X76TXG7">http://www.surveymonkey.com/s/X76TXG7</a>
<br /><br />
Thanks,<br />
Boydlee</p> ]]></description>
		<pubDate>Tue, 28 Feb 2012 03:25:03 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/blog/survey-on-the-future-of-titanium-desktop.html</guid>
</item><item>
		<title>NEW for Titanium SDK 1.8.1+  --- addRoute() Support in Android for Titanium</title>
		<link>http://boydlee.com/appcelerator-titanium/new-for-titanium-sdk-1.8.1-addroute-support-in-android-for-titanium.html</link>
		<description><![CDATA[ <p><strong>Update!</strong> Armindo has rebuilt this for SDK 1.8.2 for everyone. Again Armindo, we salute you! ;)</p>

<p>Since I first uploaded this back in September last year there have been lots and lots of people using the updated SDK and extending it for other platforms and to do other things.</p>
<p>Armindo recently made so great updates to the SDK and has taken it even further now and made some vast performance increases, so you can now use the addroute() stuff for Android in an updated 1.8.1 SDK branch and it'll be even quicker than before. Download details are below, as is an example implementation.</p>
<p><a href="http://c299242.r42.cf1.rackcdn.com/mobilesdk-1.8.1-osx-v2.zip">Download the Pre-Compiled 1.8.1 SDK for Mac OSX</a></p>
<p><a href="http://c299242.r42.cf1.rackcdn.com/mobilesdk-1.8.2-osx.zip">Download the Pre-Compiled 1.8.2 SDK for Mac OSX</a></p>
<p><a href="http://c299242.r42.cf1.rackcdn.com/map-v2.zip">Download the Java Source</a></p>
<p>Armindo has also kindly provided a full implementation example:</p><script type="text/javascript" src="http://snipt.net/embed/42803aa5fef55c4bb107ac14a494514c"></script>
<p>&nbsp;</p>
<p>Everyone needs to thank Armindo for his hard work and effort in making this even better!</p> ]]></description>
		<pubDate>Sun, 26 Feb 2012 08:05:49 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/new-for-titanium-sdk-1.8.1-addroute-support-in-android-for-titanium.html</guid>
</item><item>
		<title>Experiments with Arduino, PHP &amp; Appcelerator Titanium</title>
		<link>http://boydlee.com/appcelerator-titanium/experiments-with-arduino-php-appcelerator-titanium.html</link>
		<description><![CDATA[ <p>Here is a short couple of videos showing some experiments I made using simple Arduino circuits, which read in data over serial/usb via PHP (running MAMP locally). The PHP is executed via a Titanium app running on an iPod touch.</p>
<iframe src="http://player.vimeo.com/video/35841568?title=0&amp;byline=0&amp;portrait=0" width="500" height="350" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><p><a href="http://vimeo.com/35841568">Controlling A Basic Arduino Circuit Using An iPod & Titanium Mobile</a> from <a href="http://vimeo.com/user10213112">Boydlee Pollentine</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>This second video is the same concept but using a piezo element to play some basic music...it's pretty straight forward basic beginner stuff but if anyone wants the source code I'm happy to post it.</p>
<iframe src="http://player.vimeo.com/video/35850410?title=0&amp;byline=0&amp;portrait=0" width="500" height="350" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe><p><a href="http://vimeo.com/35850410">Appcelerator Titanium Keyboard & Arduino w/ Piezo Element</a> from <a href="http://vimeo.com/user10213112">Boydlee Pollentine</a> on <a href="http://vimeo.com">Vimeo</a>.</p> ]]></description>
		<pubDate>Mon, 30 Jan 2012 03:16:06 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/experiments-with-arduino-php-appcelerator-titanium.html</guid>
</item><item>
		<title>Appcelerator Titanium - Understanding the Namespace Pattern</title>
		<link>http://boydlee.com/appcelerator-titanium/appcelerator-titanium-understanding-the-namespace-pattern.html</link>
		<description><![CDATA[ <p>A couple of people have asked me to write an explanation on the namespace pattern in Titanium - otherwise known as "Tweetanium" - however for the purposes of this example I'm going to continue to call it the "Namespace" pattern as that is its proper name in Javascript. Appcelerator is also currently pushing the CommonJS pattern which is fine, however I find the namespace pattern simpler to understand and if you can implement this properly in your apps you'll go a long way to acheiving better performance, stability and memory management.</p>
<p>There are three main reasons for using this kind of pattern;</p>
<ol>
<li><span style="color: #333333;">It stops you polluting the global scope. It does this by creating one (ideally) global object that all the functionality for your app is added to,&nbsp;</span></li>
<li><span style="color: #333333;">It helps you avoid naming collisions or excessive variable prefixing (ie creating stacks of vars that look like item1, item1_1, __item1, etc),</span></li>
<li><span style="color: #333333;">Memory management - by putting everything into the same global object namespace, you avoid multiple Ti.include() statements, which are essentially including files over and over again unnecessarily. This is particularly prevelant when you start opening multiple window objects and have all your Ti.include() calls at the top; this rapidly leads to memory starvation and your app crashing.</span></li>
</ol>
<p>Let's create a basic example application that reads in a couple of RSS feeds and shows them on two separate views, which have 2 separate JS files, and use the same context.</p>
<p>Create a new project in Ti Studio, call it whatever you want (I've called mine <strong>NamespaceMethod</strong>). Delete the pre-set code out of the app.js file, and then create two new files called <strong>feed1.js</strong> and <strong>feed2.js</strong> respectively, and add these to your <strong>Resources</strong> folder.</p>
<script type="text/javascript" src="http://snipt.net/embed/a4ca29503b96756c940b612149a2f7ab"></script>
<br>
<p>Now let's create the TableView for feed1.js...</p>
<script type="text/javascript" src="http://snipt.net/embed/9da5f6bf1e342efa65e0c0a0de8a7155"></script>
<br>
<p>...and feed2.js and save both of those files:</p>
<script type="text/javascript" src="http://snipt.net/embed/75a37d849cda60456e685e76c6aeb529"></script>
<br/>
<p>Run your app in the simulator now and you'll (hopefully) see a screen that looks like this: <br/><img src="http://i.imgur.com/zXoXl.png"></p>

<br />
<p>Now let's fill those two TableViews with some data from 2 separate remote RSS feeds. We're going to define the feed URL's in <b>app.js</b>, then create a new javascript module file called <b>api.js</b> which is going to handle calling and returning our JSON data. Note here that you will probably want to structure your app a bit differently to this, but this example is more about showing you how to keep everything in that single namespace context.</p>

<p>Edit your <b>app.js</b> file by adding the following couple of lines to it, right after the <b>RSSAPP</b> declaration at the top. Note that I've used YQL to automatically do the XML Feed -> JSON conversion for us.</p>
<script type="text/javascript" src="http://snipt.net/embed/282dc5d32236b4ba2f20fe8ad6947c5e"></script>

<br/>
<p>Now create the <b>api.js</b> file and save it to your <b>Resources</b> directory. Type or paste in the following code. This simple module just accepts a URL and creates a HTTPRequest and passes back the JSON-formatted response data via the 'success' function, or throws any errors back via the 'error' function.</p>
<script type="text/javascript" src="http://snipt.net/embed/b144e0aa3628a7f97bf26fc53a317c2b"></script>

<br />
<p>Now we can call our "grabFeed" method from within the <strong>api.js</strong> file from anywhere in our app that utilizes the RSSAPP namespace. Let's populate the table1 object first - open up <b>feed1.js</b> and enter in the following code, just before the final line where you are adding the table1 object to the window. It should look like this:</p>
<script type="text/javascript" src="http://snipt.net/embed/0a881ddab94755b2ddff31d5977b28fb"></script>

<br/>
<p>Run your app in the simulator again and you should see that the first tableView (top of screen) is populated with RSS data from http://boydlee.com/feed.html. <br /><img src="http://i.imgur.com/csuyY.png"><br/> As we're on mobile devices and we want to avoid using too much bandwidth (not to mention HTTPRequest collisions) we're going to populate the second table only when the first table has finished its data request/population. Add the following function call to <b>feed1.js</b> directly after the line "<i>RSSAPP.table1.setData(rows);</i>"</p>
<script type="text/javascript" src="http://snipt.net/embed/e6791be07e5b579399c66049d672fe51"></script>

<br />
<p>And now let's update <b>feed2.js</b> so it looks like the following:</p>
<script type="text/javascript" src="http://snipt.net/embed/47a96971d4a245e52133ac9c9eb3fece"></script>

<br />
<p>Finally, run the app in your simulator. You should see <b>table1</b> populated by data from http://boydlee.com/feed.html, via YQL, and when it has finished you'll see the data from the Appcelerator Developer Blog feed populate <b>table2</b>. <br /><img src="http://i.imgur.com/XAmkA.png"></p>

<p>So what have we learnt from this sample? Firstly, you can see we no longer need to import the same file a hundred times - both the <b>feed1.js</b> and <b>feed2.js</b> files can access the webservice functions from <b>api.js</b> without multiple inclusions. This means less redundant code and less memory usage.<br /><br>You also now have a convenient global structure - properties and objects added to the RSSAPP namespace can be accessed from within any part of your app at any time. <br><Br>App-wide data can be instantiated once, and used over and over again. You can see this happening from the properties we created to hold the feed URL's - these were defined in the namespace from within app.js, and then accessed and passed around throughout our files. <br><br>Functions can now be defined as belonging to our namespace, meaning they can be executed from anywhere. You can see this happening when we call the <b>loadFeed2Data</b> function - it is declared within <b>feed2.js</b> but we're calling it directly from <b>feed1.js</b>, essentially removing the need for firing off multiple events or doing unnecessary Ti.include()'s.<br><br>Because all your windows and views exist in the same namespace they can be immediately instantiated - giving you faster app performance.</p>

<p>You can <a href="http://boydlee.com/cookbook/NamespaceMethod.zip">download the sample project here</a>, and please comment if there's any mistakes in it (I wrote this fairly quickly!).</p> 
 ]]></description>
		<pubDate>Thu, 22 Dec 2011 05:51:20 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/appcelerator-titanium/appcelerator-titanium-understanding-the-namespace-pattern.html</guid>
</item><item>
		<title>Appcelerator Titanium Cookbook - eBook Giveaway!</title>
		<link>http://boydlee.com/blog/appcelerator-titanium-cookbook-ebook-giveaway.html</link>
		<description><![CDATA[ <p>Enter the competition to win a free eBook copy of my "<a href="http://www.packtpub.com/appcelerator-titanium-mobile-applications-development-for-smartphone-iphone-android-cookbook/book">Appcelerator Titanium Cookbook</a>" from<a href="http://www.packtpub.com"> Packt Publishing</a>. Simply tell me, in 100 words or less, why Titanium is your favourite mobile platform. I will choose the winner who I consider has given the best answer and announce it on the blog on the 29th of December.</p>
<p>Entries will close on the 28th of December, 2011 at <strong>Midnight CST</strong> (6am on 29th December GMT if you live in the UK, Ireland or Western Europe).</p> ]]></description>
		<pubDate>Wed, 21 Dec 2011 06:22:10 -0600</pubDate>
		<guid isPermaLink="false">http://boydlee.com/blog/appcelerator-titanium-cookbook-ebook-giveaway.html</guid>
</item>	</channel>
</rss>