<?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>Regularly Expressed</title>
	<atom:link href="http://regularlyexpressed.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://regularlyexpressed.com</link>
	<description>Matching great ideas and technology to solve the right problem</description>
	<lastBuildDate>Fri, 20 Apr 2012 17:48:18 +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>&#8220;Cognitive Architectures for Robotics&#8221; talk</title>
		<link>http://regularlyexpressed.com/cognitive-architectures-for-robotics-talk-at-oversee-net-april-24th/</link>
		<comments>http://regularlyexpressed.com/cognitive-architectures-for-robotics-talk-at-oversee-net-april-24th/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 00:45:04 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[disruptive technology]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[meetup robotics]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=458</guid>
		<description><![CDATA[The LA Machine Learning meetup is coming to our office on Tuesday evening, April 24th, for a talk about Cognitive Architectures for Robotics by Matt Chapman, assistant organizer of the...]]></description>
			<content:encoded><![CDATA[<p><a href="http://regularlyexpressed.com/wp-content/uploads/2012/04/BECCA_architecture_2012_01-medium.jpg"><img src="http://regularlyexpressed.com/wp-content/uploads/2012/04/BECCA_architecture_2012_01-medium.jpg" alt="BECCA Architecture" title="BECCA_architecture_2012_01-medium" width="800" height="304" class="size-full wp-image-467" /></a>The <a href="http://www.meetup.com/LA-Machine-Learning/">LA Machine Learning</a> meetup is coming to our office on Tuesday evening, April 24th, for a talk about <a href="http://www.meetup.com/LA-Machine-Learning/events/57602712/">Cognitive Architectures for Robotics</a> by Matt Chapman, assistant organizer of the <a href="http://www.meetup.com/LARoboticsClub/">LA Robotics</a> meetup.</p>
<p>From the meetup announcement:</p>
<blockquote><p>The Brain Emulating Cognition and Control Architecture (BECCA) is a software framework for feature creation, reinforcement learning and action selection, designed for especially robotics, but is also more broadly applicable. It&#8217;s currently implemented in MATLAB, with a port to Python underway, and has demonstrated some very basic ability to allow simple robotics hardware to learn basic behaviors given a defined goal or task.</p>
<p>This presentation will include some demos of capabilities, a review of the published literature, and an introduction to hacking the code base and creating your own BECCA Agents and Tasks.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/cognitive-architectures-for-robotics-talk-at-oversee-net-april-24th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhoneGap/HTML5 Meetup</title>
		<link>http://regularlyexpressed.com/phonegap-meetup/</link>
		<comments>http://regularlyexpressed.com/phonegap-meetup/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 00:29:12 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[meetup]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=448</guid>
		<description><![CDATA[Oversee is hosting a meetup, Introduction to Mobile Development for Web, IOS, Android Native Apps using PhoneGap/HTML5, here in our offices on Wednesday evening, March 28. Jorge Garifuna will teach...]]></description>
			<content:encoded><![CDATA[<p><a href="http://regularlyexpressed.com/wp-content/uploads/2012/03/phonegap.png"><img src="http://regularlyexpressed.com/wp-content/uploads/2012/03/phonegap.png" alt="" title="phonegap" width="1060" height="300" class="alignnone size-full wp-image-449" /></a></p>
<p>Oversee is hosting a meetup, <a href="http://www.meetup.com/socalwdd/events/53671562/" title="phonegap meetup">Introduction to Mobile Development for Web, IOS, Android Native Apps using PhoneGap/HTML5</a>, here in our offices on Wednesday evening, March 28. Jorge Garifuna will teach us how to design, build, test, and deploy one app across a wide range of iOS and Android devices using the <a href="http://phonegap.com/">PhoneGap</a> HTML5 app platform. The meetup is open to the public. We&#8217;re providing snacks, beer, and soft drinks, as well as free parking to the first 45 attendees. <a href="http://www.meetup.com/socalwdd/events/53671562/">RSVP</a> on the meetup site to attend.</p>
<p>PhoneGap is very cool technology. PhoneGap&#8217;s parent company, <a href="http://nitobi.com/">Nitobi</a> just got acquired by <a href="http://www.adobe.com/">Adobe</a>. The software, however, has gone into incubation as an <a href="http://apache.org/">Apache Software Foundation</a> open-source project, named <a href="http://incubator.apache.org/cordova/">Cordova</a>. It&#8217;s a JavaScript library providing a common API to different mobile platforms, along with tools to aid in packaging and distributing the apps you build using it.</p>
<p>It should be very interesting for anyone interested in mobile application development.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/phonegap-meetup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saying something nice about programming languages</title>
		<link>http://regularlyexpressed.com/saying-something-nice-about-programming-languages/</link>
		<comments>http://regularlyexpressed.com/saying-something-nice-about-programming-languages/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 23:56:31 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[programming languages]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=426</guid>
		<description><![CDATA[I recently saw several instances of an interesting proto-meme from a couple years ago: can you find something nice to say about every programming language you&#8217;ve used? Here&#8217;s my try...]]></description>
			<content:encoded><![CDATA[<p><a href="http://regularlyexpressed.com/wp-content/uploads/2012/02/say-something-nice.jpg"><img src="http://regularlyexpressed.com/wp-content/uploads/2012/02/say-something-nice.jpg" alt="" title="Say Something Nice" width="639" height="384" class="alignnone size-full wp-image-429" /></a>I <a href="http://jhw.dreamwidth.org/1030.html">recently</a> saw several <a href="http://blog.darevay.com/2010/12/say-something-nice-about-every-language-youve-used/">instances</a> of an <a href="http://www.rfc1149.net/blog/2010/12/09/something-nice-about-every-language-i-use/">interesting</a> proto-meme from a couple years ago: can you find something nice to say about every programming language you&#8217;ve used? Here&#8217;s my try (limited mostly to languages I&#8217;ve used at work or for extended periods), organized chronologically:<br />
<span id="more-426"></span></p>
<ul>
<li>EduBasic (on a <a href="http://www.pdp8.net/">DEC PDP-8e</a>): I could write programs, and they&#8217;d do stuff!</li>
<li><a href="http://www.divms.uiowa.edu/~jones/pdp8/refcard/74.html">PDP-8e machine language</a>: taught me how computers <em>really</em> worked. I still remember a few of the opcodes, decades later.</li>
<li><a href="http://books.google.com/books/about/The_C_programming_language.html?id=HHhGAAAAYAAJ">C</a>: Introduced me to pointers in a high-level language, and K&#038;R introduced me to a clean elegant style of both coding and technical writing. I still use C today.</li>
<li><a href="http://en.wikipedia.org/wiki/APL_%28programming_language%29">APL</a>: I used this for a summer job, on an <a href="http://en.wikipedia.org/wiki/IBM_5100">IBM 5100 Portable Computer</a>. It introduced me to the idea of operating in parallel on whole vectors at a time, as well as teaching me both the appeal and the danger of crafting one-liners.
<li>SPRITE: I can&#8217;t find any web references for this, it was the proprietary systems-programming language for the Burroughs (later Unisys) <a href="http://vseries.lurndal.org/doku.php?id=start">Medium Systems</a> mainframes. It introduced me to the idea of separating interface declarations from implementations (C could do this with header files, but I hadn&#8217;t fully grasped the concept until I saw SPRITE).</li>
<li><a href="http://en.wikipedia.org/wiki/Burroughs_large_systems#ALGOL">ALGOL</a>: This was Burroughs Large Systems ALGOL, which was an &#8220;extended subset&#8221; of ALGOL-60 that had been hacked into something rather different. With it I wrote a program that ran on the most expensive computers I&#8217;ve ever worked with.
<li>Pascal: I used several variations, starting with <a href="http://en.wikipedia.org/wiki/UCSD_Pascal">USCD Pascal</a>, and later <a href="http://library.thinkquest.org/27297/">Turbo Pascal</a>. It&#8217;s type safe, and the Turbo variant compiled really quickly.
<li><a href="http://en.wikipedia.org/wiki/Modula-2">Modula-2</a>: Drove home the concept of modularity, and had the best post-mortem dump analyzer I&#8217;d seen up to that point (or for a long time after!).</li>
<li><a href="http://www.cobol.com/">COBOL</a>: I only ever wrote one test case in COBOL, but I discovered that it had a very rich (if wordy) language for describing data structures.</li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/">C++</a>: Showed that multiple inheritance was possible, and why it probably wasn&#8217;t worth the effort. Later, taught me about generic programming. I still admire the <a href="http://www.sgi.com/tech/stl/">Standard Template Library</a>.</li>
<li><a href="http://en.wikipedia.org/wiki/Visual_Basic">Visual Basic</a>: Awesome for quickly prototyping Windows user interfaces. I prototyped a tool in VB in a less than a week that ended up getting used for a couple years in production.</li>
<li><a href="http://www.perl.org/">Perl</a>: I started with version 4, which was a cool little language for hacking away at text processing tasks. Then I did web stuff in version 5, which unleashed the power of <a href="https://metacpan.org/">CPAN</a>. Now I&#8217;ve discovered <a href="http://moose.perl.org/">Moose</a>, which almost makes Perl a whole new language.</li>
<li><a href="http://www.java.com/">Java</a>: Showed what C++ could have been, and how much easier automatic garbage collection makes programming in the large.
<li><a href="http://javascript.crockford.com/">Javascript</a>: While I had futzed with it a little, it was Douglas Crockford&#8217;s writing that got me to take the language seriously. It&#8217;s a cool instance-based OO language, that&#8217;s got incredible market penetration.</li>
</ul>
<p>I&#8217;m leaving out various languages I&#8217;ve played with but never did anything serious with, including <a href="http://en.wikipedia.org/wiki/SAM76">SAM76</a>, <a href="http://www.snobol4.org/">SNOBOL</a>, <a href="http://www.forth.org/">Forth</a>, <a href="http://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a>, <a href="http://www.apl.jhu.edu/~hall/lisp.html">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Simula">Simula-67</a>, <a href="http://www.erlang.org/">Erlang</a>, and so on. I learned a lot from many of them, too.</p>
<p>That actually wasn&#8217;t as hard as I&#8217;d expected, finding one thing nice about even the languages I liked the least.</p>
<p>(Image from <a href="http://osocio.org/message/say_something_nice/">osocio.org</a>&#8216;s story on <a href="http://improveverywhere.com/">Improv Everywhere</a>&#8216;s <a href="http://improveverywhere.com/2011/08/22/say-something-nice/">Say Something Nice</a> mission.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/saying-something-nice-about-programming-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oversee.net is co-sponsoring SCaLE 10x</title>
		<link>http://regularlyexpressed.com/oversee-net-is-co-sponsoring-southern-california-linux-expo-scale-10x/</link>
		<comments>http://regularlyexpressed.com/oversee-net-is-co-sponsoring-southern-california-linux-expo-scale-10x/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 00:59:51 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[industry]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Scale]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[los angeles]]></category>
		<category><![CDATA[scale]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=412</guid>
		<description><![CDATA[Just a quick note to point out (boast?) that Oversee.net has signed up to co-sponsor SCALE 10x. We&#8217;re hoping to talk to lots of interesting Linux folks, not least because...]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.socallinuxexpo.org/scale10x"><img class="alignnone size-full wp-image-414" src="http://regularlyexpressed.com/wp-content/uploads/2012/01/scale_10x_300x250_banner.png" alt="SCALE 10x banner" width="300" height="250" /></a></p>
<p>Just a quick note to point out (boast?) that Oversee.net has signed up to <a title="SCALE 10x sponsor" href="https://www.socallinuxexpo.org/scale10x/overseenet">co-sponsor SCALE 10x</a>. We&#8217;re hoping to talk to lots of interesting Linux folks, not least because we&#8217;re currently looking to <a title="Job openings" href="http://oversee.net/careers">hire several software developers and sysadmins</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/oversee-net-is-co-sponsoring-southern-california-linux-expo-scale-10x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Naming the parts of a URL</title>
		<link>http://regularlyexpressed.com/naming-the-parts-of-a-url/</link>
		<comments>http://regularlyexpressed.com/naming-the-parts-of-a-url/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 19:38:14 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=404</guid>
		<description><![CDATA[Tantek Çelik has an interesting summary of how different programming languages and libraries break down the parts of a URL.]]></description>
			<content:encoded><![CDATA[<p>Tantek Çelik has an <a href="http://tantek.com/2011/238/b1/many-ways-slice-url-name-pieces" title="interesting summary">interesting summary</a> of how different programming languages and libraries break down the parts of a URL. He&#8217;d left Perl off his list, so I pointed him to the <a href="http://search.cpan.org/dist/URI/URI.pm" title="URI module">URI</a> module on CPAN, which he&#8217;s added to his table.</p>
<p>One inter-language discrepancy Tantek found has resulted in the <a href="https://github.com/joyent/node/pull/1580" title="silly debate">silliest bug-report debate</a> I&#8217;ve seen in a while. It&#8217;s remarkable how upset people seem to get when arguing over whether the &#8220;protocol&#8221; part of the URL should include the colon or not!</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/naming-the-parts-of-a-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What The Hell Does Google Know About Social?</title>
		<link>http://regularlyexpressed.com/what-the-hell-does-google-know-about-social/</link>
		<comments>http://regularlyexpressed.com/what-the-hell-does-google-know-about-social/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 18:47:14 +0000</pubDate>
		<dc:creator>Terrence Lui</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Social]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=386</guid>
		<description><![CDATA[Is Google+ a serious competitor to Facebook and Twitter?]]></description>
			<content:encoded><![CDATA[<div>
<p><a href="http://regularlyexpressed.com/wp-content/uploads/2011/08/google_plus.jpg"><img class="alignleft size-medium wp-image-394" title="google_plus" src="http://regularlyexpressed.com/wp-content/uploads/2011/08/google_plus-276x300.jpg" alt="" width="276" height="300" /></a>When Google+ came out, I was very skeptical.  After the debacle that was Google Buzz, I was pretty sure any product that Google put out in the social space was just doomed to failure.   Google gets search and they get advertising but social is something that can&#8217;t easily be described by an algorithm.  But being the tech nerd that I am, I signed up for it as soon as I was able to get an invite so I could evaluate it myself.</p>
<p>So what does Google know about social?  It seems they know quite a bit!  One of the things I can really appreciate is someone learning from their mistake.   It&#8217;s rare in life when you get something right the first time.  Is Google+ perfect? No way.  But it combines certain features and improves on others to make a pretty decent offering.  Should Twitter and Facebook be running scared?  Twitter maybe.  Facebook, probably not right now.  One thing is for certain; competition is good for consumers.  Up until now, there was not any competition for the two social Juggernauts.  Google+ changes that and I think that can only be good for innovation in this space.  So what do I like about Google+?</p>
<p><span id="more-386"></span></p>
<p><strong>Best of Twitter and Facebook </strong>-  I really like that I can follow other people.  If it weren&#8217;t for this feature, Google+ would be a ghost town since most of my friends aren&#8217;t on it.  Outside of the people I know, there are actually a lot of people who contribute interesting content.  My favorites are probably <a href="https://plus.google.com/105237212888595777019">+Trey Ratcliff</a> and <a href="https://plus.google.com/110318982509514011806">+Kevin Rose</a>.  I like that I can follow them like I would on Twitter but comment and message each of the post like Facebook.</p>
<p><strong>Circles are a first class citizen</strong> &#8211; I don&#8217;t want to share everything with everyone.  Circles represent real life.  I have a &#8220;friends&#8221; circle and a &#8220;work&#8221; circle.  They usually don&#8217;t mix.   The ironic thing?  Having the ability to segment my users this way makes me more likely to share even if I don&#8217;t use it.  Most of the posts I make now are public.  But I post a lot more on Google+ now than I did on Facebook.  Because I know I have the safety of segmenting my posts, it means I don&#8217;t usually think twice about what I might or might not put on Google+.  I can&#8217;t say the same thing about Facebook.</p>
<p>Now I know what many of you will say.  You can accomplish the same functionality on Facebook using Groups.  But the problem is that this is an &#8220;add on&#8221; to Facebook.  It was not the paradigm from the very beginning and therefore it seems bolted on.  Like I said in my last post, <a href="http://regularlyexpressed.com/making-things-easy-is-not-an-add-on/">easy is not an add on</a>.  Facebook Groups is not intuitive to use and because it was bolted on later, it seems too complicated to use now.  That isn&#8217;t to say that Circles was easy at first, but now that the model is established, I think people will find it much better going forward.</p>
<p><strong>Post can be public</strong> - While I really like the concept of circles, I like it even more that my posts can be public.  It should in theory allow people to reach a bigger and wider audience and that is valuable.  I love sharing my knowledge and experience.  It is the main reason I started and contribute to this blog.  The ability of me to have fine control over what is very limited sharing to very broad sharing is VERY attractive to me and I&#8217;m sure to others with public profiles.</p>
<p><strong>Limits suck</strong> &#8211;  If I want to write an essay, I should be allowed to.  Twitter has a needless limit of 140 characters.  I get why this made it unique at the beginning.  I even think terseness is valuable.  But Twitter never really worked for me because it ended up just being links to other content.  Facebook has a limit to their posts length, and you actually hit it pretty easily if you are as verbose as I am.  If the average user can hit your limit, then you probably need to rethink your limit.</p>
<p><strong>Photos sharing is superior to most everything else out there</strong> &#8211; Facebook became a giant because it allowed people to do something they really wanted to do, share photos easily with their friends.  Google+ took this concept and then put it on steroids.  Twitter didn&#8217;t even really have photos till recently and the photosharing capabilities of Google are just better than Facebook.    Let me list all the ways this is true.</p>
<ol>
<li>Big beautiful pictures in the stream.  Pictures are not supplemental to the post.  They dominate the post and that is good.  When I stroll through my stream, I notice the pictures.</li>
<li>Photo Galleries in Google+ are gorgeous.  Just check out another one of my favorites, <a href="https://plus.google.com/photos/104987932455782713675/albums/posts">Thomas Hawk&#8217;s Gallery</a> and you will know what I&#8217;m talking about.  Love the infinite scroll.</li>
<li>You can edit the photos after you upload them.  Google+ allows you to color correct or add filters to the photos after you have uploaded it.  This is actually a pretty awesome feature, and I can see it being a big differentiator for Google as more and more people discover it.</li>
<li>The Google+ lightbox where they place the photos is just better.  The comments make more sense to be on the side and having the slider on the bottom makes scrolling much much easier.</li>
</ol>
</div>
<p><strong>You can edit posts after the fact</strong> &#8211; Seriously.  Who the heck gets everything right the first time (see above comment)?  I can&#8217;t tell you the number of times I&#8217;ve screwed something up only to want to fix it and be unable to.  That&#8217;s just dumb.  The only way to clarify something on Facebook is to update it through comments and that is just lame.  If I wrote it, let me fix it.</p>
<p><strong> You know Google will integrate Google+ into its search results</strong> &#8211;  In fact, <a href="http://insidesearch.blogspot.com/2011/08/latest-update-to-google-social-search.html">they already have</a>.   I can guarantee you, now that Google has a reasonable foothold in the social space, they aren&#8217;t going to let go of it very easily.  That means, if you care about SEO, you better figure out what this means to you.</p>
<p>Now, am I really that bullish on Google+ replacing Facebook?  No, not really.  Facebook has a huge advantage of numbers.  Everybody you know is on Facebook.  Even the people you may know on Google+ are probably not all that active.   Like I said earlier, Google+ is kind of a ghost town except for some of the more prolific posters.  I have a number of friends who have signed up for Google+ but most are not using it.  I&#8217;m actually pretty sure I&#8217;m dominating most of their streams.  The network effect is working very strongly in Facebook&#8217;s favor.  But keep one thing in mind.   At one point, MySpace had the same edge on Facebook.  At one point Microsoft had an insurmountable lead on Apple.  However, if you put a better product in front of people, over time, you can erode any sort of network effect.  If Google+ can reach critical mass, they have a chance.  And that will be good for everybody whether they are on Facebook or they are on Google+.</p>
<p>By the way, if you want to follow me on Google+ you can.   +<a href="https://plus.google.com/110581693083408452344/">Terrence Lui</a>.</p>
<p>&nbsp;</p>
<p><strong>Update</strong>:  One other thing I wanted to add that seems very promising is the unusual level of engagement that Google+ seems to be generating.  I posted two identical updates to my streams on Facebook and Google+.  Despite knowing many more people on Facebook&#8217;s platform, I got over 5x the number of comments on Google+.  Other users of Google+ have noted the same thing.  I don&#8217;t know what is behind this phenomenon but this behavior could prove to be a gold mine for marketers.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/what-the-hell-does-google-know-about-social/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Making Things Easy Is Not an Add On</title>
		<link>http://regularlyexpressed.com/making-things-easy-is-not-an-add-on/</link>
		<comments>http://regularlyexpressed.com/making-things-easy-is-not-an-add-on/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 19:58:03 +0000</pubDate>
		<dc:creator>Terrence Lui</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[simple]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=370</guid>
		<description><![CDATA[What does a sandwich have to do with good design?]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://regularlyexpressed.com/wp-content/uploads/2011/08/sandwich.jpg"><img class="size-full wp-image-371 aligncenter" title="sandwich" src="http://regularlyexpressed.com/wp-content/uploads/2011/08/sandwich.jpg" alt="" width="480" height="360" /></a></p>
<p style="text-align: center;">&nbsp;</p>
<p style="text-align: left;">I am a busy guy.  This means I&#8217;m not the type of person who likes to spend lots of time eating lunch.  The quicker and easier it is for me to grab lunch the happier I am.  For lunch today,  I decided to get a sandwich.  I discovered that the sandwich shop downstairs allows me to call in my order ahead of time so I can just walk up to the cashier and pay.  There is a special, shorter line for call-in orders.  Further, if paying by credit card, it is one simple swipe and less than seven seconds later you have your receipt and you are out the door.     It is a true model of efficiency.</p>
<p>I am much more likely to be a customer of this establishment in the future because they have made it exceedingly simple for me to get what I want.  I didn&#8217;t waste time in line behind people who don&#8217;t know what they want nor did I have to wait for something as simple as handing over my money.  This simple yet important principle seems to be lost on so many of us in technology.  As engineers, we are used to dealing with the complex.  We don&#8217;t mind jumping through hoops to configure web servers, navigate deep directory structures, or manage the dozens of windows on our desktop.   We seem to forget that not everyone has the same love affair we have with computers.</p>
<p>We tend to think of usability as an afterthought.  We figure that if we got you your sandwich that should be good enough.  Are you still hungry?  No?  Great, requirements met.  It did not matter how we got you there it only mattered that you got there.  This started to change in large part thanks to Apple and Steve Jobs.  The introduction of the iPod and then the iPhone changed the way people talked about creating products.  When I worked at Microsoft, I cannot tell you the number of times the words &#8220;iPod&#8221; and &#8220;iPhone&#8221; were said in discussions about design.  It became a running joke in my team and others that no matter what we talked about, we eventually had to tie it back to how great the iPod experience was.   Before this, engineers used to talk about cramming more and more features into a product and did not worry about people were going to access those features.</p>
<p>Ease of use should be a basic product principle, not an afterthought bolted on after all the functionality is complete.  If you are working on a feature, and there is not a clear and intuitive way for your users to access it, you should honestly question whether your user will derive any value from it at all.  Even worse, having even one hard to get at feature can remove the whole usefulness of all the other hard work you put into the product.  To use my analogy further, imagine what I would have thought if I got all the way to the payment portion of my sandwich transaction only to realize I had to wait five more minutes to pay.   The &#8220;payment&#8221; feature needed to work in concert with &#8220;ordering&#8221;, &#8220;taste&#8221;, and the rest to ensure a great overall experience.</p>
<p>We are living in an ever more complex world.  While it is very hard to mask this complexity from your user, it will be an ever increasing differentiator between those who succeed and those who do not.  Not treating ease of use as a first class citizen when it comes to design, requirements, and planning is just handing over victory to your competitors.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/making-things-easy-is-not-an-add-on/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Was Steve Yegge Right?</title>
		<link>http://regularlyexpressed.com/was-steve-yegge-right/</link>
		<comments>http://regularlyexpressed.com/was-steve-yegge-right/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 01:17:05 +0000</pubDate>
		<dc:creator>Nate Hashem</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=353</guid>
		<description><![CDATA[I spent the first three years of my software career as basically just a guy that wrote code.]]></description>
			<content:encoded><![CDATA[<p>I spent the first three years of my software career as basically just a guy that wrote code.  I came into work, I had some project I was supposed to work on, and so I wrote some code for it.  Usually this code worked and people were happy and sometimes it even made the company money, so I considered myself a good programmer.  And then I found Steve Yegge&#8217;s essays which made me reconsider all of that, and to this point just reading those essays has probably been the most formative experience in my career so far.</p>
<p>Steve was the first person I knew of that spoke about software engineering as a discipline that demanded self-improvement.  He wrote about dozens of subjects, but the one huge message I got across from reading all of them was, &#8220;there is more to this craft than meeting requirements at your day job and learning the syntax of the single programming language you use there.&#8221;  Some of it was a little intimidating, especially when Steve gave <a href="http://sites.google.com/site/steveyegge2/singleton-considered-stupid">examples of suboptimal behavior</a> that I was directly exhibiting (or when he was <a href="http://sites.google.com/site/steveyegge2/ancient-languages-perl">bashing on Perl</a>), but as long as you focused on Steve&#8217;s overall point and didn&#8217;t just argue his potentially imperfect examples in your head, you would realize he always had something great to say.</p>
<p>So I&#8217;ve made it a habit to reread his essays from time to time, and the other day I checked out &#8216;<a href="http://sites.google.com/site/steveyegge2/ten-predictions">Ten Predictions</a>.&#8217;  It&#8217;s on his old Amazon blog (as opposed to his <a href="http://steve-yegge.blogspot.com/">personal blog</a>, which sadly he doesn&#8217;t update as often as he used to), and I remember first reading this in 2007 and thinking, &#8220;hmm, I wonder if he&#8217;ll be right.&#8221;  Well when I reread it, I saw a lot of references to things happening or not happening in 2010 and 2011, and since that&#8217;s, well, now, I don&#8217;t have to wonder if he&#8217;s going to be right &#8212; we can actually tell if he&#8217;s right or not.</p>
<p>So, let&#8217;s see what Steve had to say.  Keep in mind the original essay was written in early 2004 (I believe).</p>
<p><strong>Prediction #1:  XML databases will surpass relational databases in popularity by 2011.<br />
Reason for prediction: Nobody likes to do O/R mapping; everyone just wants a solution.</strong></p>
<p>XML databases like <a href="http://basex.org/">BaseX</a> never caught on, so while Steve was wrong about that, he was right that people did want solutions to problems that didn&#8217;t fit nicely into a relational database.  The past five years have seen an explosion of &#8220;NoSQL&#8221; solutions for structured and unstructured data, named such because they don&#8217;t require fixed table schemas and easily scale horizontally.</p>
<p>Will these solutions eventually become more popular than relational databases?  Well, I think that question is misleading because I don&#8217;t think relational and non-relational databases fight over &#8216;market share.&#8217;  We&#8217;ve seen a gradual evolution of both sides where relational database solutions are becoming more horizontally scalable and getting better at storing unstructured data, and NoSQL solutions are getting better at providing the same kind of query languages and developer tools available to relational databases.  So the idea of one surpassing the other in popularity is kind of a false dichotomy, as their designations will only get less and less binary as time goes on.</p>
<p><span id="more-353"></span></p>
<p><strong>Prediction #2:  Someone will make a lot of money by hosting open-source web applications.<br />
Reason for prediction: most small development shops would pay a monthly fee not to have to administer the apps themselves.<br />
</strong></p>
<p>Steve worked at Amazon at the time he wrote this, and I&#8217;m wondering if this thought triggered Amazon&#8217;s EC2/S3 offerings.  &#8220;We&#8217;re moving to the cloud&#8221; is the latest buzzphrase, at least if you&#8217;d believe the overeager actors in <a href="http://www.youtube.com/watch?v=-HRrbLA7rss">terrible Microsoft commercials</a>.   Startups can launch their web applications in an incredibly fast and convenient manner and are gladly paying the nominal costs that Amazon charges.  Certain companies of a certain size ultimately have to manage their own hardware themselves (Oversee is one of them, incidentally), but for the most part offerings like Amazon&#8217;s EC2/S3 are a great option for companies to take.</p>
<p><strong>Prediction #3:   Multi-threaded programming will fall out of favor by 2012.<br />
Reason for prediction: Cost/benefit ratio isn&#8217;t high enough.<br />
</strong></p>
<p>Probably Steve&#8217;s worst prediction.  Unless multi-threaded programming ends up accidentally posting a picture of its privates on Twitter in the next five months, there&#8217;s no indication it&#8217;s going to be gone in 2012.</p>
<p><strong>Prediction #4:  Java&#8217;s &#8220;market share&#8221; on the JVM will drop below 50% by 2010.</strong></p>
<p>Almost every metric I&#8217;ve seen for &#8220;programming language&#8221; popularity is flawed (search results, github commits, job offerings, etc) so I won&#8217;t quote any, but my own anecdotal sense is just not seeing as many Java shops around as I used to.  At a previous employer in 2006 we decided to rewrite almost all our application code to Java for no apparent reason whatsoever, and I cant imagine any web companies making the same decision now.</p>
<p><strong>Prediction #5:   Lisp will be in the top 10 most popular programming languages by 2010.<br />
Reason for prediction: Lisp is a keeper. And it&#8217;s getting a lot of good press these days.</strong></p>
<p>Again, I don&#8217;t know what it means to be &#8220;top 10,&#8221; but I do know that this would caused anyone to snicker until Clojure emerged recently.  Clojure&#8217;s emergence, as a Lisp dialect that runs on the JVM, pretty much means Steve nailed Prediction #4 and #5.</p>
<p><strong><br />
Prediction #6:   A new internet community-hangout will appear. One that you and I will frequent.<br />
Reason for prediction: People like to socialize.</strong></p>
<p>This was already obvious to anyone on the internet in 2004, when Friendster, MySpace, and Facebook were emerging.  So Steve was right, but I&#8217;m sure a lot of people could have made this prediction back then.  In fact a lot of people are claiming they made this prediction back then, and feel that the mere prediction should mean they get more than $65 million in compensation, but that&#8217;s another story.  Or movie.</p>
<p><strong>Prediction #7:   The mobile/wireless/handheld market is still at least 5 years out.<br />
Reason for prediction: My spider-sense isn&#8217;t tingling yet.<br />
</strong><br />
Steve goes into the various wireless offerings at the time, complaining that they&#8217;re all too expensive, not powerful enough, have crappy usability, crappy battery life, etc.  I remember in 2007 all the engineers got a Palm Treo at the company I was at, and I was so frustrated with it that I begged my company to just let me expense my personal cell phone at the time, the LG Chocolate.</p>
<p>And then the iPhone hit later that year, and the App Store opened in 2008, and basically everything changed.  And then Apple made everyone step up their game, just like Michael Jordan made everyone in the NBA step up their game, because otherwise everyone was just going to sit around and let Apple/MJ eat their lunch for 15 years.  Mobile is now a legitimate space where hardware and software companies can reap huge revenues.  Steve was right in that it was about 5 years until smartphones became a totally viable consumer good with mainstream penetration, but it wasn&#8217;t any longer than that.</p>
<p><strong>Prediction #8:   Someday I will voluntarily pay Google for one of their services.<br />
Reason for prediction: They&#8217;re putting technological heroin in their services, and someday they&#8217;re going to start charging.<br />
</strong></p>
<p>Google&#8217;s continued to offer compelling products, but their model has always been one based on data and monetiizing on that data.  The mere presence of users (and thus collecting data on those users) will indirectly make them money, so pretty much everything they do is still free in terms of dollars.  Free in terms of privacy?  That&#8217;s another question&#8230;</p>
<p><strong>Prediction #9:   Apple&#8217;s laptop sales will exceed those of HP/Compaq, IBM, Dell and Gateway combined by 2010.<br />
Reason for prediction: Macs rule. Windows laptops are as exciting as a shiny disco ball in the ceiling.<br />
</strong><br />
I tried to actually Google the market share for Macbooks, but it&#8217;s probably impossible to find an absolute number.  Pretty much everyone is in agreement that Mac sales have increased dramatically since 2004.  Relative to PC usage, especially when you consider various sub-markets (laptops over $1000, laptops under $500, etc), the numbers are a lot iCloudier.</p>
<p>I do know this &#8212; I know a lot more people using Macs than I did back in 2004.  By probably any metric, Mac marketshare has increased.  More than Windows though in overall mainstream penetration?  Probably not anytime soon.</p>
<p><strong><br />
Prediction #10:   In five years&#8217; time, most programmers will still be average.<br />
Reason for prediction: That&#8217;s just how the math works out.</strong><br />
Steve&#8217;s point here wasn&#8217;t that &#8220;most programmers will be average&#8221; (since that&#8217;s a tautology, obviously) but that the average programmer will pretty much be the same guy in 2004 as they are in 2011.  There won&#8217;t be any sort of paradigm shift in things like programming languages or developer tools to turn the average programmer in 2011 into an order of magnitude more productive than he was in 2004.  And I think Steve&#8217;s point here was the one I felt he was always trying to make &#8212; no matter how the future turns out and whatever new concepts, applications, technologies, are introduced, we&#8217;re the most responsible for our own improvement.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/was-steve-yegge-right/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DomainSponsor&#8217;s distributed server architecture</title>
		<link>http://regularlyexpressed.com/domainsponsors-distributed-server-architecture/</link>
		<comments>http://regularlyexpressed.com/domainsponsors-distributed-server-architecture/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 00:52:28 +0000</pubDate>
		<dc:creator>Jeremy Leader</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[POE]]></category>
		<category><![CDATA[protobuf]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=270</guid>
		<description><![CDATA[Learn in detail how we combine technology to serve all this traffic.]]></description>
			<content:encoded><![CDATA[<p>DomainSponsor is Oversee&#8217;s domain parking division. When people have domain names that they&#8217;re not ready to use yet, we show ads on them. DomainSponsor gets around a billion visits per month.</p>
<p>To serve ads on millions of pages per day, we used to use a fairly traditional LAMP stack. We used Apache with mod_perl to run a fairly complicated tangle of Perl code which queried several back-end MySQL databases and other back-end servers, in order to choose what to put on each page. One of the biggest problems we had was that we wanted to be able to easily add new (possibly buggy) features for A/B testing, knowing that many of those features would fail and be discarded. The old way we did this was to have a separate cluster of servers running the test version of the code. The trouble was that the test cluster was never 100% identical to the main production cluster, and the redirect needed to send a sample of requests to the test cluster introduced a delay, so we had problems with test results not being reproducible when we later launched the same feature in the main production cluster.<span id="more-270"></span> We wanted to be able to isolate test features, while still running them in the same production environment that handled the majority of our traffic. In order to do this, while maintaining or improving our response time, we re-structured our serving system into a tiered, distributed system. There&#8217;s a front-end that just understands HTTP requests, but is fairly agnostic about what to do with them. After parsing the requests, it sends them on to a server which implements the main business logic, including the ability to run new features in a sandbox, such that their failure won&#8217;t affect the rest of the system. This business logic server queries a variety of back-end data sources, and sends the resulting information to an HTML layer, which does the presentation formating of the information in HTML/CSS/JavaScript, and passes the resulting page back to the HTTP server.</p>
<p>We needed an efficient, but extensible, protocol for these servers to communicate with each other. At previous jobs I&#8217;d worked on other projects where we rolled our own binary protocol for similar distributed systems, and I&#8217;d seen the headaches involved in upgrading the protocol version, even just to change the format of one field. We looked around, and found several fairly similar libraries for extensible binary protocols. The main open source competitors at that time (mid-2008) were <a href="http://code.google.com/p/protobuf/">Protocol Buffers</a> and <a href="http://incubator.apache.org/thrift/">Thrift</a>. Protocol Buffers (or &#8220;protobufs&#8221;) had just been released by Google, after several years of internal use. Thrift had been created by some ex-Google interns working at Facebook, and so the two are fairly similar. Both produced very compact on-the-wire encodings, though protobufs, with its variable-length numeric fields, had a slight edge. Both were designed to allow easy extensibility; new optional fields could be added without breaking existing code (which would just ignore the new fields).</p>
<p>We chose protobufs for several additional reasons, not that overwhelming individually, but combined they made protobufs a better choice for us. First, the documentation of protobufs seemed more complete and thorough. Second, their Perl support, while not part of the core project, was better suited to our plans to write non-blocking event-driven clients and servers. Thrift&#8217;s Perl support was very complete on the client side, but there was no server-side implementation, and the client code did its own blocking network I/O, which would be hard to integrate with an event-driven framework. There are actually at least 3 Perl bindings for protobufs. <a href="http://groups.google.com/group/protobuf-perl">protobuf-perl</a> was the first pure-Perl implementation. We initially tried protobuf-perl, but it had some serious performance issues, partly due to teething issues with Moose, which was still relatively new and unoptimized at that point. At that point, <a href="http://code.google.com/p/protobuf-perlxs/">protobuf-perlxs</a> was released, which puts a Perl wrapper around the C++ code generated by Google&#8217;s stock protocol buffers compiler. It has the disadvantage that it requires compiling and linking to C++ code, which makes it slightly harder to port and install on unusual architectures, but its speed advantage over pure-Perl implementations more than makes up for that. <a href="http://search.cpan.org/dist/Google-ProtocolBuffers/lib/Google/ProtocolBuffers.pm">Google::ProtocolBuffers</a> is a newer pure-Perl implementation that includes its own parser for the .proto interface description file format, and is the only implementation in CPAN; it was released after we&#8217;d finished our evaluation of the other two implementations. It supports creating message definitions at run time (as opposed to build time), which could provide some interesting flexibility, but for our purposes protobuf-perlxs&#8217;s speed is more important.</p>
<p>We wanted our distributed server software to be as efficient as possible. At the time, the old system was using Apache in a pre-forking multi-process mode. In this mode, Apache forks dozens of child processes when it starts up, and hands requests to those children to be processed. At any given time, a child process is handling only one request; therefor, the server as a whole can only handle as many simultaneous requests as there are child processes. Processes are relatively expensive, you probably don&#8217;t want the OS to have to time slice among many thousands of them. Event-driven programming is an alternative model; it gives greater efficiency, but more care must be taken to avoid calling code that blocks, typically to do I/O. In an event-driven model (see <a href="http://en.wikipedia.org/wiki/Reactor_pattern">the Reactor pattern</a> for more details), the framework controls the main loop, and all application programming is done in callback functions. Python&#8217;s <a href="http://twistedmatrix.com/trac/">Twisted</a> framework, Ruby&#8217;s <a href="http://rubyeventmachine.com/">EventMachine</a>, and JavaScript&#8217;s <a href="http://nodejs.org/">Node.js</a> are popular event-driven frameworks in other languages. Given that we were designing a new architecture, working with several pieces of new technology, and had a team already familiar with Perl, we decided to stay with that proven, robust, flexible language.</p>
<p>When it comes to just about any need, the Comprehensive Perl Archive Network (<a href="http://search.cpan.org/">CPAN</a>) provides an embarrassment of riches. There are several popular event-driven frameworks for Perl. The largest and most mature is <a href="http://poe.perl.org/">POE</a>; a more recent competitor is <a href="http://search.cpan.org/dist/AnyEvent/lib/AnyEvent.pm">AnyEvent</a>. The main author of POE, Rocco Caputo, has been working on a cleaner re-implementation of POE using Moose, called <a href="http://search.cpan.org/dist/Reflex/lib/Reflex.pm">Reflex</a>. There are also some smaller event-driven libraries that aren&#8217;t as all-encompassing: <a href="http://search.cpan.org/dist/Event-Lib/lib/Event/Lib.pm">Event::Lib</a>, <a href="http://search.cpan.org/dist/Event/lib/Event.pod">Event</a>, <a href="http://search.cpan.org/dist/EV/EV.pm">EV</a>, and <a href="http://search.cpan.org/dist/IO-Async/lib/IO/Async.pm">IO::Async</a>. For our purposes, at the time we made the decision, POE provided the most useful components for things we needed, such as asynchronous DNS queries, fully-featured HTTP request processing (including keepalive, HTTPS, etc.), and the ability to easily support our own protocol.</p>
<p>Today, as a result, we have a large distributed system handling a huge number of requests across an easily-scalable cluster of machines, it&#8217;s relatively easy to write new servers using our POE-based framework. We can also add new fields to the messages we send between the tiers, without having to worry about compatibility issues when old and new versions of the code talk to each other.</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/domainsponsors-distributed-server-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fighting Boredom</title>
		<link>http://regularlyexpressed.com/fighting-boredom/</link>
		<comments>http://regularlyexpressed.com/fighting-boredom/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 00:29:37 +0000</pubDate>
		<dc:creator>Nate Hashem</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://regularlyexpressed.com/?p=334</guid>
		<description><![CDATA[Software engineering is about solving problems]]></description>
			<content:encoded><![CDATA[<p>Software  engineering is about solving problems.  You get hired, start working, and solve  problems.  Time passes and you get better at solving these problems, so your company gives you harder problems in the same domain space.  Eventually you  get so good at solving these problems in that you  become The Guy.  &#8220;Oh you have a question about the FooWidget manager  tool?  Ask Joe, he&#8217;s the FooWidget guy.&#8221;  By definition, being The Guy  has mean you&#8217;ve reached a local maxima of productivity in the company.</p>
<p><span style="color: #000000;"> </span></p>
<p>It  also means you&#8217;re bored.  It&#8217;s not a case of possibly being bored, or  eventually becoming bored.  Once you are are no longer a problem solver,  that means you&#8217;re bored, and if you&#8217;re bored at your current company for long enough, eventually you&#8217;ll find a new company to work for.</p>
<p>Companies talk a lot about retention, but rather than wring their hands about salaries and titles, they&#8217;d do well to look at their engineers and ask a simple question: &#8220;Who is bored, and what can we do about that?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://regularlyexpressed.com/fighting-boredom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

