<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>posts by Jehiah Czebotar</title><link>http://jehiah.cz/</link><description /><lastBuildDate>Mon, 07 Jan 2013 11:00:00 GMT</lastBuildDate><generator>PyRSS2Gen-1.0.0</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><feedburner:info uri="jehiah" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://jehiah.cz/feed.rss" /><feedburner:emailServiceId>Jehiah</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Fjehiah.cz%2Ffeed.rss" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><item><title>2012 Personal Annual Report</title><link>http://jehiah.cz/a/one-two</link><description>&lt;p&gt;&lt;code&gt;
$ cat data/2012/* | graph &amp;gt; &lt;a href="http://jehiah.cz/one-two/"&gt;http://jehiah.cz/one-two&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/one-two</guid><pubDate>Mon, 07 Jan 2013 11:00:00 GMT</pubDate></item><item><title>2011 Personal Annual Report</title><link>http://jehiah.cz/a/one-one</link><description>&lt;p&gt;&lt;code&gt;
$ cat 2011 | summarize | graph &amp;gt; &lt;a href="http://jehiah.cz/one-one/"&gt;http://jehiah.cz/one-one&lt;/a&gt;
&lt;/code&gt;&lt;/p&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/one-one</guid><pubDate>Tue, 10 Jan 2012 11:30:00 GMT</pubDate></item><item><title>Auto-incrementing build numbers in Xcode</title><link>http://jehiah.cz/a/xcode-incrementing-build-numbers</link><description>&lt;p&gt;It's a pain to build project in Xcode only to find out later that you forgot to update the build number.&lt;/p&gt;
&lt;p&gt;I've used various techniques to accomplish this in the past, and I'm quite happy with this approach. Essentially, at build time, it uses &lt;a href="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man8/PlistBuddy.8.html"&gt;PlistBuddy&lt;/a&gt; (which i had never heard of before) to get the build number out of your &lt;code&gt;Info.plist&lt;/code&gt; file, update it, and re-set it in the &lt;code&gt;Info.plist&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Under each target you want to auto-increment the build number, at the bottom select &lt;code&gt;Add Build Phase&lt;/code&gt; and select &lt;code&gt;Add Run Script&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;In the contents of the script copy the source code from below, updating the correct path to your &lt;code&gt;Info.plist&lt;/code&gt; file.&lt;/p&gt;
&lt;script src="https://gist.github.com/1436598.js?file=increment_build_number.sh"&gt;&lt;/script&gt;

&lt;p&gt;Next, re-order the &lt;code&gt;Run Script&lt;/code&gt; phase so that it happens as the second step. You want to make sure that the post-incremented value is what is actually included in the application so you need to run this first.&lt;/p&gt;
&lt;img src="/static/blog/xcode_increment_build_number.png"&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/xcode-incrementing-build-numbers</guid><pubDate>Wed, 07 Dec 2011 10:30:00 GMT</pubDate></item><item><title>Enabling Transliteration for Amharic in Gmail</title><link>http://jehiah.cz/a/gmail-transliteration-amharic</link><description>&lt;p&gt;Transliteration is a way to type phonetic english to spell out sounds of words in a foreign language, and have the english characters translated into the correct characters from another language.&lt;/p&gt;
&lt;p&gt;Google has great &lt;a href="https://mail.google.com/support/bin/answer.py?answer=139576"&gt;transliteration support in gmail&lt;/a&gt; and it's really easy to turn on.&lt;/p&gt;
&lt;p&gt;under &lt;code&gt;Mail Settings&lt;/code&gt;, in &lt;code&gt;General&lt;/code&gt; the top grouping is &lt;code&gt;Language&lt;/code&gt;. Select the &lt;code&gt;Show All language options&lt;/code&gt; option, which will reveal the transliteration settings&lt;/p&gt;
&lt;img src="/static/blog/gmail_transliteration_1.png"&gt;

&lt;p&gt;After doing that you will have a checkbox to enable transliteration&lt;/p&gt;
&lt;img src="/static/blog/gmail_transliteration_2.png"&gt;

&lt;p&gt;Now when composing new messages in rich-text format, there is an icon to turn on transliteration.&lt;/p&gt;
&lt;img src="/static/blog/gmail_transliteration_3.png"&gt;

&lt;p&gt;You will need to have fonts installed that show amharic characters. This &lt;a href="http://en.wikipedia.org/wiki/Help:Multilingual_support_(Ethiopic)"&gt;Wikipedia Article&lt;/a&gt; gives advise for installing Ethiopic fonts. I use &lt;a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;amp;id=AbyssinicaSIL"&gt;Abyssinica SIL&lt;/a&gt;.&lt;/p&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/gmail-transliteration-amharic</guid><pubDate>Tue, 06 Dec 2011 10:30:00 GMT</pubDate></item><item><title>Using Chameleon UIKit to build an iOS app for OSX</title><link>http://jehiah.cz/a/using-chameleon-uikit</link><description>&lt;p&gt;UIKit is an amazing piece of work, and it lowers the bar for iOS applications tremendously, which is attested to by the number of applications on the iOS App Store.&lt;/p&gt;
&lt;p&gt;Chameleon (&lt;a href="http://chameleonproject.org/"&gt;http://chameleonproject.org/&lt;/a&gt;) is a port of Apple's UIKit to the Mac OS X. This means it's designed as a drop in replacement framework which you can build against for OSX Applications. It's been developed and used for &lt;a href="http://itunes.apple.com/us/app/twitterrific-for-twitter/id414957465?mt=12"&gt;Twitterrific&lt;/a&gt; by The Iconfactory, but the source is up on github &lt;a href="https://github.com/BigZaphod/Chameleon"&gt;https://github.com/BigZaphod/Chameleon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since then a number of other people have contributed to it helping to finish features. One challenge that I've had in getting started with it, is simply not having as many references as I would for iOS development.&lt;/p&gt;
&lt;p&gt;This is meant to be a guide to get up and running with a simple UIViewController application on OSX.&lt;/p&gt;
&lt;p&gt;First get a copy of Chameleon&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd projects
git clone git://github.com/BigZaphod/Chameleon.git
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next start a new application, we will call it &lt;code&gt;TestUIViewController&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Open up Xcode, select &lt;code&gt;File&lt;/code&gt;→&lt;code&gt;New&lt;/code&gt;→&lt;code&gt;New Project&lt;/code&gt;. Then under &lt;code&gt;Mac OS X&lt;/code&gt; select &lt;code&gt;Cocoa Application&lt;/code&gt;. (I've un-checked ARC counting). When prompted for a directory to create the new project in, select the &lt;code&gt;projects&lt;/code&gt; directory above.&lt;/p&gt;
&lt;p&gt;From finder drag &lt;code&gt;UIKit.xcodeproj&lt;/code&gt; from &lt;code&gt;projects/Chameleon/UIKit&lt;/code&gt; directly inside of the &lt;code&gt;TestUIViewController&lt;/code&gt; project&lt;/p&gt;
&lt;img src="/static/blog/chameleon_1.png"&gt;

&lt;p&gt;Next add &lt;code&gt;UIKit.framework&lt;/code&gt; as a linked framework under &lt;code&gt;TestUIViewController&lt;/code&gt; &lt;code&gt;Summary&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="/static/blog/chameleon_3.png"&gt; &lt;img src="/static/blog/chameleon_2.png"&gt;&lt;/p&gt;
&lt;p&gt;Execution for an OSX application typically starts at the &lt;code&gt;ApplicationDelegate.m&lt;/code&gt; We need to add a &lt;code&gt;ChameleonAppDelegate.m&lt;/code&gt; which will load the UIKit components.&lt;/p&gt;
&lt;p&gt;in AppDelegate.h should end up like this&lt;/p&gt;
&lt;script src="https://gist.github.com/1432270.js?file=AppDelegate.h"&gt;&lt;/script&gt;

&lt;p&gt;in AppDelegate.m should look like this&lt;/p&gt;
&lt;script src="https://gist.github.com/1432270.js?file=AppDelegate.m"&gt;&lt;/script&gt;

&lt;p&gt;Add a ChameleonAppDelegate.h&lt;/p&gt;
&lt;script src="https://gist.github.com/1432270.js?file=ChameleonAppDelegate.h"&gt;&lt;/script&gt;

&lt;p&gt;Add ChameleonAppDelegate.m&lt;/p&gt;
&lt;script src="https://gist.github.com/1432270.js?file=ChameleonAppDelegate.m"&gt;&lt;/script&gt;

&lt;p&gt;open up MainMenu.xib and add a &lt;code&gt;CustomView&lt;/code&gt; inside of the existing &lt;code&gt;View&lt;/code&gt;, and change the class for it to &lt;code&gt;UIKitView&lt;/code&gt;. Connect the chameleonNSView outlet from &lt;code&gt;App Delegate&lt;/code&gt; to the UIKitView instance just added.&lt;/p&gt;
&lt;img src="/static/blog/chameleon_4.png"&gt;

&lt;p&gt;Create a TestUIViewController Class. &lt;code&gt;File&lt;/code&gt;→&lt;code&gt;New&lt;/code&gt;→&lt;code&gt;New File&lt;/code&gt; and select &lt;code&gt;iOS&lt;/code&gt;→&lt;code&gt;Cocoa Touch&lt;/code&gt;→&lt;code&gt;UIViewController Subclass&lt;/code&gt; named TestUIViewController.&lt;/p&gt;
&lt;p&gt;At this point in time, you can begin to write "normal" iOS code to load UI elements in &lt;code&gt;viewDidLoad&lt;/code&gt;. Something simple might be to just change the window background color &lt;code&gt;self.view.backgroundColor = [UIColor lightGrayColor]&lt;/code&gt;, or allocating a &lt;code&gt;UIButton&lt;/code&gt; and adding it to the view with &lt;code&gt;[self.view addSubview:button]&lt;/code&gt;&lt;/p&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/using-chameleon-uikit</guid><pubDate>Mon, 05 Dec 2011 10:30:00 GMT</pubDate></item><item><title>Mini iOS Developer Guide</title><link>http://jehiah.cz/a/mini-ios-developer-guide</link><description>&lt;p&gt;As I've been learning &lt;a href="en.wikipedia.org/wiki/Amharic"&gt;Amharic&lt;/a&gt; I've been simultaneously learning
ObjectiveC and writing my own language-learning application &lt;a href="http://www.amharicpocketguide.com/"&gt;Amharic Pocket Guide&lt;/a&gt;.
While both are going well, and I wanted to share a few things I've found helpful in iOS Development.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Metrics&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If you have seen my &lt;a href="/one-oh/"&gt;Personal Annual Report&lt;/a&gt; then it's no surprise that I like data. 
When it comes to iPhone Applications, I rely on &lt;a href="http://dev.flurry.com/"&gt;Flurry&lt;/a&gt; to give me 
information about session length, and how certain application features are being used. Knowing 
how long people are using the "Quiz" in Amharic Pocket Guide has been helpful in learning how to improve it. Flurry
also proves it's weight in gold when it comes to tracking down crashes or other unexpected 
events in your application. &lt;/p&gt;
&lt;p&gt;While iTunes Connect has improved over the years (and their mobile site has as well), 
the best source for sales metrics is &lt;a href="http://appannie.com/"&gt;App Annie&lt;/a&gt;. They will download your
sales reports for you each day, and track app store rankings and reviews, which is more information
than apple provides.&lt;/p&gt;
&lt;p&gt;The one thing that &lt;a href="http://itunes.com/apps/iTunesConnectMobile"&gt;iTunes Connect Mobile&lt;/a&gt; is perfect
for is for getting push notifications on application state changes. There is nothing better than
knowing the exact instant your application is Approved, and there is nothing worse
than knowing the exact instant your application is Rejected.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every developer has a love/hate relationship with AppStore Reviews. Developers love them because
good reviews can really promote an application, unfortunately misguided reviews can hurt
an application far more, and there is no direct way for a developer to respond. If you don't
have a good channel for users to contact you, then user issues end up in AppStore Reviews.&lt;/p&gt;
&lt;p&gt;I've found the following approach good at helping to solve this. &lt;/p&gt;
&lt;p&gt;1) Make sure there is a prominent
"Report a Problem" or "Contact Support" button in the application. Typically I add a button that
just pre-populates an email to a support address. This small detail can head off users that 
are confused or would otherwise need to vent in an AppStore Review.&lt;/p&gt;
&lt;p&gt;2) Use a library like &lt;a href="https://github.com/demosthenese/iRate"&gt;iRate&lt;/a&gt; to help prompt regular
users to write a review. It's not worth pestering happy users, but you should encourage them
to write a review.&lt;/p&gt;
&lt;p&gt;3) Make an application website, link it from the App Store, and from inside the app, and have a way there
to contact you.&lt;/p&gt;
&lt;p&gt;I mentioned above that App Annie does a good job of pulling in reviews, but if you need something
more comprehensive, there are &lt;a href="https://github.com/jeremywohl/iphone-scripts/blob/master/appstore_reviews"&gt;scripts&lt;/a&gt;
available to scrape the reviews yourself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cracked Apps&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It's a fact of life (for now) that applications will be cracked and installed for free on
jailbroken devices. One way to treat this is as an extended trial. I've seen it happen that
if you can shut off old versions after releasing a new one, and you prompt users to update
that many will (almost 20%) will just purchase the new version from the AppStore because
they are not able to upgrade. &lt;a href="https://github.com/demosthenese/iVersion"&gt;iVersion&lt;/a&gt; is a
library that can help with the code to check if a newer version is available, and prompt the user
to update.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Useful Code&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are a bunch of things I find myself using regularly when doing ObjectiveC. I no longer know how I found some of them
but here are the things I use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ccgus/fmdb"&gt;fmdb&lt;/a&gt; - a sqlite wrapper&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stig.github.com/json-framework/"&gt;SBJson&lt;/a&gt; - yes iOS5 finally supports json natively&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/google-toolbox-for-mac/"&gt;Google Toolbox for Mac&lt;/a&gt; - has some good generic methods like &lt;code&gt;(NSString*)gtm_stringByEscapingForURLArgument&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.catamount.com/forums/viewtopic.php?f=21&amp;amp;t=425"&gt;UIApplication-Network.h&lt;/a&gt; - network availability wrapper&lt;/li&gt;
&lt;li&gt;&lt;a href="http://glyphish.com/"&gt;Glyphish&lt;/a&gt; - great icons&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.freeverse.com/mac/product/?id=6020"&gt;lineform&lt;/a&gt; - for making vector graphics&lt;/li&gt;
&lt;/ul&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/mini-ios-developer-guide</guid><pubDate>Tue, 16 Aug 2011 10:30:00 GMT</pubDate></item><item><title>LRU Cache in C with uthash</title><link>http://jehiah.cz/a/uthash</link><description>&lt;p&gt;One of the appeals to higher level languages is that hash tables are easy to use. While they might be easy to use, they often come with significant costs&lt;/p&gt;
&lt;p&gt;&lt;a href="http://uthash.sourceforge.net/"&gt;uthash&lt;/a&gt; is a well designed and well implemented hash table library written in 2006 by Troy D Hanson (@troydhanson) that brings the ease of hash tables to the speed of C.&lt;/p&gt;
&lt;p&gt;I've done a few things with it at &lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt; and I'm excited about how easy it is to use. One good example is how to code an in-memory LRU cache in less than 50 lines of C code&lt;/p&gt;
&lt;script src="https://gist.github.com/900846.js?file=lru_cache.c"&gt;&lt;/script&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/uthash</guid><pubDate>Mon, 04 Apr 2011 14:30:00 GMT</pubDate></item><item><title>Data Processing @ bit.ly</title><link>http://jehiah.cz/a/data-processing-at-bitly</link><description>&lt;p&gt;At &lt;a href="http://posscon.org/"&gt;POSSCON 2011&lt;/a&gt; I gave a talk titled "Data Processing @ bit.ly" in which I shared about some of the open source tools we have written at bit.ly, and the approaches we use in data processing.&lt;/p&gt;
&lt;p&gt;Much of this talk covers 3 core applications we have developed @bitly: sortdb, simplequeue, and pubsub; all of which can be found on github &lt;a href="http://github.com/bitly/simplehttp"&gt;http://github.com/bitly/simplehttp&lt;/a&gt;&lt;/p&gt;
&lt;div style="width:425px;margin:0 auto;" id="__ss_7387488"&gt;
&lt;object id="__sse7387488" width="425" height="355"&gt; &lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=possconpresentationjehiahv3-110325094756-phpapp02&amp;stripped_title=data-processing-bitly-posscon-2011&amp;userName=jehiah" /&gt; 
&lt;param name="allowFullScreen" value="true"/&gt; 
&lt;param name="allowScriptAccess" value="always"/&gt; 
&lt;embed name="__sse7387488" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=possconpresentationjehiahv3-110325094756-phpapp02&amp;stripped_title=data-processing-bitly-posscon-2011&amp;userName=jehiah" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt; &lt;/object&gt; 
&lt;/div&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/data-processing-at-bitly</guid><pubDate>Fri, 25 Mar 2011 13:00:00 GMT</pubDate></item><item><title>Application Settings</title><link>http://jehiah.cz/a/application-settings</link><description>&lt;p&gt;Here is a sneak peak into the application settings file format we use at &lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The idea behind this settings file format, is that it should completely incapsulate all of the "where" information. The information about "where" an application is running, "where" data is stored, and "where" it connects to for remote resources should only exist in this file. (it can also be an effective spot to put default values that are set once and used consistently for each environment.)&lt;/p&gt;
&lt;p&gt;One popular approach to settings files is to make a single config file, and run applications with &lt;code&gt;--config-file&lt;/code&gt; flags pointed to different files depending on the location. The issue I have with that approach is that time and time again when new features are added, new settings only get added to the development config file, and not the production config file. I have found that using a &lt;code&gt;--environment&lt;/code&gt; flag and putting the settings for &lt;em&gt;all&lt;/em&gt; environments in a single file resolves that issue.&lt;/p&gt;
&lt;p&gt;Specifying settings in a python file gives some useful flexibility as well. For example, we use a &lt;code&gt;randomize&lt;/code&gt; wrapper that at returns a random setting each time it is requested. This makes for a very easy, simple and efficient way to distribute load across several remote endpoints.&lt;/p&gt;
&lt;script src="https://gist.github.com/595574.js?file=settings.py"&gt;&lt;/script&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/application-settings</guid><pubDate>Tue, 08 Mar 2011 13:05:00 GMT</pubDate></item><item><title>Shell Script Args Parsing</title><link>http://jehiah.cz/a/shell_script_args_parsing</link><description>&lt;p&gt;At &lt;a href="http://bit.ly/"&gt;bit.ly&lt;/a&gt; we find that having a good way to specify command line arguments goes a long way to writing self-documenting code. We use &lt;a href="https://github.com/facebook/tornado/blob/master/tornado/options.py"&gt;tornado.options&lt;/a&gt; for our python scripts because it helps simplify the way command line arguments are specified. &lt;/p&gt;
&lt;p&gt;We realized there was a need to do something similar with our shell scripts that we use to automate system tasks, and @lintzston helped come up with this pattern which is awesome for it's simplicity, and how clean shell script the code reads. (if you have done any shell scripting, you know that readable shell scripts are elusive.)&lt;/p&gt;
&lt;script src="https://gist.github.com/855086.js?file=simple_args_parsing.sh"&gt;&lt;/script&gt;</description><author>jehiah@gmail.com (Jehiah Czebotar)</author><guid isPermaLink="true">http://jehiah.cz/a/shell_script_args_parsing</guid><pubDate>Fri, 04 Mar 2011 12:18:00 GMT</pubDate></item></channel></rss>
