<?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>Obvious Ideas &#187; Web Development</title>
	<atom:link href="http://www.arikfr.com/blog/category/web-development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.arikfr.com/blog</link>
	<description>From the desk of a Software Developer</description>
	<lastBuildDate>Mon, 05 Sep 2011 08:05:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>How To Write Class Methods in CoffeScript</title>
		<link>http://www.arikfr.com/blog/how-to-write-class-methods-in-coffescript.html</link>
		<comments>http://www.arikfr.com/blog/how-to-write-class-methods-in-coffescript.html#comments</comments>
		<pubDate>Sun, 10 Jul 2011 10:03:03 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CoffeeScript]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/?p=144</guid>
		<description><![CDATA[I recently started writing my client side code in CoffeeScript. While CoffeeScript (and migrating to it) deservers a post of its own, I wanted to share something quick and simple I learned today, which is how to write class methods: &#8230; <a href="http://www.arikfr.com/blog/how-to-write-class-methods-in-coffescript.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently started writing my client side code in <a href="http://jashkenas.github.com/coffee-script/" title="CoffeeScript Project Homepage">CoffeeScript</a>. While CoffeeScript (and migrating to it) deservers a post of its own, I wanted to share something quick and simple I learned today, which is how to write class methods:</p>
<p><script src="https://gist.github.com/1074428.js?file=class_methods.coffee"></script></p>
<p>In this example, <em>stripTags</em> is class method of the <em>Utils</em> class.<br />
It took me some googling to find it, so I thought it&#8217;s worth sharing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/how-to-write-class-methods-in-coffescript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Mixpanel API In Google App Engine Applications (Python)</title>
		<link>http://www.arikfr.com/blog/using-mixpanel-api-in-google-app-engine-applications-python.html</link>
		<comments>http://www.arikfr.com/blog/using-mixpanel-api-in-google-app-engine-applications-python.html#comments</comments>
		<pubDate>Mon, 14 Dec 2009 17:21:53 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[gist]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[mixpanel]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[Snippet]]></category>
		<category><![CDATA[tracking]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/?p=106</guid>
		<description><![CDATA[We started using MixPanel to get realtime statistics on user engagement in our application. We&#8217;ve been using MixPanel before for funnel tracking, but you can&#8217;t really appreciate their service until you start using their event tracking. It is truly realtime &#8230; <a href="http://www.arikfr.com/blog/using-mixpanel-api-in-google-app-engine-applications-python.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://mixpanel.com/site_media/images/splash/illustration.png" alt="" /></p>
<p>We started using <a href="http://mixpanel.com/">MixPanel</a> to get realtime statistics on user engagement in our application. We&#8217;ve been using MixPanel before for <a title="Funnel analysis with Mixpanel" href="http://blog.mixpanel.com/funnel-analysis-with-mixpanel">funnel tracking</a>, but you can&#8217;t really appreciate their service until you start using their event tracking. It is truly realtime (as advertised) &#8211; the second the user performs an action on your application, you see it on your dashboard.</p>
<p>Besides the realtime reporting what I really like about MixPanel is the fact that they allow easily reporting from your backend and not only from frontend/Javascript (as opposed to Google Analytics).</p>
<p>Within <a href="http://mixpanel.com/api/docs/walkthrough/">their documentation</a> they have code samples in many languages, including Python. But their Python sample requires ability to start new processes on the server you&#8217;re running &#8211; something not possible on App Engine. Therefore I changed it to use URLFetch in RPC mode (so that calls to Mixpanel won&#8217;t block the call):</p>
<p><script src="http://gist.github.com/256155.js?file=mixpanel.py"></script></p>
<p>It could be re-factored more, like allowing setting the project token outside the function call, but that I will leave for you to do <img src='http://www.arikfr.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (and if you do, please share with us)</p>
<p><strong><em>Arik</em></strong></p>
<p><script src="http://www.reddit.com/r/AppEngine/button.js?t=3" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/using-mixpanel-api-in-google-app-engine-applications-python.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>App Engine: Mapping Entities Using Deferred Tasks</title>
		<link>http://www.arikfr.com/blog/app-engine-mapping-entities-using-deferred-tasks.html</link>
		<comments>http://www.arikfr.com/blog/app-engine-mapping-entities-using-deferred-tasks.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 18:57:28 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[app engine]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[computing]]></category>
		<category><![CDATA[deferred]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Nick Johnson]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[sample]]></category>
		<category><![CDATA[task queues]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/?p=101</guid>
		<description><![CDATA[I recently started using deferred tasks in my App Engine application. I&#8217;m using them mainly for two things: splitting user requests into two pieces &#8211; one that being done immediately and one that being done in the background, to speed &#8230; <a href="http://www.arikfr.com/blog/app-engine-mapping-entities-using-deferred-tasks.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently started using deferred tasks in my <a href="http://code.google.com/appengine">App Engine</a> application. I&#8217;m using them mainly for two things:</p>
<ol>
<li>splitting user requests into two pieces &#8211; one that being done immediately and one that being done in the background, to speed up the response time.</li>
<li>mapping (iterating over) all my entities to calculate various statistics.</li>
</ol>
<p>I won&#8217;t provide here details on how to use deferred tasks, because this is described in detail in a <a title="Background work with the deferred library" href="http://code.google.com/appengine/articles/deferred.html">great article by Nick Johnson</a>, which I highly recommend reading. One thing I do want to share from my experience, is my implementation of the Mapper base class:</p>
<p><script src="http://gist.github.com/250932.js?file=mapper.py"></script></p>
<p>This implementation is taken from Nick&#8217;s article mentioned above, but I made some changes to it. The first change is giving subclasses the ability to set the property to order the entities by. I needed this, because I found out that when your entities have custom key names ordering by key breaks for some reason.</p>
<p>The other change is re-factoring the way the next batch starts. It seems to me that in the sample provided in the article there&#8217;s an error in the indentation, resulting in the code not doing batching properly and can even break in some situations. In my version every task run maps only one batch (or less). This is sub optimal in terms of # of tasks it takes to map all your entities, but as long as you don&#8217;t have really a lot of entities this is not such an issue.</p>
<p>I really would love to hear others&#8217; comments no my changes and about how you use deferred tasks or map your entities.</p>
<p><strong><em>Arik</em></strong></p>
<p><script type="text/javascript" src="http://www.reddit.com/r/AppEngine/button.js?t=3"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/app-engine-mapping-entities-using-deferred-tasks.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Simple Productivity Tip For Facebook Developers</title>
		<link>http://www.arikfr.com/blog/simple-productivity-tip-for-facebook-developers.html</link>
		<comments>http://www.arikfr.com/blog/simple-productivity-tip-for-facebook-developers.html#comments</comments>
		<pubDate>Sat, 28 Nov 2009 14:58:14 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[sandbox]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/?p=97</guid>
		<description><![CDATA[I&#8217;ve been doing quite a lot of Facebook development in the last few months. At first I was using my own account to do most of the testings for the apps I was working on. I always have (at least) &#8230; <a href="http://www.arikfr.com/blog/simple-productivity-tip-for-facebook-developers.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/booleansplit/3972319375/"><img class="alignnone" title="Image by Robert S. Donovan" src="http://farm3.static.flickr.com/2667/3972319375_34f12a4f11_m.jpg" alt="" width="240" height="161" /></a></p>
<p>I&#8217;ve been doing quite a lot of Facebook development in the last few months. At first I was using my own account to do most of the testings for the apps I was working on. I always have (at least) two versions of the app &#8211; production and development. The development version is marked as sandboxed, so any action I do in it (including posting to the newsfeed) isn&#8217;t shown to my friends.</p>
<p>At first I felt that this is enough, and didn&#8217;t feel the need for a test account. But after some time I realized that while developing, anytime I get to my profile or newsfeed, I get distracted by my friends&#8217; posts. So I started using another account to do the testings. This way, whenever I get to the profile or newsfeed I practically see nothing there that can distract me from what I&#8217;m working on.</p>
<p>Another benefit of using a test account is that whenever you test something on the production (un-sandboxed) version of your app and need publish a lot to your newsfeed, you don&#8217;t spam your friends (or reveal upcoming features).</p>
<p>Of course, we can rely on our self discipline to avoid this distractions, but who are we kidding? <img src='http://www.arikfr.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><em>Arik</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/simple-productivity-tip-for-facebook-developers.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Launching Lite Apps – the fastest way to tweet or email from the iPhone</title>
		<link>http://www.arikfr.com/blog/liteapps-released.html</link>
		<comments>http://www.arikfr.com/blog/liteapps-released.html#comments</comments>
		<pubDate>Sun, 11 Oct 2009 23:50:27 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[fast]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[lite]]></category>
		<category><![CDATA[liteapps]]></category>
		<category><![CDATA[litemail]]></category>
		<category><![CDATA[litetweet]]></category>
		<category><![CDATA[mail.app]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[quick]]></category>
		<category><![CDATA[twii]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/launching-lite-apps-%e2%80%93-the-fastest-way-to-tweet-or-email-from-the-iphone.html</guid>
		<description><![CDATA[Ever since I got my iPhone, there was this thing that was really frustrating for me &#8211; the time it takes to write a single tweet or compose a single email. While the Mail.app on the iPhone is quite fast, &#8230; <a href="http://www.arikfr.com/blog/liteapps-released.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;">Ever since I got my iPhone, there was this thing that was really frustrating for me &#8211; the time it takes to write a single tweet or compose a single email. While the Mail.app on the iPhone is quite fast, it sometimes annoys me that if I just want to send a quick email I have to go through the inbox and it checks for new mail in the process.</span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;">I guess part of the problem is the fact that I&#8217;m still using the first generation iPhone, which is slow. But considering the fact that I&#8217;m not alone with an old iPhone, I thought that a solution should be available or made. For the tweeting part of the problem I found Twii &#8211; a simple app whose all purpose is to compose tweets. It&#8217;s an OK solution, but I don&#8217;t like that it doesn&#8217;t use OAuth and my tweets appear as they were tweeted from &#8220;API&#8221; (usually a sign for spammers).</span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;">So I decided that if there&#8217;s no reasonable solution for the problem, I should create one. As I already wanted to try the iPhone SDK, so this two small apps seemed to be good candidates for a first project. I started poking around with XCode and Objective-C, but never had the time to really build this apps. Besides the lack of time issue, the fact that I needed to wait for the whole AppStore approval process was a big turn off.</span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;">And then it hit me &#8211; why should I waste my time on ObjectiveC and the AppStore, when what I want to create is so simple? I did a few experiments and realized that it is possible to create a good user experience with web apps on the iPhone (HTML 5 FTW!). So instead of poking around with XCode and Objective-C, I started poking around with <a style="color: #bc7134; text-decoration: none; padding: 0px; margin: 0px;" href="http://jqtouch.com/" target="_blank">jQTouch</a>.</span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;">Today I finally had the time to wrap everything up in a reasonable package. Now after few hours of coding and mainly designing (and without waiting for the AppStore gods to approve my apps), <strong>I invite you to try out my first </strong><a style="color: #bc7134; text-decoration: none; padding: 0px; margin: 0px;" href="http://liteappshome.com/" target="_blank"><strong>LiteApps &#8211; LiteTweet and LiteMail</strong></a>.</span></span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; padding: 0px; margin: 0px;"><span style="line-height: 19px; padding: 0px; margin: 0px;">This is a very preliminary release of the apps, and I really look forward for your feedback and ideas on this. There&#8217;s a lot to improve &#8211; mainly I want to improve the startup time for this apps, as this is the most important feature.</span></span></span></span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; font-size: 13px; line-height: 19px; padding: 0px; margin: 0px;"><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; padding: 0px; margin: 0px;"><span style="line-height: 19px; padding: 0px; margin: 0px;"><br />
</span></span></span></span></span></span></span></span></div>
<div><span style="font-family: 'Lucida Grande', Verdana, Arial, 'Bitstream Vera Sans', sans-serif; padding: 0px; margin: 0px;"><span style="line-height: 19px; padding: 0px; margin: 0px;">Please be tolerant to bugs, security issues and other bizzare stuff. Also, please report them to me <img src='http://www.arikfr.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I&#8217;m available on <a style="color: #bc7134; text-decoration: none; padding: 0px; margin: 0px;" href="http://twitter.com/arikfr" target="_blank">Twitter</a> or <a style="color: #bc7134; text-decoration: none; padding: 0px; margin: 0px;" href="mailto:arik@liteappshome.com" target="_blank">email</a>.</span></span></div>
<p><img src="http://posterous.com/getfile/files.posterous.com/arikfr/gcFEPruXyF7Ac0lg9R1wCl8TLCwCKcmNln9WNcIEVVAhbnJl9KZroYeejvQy/photo_3.jpg" alt="" width="320" height="480" /> <img src="http://posterous.com/getfile/files.posterous.com/arikfr/aceerT4NFP6XsnoB5cYHKz7q59pqoG289SXWXQazCOhqEyuveEd2amsqVpDo/photo.jpg" alt="" width="320" height="480" /></p>
<div><a href="http://arikfr.posterous.com/launching-lite-apps-the-fastest-way-to-tweet">See and download the full gallery on posterous</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/liteapps-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shortening URLs using bit.ly API and PHP+Zend Framework</title>
		<link>http://www.arikfr.com/blog/shortening-urls-using-bitly-api-and-phpzend-framework.html</link>
		<comments>http://www.arikfr.com/blog/shortening-urls-using-bitly-api-and-phpzend-framework.html#comments</comments>
		<pubDate>Fri, 24 Apr 2009 07:05:05 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[bit.ly]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[tinyurl]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Http_Client]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/shortening-urls-using-bitly-api-and-phpzend-framework.html</guid>
		<description><![CDATA[Recently for Topify I needed to shorten some long urls (our invite links) and my obvious choice of shortener was bit.ly. I tried looking for PHP wrapper for their API, but only found this project which was way more than &#8230; <a href="http://www.arikfr.com/blog/shortening-urls-using-bitly-api-and-phpzend-framework.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently for <a href="http://topify.com/">Topify</a> I needed to shorten some long urls (our invite links) and my obvious choice of shortener was <a href="http://bit.ly/">bit.ly</a>. I tried looking for PHP wrapper for their API, but only found <a href="http://code.google.com/p/bitly/">this project</a> which was way more than I needed. So I&#8217;ve decided to write my own simple client using the <a href="http://framework.zend.com/manual/en/zend.http.html">Zend Framework HTTP Client</a>. Here&#8217;s the result:</p>
<pre line="1"><span style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">function </span><span style="color: #0000BB">bitly_shorten </span><span style="color: #007700">(</span><span style="color: #0000BB">$url</span><span style="color: #007700">) {
    </span><span style="color: #0000BB">$client </span><span style="color: #007700">= new </span><span style="color: #0000BB">Zend_Http_Client</span><span style="color: #007700">(</span><span style="color: #DD0000">'http://api.bit.ly/shorten'</span><span style="color: #007700">);
    </span><span style="color: #0000BB">$client</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">setParameterGet</span><span style="color: #007700">(array(
        </span><span style="color: #DD0000">'version' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'2.0.1'</span><span style="color: #007700">,
        </span><span style="color: #DD0000">'longUrl' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$url</span><span style="color: #007700">,
        </span><span style="color: #DD0000">'login' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'arikfr'</span><span style="color: #007700">,
        </span><span style="color: #DD0000">'apiKey' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'R_03feadf27c1c7c1a1ac3c3e7d6d41a27'
    </span><span style="color: #007700">));    

    </span><span style="color: #0000BB">$response </span><span style="color: #007700">= </span><span style="color: #0000BB">$client</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">request</span><span style="color: #007700">();
    if (</span><span style="color: #0000BB">$response</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">isSuccessful</span><span style="color: #007700">() ) {
        </span><span style="color: #0000BB">$phpNative </span><span style="color: #007700">= </span><span style="color: #0000BB">Zend_Json</span><span style="color: #007700">::</span><span style="color: #0000BB">decode</span><span style="color: #007700">(</span><span style="color: #0000BB">$response</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getBody</span><span style="color: #007700">());
        if (</span><span style="color: #0000BB">$phpNative</span><span style="color: #007700">[</span><span style="color: #DD0000">'errorCode'</span><span style="color: #007700">]==</span><span style="color: #0000BB">0</span><span style="color: #007700">) {
            return </span><span style="color: #0000BB">$phpNative</span><span style="color: #007700">[</span><span style="color: #DD0000">'results'</span><span style="color: #007700">][</span><span style="color: #0000BB">$url</span><span style="color: #007700">][</span><span style="color: #DD0000">'shortUrl'</span><span style="color: #007700">];
        }
    }
    return </span><span style="color: #DD0000">""</span><span style="color: #007700">;
}
</span><span style="color: #0000BB">?&gt;</span></span></pre>
<p>As I said &#8211; it&#8217;s simple. There&#8217;s a lot more to do with it, but it serves the purpose I needed it for and I think it might be useful for others who only want to shorten some urls. If you need more than that, you might want to take a look at the above mentioned project.</p>
<p><em><strong>Arik</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/shortening-urls-using-bitly-api-and-phpzend-framework.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Make the Unread Items in Google Reader Disappear</title>
		<link>http://www.arikfr.com/blog/make-the-unread-items-in-google-reader-disappear.html</link>
		<comments>http://www.arikfr.com/blog/make-the-unread-items-in-google-reader-disappear.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 06:39:00 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Productivity]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[bokokmarklet]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[Greasemonkey]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Unread Items]]></category>
		<category><![CDATA[Userscripts.org]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/make-the-unread-items-in-google-reader-disappear.html</guid>
		<description><![CDATA[The Unread Items counter in Google Reader is putting you under pressure? Can&#8217;t sleep because of it? Well, you don&#8217;t have to see it any more. I&#8217;ve hacked a simple Greasemonkey script that hides the unread items counter in Google &#8230; <a href="http://www.arikfr.com/blog/make-the-unread-items-in-google-reader-disappear.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3279/2675800365_ba22109a66.jpg?v=0" alt="אין יותר מספרים מלחיצים" width="514" height="218" /></p>
<p><strong>The Unread Items counter in <a href="http://www.google.com/reader">Google Reader</a> is putting you under pressure? Can&#8217;t sleep because of it? Well, you don&#8217;t have to see it any more.</strong> I&#8217;ve hacked a simple <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> script that hides the unread items counter in Google Reader. There&#8217;re two flavours of the script: one that <a href="http://userscripts.org/scripts/show/30160">hides only the all items counter</a> and other one that <a href="http://userscripts.org/scripts/show/30159">hides all the counters</a>.</p>
<p>To those of you who don&#8217;t know what Greasemonkey is:</p>
<blockquote><p><strong>Greasemonkey</strong> is a <a href="http://en.wikipedia.org/wiki/Mozilla_Firefox">Mozilla Firefox</a> <a href="http://en.wikipedia.org/wiki/Extension_%28Mozilla%29">extension</a> that allows users to install <a href="http://en.wikipedia.org/wiki/Scripting_programming_language">scripts</a> that make <a href="http://en.wikipedia.org/wiki/On_the_fly">on-the-fly</a> changes to most HTML-based <a href="http://en.wikipedia.org/wiki/Web_page">web pages</a>. [..]</p>
<p>Greasemonkey can be used for adding new functionality to web pages (for example, embedding price comparison in <a href="http://en.wikipedia.org/wiki/Amazon.com">Amazon.com</a> web pages), fixing rendering bugs, combining data from multiple webpages, and numerous other purposes.</p></blockquote>
<p>(From Wikipedia entry on <a href="http://en.wikipedia.org/wiki/Greasemonkey">Greasemonkey</a>)</p>
<p>You can find a lot more scripts on <a href="http://userscripts.org">userscripts.org</a> . Beware that some scripts become unstable/not working due to constant updates of the web sites (most of Gmail scripts break every version update).</p>
<p>I&#8217;ve also created three bookmarklets that allow you to unhide and hide the counters, but had trouble to embed them in the post. So if anyone interested in them, just leave here a comment.</p>
<p>Comments are mostly welcomed.</p>
<p>Enjoy.</p>
<p><strong><em>Arik</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/make-the-unread-items-in-google-reader-disappear.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EXCLUSIVE: The Code Change That Was Needed To Increase Facebook Friends Limit</title>
		<link>http://www.arikfr.com/blog/exclusive-the-code-change-that-was-needed-to-increase-facebook-friends-limit.html</link>
		<comments>http://www.arikfr.com/blog/exclusive-the-code-change-that-was-needed-to-increase-facebook-friends-limit.html#comments</comments>
		<pubDate>Fri, 09 May 2008 17:25:30 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Code Samples]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/exclusive-the-code-change-that-was-needed-to-increase-facebook-friends-limit.html</guid>
		<description><![CDATA[Today Michael Arrington announced that Facebook lifted their 5000 friends limit. As a tech blogger, I bring you the &#8220;behind the scenes&#8221; view: the code change that was needed to be done to increase this limit: For the non techies: &#8230; <a href="http://www.arikfr.com/blog/exclusive-the-code-change-that-was-needed-to-increase-facebook-friends-limit.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today Michael Arrington announced that <a href="http://www.techcrunch.com/2008/05/09/facebook-to-lift-5000-friends-limit/">Facebook lifted their 5000 friends limit</a>. As a tech blogger, I bring you the &#8220;behind the scenes&#8221; view: the code change that was needed to be done to increase this limit:</p>
<p><a href="http://www.arikfr.com/blog/wp-content/uploads/2008/05/fb-friends-limit1.png"><img src="http://www.arikfr.com/blog/wp-content/uploads/2008/05/fb-friends-limit-thumb.png" style="border: 0px none " alt="fb_friends_limit" width="351" border="0" height="121" /></a></p>
<p>For the non techies:</p>
<ul>
<li>line 3: commented out &#8211; the previous friends limit defined</li>
<li>line 4 &#8211; the new friends limit</li>
</ul>
<p>Shocking. <img src='http://www.arikfr.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong><em>Arik</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/exclusive-the-code-change-that-was-needed-to-increase-facebook-friends-limit.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Maybe It&#8217;s OK That WordPress Kill Your CPU</title>
		<link>http://www.arikfr.com/blog/maybe-its-ok-that-wordpress-kill-your-cpu.html</link>
		<comments>http://www.arikfr.com/blog/maybe-its-ok-that-wordpress-kill-your-cpu.html#comments</comments>
		<pubDate>Wed, 23 Apr 2008 18:38:24 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Apps]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Bloggers]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[CodingHorror]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[Jeff Atwood]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[users]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[WP-Cache]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/maybe-its-ok-that-wordpress-kill-your-cpu.html</guid>
		<description><![CDATA[Jeff Atwood writes about WordPress performance. Quite astonishing &#8211; it appears to be that if your blog is medium sized (or bigger) you must install WP-Cache in order it will survive traffic peaks and doesn&#8217;t kill your server. When I &#8230; <a href="http://www.arikfr.com/blog/maybe-its-ok-that-wordpress-kill-your-cpu.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.codinghorror.com" title="Coding Horror Blog">Jeff Atwood</a> writes <a href="http://www.codinghorror.com/blog/archives/001105.html" title="Behold WordPress, Destroyer of CPUs">about WordPress performance</a>. Quite astonishing &#8211; it appears to be that if your blog is medium sized (or bigger) you must install <a href="http://mnm.uib.es/gallir/wp-cache-2/">WP-Cache</a> in order it will survive traffic peaks and doesn&#8217;t kill your server.</p>
<p>When I read it, my first though was: &#8220;too bad they though that fancy control panel is more important the performance.&#8221;, but then I though of something else &#8211; maybe avoiding performance issues and dealing with other stuff before that, that&#8217;s more user targeted thinking of features: most WordPress users are small bloggers (like me (-:) and therefore they need better UI experience than caching, while the big fish can handle the extra hassle of installing WP-Cache or paying for a dedicated server.</p>
<p>Think of that next time you decide which feature to implement first. Remmeber &#8211; listen to your users, not your engineers <img src='http://www.arikfr.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em><strong>Arik</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/maybe-its-ok-that-wordpress-kill-your-cpu.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Benefits of Using Amazon EC2</title>
		<link>http://www.arikfr.com/blog/the-benefits-of-using-amazon-ec2.html</link>
		<comments>http://www.arikfr.com/blog/the-benefits-of-using-amazon-ec2.html#comments</comments>
		<pubDate>Tue, 22 Apr 2008 05:14:09 +0000</pubDate>
		<dc:creator>Arik</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Animoto]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DRP]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Application Engine]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Rendering]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Scaling]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[Xen]]></category>

		<guid isPermaLink="false">http://www.arikfr.com/blog/the-benefits-of-using-amazon-ec2.html</guid>
		<description><![CDATA[Amazon Elastic Compute Cloud, also known as &#8220;EC2&#8243;, allows scalable deployment of applications.[1] Current users are able to create, launch and terminate server instances on demand, hence the term &#8220;elastic&#8221;.(Wikipedia) I believe that the Amazon Web Services (and especially EC2) &#8230; <a href="http://www.arikfr.com/blog/the-benefits-of-using-amazon-ec2.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Amazon Elastic Compute <a href="http://en.wikipedia.org/wiki/Cloud_computing">Cloud</a></strong>, also known as &#8220;EC2&#8243;, allows <a href="http://en.wikipedia.org/wiki/Scalable">scalable</a> deployment of applications.<sup><a href="http://en.wikipedia.org/wiki/Amazon_ec2#cite_note-0">[1]</a></sup> Current users are able to create, launch and terminate server instances on demand, hence the term &#8220;elastic&#8221;.(<a href="http://en.wikipedia.org/wiki/Amazon_ec2">Wikipedia</a>)</p></blockquote>
<p>I believe that the <a href="http://en.wikipedia.org/wiki/Amazon_Web_Services">Amazon Web Services</a> (and especially <a href="http://en.wikipedia.org/wiki/Amazon_ec2">EC2</a>) are one of the most influencing technologies that shape the future of the web. While for me it&#8217;s pretty obvious what is the benefits of such a service, it sometimes difficult to explain to others. Yesterday, I stumbled over the most convincing example of them all.</p>
<p><script type="text/javascript" src="http://widgets.clearspring.com/o/46928cc51133af17/480d751b848bfc06/46928cc5788deb29/957f6829/widget.js"></script></p>
<p>Enter <a href="http://www.animoto.com">Animoto</a>. Animoto is a cool web application that you feed it with your photos and it creates you a video of it (see example above). The geeks among you readers, know that rendering video can be CPU consuming. So how they do that? Using Amazon EC2, of course.</p>
<p><a href="http://www.arikfr.com/blog/wp-content/uploads/2008/04/animoto-ec2-usage3.png"><img src="http://www.arikfr.com/blog/wp-content/uploads/2008/04/animoto-ec2-usage-thumb.png" style="border-width: 0px" alt="animoto_ec2_usage" width="515" border="0" height="393" /></a></p>
<p>During last week Animoto userbase grew <a href="http://aws.typepad.com/aws/2008/04/animoto---scali.html">from 25,000 users on Monday to 250,000 users on Thursday</a> (!). But the graph the you see above isn&#8217;t the graph of their user count, it&#8217;s the graph of the EC2 instances they used to handle that traffic. They started the week with 50 EC2 instances, grew to 100, 900 and eventually 3400 instances of EC2. Later on when the demand lowered, you can see the the count lowered to something like 1200 EC2 instances.</p>
<p>Now imagine if they have been using regular servers. Just thinking of the meaning of managing all this amount of hardware, of storing it, DRP plans, etc.. gives me the creeps!</p>
<p>This example shows perfectly the benefits of EC2 in particular and cloud computing in general:</p>
<ul>
<li>Pay as you go &#8211; you need 50 servers today? No problem. You need 3000 tomorrow? That&#8217;s no problem either. And the day after tomorrow you want only 1000? Just do what ever you want. No need to plan ahead of how much computing power you will need, just build the infrastructure that can grow.</li>
<li>No system management overhead &#8211; I guess that most of the EC2 instances used by Animoto are servers that do the video rendering. So when the usage grows that just duplicate the same server image they already have. When one of them stuck or fails, they just shut it down and start a new one. No need to have people maintaining huge server sites, buying hardware and stuff. Simple example for such an architecture using EC2 is explained in this <a href="http://developer.amazonwebservices.com/connect/entry.jspa?entryID=915">article</a>.</li>
<li>Simple! Everything is API based, and you&#8217;re not the first one to use it, so there plenty of implementions of <a href="http://code.google.com/p/lifeguard/">scalable</a> <a href="http://code.google.com/p/scalr/">architectures</a> <a href="http://code.google.com/p/cloudtools/">over</a> <a href="http://ec2onrails.rubyforge.org/">EC2</a> .</li>
<li>DRP? In a few mouse clicks (or automatically using a watchdog script that monitors their <a href="http://aws.typepad.com/aws/2008/04/the-service-hea.html">health dashboard</a>) you can turn on a new instance at the <a href="http://aws.typepad.com/aws/2008/03/new-ec2-feature.html">European data center</a>, and forward all you traffic from the US one there. More DRP than that?</li>
</ul>
<p>I&#8217;m a total believer in cloud computing. I was really happy to see that <a href="http://www.arikfr.com/blog/google-apps-engine-isnt-amazon-web-services.html">Google entered the game</a>, and I hope that other major players will join too (<a href="http://www.microsoft.com">Microsoft</a>, what are you waiting for?).</p>
<p><strong><em>Arik</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.arikfr.com/blog/the-benefits-of-using-amazon-ec2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

