<?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>simple musings</title>
	<atom:link href="http://haidersabri.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://haidersabri.com</link>
	<description>a collection of random thoughts</description>
	<lastBuildDate>Thu, 25 Apr 2013 21:02:51 +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>Thoughts on Instacast</title>
		<link>http://haidersabri.com/2013/04/25/thoughts-on-instacast/</link>
		<comments>http://haidersabri.com/2013/04/25/thoughts-on-instacast/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 21:02:51 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=152</guid>
		<description><![CDATA[I&#8217;ve been using Instacast for some time now to manage and listen to my podcasts. While there UX could be refined a bit, it certainly outdid Apple&#8217;s Music and (later) Podcast Apps. Today I decided to do some cross device syncing with Instacast and quickly became disappointed. I&#8217;m running version 2.x of Instacast, and syncing [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using <a rel="nofollow" href="http://vemedio.com/products/instacast3" title="Instacast" target="_blank" onclick="urchinTracker('/outgoing/vemedio.com/products/instacast3?referer=');">Instacast</a> for some time now to manage and listen to my podcasts. While there UX could be refined a bit, it certainly outdid Apple&#8217;s Music and (later) Podcast Apps. Today I decided to do some cross device syncing with Instacast and quickly became disappointed. I&#8217;m running version 2.x of Instacast, and syncing completely failed across devices. It was pulling subscriptions I haven&#8217;t listened to in years. But what really annoyed me was their upgrade path: non-existent.</p>
<p><strong>Version 3.0</strong><br />
Instacast requires a new install for its 3.0 version, which currently is listed at $5. While I understand some circumstances may merit such a move, I would certainly expect some major  update to merit a repurchase of the same app. Looking at the screenshots and product page, nothing looks significantly different. The iPhone UI looks exactly the same as before. But the thing that put me over the edge was this statement on their page:</p>
<p><em>We switched out old technologies like manual reference counting (like a stick shift) and SQLITE and removed them with automatic reference counting (like automatic gear shifting) and Core Data, the powerful object layer. </em></p>
<p>I&#8217;m calling bullshit on this.</p>
<p>The first set of changes (manual reference counting to auto) has nothing to do with performance, and the analogy is bad. The user won&#8217;t notice any difference, except if the old versions of the app use to crash more often because of poor use of manual reference counting. Furthermore, nearly all the work required for Automatic Reference Counting is handled by Apple&#8217;s Xcode compiler, with very little work to do on the part of the App Developer. </p>
<p>The second set of changes (SQLITE to CoreData) could improve performance, but most likely will be undetectable to the user as well. And again, this is just cleanup work for App Developer to make better use of the Apple&#8217;s built in data store, and ultimately makes their life easier as developers. </p>
<p>These two changes should most certainly NOT merit a paid upgrade in my opinion. Good maintenance of existing functionality is the responsibility of the App Developer, and charging users extra for these plumbing changes that change their experience is, in my opinion, not fair.</p>
<p><strong>Cloud Sync</strong></p>
<p>Version 3.0 boasts support for Cloud Sync. However, versions 2.x supposedly did so via iCloud, albeit poorly. I don&#8217;t understand how they can claim this as a new feature that requires a paid upgrade either.</p>
<p><strong>iPad Support</strong></p>
<p>The only major difference to users is the support of an iPad version of the app. While that is significant work, it doesn&#8217;t strike me as fair that users who purchased versions prior to 3.0 and perhaps don&#8217;t care about an iPad version are now forced to re-purchase a nearly exact replica of the same app. The new app is actually called &#8220;Instacast 3&#8243; which differentiates it from just &#8220;Instacast&#8221;, which no longer exists in the AppStore, meaning they probably won&#8217;t issue new updates for it. Furthermore, the price is too high. </p>
<p>While I&#8217;ve been a supporter and fan of Instacast, I refuse to purchase the 3.0 upgrade and will start using other podcasting apps going forward. </p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2013/04/25/thoughts-on-instacast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XCode Storyboards and collaboration annoyance</title>
		<link>http://haidersabri.com/2012/10/17/xcode-storyboards-and-collaboration-annoyance/</link>
		<comments>http://haidersabri.com/2012/10/17/xcode-storyboards-and-collaboration-annoyance/#comments</comments>
		<pubDate>Thu, 18 Oct 2012 00:32:08 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[XCode]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=144</guid>
		<description><![CDATA[At Maybe, we&#8217;ve been doing some collaborative work in XCode, and have discovered a very annoying experience with storyboards. Anytime any of us simply touches the storyboard file, it marks it as modified in git, which could cause conflicts that are already difficult to solve if they are necessary. Looking at the diffs, we noticed [...]]]></description>
			<content:encoded><![CDATA[<p>At Maybe, we&#8217;ve been doing some collaborative work in XCode, and have discovered a very annoying experience with storyboards. Anytime any of us simply touches the storyboard file, it marks it as modified in git, which could cause conflicts that are already difficult to solve if they are necessary.</p>
<p>Looking at the diffs, we noticed that it had to do with a property on the XML document called systemVersion. </p>
<p><a href="http://haidersabri.com/wp-content/uploads/2012/10/diff.jpg"><img class="alignleft size-medium wp-image-145" title="diff" src="http://haidersabri.com/wp-content/uploads/2012/10/diff-300x112.jpg" alt="" width="300" height="112" /></a></p>
<p>That property turns out to be related to the version of the operating system the developer is running on. So we decided to do all of our mountain lion updates, and found that it solved that little nuisance. Its a temporary fix, as we all know it&#8217;ll come roaring back the moment one of us decides to run a OS X update in the future. Boo!</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2012/10/17/xcode-storyboards-and-collaboration-annoyance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Persistence</title>
		<link>http://haidersabri.com/2011/10/02/mobile-persistence/</link>
		<comments>http://haidersabri.com/2011/10/02/mobile-persistence/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 07:25:54 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=137</guid>
		<description><![CDATA[Any non-trivial mobile app created these days needs to have some sort of server to back it up. If not to drive the logic of the app, a server is need to at least persist data outside of the device itself. Since connectivity &#038; latency over mobile networks vary, this complicates our persistence strategy because [...]]]></description>
			<content:encoded><![CDATA[<p>Any non-trivial mobile app created these days needs to have some sort of server to back it up. If not to drive the logic of the app, a server is need to at least persist data outside of the device itself. Since connectivity &#038; latency over mobile networks vary, this complicates our persistence strategy because we can&#8217;t always assume the server will be available, and if available we can&#8217;t assume it will deliver the necessary information in time to make the user experience on the phone a good one.</p>
<p>This leads us inevitably to some sort of device-local storage to persist data. In the case of iOS, we would use CoreData to store data that we&#8217;d like to query as fast as possible. This is very convenient because not only are we guaranteed to have this data on our local device when the app starts, we also know it is retrievable at orders of magnitude faster than pulling information from the web.  </p>
<p>But not everything can live on our device. Eventually we need to sync our device with the server, pull new information from the server, etc. So we are faced with a complicated dilemma of maintaining persistent data in two separate contexts. It&#8217;s an interesting problem that have varying patterns to solve. A really great video that explains the problem and a few solutions was delivered at <a rel="nofollow" href="http://www.youtube.com/watch?v=xHXn3Kg2IQE" target="_blank" onclick="urchinTracker('/outgoing/www.youtube.com/watch?v=xHXn3Kg2IQE&amp;referer=');">Google I/O 2010</a>. Although it was in the context of Android, its principles can be applied elsewhere. I highly recommend watching it. </p>
<p>In the iOS context we now have CoreData and a server backend we communicate with using HTTP. Newcomers to iOS are often directed to Apple&#8217;s <a rel="nofollow" href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html" target="_blank" onclick="urchinTracker('/outgoing/developer.apple.com/library/mac/_documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html?referer=');">official guide</a> to network requests, revolving around the NSURLConnection class. There is a lot of criticism of the utility of this class as is, and often times it just breaks down when dealing with different HTTP cases. I would recommend you read the guide, but don&#8217;t write your network code based on it. The open source community has offered a few libraries that both simplify and empower network operations. Two come to mind right now.</p>
<p><a rel="nofollow" href="http://allseeing-i.com/ASIHTTPRequest/" target="_blank" onclick="urchinTracker('/outgoing/allseeing-i.com/ASIHTTPRequest/?referer=');">ASIHTTPRequest</a> and <a rel="nofollow" href="http://restkit.org/" target="_blank" onclick="urchinTracker('/outgoing/restkit.org/?referer=');">RestKit</a> are both good libraries that fill in the void left by NSURLConnection. From easy access to headers, cookie management, caching to support of persistent connections and connectivity notifications. I&#8217;ve been using ASIHTTPRequest for a while now. I like it for its simplicity, its ability to easily parse through HTTP headers, cookies, status codes and payloads. I also really appreciate the introduction of blocks into its request model. Blocks programming is a big plus in my book, especially since nearly all of your network operations should be asynchronous.</p>
<p>ASIHTTPRequest is a great toolset to use and I highly recommend its use, but its really only meant for network operations. My problem is not just with connectivity, its with persistence as well. So I was contemplating mapping my JSON payloads to CoreData for local-device storage. But then I discovered RestKit. In my opinion, RestKit is weaker than ASIHTTPRequest when it comes to network operation features. However what it lacks in that area, it makes up for in object mapping and CoreData integration. While ASIHTTPRequest utilizes CFNetwork code giving it a closer to the metal feel, RestKit network code is based on NSURLConnection, which is deficient in my opinion.  RestKit also does not support blocks programming as of yet. </p>
<p>I&#8217;m still getting to know RestKit. I&#8217;ve spent a few does reading the source, fixing a few bugs, and adding blocks support. Its been useful to properly sync my server to CoreData with little code on my part. The areas it needs improvement on are to get away from NSURLConnection, provide better support for synchronous operations and introduce blocks as the callback paradigm. This was not meant to persuade one to use one library or the other. Rather it is meant to share, in my experience, when I would choose to use one over the other. Since I haven&#8217;t benchmarked the two, its hard to conclude just yet. However, if you are looking to build a CoreData layer that needs to be in close sync with a server backend, you may save yourself a lot of time by trying out RestKit.</p>
<p>My forked version of RestKit with blocks support is up on <a rel="nofollow" href="https://github.com/haidersabri/RestKit" target="_blank" onclick="urchinTracker('/outgoing/github.com/haidersabri/RestKit?referer=');">github</a> if you wanna take a look and contribute.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2011/10/02/mobile-persistence/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I moved to Silicon Valley</title>
		<link>http://haidersabri.com/2011/09/10/why-i-moved-to-silicon-valley/</link>
		<comments>http://haidersabri.com/2011/09/10/why-i-moved-to-silicon-valley/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 20:24:09 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=126</guid>
		<description><![CDATA[For years I&#8217;ve been wrestling with an issue. Am I not reaching my potential as a hacker/entrepreneur by not moving to the promised land of silicon valley? I was able to mitigate that internal crisis by working for the biggest startup in LA, MySpace, from 2007 to 2009. I was able to hit snooze on [...]]]></description>
			<content:encoded><![CDATA[<p>For years I&#8217;ve been wrestling with an issue. Am I not reaching my potential as a hacker/entrepreneur by not moving to the promised land of silicon valley? I was able to mitigate that internal crisis by working for the biggest startup in LA, MySpace, from 2007 to 2009. I was able to hit snooze on that alarm telling me to move.  Working at MySpace really opened my eyes to the power of Technology and Social Media.  I met awesome engineers who truly encouraged me to think big.  After leaving MySpace, I realized that I wasn&#8217;t done learning, and I still felt this internal pull to emigrate to the most concentrated technological part of the earth. Alarm sounded, and I still hit snooze.</p>
<p>Things got more real again when i took up a job working for a startup based in SF. They did have an office in LA, and I found myself once again conflicted between the emotional attachment to a city where I grew up, where all my friends &#038; family reside, versus the more ambitious road of immersing myself around the cream of the crop of my industry. I decided to stay in LA because the opportunities presented themselves career-wise to stay, but it still didn&#8217;t quite turn of the alarm; another snooze but for a lot longer time.</p>
<p>This rekindled once again when I found out <a rel="nofollow" href="http://twitter.com/#!/omarh" title="Omar Hamoui" target="_blank" onclick="urchinTracker('/outgoing/twitter.com/_/omarh?referer=');">Omar Hamoui</a> was starting <a rel="nofollow" href="http://www.churnlabs.com" title="Churn Labs" target="_blank" onclick="urchinTracker('/outgoing/www.churnlabs.com?referer=');">Churn Labs</a>. Omar having decided to create two locations, I was once again presented with the options of being in norcal or socal, even better in Irvine, my residence and all-around favorite city to settle down in.  I chose to move back to Irvine and help set up the Irvine office, which was a blast. We found an awesome location in Irvine, and set up a pretty cool office.  Best of all, I got to see Omar daily and learn from him. Seemed like a dream situation for most people. But I kept feeling the call of the valley.</p>
<p>Last July, the Churn Labs team decided to do a heads down month-long hackathon out of our San Mateo office. I took my family up and settled in an apartment.  We got so much done just being together. We hacked and hacked, and I just enjoyed the isolation. It was in that month that my family and I finally had the courage to do what we should have done long ago. I remember discussing it with fellow Churner and co-founder of the lab <a rel="nofollow" href="http://www.thisismobility.com/" onclick="urchinTracker('/outgoing/www.thisismobility.com/?referer=');">Mike Rowehl</a>, an awesome hacker to learn from on a daily basis, and his experience in making the move several years back.  It was a forgone conclusion at that point.   We decided to relocate and join the legion of hackers in this part of the world. </p>
<p>Having said all that, I have special regards and high hopes for the LA startup community.  Time will tell if my words are correct, but now that I&#8217;ve moved up here, I am happy with my decision. I am happy to be working with awesome team members on a daily basis. I&#8217;m happy that my social life aligns with where I want my career to go. I&#8217;m happy to not have to deal with traffic. I&#8217;m happy that random folks I run into in coffee shops are fellow geeks. Most of all, I&#8217;m happy that my fear of leaving socal, my comfort zone, was unwarranted. Breaking out of your comfort zone is a necessary exercise any entrepreneur should do. Doing it with my family of 2 kids isn&#8217;t easy. Leaving behind your family &#038; friends isn&#8217;t easy. But at least now I don&#8217;t have to hit snooze on that same alarm clock that has been ringing for years. Rather I&#8217;ve enabled several new alarm clocks that I feel I won&#8217;t have to hit snooze on as long as the last.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2011/09/10/why-i-moved-to-silicon-valley/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gnonstop Disrupt</title>
		<link>http://haidersabri.com/2011/06/21/gnonstop-disrupt/</link>
		<comments>http://haidersabri.com/2011/06/21/gnonstop-disrupt/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 19:53:00 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=117</guid>
		<description><![CDATA[I had the honor of presenting on stage with Omar Hamoui at TechCrunch Disrupt 2011 in New York. It was really a blast getting gnonstop ready for a demo. It was even funner rehearsing with Omar before the show. Anyhow, here is the link to the demonstration, and the subsequent launch of Gnonstop Gnomes a [...]]]></description>
			<content:encoded><![CDATA[<p>I had the honor of presenting on stage with Omar Hamoui at TechCrunch Disrupt 2011 in New York. It was really a blast getting gnonstop ready for a demo. It was even funner rehearsing with Omar before the show. </p>
<p>Anyhow, here is the <a rel="nofollow" href="http://techcrunch.com/2011/05/23/churn-labs-gnonstop-gnomes/" title="link" target="_blank" onclick="urchinTracker('/outgoing/techcrunch.com/2011/05/23/churn-labs-gnonstop-gnomes/?referer=');">link</a> to the demonstration, and the subsequent <a rel="nofollow" href="http://techcrunch.com/2011/06/20/gnonstop-gnomes-iphone-android/" title="launch" target="_blank" onclick="urchinTracker('/outgoing/techcrunch.com/2011/06/20/gnonstop-gnomes-iphone-android/?referer=');">launch</a> of Gnonstop Gnomes a few weeks later.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2011/06/21/gnonstop-disrupt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Computer Vision and OpenCV</title>
		<link>http://haidersabri.com/2011/04/08/computer-vision-and-opencv/</link>
		<comments>http://haidersabri.com/2011/04/08/computer-vision-and-opencv/#comments</comments>
		<pubDate>Sat, 09 Apr 2011 00:00:40 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[Computer Vision]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[OpenCV]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=100</guid>
		<description><![CDATA[I&#8217;ve always been aware of the subject of Computer Vision, but I always signed it off as a completely theoretical subject, or at best something that engineers in the military or nasa work on. I certainly didn&#8217;t know enough about its real-world consumer application until about a year ago I was introduced to some computer [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been aware of the subject of <a rel="nofollow" href="http://en.wikipedia.org/wiki/Computer_vision" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Computer_vision?referer=');"><strong>Computer Vision</strong></a>, but I always signed it off as a completely theoretical subject, or at best something that engineers in the military or nasa work on. I certainly didn&#8217;t know enough about its real-world consumer application until about a year ago I was introduced to some computer vision experts. After a few short talks, I was mesmerized about where the field was going, but still never had a chance to fully delve into&#8230;until recently.<br />
<P><br />
I am a total beginner to the field, but some folks in the field directed me to <a rel="nofollow" href="http://opencv.willowgarage.com/wiki/" onclick="urchinTracker('/outgoing/opencv.willowgarage.com/wiki/?referer=');"><strong>OpenCV</strong></a> as a good starting point to learning what can be done. My ultimate use for CV is to do some cool stuff using iOS (for now) which recently has enriched its SDK with <a rel="nofollow" href="http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html" onclick="urchinTracker('/outgoing/developer.apple.com/library/ios/_documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/00_Introduction.html?referer=');"><strong>AVFoundation</strong></a> to allow developers to have a lot of power over the camera. Anyhow, OpenCV with iOS prove to be a great combo.<br />
<P><br />
However, since OpenCV is a toolkit more than an end solution, it is hard for a noob like me to know exactly how to use it for the needs that I have (in this case i&#8217;m trying to do object recognition). So in such scenarios its good to have a set of image frames on your local machine, and apply your alogrithm to them as you tweak it to get the results you&#8217;re looking for. The cool thing about OpenCV is that you can compile it with python bindings. So although my eventual algorithm on iOS will be in C++ or Objective-C, I at least have the luxuries of python to get my algorithm in a position where I like it.<br />
<P><br />
OpenCV recently had an update to the 2.2 edition, and although the C++ samples seemed to be working, I found the python samples outdated. It seems quite a few structures and functions have changed with the new Python bindings.  So, as an exercise in learning more about OpenCV and a contribution to the OpenCV project, I went about redoing the squares.py sample to conform to the OpenCV 2.2 version.  Squares.py basically takes images and detects if there are squares on them.  You should go through the process of downloading and installing OpenCV first, then compare the squares.py in the samples folder with the one here. If you are interested in using it, you can download it from <a href="http://haidersabri.com/wp-content/uploads/2011/04/squares.py"><strong>here</strong></a>. Let me know if it was helpful.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2011/04/08/computer-vision-and-opencv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first days at Churn Labs</title>
		<link>http://haidersabri.com/2011/03/31/my-first-days-at-churn-labs/</link>
		<comments>http://haidersabri.com/2011/03/31/my-first-days-at-churn-labs/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 02:06:09 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[Startups]]></category>

		<guid isPermaLink="false">http://haidersabri.com/?p=89</guid>
		<description><![CDATA[I haven&#8217;t had a chance to talk much about my new job at Churn Labs yet, mainly because I&#8217;m having too much fun building things in the lab. The past 2 months have been really awesome here at the lab. I&#8217;ve really found my home with the people I&#8217;m working with and the projects I&#8217;m [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t had a chance to talk much about my new job at <a rel="nofollow" href="http://www.churnlabs.com" onclick="urchinTracker('/outgoing/www.churnlabs.com?referer=');"><strong>Churn Labs</strong></a> yet, mainly because I&#8217;m having too much fun building things in the lab. The past 2 months have been really awesome here at the lab. I&#8217;ve really found my home with the people I&#8217;m working with and the projects I&#8217;m working on.<br />
<P><br />
For the longest time I&#8217;ve wanted to just free myself from monetary obligations to focus on building cool things. Yeah I would spends my nights on side projects, but the places I&#8217;ve worked in the past few years have been super demanding. Sometimes I just had to travel too much; other times the deadlines were unrealistic. I think that Churn Labs answers a few needs that the entrepreneurial engineer deeply desires:<br />
<P><br />
<strong>First</strong>, we want that opportunity to learn new things. We want to jump on every cool subject out there and just play. <em>&#8220;Don&#8217;t have a data problem where I work? Who cares, i want to use MapReduce and Hadoop anyways&#8221; or &#8220;I know I don&#8217;t really need computer vision to do this, but I want to anyways!&#8221; or &#8220;Gee, I&#8217;m sure this would perform way better using a graph database&#8221;</em>. The lab is constructed to be a lab; to explore things differently, and that often means allowing us to experiment with different things we&#8217;ve never worked on before.<br />
<P><br />
<strong>Second</strong>, we want to work with smart people. I&#8217;ve always judged a good engineer by his humility and desire to work with smarter folks. We all know that we thrive in those environments that allow us to interact with smarter people than ourselves. In that regard, I&#8217;ve been super jazzed with the guys I&#8217;ve been working with here at the lab.<br />
<P><br />
<strong>Third</strong>, we want to work on a successful product. In addition to our passions for engineering, we are still humans (although some of our non-geek friends may disagree), and we want our work to pay off in the end. I&#8217;ve seen some great teams that have great engineering power, but they lack a compelling product. Or they lack the right leadership to steer them in the right direction. With the lab, we are building many products, and our stellar leadership is connected everywhere to get the right feedback and make the right connections to help elevate the value and success of the products we work on. This point is actually very important. This point is what makes a team truly successful. <a rel="nofollow" href="http://www.churnlabs.com" onclick="urchinTracker('/outgoing/www.churnlabs.com?referer=');"><strong>Churn Labs</strong></a>, its founders and leaders speak for themselves. This week I met some pretty significant pillars of the tech industry. I could not have imagined that I would be sitting across the table and talking with people who have left a permanent impression on the technical landscape of the world in so many ways.<br />
<P><br />
It is said that successful startups have three components: great teams, great products, and great entrepreneurs. I consider myself lucky to be at a place where I believe all have converged.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2011/03/31/my-first-days-at-churn-labs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debugging CodeIgniter using NetBeans</title>
		<link>http://haidersabri.com/2010/11/18/debugging-codeigniter-using-netbeans/</link>
		<comments>http://haidersabri.com/2010/11/18/debugging-codeigniter-using-netbeans/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 10:52:02 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[netbeans]]></category>

		<guid isPermaLink="false">http://haidersabri.com/2010/11/18/debugging-codeigniter-using-netbeans/</guid>
		<description><![CDATA[CodeIgniter is a really simple to use PHP web application framework.Â  I just started using it last week for the first time. I dont usually blog about a subject I&#8217;m new to, but I wasn&#8217;t able to find one location to answer this question, I felt i should jot down these notes in case someone [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="nofollow" href="http://codeigniter.com/" onclick="urchinTracker('/outgoing/codeigniter.com/?referer=');"><span style="color:Black">CodeIgniter</span></a> <span style="color:Black">is a really simple to use PHP web application framework.Â  I just started using it last week for the first time. I dont usually blog about a subject I&#8217;m new to, but I wasn&#8217;t able to find one location to answer this question, I felt i should jot down these notes in case someone else out there had my problem.</span></p>
<p><span style="color:Black">CodeIgniter is really easy to use. It allows you to create a PHP site pretty quickly. Along with following the MVC pattern a lot more strictly, CodeIgniter comes with an assortment of helper libraries that are really easy to use. Go checkout <a rel="nofollow" href="http://codeigniter.com/" onclick="urchinTracker('/outgoing/codeigniter.com/?referer=');">CodeIgniter.com</a> to get a better feel for it.</span></p>
<p>Although I like the simplicity of using TextMate as a simplified IDE, there are times I&#8217;d like to be able to step through my code and make sure things are working right. What i want to talk about here is to get your environment setup to use CodeIgniter with NetBeans. NetBeans recently added functionality to allow for code completion when coding against CodeIgniter libraries. Not all work perfectly, but its a great way to understand the framework.Â  What we are going to do is walk through how to get you up and running and attaching to the debugger.</p>
<p>I&#8217;ve only done this on a Mac, so my apologies to windows users. I&#8217;m running on Snow Leopard, but this should work on previous versions as well.</p>
<p>1. Download the codeigniter <a rel="nofollow" href="http://codeigniter.com/" onclick="urchinTracker('/outgoing/codeigniter.com/?referer=');">source.</a></p>
<p>2. Download <a rel="nofollow" href="http://download.netbeans.org/netbeans/6.9.1/final/bundles/netbeans-6.9.1-ml-macosx.dmg" onclick="urchinTracker('/outgoing/download.netbeans.org/netbeans/6.9.1/final/bundles/netbeans-6.9.1-ml-macosx.dmg?referer=');">Netbeans 6.9 with PHP support</a> or higher.</p>
<p>3. Make sure you have <a rel="nofollow" href="http://www.google.com/url?url=http://www.xdebug.org/&amp;rct=j&amp;sa=U&amp;ei=pAHlTOz8AouesQPh_dGxCw&amp;ved=0CBgQFjAA&amp;sig2=9ZjL4K0NDR4wIZLDgGHPwQ&amp;q=xdebug&amp;usg=AFQjCNF_kSZT8uxrDvrUITEnqYVg0TklMg" onclick="urchinTracker('/outgoing/www.google.com/url?url=http_//www.xdebug.org/_amp_rct=j_amp_sa=U_amp_ei=pAHlTOz8AouesQPh_dGxCw_amp_ved=0CBgQFjAA_amp_sig2=9ZjL4K0NDR4wIZLDgGHPwQ_amp_q=xdebug_amp_usg=AFQjCNF_kSZT8uxrDvrUITEnqYVg0TklMg&amp;referer=');">xdebug</a> installed and configured with your PHP. For more info on that, go <a rel="nofollow" href="http://devzone.zend.com/article/2803-Introducing-xdebug" onclick="urchinTracker('/outgoing/devzone.zend.com/article/2803-Introducing-xdebug?referer=');">here.</a>Â </p>
<p>4. Go to Netbeans-&gt;Preferences-&gt;PHP-&gt;General. Make sure your PHP 5 interpreter path is correct. Set your debugger port to 9000 and ensure Session ID is &#8216;netbeans-xdebug&#8217;. I would also unclick &quot;Stop at the first line&quot; because I find that a little annoying to stop there everytime a breakpoint is set. Its good to see it for the first time just to know where your code starts, but thereafter its not necessary.</p>
<p>5. Now the default settings of codeigniter is to disregard GET (query) parameters. This is problematic because for Netbeans to attach to the xdebug, it needs to pass in the following query parameters: XDEBUG_SESSION_START=netbeans-xdebug. With the default settings, this causes a 404 error. So to get around this, while preserving the nice URL segment based settings that come pre-baked into codeigniter, go to the config.php file under /application/config and change the following values:</p>
<p><span style="color:Black"><span style="font-style: normal; text-align: center; orphans: 2; letter-spacing: normal; font-size: 18px; border-collapse: separate; line-height: normal; font-weight: normal; text-indent: 0px; white-space: normal; font-variant: normal; word-spacing: 0px; text-transform: none; widows: 2" class="Apple-style-span"><span style="line-height: 23px; font-size: 16px; white-space: nowrap; text-align: left" class="Apple-style-span">$config['uri_protocol']Â =Â &quot;PATH_INFO&quot;;<br />$config['enable_query_strings']Â =Â TRUE;Â </span></span></span></p>
<p>6. Now place your breakpoint wherever your heart desires. And copy your URL into a browser, or curl. Make sure to append ?XDEBUG_SESSION_START=netbeans-xdebug at the end of it.</p>
<p>I&#8217;m a bit annoyed that i have to pass in a query parameter to be able to attach to a debugger, but since this will only come in handy occasionally, it seems like a necessary evil. XDebug actually has a lot more power stuff in it, which will be handy in more cases than attaching a debugger.</p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2010/11/18/debugging-codeigniter-using-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mactracker&#8230;a cool tool</title>
		<link>http://haidersabri.com/2010/05/06/mactrackera-cool-tool/</link>
		<comments>http://haidersabri.com/2010/05/06/mactrackera-cool-tool/#comments</comments>
		<pubDate>Thu, 06 May 2010 18:04:03 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mactracker]]></category>

		<guid isPermaLink="false">http://haidersabri.com/2010/05/06/mactrackera-cool-tool/</guid>
		<description><![CDATA[Last week I walked into a huge tech company that had 30&#34; Dell monitors on every developer&#8217;s desk. The obvious reaction was temptation on my part. Anyhow, I started to wonder whether my Mac Pro &#38; Macbook Pro would suppor the high resolution it offers. Turns out the monitor needs a graphics card that supports [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I walked into a huge tech company that had 30&quot; Dell monitors on every developer&#8217;s desk. The obvious reaction was temptation on my part. Anyhow, I started to wonder whether my Mac Pro &amp; Macbook Pro would suppor the high resolution it offers. Turns out the monitor needs a graphics card that supports dual-link DVI. Well, I found a really cool tool named <a rel="nofollow" href="http://mactracker.dreamhosters.com/" onclick="urchinTracker('/outgoing/mactracker.dreamhosters.com/?referer=');">MacTracker</a> that helped me make sure that my older Mac Pro would support it. This will help if you just want to know more about how different versions of Macs work.Â  <a rel="nofollow" href="http://mactracker.dreamhosters.com/" onclick="urchinTracker('/outgoing/mactracker.dreamhosters.com/?referer=');">Check it out</a>. </p>
<p style="color:#008;text-align:right;"><small><em>Powered by</em> <a rel="nofollow" href="http://www.qumana.com/" onclick="urchinTracker('/outgoing/www.qumana.com/?referer=');">Qumana</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2010/05/06/mactrackera-cool-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySpaceID iPhone SDK</title>
		<link>http://haidersabri.com/2009/09/11/myspaceid-iphone-sdk/</link>
		<comments>http://haidersabri.com/2009/09/11/myspaceid-iphone-sdk/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 11:43:25 +0000</pubDate>
		<dc:creator>haidersabri</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[myspace]]></category>
		<category><![CDATA[objective-c]]></category>

		<guid isPermaLink="false">http://haidersabri.com/2009/09/02/myspaceid-iphone-sdk/</guid>
		<description><![CDATA[I recently completed the beta version of the MySpaceID iPhone SDK. The idea is to create a cocoa library that is easy for iPhone developers to start using when they want to integrate their iPhone applications with MySpaceID.Â  This version of the library comes with support of 3-legged-OAuth, which keeps in tune with MySpace&#8217;s devotion [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color:Black">I recently completed the beta version of the MySpaceID iPhone SDK. The idea is to create a cocoa library that is easy for iPhone developers to start using when they want to integrate their iPhone applications with MySpaceID.Â </span></p>
<p><br/></p>
<p>This version of the library comes with support of 3-legged-OAuth, which keeps in tune with MySpace&#8217;s devotion to the &quot;Open Stack&quot;.Â  The 3-legged-OAuth flow requires a redirect to the browser, so your application will go to Safari for authentication.Â  Although breaking away from your application does seem rather counterintuitive from a user experience, the good news is after authentication, your app will be fired up once again.Â  This is because the SDK takes in your iPhone URL scheme to make a callback after authentication. The other good news is, you will only have to do this one time to associate your user with his MySpaceID.Â  This is because the SDK stores the Access Token needed for future requests.</p>
<p><br/></p>
<p><span style="color:Black">On top of OAuth support, the SDK comes with methods to make calls to the MySpace REST API&#8217;s.Â  We have full support for all the V1 and V2 endpoints. As more and more API&#8217;s get added, we will add more support.</span></p>
<p><span style="color:Black">I&#8217;ve also added a VERY simple dumb-down sample application with the SDK, just to demonstrate the OAuth flow, and a few API calls.</span></p>
<p><br/></p>
<p><span style="color:Black">I have to admit that this is actually my first real cocoa/iPhone project.Â  I&#8217;ve had a blast picking it up, and I really like the Cocoa Touch framework.Â  Coming from a managed and scripting code background, I did have hiccups with memory management, but I got the hang of it eventually.Â  I definitely see areas of improvement to the code, and welcome any feedback.</span></p>
<p><br/></p>
<p><span style="color:Black">Take a look at my code. We have open-sourced it like all the other SDK&#8217;s. Check it out here: <a rel="nofollow" href="http://code.google.com/p/myspaceid-iphone-sdk/" onclick="urchinTracker('/outgoing/code.google.com/p/myspaceid-iphone-sdk/?referer=');">Google Code Page</a> <a rel="nofollow" href="http://wiki.developer.myspace.com/index.php?title=Category:MySpaceID_SDK_for_iPhone" onclick="urchinTracker('/outgoing/wiki.developer.myspace.com/index.php?title=Category_MySpaceID_SDK_for_iPhone&amp;referer=');">MySpace Wiki Page</a> </span></p>
]]></content:encoded>
			<wfw:commentRss>http://haidersabri.com/2009/09/11/myspaceid-iphone-sdk/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
