<?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>Liquid Rhymes &#187; Development</title>
	<atom:link href="http://www.liquidrhymes.com/category/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.liquidrhymes.com</link>
	<description>Musings of Simon Mosk-Aoyama</description>
	<lastBuildDate>Mon, 25 Apr 2011 17:17:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Quick Trick to View Mobile Versions of Web Sites Using Chome on OS X</title>
		<link>http://www.liquidrhymes.com/2011/03/31/quick-trick-to-view-mobile-versions-of-web-sites-using-chome-on-os-x/</link>
		<comments>http://www.liquidrhymes.com/2011/03/31/quick-trick-to-view-mobile-versions-of-web-sites-using-chome-on-os-x/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 17:53:54 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[trick]]></category>

		<guid isPermaLink="false">http://www.liquidrhymes.com/?p=233</guid>
		<description><![CDATA[The other night I attended a talk by Google&#8217;s Steven Souders, a web performance expert (and creator of YSlow). He&#8217;s now almost exclusively focused on mobile performance, and he shared a little trick to view mobile sites on the desktop, and I thought I&#8217;d share exact steps on how to do that on OS X [...]]]></description>
			<content:encoded><![CDATA[<p>The other night I attended a talk by Google&#8217;s <a href="http://twitter.com/souders">Steven Souders</a>, a web performance expert (and creator of <a href="http://developer.yahoo.com/yslow/">YSlow</a>).  He&#8217;s now almost exclusively focused on mobile performance, and he shared a little trick to view mobile sites on the desktop, and I thought I&#8217;d share exact steps on how to do that on OS X as I used it today.</p>
<p>For browsing I use <a href="http://www.google.com/chrome/intl/en/landing_chrome_mac.html?hl=en">Chrome</a> as it&#8217;s incredibly fast and based on <a href="http://www.webkit.org/">webkit</a>, the rendering engine inside Mobile Safari (iphone) and the Android Browser. While Firefox has some <a href="https://addons.mozilla.org/en-us/firefox/addon/user-agent-switcher/">great tools</a> that allow you to change the user-agent string, which is how most sites detect which version of the site to render, Chrome doesn&#8217;t have any easy-to-use extensions.</p>
<p>You can, however, change it from the command line when you launch the browser. To do this, close any open windows of Chrome and launch the following from the command line. </p>
<p>For Android I used the user-agent string from my HTC Evo:<br />
<code>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome -user-agent="Mozilla/5.0 (Linux; U; Android 2.2; en-us; Sprint APA9292KT Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1"</code></p>
<p>For the iPhone I used one for the iPhone 4:<br />
<code>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome -user-agent="Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7"</code></p>
<p>and for the iPad I used the one from my iPad:<br />
<code>/Applications/Google Chrome.app/Contents/MacOS/Google Chrome -user-agent="Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5"</code></p>
<p>To see the difference take a look at google.com with normal Chrome vs. with the Android user-agent:</p>
<p>
<div style="text-align: center">Mobile (Android)</div>
<p><img src="http://www.liquidrhymes.com/wp-content/uploads/2011/03/Screen-shot-2011-03-31-at-10.43.41-AM-300x222.png" alt="" title="Screen shot 2011-03-31 at 10.43.41 AM" width="300" height="222" class="aligncenter size-medium wp-image-236" /></p>
<p>
<div style="text-align: center">Desktop</div>
<p><img src="http://www.liquidrhymes.com/wp-content/uploads/2011/03/Screen-shot-2011-03-31-at-10.46.04-AM-300x222.png" alt="" title="Screen shot 2011-03-31 at 10.46.04 AM" width="300" height="222" class="aligncenter size-medium wp-image-235" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2011/03/31/quick-trick-to-view-mobile-versions-of-web-sites-using-chome-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I&#8217;ve Got 5 On It &#8211; Why I Believe HTML5 Will Supplant Apps as the Mobile Applications of Choice</title>
		<link>http://www.liquidrhymes.com/2010/09/11/ive-got-5-on-it-why-i-believe-html5-will-supplant-apps-as-the-mobile-applications-of-choice/</link>
		<comments>http://www.liquidrhymes.com/2010/09/11/ive-got-5-on-it-why-i-believe-html5-will-supplant-apps-as-the-mobile-applications-of-choice/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 23:50:04 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.liquidrhymes.com/?p=190</guid>
		<description><![CDATA[Photo courtesy of johncatral The last few months my co-founder and I have been focused on developing a mobile application, and one of the biggest debates we had was whether we wanted to develop native applications for the iPhone and Android. Our initial perception was that we needed to develop a native app, because that&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm3.static.flickr.com/2766/4257345088_b198e10c19_z.jpg" alt="phones" width="500" /></p>
<div class="fineprint">Photo courtesy of <a href="http://www.flickr.com/photos/johncatral/">johncatral</a></div>
<p>
The last few months my co-founder and I have been focused on developing a mobile application, and one of the biggest debates we had was whether we wanted to develop native applications for the iPhone and Android. Our initial perception was that we <strong>needed</strong> to develop a native app, because that&#8217;s where all the user&#8217;s are. After doing some more research, however, we decided that we would develop our initial version in HTML5. This post discusses why we made that decision.</p>
<p>First off, a little background about the state of mobile application development. There are two major ways to get your software to user&#8217;s on a mobile device:</p>
<ul>
<li>Build a native application</li>
<li>Build a web version of your application &#8211; in HTML5</li>
</ul>
<p><strong>Building Native Apps</strong></p>
<p>To build native apps you&#8217;ll need to build a version of your application for each mobile platform. The current dominant mobile platforms are Nokia&#8217;s Symbian (<a href="http://tech.fortune.cnn.com/2010/09/10/gartner-and-idc-plot-androids-meteoric-rise-to-2014/">widely panned</a> as not a true &#8220;smartphone platform&#8221;), Apple&#8217;s iOS, Google&#8217;s Android, BlackBerry&#8217;s BlackBerry OS. In addition, Palm&#8217;s WebOS may re-emerge as HP purchased them and may invest more in the platform, and Microsoft may roar back on the scene with the launch of <a href="http://en.wikipedia.org/wiki/Windows_Phone_7">Windows Phone 7</a>.</p>
<p><img src="http://chart.apis.google.com/chart?chxs=0,676767,0&#038;chxt=x&#038;chs=500x250&#038;cht=p&#038;chco=FFCC33|FFEAC0|E8F4F7|DDF8CC|E5ECF9|E8E8E8&#038;chl=|||||&#038;chdl=Symbian+(Nokia)|Android+(Google)|RIM+(BlackBerry)|iOS+(Apple)|Windows+Mobile+(Microsoft)|Other&#038;chp=0.1&#038;chtt=2010+Worldwide+SmartPhone+OS+Share+(Gartner)&#038;chd=s:YLLJDD" style="width:500; height:250" alt="Smartphone Market Share" /></p>
<p>Looking at that chart we can see we&#8217;ve got 4 major OS platforms to write for (subtracting Windows Mobile as it&#8217;s not long for the world), and 2 more looming on the horizon (Palm/HP&#8217;s WebOS, and Microsoft&#8217;s Windows Phone 7). Is it easy to build for these platforms?</p>
<ul>
<li>Symbian applications are written in C++, but some apps are written in Python and Adobe&#8217;s Flash. Most US app developers ignore Symbian&#8217;s platform, as it&#8217;s widely considered a lower-tier smartphone OS</li>
<li>Android applications are written in Java and written specifically for the OS. Google provides lots of support resources, but do not provide native UI elements for many functions, and thus many applications written for the platform look radically different from one another.</li>
<li>iOS applications are written in Objective-C, with a native UI library called <a href="http://developer.apple.com/technologies/ios/cocoa-touch.html">Cocoa</a> providing a lot of the UI elements. Most iOS applications therefore have a very similar UI</li>
<li>RIM&#8217;s BlackBerry OS Applications are written in Java</li>
</ul>
<p>One of the problems with developing for each platform is that there are differences between the devices on each platform. This has yet to become a huge deal, largely because the platforms are only a few years (I always pinch myself to remember: the iPhone launched only 3 years ago, in 2007!) old, but with Android there are differences in the OS versions (everywhere from version 1.5 to today&#8217;s current 2.2) and in the hardware devices, with iOS there are some running the latest version with multi-tasking and some not, and with BlackBerry some devices have a touchscreen and some do not. As a developer, writing for the different variations can be quite daunting!</p>
<p>In addition to writing across different languages and platforms there is another challenge to writing any kind of native application: installation and distribution. Bear with me a second while I tell an anecdote about applications: I remember my first job, in 1999, when I worked for an e-commerce company named SelfCare.com. For bug-tracking we used an application that the consulting company we hired, Cambridge Technology Partners, had written for us in Visual Basic. This application ran on each developer&#8217;s desktop and connected to a central server to pull down the data on the individual bugs. This worked fairly well, except when we had to fix a problem with the desktop software. The application&#8217;s developer would fire up his IDE, fix the problem, and then send out a mass email with an attached executable with the new software. Some people would inevitably not install, and would therefore be running old versions of the software with outdated features and problems. The same thing happens to native mobile applications these days: when you want to update your software to make a change (whether it be from market demand or a bug or innovation) some percentage of your users will ignore the change and blissfully go on using their old versions of the software. Some apps have taken to battling this by disabling use of the older versions until they update, but this is a terrible user experience &#8211; user&#8217;s don&#8217;t want to have to worry about updating their version of your software, they just want it to work!</p>
<p>To sum up the issues with writing native apps:</p>
<ul>
<li>Many different device platforms</li>
<li>Differentiations in the devices and OS versions within the same platform</li>
<li>Multiple languages to write software in, and different UI&#8217;s across the different devices</li>
<li>Deploying updates can be difficult because users do not want to download and install new versions</li>
<li>One more issue specific to iOS &#8211; Apple has a <strong>review</strong> process, where they will approve your application or not, and if they don&#8217;t like it you won&#8217;t get to distribute your application to their customers</li>
</ul>
<p><strong>Writing Web (HTML5) Apps</strong><br />
In Mark Suster&#8217;s strong piece, <a href="http://www.bothsidesofthetable.com/2010/02/17/app-is-crap-why-apple-is-bad-for-your-health/">App is Crap</a>, he argues that mobile applications will be the way of the future. If you think back to my example about bug-tracking software it&#8217;s easy to see the parallel to mobile software. In 2010 (almost) nobody runs a native desktop version of bug-tracking software &#8211; they all run web-based tools like <a href="http://www.bugzilla.org/">bugzilla</a>. The ubiquity of browsers with standards has led to application development being about writing applications for the web standard, and anyone with a modern browser being able to access it. If a new hot operating system platform came out tomorrow (fat chance of that) as long as it had a modern browser written, that user would have access to all the same web applications users of windows and OS X would. </p>
<p>A few years ago a friend and I were talking about what might be included in the next versions of the browser, and I said I thought that the introduction of vector graphics would be revolutionary, as all these background images and text effects created in photoshop would eventually be done in the browser. Fast forward a few years and HTML5 and CSS3 are finally bringing that promise to reality. HTML5 and CSS3 are next-generation variants of the underlying language powering the web &#8211; developers write their web-based software in using these technologies, and browsers interpret them (with others, like javascript) into the applications we know and love. This has also proved big for mobile devices, as features once available only for native apps are now available for web devices.</p>
<p>One of these features is the ability to detect touch and swipe gestures, specific to touch devices. This allows mobile web applications to respond to these events and not just think of the world as clicks. Mobile web frameworks such as <a href="http://www.jqtouch.com/">jqTouch</a> and <a href="http://www.sencha.com/products/touch/">Sencha Touch</a> allow mobile web developers to develop better software with less code, and the proliferation of larger devices will lead to more searching on the device (as opposed to just downloading apps), which will result in more opportunities for developers to market their web-based apps.</p>
<p>There are limits to what a web-based mobile application can do, however:</p>
<ul>
<li>Mobile web applications cannot access some device specific features, like the camera, dialer, and contact list (note that the <a href="http://diveintohtml5.org/geolocation.html">user&#8217;s location can be used in HTML5</a>)</li>
<li>Mobile web applications aren&#8217;t quite as sensitive to user&#8217;s actions as native apps are, and some actions are not accessible for mobile web apps</li>
<li>There is no major app store for mobile web applications</li>
</ul>
<p>The last point, the app store, seemed like the most compelling reason for my co-founder and I to go with native apps over mobile web apps. We figured that when we built a iOS mobile app and put it in Apple&#8217;s app store, people would download it, and we&#8217;d have instant distribution. After meeting with a few people familiar with this space, we discovered this is just not the case. Almost universally we heard that distribution is &#8220;difficult&#8221;, you need to &#8220;get lucky&#8221;, and that users &#8220;don&#8217;t search, they download from the top 10 lists&#8221;. We were most surprised to hear this reason, as it wiped out one of the biggest reasons to develop a native version of our app.</p>
<p><strong>Final Thoughts</strong><br />
Ultimately there are pros and cons to building native and web-based mobile apps, at least in 2010. Coming from a web background, and subscribing to the &#8220;<a href="http://en.wikipedia.org/wiki/Lean_Startup">lean-startup</a>&#8221; approach of iteration, I feel more comfortable with building a web application, looking at what my user&#8217;s are telling me with their actions (measurable web data &#8211; in clicks and touches), and making changes based on that feedback. Time will tell if I&#8217;m right, but I am betting that mobile web apps &#8211; using HTML5 &#8211; are the future, and native mobile apps, like desktop apps before them, will be afterthoughts for all but a few in the future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2010/09/11/ive-got-5-on-it-why-i-believe-html5-will-supplant-apps-as-the-mobile-applications-of-choice/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8220;Smoking Hot Bartenders&#8221; is Some Smoking Hot Facebook Spam</title>
		<link>http://www.liquidrhymes.com/2010/08/25/smoking-hot-bartender-is-some-smoking-hot-facebook-spam/</link>
		<comments>http://www.liquidrhymes.com/2010/08/25/smoking-hot-bartender-is-some-smoking-hot-facebook-spam/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 19:23:43 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Facebook Spam]]></category>
		<category><![CDATA[Wack]]></category>

		<guid isPermaLink="false">http://www.liquidrhymes.com/?p=155</guid>
		<description><![CDATA[How I got suckered into Liking "Smoking Hot Bartenders" on Facebook]]></description>
			<content:encoded><![CDATA[<p>Yesterday I noticed a ton of my friends on Facebook were &#8220;liking&#8221; <strong>‎:|:|:|:|:|:| Smoking Hot Bartenders <img src='http://www.liquidrhymes.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> :|:|:|:|:|</strong>.  Noticing that even some friends who I would never think would like that (girls), I decided to click on it and take a look. </p>
<p><a href="http://www.liquidrhymes.com/wp-content/uploads/2010/08/friends-like-hot-bartenders.png"><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/friends-like-hot-bartenders.png" alt="" title="friends-like-hot-bartenders" width="500" class="aligncenter size-full wp-image-169" /></a></p>
<p>The &#8220;Smoking Hot Bartenders&#8221; site, of course, is some sort of spam site where the user is prompted to fill out some leadgen form (or offer) in order to access pictures of the &#8220;smoking hot bartenders&#8221;. Declining to do so, I closed the window and figured that was that.</p>
<p>I was quite surprised to check my feed today and notice that I had &#8220;liked&#8221; the same page on Facebook. How did this happen?</p>
<p>I decided to take a look at the site, <a href="http://cutebabesbartending.info/">http://cutebabesbartending.info/</a>, and see how they were executing this very viral scheme.</p>
<p>The first thing you see when you land on the site, most likely from Facebook (and hence logged in), is a screen with some hot girls and a link to click through. This link is the key to the scheme.</p>
<p><a href="http://www.liquidrhymes.com/wp-content/uploads/2010/08/Screen-shot-2010-08-25-at-11.43.35-AM.png"><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/Screen-shot-2010-08-25-at-11.43.35-AM.png" alt="" title="Smoking-hot-bartenders-flash-screen" width="500"  class="aligncenter size-full wp-image-156" /></a></p>
<p>Taking a look the source of the page we see:<br />
[html]<br />
&lt;h2&gt;<br />
    &lt;a href=&quot;photos.html&quot;&gt;Continue here to see photos&lt;/a&gt;<br />
&lt;/h2&gt;<br />
&lt;div style=&quot;overflow: hidden; position: absolute; filter:alpha(opacity=0); -moz-opacity:0.0; -khtml-opacity: 0.0; opacity: 0.0;&quot; id=&quot;aaaa&quot;&gt;<br />
  &lt;iframe src=&quot;http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fcutebabesbartending.info%2F&amp;amp;layout=standard&amp;amp;show_faces=true&amp;amp;width=450&amp;amp;action=like&amp;amp;font&amp;amp;colorscheme=dark&amp;amp;height=80&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;border:none; overflow:hidden; width:20px; height:20px;&quot; allowTransparency=&quot;true&quot; id=&quot;xxx&quot; name=&quot;xxx&quot;&gt;&lt;/iframe&gt;<br />
&lt;/div&gt;<br />
[/html]</p>
<p>Note we have here an absolutely positioned DIV with an IFRAME to the facebook like page. But where is the code that clicks the link? If they are triggering from the click why does this facebook like button fire? Check out the code below. Note that id <strong>xxx</strong> is the iframe itself, and <strong>aaaa</strong> is the facebook like button.</p>
<p>[html]<br />
&lt;script&gt;<br />
      var xxx = 0;<br />
      var aaaa = document.getElementById(&#8216;aaaa&#8217;);<br />
      var standardbody=(document.compatMode==&quot;CSS1Compat&quot;)? document.documentElement : document.body</p>
<p>      function lololol(e){<br />
        if (window.event) {<br />
          aaaa.style.top = (window.event.y-5)+standardbody.scrollTop+&#8217;px&#8217;;<br />
          aaaa.style.left = (window.event.x-5)+standardbody.scrollLeft+&#8217;px&#8217;;<br />
        }<br />
        else {<br />
          aaaa.style.top = (e.pageY-5)+&#8217;px&#8217;;<br />
          aaaa.style.left = (e.pageX-5)+&#8217;px&#8217;;<br />
        }<br />
      }<br />
        document.onmousemove = function(e) {<br />
          if (xxx == 0) {lololol(e);}<br />
        }<br />
&lt;/script&gt;<br />
[/html]</p>
<p>This is kind of ingenious: they are re-drawing the Facebook like button so it follows your mouse around the screen, and when you click on the link you click on both the like button and the link to the next page!</p>
<p>But why don&#8217;t you see the like button? It&#8217;s because the opacity of the parent element is set to 0 (ie completely transparent, thanks to commenter Colby Russell for correcting me). Let&#8217;s change this and see what happens:<br />
<a href="http://www.liquidrhymes.com/wp-content/uploads/2010/08/smoking-hot-scam.png"><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/smoking-hot-scam.png" alt="" title="smoking-hot-scam" width="500" class="aligncenter size-full wp-image-160" /></a></p>
<p>Look at that Facebook like button there by my cursor! </p>
<p>This is fairly brilliant spam &#8211; you click off of Facebook and unsuspectingly click on the link to get to the page where you assume there might be spam but you can ignore it. However, unbeknownst to you, you&#8217;ve already &#8220;liked&#8221; the spammy page, and it&#8217;s now sitting in your feed waiting for the next sucker, er&#8230; friend, to click on it.</p>
<p><strong>Updated</strong>: commenter <a href="http://theryanking.com/">Ryan King</a> notes that the term for this spammy technique is <a href="http://en.wikipedia.org/wiki/Clickjacking">Clickjacking</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2010/08/25/smoking-hot-bartender-is-some-smoking-hot-facebook-spam/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>These are A Few of My Favorite Startup Tools: Part 2 – Editors, Tools, and Useful Open Source Software</title>
		<link>http://www.liquidrhymes.com/2010/08/09/these-are-a-few-of-my-favorite-startup-tools-part-2-%e2%80%93-editors-tools-and-useful-open-source-software/</link>
		<comments>http://www.liquidrhymes.com/2010/08/09/these-are-a-few-of-my-favorite-startup-tools-part-2-%e2%80%93-editors-tools-and-useful-open-source-software/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:23:13 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.liquidrhymes.com/?p=134</guid>
		<description><![CDATA[In my last post I talked about some of the tools I&#8217;ve been using since I waded back into the world of startups and coding, and discussed some useful hosting services, languages, and frameworks. In this post I&#8217;m going to talk about some of the other tools I use to develop in. Before I go [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post I talked about some of the tools I&#8217;ve been using since I waded back into the world of startups and coding, and discussed some useful hosting services, languages, and frameworks.</p>
<p>In this post I&#8217;m going to talk about some of the other tools I use to develop in. Before I go into the tools I should talk about my development machine, my several year old MacBook Pro 15&#8243;. According to &#8220;About This Mac&#8221;, it&#8217;s a 2.16GHz Intel Core 2 Duo with 3GB of RAM, and it&#8217;s running snow leopard (10.6 &#8211; does any one else find Mac&#8217;s naming scheme confusing?). I switched from windows to the Mac primarily because of the external aesthetics, and I have mixed feelings about the machine (more on that some other time, perhaps).</p>
<p><strong>Tools</strong></p>
<ul>
<li><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/komodo-Resized.png" alt="" title="komodo" width="300" height="196" class="aligncenter size-full wp-image-140" style="margin: 10px; float: right" /><strong><a href="http://www.activestate.com/komodo-edit">Komodo Edit</a></strong> &#8211; Komodo Edit is a great freeware editor, derived from the full IDE <a href="http://www.activestate.com/komodo-ide">Komodo IDE</a> (which is not free). It&#8217;s not a full-featured IDE (no source control integration, for example), but it does syntax highlighting and supports intellisense (auto-completing method names, signatures, etc.) so it gets the job done &#8211; and of course the price is right <img src='http://www.liquidrhymes.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
<li><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/gimp-Resized.png" alt="" title="gimp" width="300" class="aligncenter size-full wp-image-140" style="margin: 10px; float: right" />I don&#8217;t know how most startups afford a full-featured image editor like Photoshop, so thankfully there is a decent open source competitor &#8211; the <strong><a href="http://www.gimp.org/">Gimp</a></strong>. It&#8217;s a strong knockoff with a ton of capabilities, and once you get by the interface idiosyncrasies you&#8217;ll wonder why you need to spend almost a grand on the real-deal. For those who are baffled by it I highly recommend this <a href="http://docs.gimp.org/en/gimp-getting-unstuck.html">bit on getting unstuck</a>.</li>
<li>For those who have windows I also highly recommend <a href="http://www.getpaint.net/">paint.NET</a> &#8211; it&#8217;s a less full-featured image editor than the Gimp, but it&#8217;s also a heck of a lot easier to use. It&#8217;s got some great features to do simple but useful things, like extending the length of a specific region of an image.</li>
<li><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/balsamiq-Resized.png" alt="" title="balsamiq" width="300"  class="aligncenter size-full wp-image-140" style="margin: 10px; float: right" />For mockups I&#8217;ve been using the adobe air app <a href="http://www.balsamiq.com/">Balsamiq</a> since I discovered it while working on new features for Hark!. It&#8217;s not free (I believe it&#8217;s $79), but it supports all platforms as an air app (even linux, albeit poorly), and you save a lot of time creating mockups in it over drawing (and it&#8217;s cheaper than a license of Visio).</li>
<li>I recently stumbled on <a href="http://gomockingbird.com/">Mockingbird</a>, which looks a lot like a web knockoff of Balsamiq. It&#8217;s free while in beta, so it looks like it might be worth a whirl.</li>
<li><img src="http://www.liquidrhymes.com/wp-content/uploads/2010/08/eclipse-Resized.png" alt="" title="eclipse" width="300" class="aligncenter size-full wp-image-140" style="margin: 10px; float: right" />When working with java two editors I used were <a href="http://netbeans.org/">Netbeans</a> and <a href="http://eclipse.org/">Eclipse</a>. Both are free, with the former being a Sun-sponsored (I think they bought the company) product, and the latter being a community based one, largely driven by IBM. I found both to be really useful, but Eclipse to be excruciatingly slow in some cases, so I ended up using Netbeans as the go-to.</li>
</ul>
<p><strong>Useful Frameworks</strong></p>
<ul>
<li>For pulling data from the web you used to have to right your own web scraper/spider to gather data from different sites. But now a host of sraping frameworks have sprung up, and I highly recommend <a href="http://scrapy.org/">scrapy</a>, which is written in python. There is really no reason to have to write your own spider anymore.</li>
<li>
</ul>
<p><strong>Mobile Tools</strong></p>
<ul>
<li>Anyone can create a great mockup of a mobile app using <a href="http://mockapp.com/about/">MockApp</a>, an open source mockup framework for powerpoint/etc. It basically gives you great widgets to use to make a mockup of your app.</li>
<li>If you want to take your mockup a little further and actually build something, check out <a href="http://jqtouch.com/">jQTouch</a> &#8211; it&#8217;s a framework for developing apps that look like native iphone apps, but run in safari. If you want to have something that looks like an iphone app in a hurry this is the way to go.</li>
<li>I&#8217;m going to talk about Titanium more in a later post, but it&#8217;s a javascript/html framework that allows you to build native mobile apps. The idea is that you write your app in javascript, and it compiles it to native code for iPhone, Android, and even Blackberry (if you pay for it). It&#8217;s awesome in theory and somewhat good in practice. There are other frameworks that do this as well, such as <a href="http://www.phonegap.com/">PhoneGap</a>, and it&#8217;s in theory it&#8217;s a great way to write a native app for the mobile platform if you&#8217;re a web guy. In practice I&#8217;ve found Titanium to have mixed results, which is probably worthy of a future post on it&#8217;s own.</li>
</ul>
<p>I&#8217;m sure all of you have discovered a ton of other great tools &#8211; what else should I be using? </p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2010/08/09/these-are-a-few-of-my-favorite-startup-tools-part-2-%e2%80%93-editors-tools-and-useful-open-source-software/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>These are A Few of My Favorite Startup Tools: Part 1 &#8211; Frameworks, Platforms, and Hosting</title>
		<link>http://www.liquidrhymes.com/2010/07/20/these-are-a-few-of-my-favorite-startup-tools-part-1-frameworks-platforms-and-hosting/</link>
		<comments>http://www.liquidrhymes.com/2010/07/20/these-are-a-few-of-my-favorite-startup-tools-part-1-frameworks-platforms-and-hosting/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 06:05:26 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.liquidrhymes.com/?p=110</guid>
		<description><![CDATA[Photo by ian_munroe In the past couple years I&#8217;ve been working for/on startups I&#8217;ve found that the world of internet development had changed fairly substantially since the time I seriously coded for work. When I graduated from college in 1999 I went to work for an ecommerce company called SelfCare.com (we were going to be [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm4.static.flickr.com/3627/3315718996_a89ec57de4.jpg" alt="tool kit" /></p>
<div style="font-size:0.8em">Photo by <a href="http://www.flickr.com/photos/ian_munroe">ian_munroe</a></div>
<p></p>
<p>In the past couple years I&#8217;ve been working for/on startups I&#8217;ve found that the world of internet development had changed fairly substantially since the time I seriously coded for work. </p>
<p>When I graduated from college in 1999 I went to work for an ecommerce company called <a href="http://www.selfcare.com/">SelfCare.com</a> (we were going to be the Amazon of wellness products), and I was working in Microsoft&#8217;s <a href="http://en.wikipedia.org/wiki/Active_Server_Pages">Active Service Pages</a> (ASP). No, not <a href="http://en.wikipedia.org/wiki/ASP.NET">ASP.NET</a>, but ASP, with it&#8217;s (horrendous) <a href="http://en.wikipedia.org/wiki/VBScript">VBScript</a> language. I left SelfCare a year later (it subsequently went out of business and was purchased for it&#8217;s assets almost immediately after I left) and worked for Ask Jeeves, where I worked in ASP and then got to lead the charge to ASP.NET (I got to spend some great time up at Microsoft getting the inside scoop on their new platform, which really was a huge step forward). A huge chunk of my coding time was spent trying to make my markup compatible for <a href="http://en.wikipedia.org/wiki/Netscape#Netscape_Communicator_.28versions_4.0.E2.80.934.8.29">Netscape Communicator 4.7</a>, so you know about when this was. A few years later I moved to management, and I really didn&#8217;t do a whole lot of coding for number of years.</p>
<p>Flash forward to 2009: I&#8217;m working at a startup, and I decide to roll up my sleeves and get my hands dirty again. Well, I&#8217;ve found there are a ton of tools, frameworks, and software that make my job as a developer much easier, so I decided to put together as list of them. I&#8217;ll start with Frameworks, Languages, and Hosting:</p>
<p><strong>Frameworks and Languages</strong></p>
<p>I used to write a lot of code by hand to get cross-browser compatibility, but the rise of AJAX frameworks has eliminated those incredibly tedious and laborious tasks. My code used to be very difficult to read as well, with HTML mixed in with scripting:</p>
<p>[html]<br />
  &lt;div&gt;&lt;% = request.POST[&quot;hello_world&quot;] %&gt;&lt;/div&gt;<br />
[/html]</p>
<p>Yuck! Thankfully, the <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC Framework</a> has changed all of that, and I rarely have to embed real code in markup. These frameworks help me do this:</p>
<ul>
<li><strong><a href="http://python.org/">Python</a></strong> and <strong><a href="http://www.djangoproject.com/">Django</a>/<a href="http://pylonshq.com/">Pylons</a>/<a href="http://webpy.org/">Web.py</a>/etc.</strong>. The former is a great dynamically typed language with a ton of web support, and the latter are <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> frameworks for it. Starting with these make your life a hell of a lot easier.</li>
<li><strong><a href="http://rubyonrails.org/">Ruby on Rails</a></strong>. The former (Ruby) is the language, the latter (Rails) is a MVC framework with some <a href="http://en.wikipedia.org/wiki/Ajax_(programming)">AJAX</a> (<a href="http://www.prototypejs.org/">Prototype</a>) mixed in. Ruby is very similar to python IMHO, and Rails makes it really easy to develop web apps, but I get nervous about the <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> in Rail, as I always wonder what it&#8217;s doing beneath my high level code.</li>
<li><strong><a href="http://php.net/">PHP</a></strong> and <strong><a href="http://cakephp.org/">CakePHP</a></strong>. PHP is the P in LAMP, and is a really popular scripting language. It&#8217;s pretty limited (doesn&#8217;t do threads, for example) for some tasks, but it&#8217;s widely supported and a ton of great open source applications (like <a href="http://www.joomla.org/">Joomla</a> and <a href="http://www.magentocommerce.com/">Magento</a>) are written in it. CakePHP is a well supported MVC for PHP.</li>
<li><strong><a href="http://jquery.org/">jQuery</a></strong>. The most <a href="http://trends.builtwith.com/javascript/JQuery">successful AJAX library</a>, and really easy to use. It&#8217;s hard for me to remember writing DOM manipulation in javascript, but that&#8217;s what I did before I found jQuery.</li>
<li><strong><a href="http://www.blueprintcss.org/">Blueprint CSS Framework</a></strong>. Implementing layouts can be very time consuming, and in 2010 you definitely do not want to resort to html tables, so it&#8217;s best to do layouts using CSS positioning. For those of us who aren&#8217;t CSS experts thankfully there is help &#8211; the Blueprint CSS Framework makes your layout life a thousand times better. You can get table like layouts without a ton of work using Blueprint, which is a huge time saver.</li>
</ul>
<p><strong>Hosting and Servers</strong></p>
<p>Cloud computing has taken off the past few years, and you no longer need to buy your own servers to get off the ground and going. </p>
<ul>
<li><strong><a href="http://aws.amazon.com/ec2/">Amazon EC2</a></strong>. I probably don&#8217;t need to explain this one, the best known cloud computing platform allows you to add server capacity at-will (and at-wallet). However, you pretty much need to run your own infrastructure as Amazon only provides base OS images &#8211; you&#8217;ll still need to do system administration on your EC2 instances.</li>
<li><strong><a href="http://mediatemple.net/">Media Temple</a></strong>. I use Media Temple for any PHP hosting needs, and with the $50/mo <a href="http://www.mediatemple.net/webhosting/dv/">dedicated virtual instance</a> I get root ssh access, which is great. </li>
<li><a href="http://code.google.com/appengine/"><strong>Google App Engine</strong></a>. I&#8217;ve been using Google&#8217;s cloud computing service lot more recently, as it lets you get an application up quickly and for free (you pay as you consume more resources). Differing from Amazon&#8217;s EC2 in that Google doesn&#8217;t let you install your own OS and languages (you have to use what they provide), it&#8217;s great in that it&#8217;s free (well, it starts that way) and you don&#8217;t have to do much of your own system administration. App Engine currently supports java and python, and you can run any of the python MVC frameworks on it. I love that I can get a site up in less than a half hour by copying an existing app engine project, editing it, and moving my DNS there.</li>
</ul>
<p>That&#8217;s the initial plumbing. I&#8217;ll talk more in my next post about editors, software tools, and other useful open source software.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2010/07/20/these-are-a-few-of-my-favorite-startup-tools-part-1-frameworks-platforms-and-hosting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Sphinx Search Running with MediaWiki on OSX</title>
		<link>http://www.liquidrhymes.com/2010/06/16/getting-sphinx-search-running-with-mediawiki-on-osx/</link>
		<comments>http://www.liquidrhymes.com/2010/06/16/getting-sphinx-search-running-with-mediawiki-on-osx/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 18:25:41 +0000</pubDate>
		<dc:creator>Simon</dc:creator>
				<category><![CDATA[Mediawiki]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[mediawiki]]></category>

		<guid isPermaLink="false">http://liquidrhymes.com/?p=1</guid>
		<description><![CDATA[I had a bit of an issue getting <a href="http://sphinxsearch.com/">Sphinx Search</a> running with MediaWiki in OSX as I found creating a plist to be a harder problem than I anticipated. I followed the standard <a href="http://www.mediawiki.org/wiki/Extension:SphinxSearch#Installation_Instructions">Mediawiki</a> installation instructions until I got to the point of setting up the daemon.]]></description>
			<content:encoded><![CDATA[<p>I had a bit of an issue getting <a href="http://sphinxsearch.com/">Sphinx Search</a> running with MediaWiki in OSX as I found creating a plist to be a harder problem than I anticipated. I followed the standard <a href="http://www.mediawiki.org/wiki/Extension:SphinxSearch#Installation_Instructions">Mediawiki</a> installation instructions until I got to the point of setting up the daemon.</p>
<p>In OS X it turns out the way to get a daemon to run is to run using <a href="http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPSystemStartup/Articles/Daemons.html">launchd</a>. The process to get one of these to run is to create an XML file in <code>/Library/LaunchDaemons</code> (there OS X has it&#8217;s own plist files in <code>/Library/LaunchDaemons</code>) and run <a href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=launchctl"><code>launchctl</code></a> to start the daemon.</p>
<p>I created my own daemon file for Sphinx, sphinx, in /Library/LaunchDaemons:</p>
<p>[xml]<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot;<br />
        &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;<br />
&lt;plist version=&quot;1.0&quot;&gt;<br />
&lt;dict&gt;<br />
        &lt;key&gt;Label&lt;/key&gt;<br />
        &lt;string&gt;org.search.sphinx&lt;/string&gt;<br />
        &lt;key&gt;UserName&lt;/key&gt;<br />
        &lt;string&gt;simon&lt;/string&gt;<br />
        &lt;key&gt;ProgramArguments&lt;/key&gt;<br />
        &lt;array&gt;<br />
                &lt;string&gt;/usr/local/bin/searchd&lt;/string&gt;<br />
                &lt;string&gt;&#8211;config&lt;/string&gt;<br />
                &lt;string&gt;/Users/simon/source/mediawiki/wikinutrition/private/sphinx.conf&lt;/string&gt;<br />
        &lt;/array&gt;<br />
        &lt;key&gt;StandardOutPath&lt;/key&gt;<br />
        &lt;string&gt;/var/log/sphinx/sphinx-startup.log&lt;/string&gt;<br />
        &lt;key&gt;KeepAlive&lt;/key&gt;<br />
        &lt;true/&gt;<br />
        &lt;key&gt;debug&lt;/key&gt;<br />
        &lt;true/&gt;<br />
        &lt;key&gt;RunAtLoad&lt;/key&gt;<br />
        &lt;true/&gt;<br />
&lt;/dict&gt;<br />
&lt;/plist&gt;<br />
[/xml]<br />
You can see I am running the daemon as myself using the <b>UserName</b> key.</p>
<p>Unfortunately when I went to start this using <code>launchctl load -w /Library/LaunchDaemons/sphinx</code> nothing appeared to happen. No error message, no nothing. When I turned the debug setting on (by adding &lt;key&amp;gtdebug&lt;/key&gt;&lt;true/&gt;), however, I noticed in <code>/var/log/system.log</code> a number of these messages:</p>
<p><code><br />
Jun 15 17:13:26 simon-mosk-aoyamas-computer-6 com.apple.launchd[1] (org.search.sphinx): Throttling respawn: Will start in 10 seconds<br />
</code></p>
<p>Googling this led to this <a href="http://developer.apple.com/macosx/launchd.html">discovery from Apple</a>:</p>
<blockquote><p>
Jobs run from launchd should not duplicate launchd functionality; for instance, they should not use chroot(2). Furthermore, they should not do the things normally required of daemon processes, such as detaching from the terminal they are initially attached to. The only things that are strictly prohibited, however, are fork()/exit() combinations (including indirect methods, such as the daemon(3) library call). A server which attempts to run itself as a daemon in this way will seem to have finished running, potentially leading to launchd respawning it, or disabling the service. As launchd does not get stalled waiting for a child that hasn&#8217;t yet exited, it&#8217;s not necessary to try to prevent it.
</p></blockquote>
<p>Bingo &#8211; here is the problem &#8211; Sphinx&#8217;s searchd starts and forks as it&#8217;s a traditional daemon. Thankfully it has a <code>--console</code> option which does not fork, so adding  <code>--console</code> to the plist file (inside the &lt;ProgramArguments&gt; array) had me up and running!</p>
<p>The final file:<br />
[xml]<br />
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot;<br />
        &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;<br />
&lt;plist version=&quot;1.0&quot;&gt;<br />
&lt;dict&gt;<br />
        &lt;key&gt;Label&lt;/key&gt;<br />
        &lt;string&gt;org.search.sphinx&lt;/string&gt;<br />
        &lt;key&gt;UserName&lt;/key&gt;<br />
        &lt;string&gt;simon&lt;/string&gt;<br />
        &lt;key&gt;ProgramArguments&lt;/key&gt;<br />
        &lt;array&gt;<br />
                &lt;string&gt;/usr/local/bin/searchd&lt;/string&gt;<br />
                &lt;string&gt;&#8211;config&lt;/string&gt;<br />
                &lt;string&gt;/Users/simon/source/mediawiki/wikinutrition/private/sphinx.conf&lt;/string&gt;<br />
                &lt;string&gt;&#8211;console&lt;/string&gt;<br />
        &lt;/array&gt;<br />
        &lt;key&gt;StandardOutPath&lt;/key&gt;<br />
        &lt;string&gt;/var/log/sphinx/sphinx-startup.log&lt;/string&gt;<br />
        &lt;key&gt;KeepAlive&lt;/key&gt;<br />
        &lt;true/&gt;<br />
        &lt;key&gt;debug&lt;/key&gt;<br />
        &lt;true/&gt;<br />
        &lt;key&gt;RunAtLoad&lt;/key&gt;<br />
        &lt;true/&gt;<br />
&lt;/dict&gt;<br />
&lt;/plist&gt;<br />
[/xml]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.liquidrhymes.com/2010/06/16/getting-sphinx-search-running-with-mediawiki-on-osx/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

