<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.9.2 (http://www.squarespace.com/) on Sun, 14 Mar 2010 09:09:11 GMT--><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/"><rss:channel rdf:about="http://www.softmachinecubed.com/tech/"><rss:title>Soft Machine³ - Tech</rss:title><rss:link>http://www.softmachinecubed.com/tech/</rss:link><rss:description></rss:description><dc:language>en-US</dc:language><dc:date>2010-03-14T09:09:11Z</dc:date><admin:generatorAgent rdf:resource="http://www.squarespace.com/">Squarespace Site Server v5.9.2 (http://www.squarespace.com/)</admin:generatorAgent><rss:items><rdf:Seq><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2010/2/1/scammers-hack-gmail-and-try-for-a-1200-scam-via-western-unio.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2010/1/13/memory-bloat-makes-me-hate-firefox-regretfully.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/22/squarespace-editor-a-few-bugs-and-no-error-recovery-make-me.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/22/web-war-contemporary-content-battles-and-the-future-web.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/9/google-io-developer-conference-2010-may-san-francisco.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/8/gwt-20-and-speed-tracer-campfire-one.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/6/googles-go-language-multi-value-return-vs-exceptions-c.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/4/this-week-in-startups-30-with-annie-duke-jason-calacanis.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/12/2/all-time-best-of-youtube-michael-wesch-digital-ethnography-k.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/11/30/jennifer-leggio-of-zdnet-is-wrong-wikipedia-2008.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/11/25/go-programming-language-google-tech-talks.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/11/25/brief-introduction-to-lisp-oreilly-media.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/11/25/structure-and-interpretation-of-computer-science-cs-61a-uc-b.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/11/18/bing-image-search-this-explains-all-the-hits.html"/><rdf:li rdf:resource="http://www.softmachinecubed.com/tech/2009/10/5/omgwtfbbq-if-conc-trees-replace-cons-lists-then-mapreduce-ca.html"/></rdf:Seq></rss:items></rss:channel><rss:item rdf:about="http://www.softmachinecubed.com/tech/2010/2/1/scammers-hack-gmail-and-try-for-a-1200-scam-via-western-unio.html"><rss:title>Scammers hack gmail and try for a $1200 scam via Western Union</rss:title><rss:link>http://www.softmachinecubed.com/tech/2010/2/1/scammers-hack-gmail-and-try-for-a-1200-scam-via-western-unio.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2010-02-02T02:30:11Z</dc:date><dc:subject>article crime fraud google contacts google profile trust uk</dc:subject><content:encoded><![CDATA[<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/TenGrandBill.jpg?__SQUARESPACE_CACHEVERSION=1265079128870" alt="" /></span></span></p>
<p>In this case a friend of mine Mark B. had his gmail account compromised this morning and clever scammers tried to turn this into a large cash payoff. After I poked around and found the number for his business online, I got him on the phone. As it turns out, Mark was fine in Sacramento, and had taken back his gmail account and was busy taking back control of his Facebook account as well.</p>
<p>Meanwhile, the scammer had created a new gmail account with a very similar name and continued his desperate plea for cash.</p>
<p>The original appeal:</p>
<blockquote>
<p>I&#8217;m writing this with tears in my eyes,I came down here to London,England for a short vacation and i was mugged at gun point last night at the park of the hotel where i lodged all cash,credit cards and cell were stolen off me.I am even owing the hotel here,and the hotel manager won&#8217;t let me leave until i settle the hotel bills now am freaked out.So i have limited access to emails for now, please i need you to lend me some money so i can make arrangements and return back I am full of panic now,the police only asked me to write a statement&nbsp; about the incident and directed me to the embassy,i have spoken to the embassy here but they are not responding to the matter effectively, I will return the money back to you as soon as i get home, I am so confused right now.i wasn&#8217;t injured because I complied immediately.</p>
</blockquote>
<p>Some four hours later, a final appeal:</p>
<blockquote>
<p>Richard, am still waiting for the MTCN number as soon you have done.</p>
</blockquote>
<p>And my reply</p>
<blockquote>
<p>Subject: some a**hole thinks this is a scam<br /><br />Can you believe it?&nbsp;</p>
<p>Don&#8217;t worry, I gave all the info to the police and to Google &#8212; so don&#8217;t worry just answer the door when they knock, ok?</p>
</blockquote>
<p>What a surprise &#8212; I haven&#8217;t heard from fake Mark B. again!</p>
<p>It&#8217;s important to make sure people with whom you have a trust relationship are protected from such things. In this case, Mark&#8217;s Google profile allowed me to locate his business and phone number. Mark answered the phone right away when I called. Scam averted!</p>
<p>I called Western Union and asked for a fake MTCN number which would allow law enforcement across the pond to apprehend the criminal, with forged documents in possession. Such is not possible&#8230; &#8220;No can do&#8230; that&#8217;s a police matter.&#8221;</p>
<p>What a pity&#8230; common sense deterrence methods are not available to an informed citizen with a scammer on the hook. In summary, please secure the accounts that identify you and allow your &#8220;friends&#8221; access to enough contact information (more on that later) to thwart such attacks.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2010/1/13/memory-bloat-makes-me-hate-firefox-regretfully.html"><rss:title>Memory bloat makes me hate Firefox (regretfully)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2010/1/13/memory-bloat-makes-me-hate-firefox-regretfully.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2010-01-14T04:00:27Z</dc:date><dc:subject>article browser design programming review scalability ui</dc:subject><content:encoded><![CDATA[<p>This problem with memory bloat in Firefox (memory leaks) is well-known and Mozilla has been working on it for quite a while. I&#8217;ve been expecting some relief, but I&#8217;m about to give up on it and wait for real news of some improvement. I have pared down the plugins I use to a few essentials, so I doubt this can be blamed on extensions.</p>
<p>It is the only program I use that can render my machine so useless. It also seems fairly unpredictable, but perhaps it&#8217;s related to a combination of things I never think about in my frustration.</p>
<p>Here is an unwinding of a scenario where I was tempted to hit the power button.&nbsp;Instead, I patiently finished up, and documented the footprint the Firefox carcass left, and compared it to a fresh carcass.</p>
<p>Firefox locks out the GUI and the window management, because it is desperately writing memory to and from the disk&#8230; memory which has become hideously garbled, with tiny important pieces mixed in with useless stale stuff. Just look at the page fauts and VM size.</p>
<p>&nbsp;<span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Firefox%20Memory%20Bloat%20Fig%201.JPG?__SQUARESPACE_CACHEVERSION=1263032502855" alt="" /></span></span></p>
<p>As you see in Fig. 2, the processor was very busy &#8220;cleaning up&#8221; the massively bloated program, so these can&#8217;t be &#8220;regular&#8221; memory leaks. Instead, they are &#8220;effectively&#8221; memory leaks &#8212; and don&#8217;t get cleaned up when you delete the tabs.&nbsp; I&#8217;d be happy to help Mozilla find the culprit, but I&#8217;m unaware of an easy way to report this &#8230; since it&#8217;s not &#8220;technically&#8221; a bug. It <strong>could </strong>be as simple as me killing all the tabs, seeing the memory bloat still exists, and hitting a button <strong>&#8220;shut down Firefox and report memory bloat back to Mozilla&#8221;</strong></p>
<p><strong>&nbsp;</strong></p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Firefox%20Memory%20Bloat%20Fig%202.JPG?__SQUARESPACE_CACHEVERSION=1263032542253" alt="" /></span></span></p>
<p>I suppose one option is to forgo &#8220;virtual memory&#8221; (set page file size to a very low number) but that would affect every application and also prevent me from purposely overloading my machine &#8212; that is to say, purposely using more memory than I really have.</p>
<p>Chrome uses separate processes for each tab, which gives each tab a firewall against the others. One tab could have a massive leak, but could be killed independently and leave the others usable.</p>
<p>The 2nd and 3rd performance graphs just show that the system is indeed idle, especially after killing the zoom utility which I use to make the text more legible in the screen shots.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Firefox%20Memory%20Bloat%20Fig%203.JPG?__SQUARESPACE_CACHEVERSION=1263032577272" alt="" /></span></span></p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Firefox%20Memory%20Bloat%20Fig%204.JPG?__SQUARESPACE_CACHEVERSION=1263032599236" alt="" /></span></span></p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Firefox%20Memory%20Bloat%20Fig%205.JPG?__SQUARESPACE_CACHEVERSION=1263032657344" alt="" /></span></span></p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/22/squarespace-editor-a-few-bugs-and-no-error-recovery-make-me.html"><rss:title>SquareSpace editor: a few bugs and no error recovery make me very sad</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/22/squarespace-editor-a-few-bugs-and-no-error-recovery-make-me.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-22T22:02:26Z</dc:date><dc:subject>blog code error meta</dc:subject><content:encoded><![CDATA[<h3>UPDATE: Hi there and thanks! to the excellent SquareSpace engineers</h3>
<blockquote>
<p>I&#8217;m very happy to see the problems that most concerned me fixed.</p>
<p>The last time I opened an issue it was just to mention a Ukranian spammer I could see coming from a mile off, and to wonder how to better deter him. On the about page I&#8217;ve listed several translations of a warning message &#8212; imagine if the appropriate warning message should appear if he lands on a comment form via a Ukranian google search. Flashing red. Regardless, it was not really a bug &#8212; but I was thanked for my input. I think I&#8217;ve been &#8220;whitelisted.&#8221;</p>
<p>Also, another strange problem that caused serious failures and then included a stack trace, was reported back to SquareSpace and acted upon within hours.</p>
<p>Great work, SquareSpace! The post is left for historical interest only.</p>
</blockquote>
<p>&nbsp;</p>
<p><span class="full-image-block ssNonEditable"><span><img style="width: 640px;" src="http://www.softmachinecubed.com/storage/post-images/SquareSpace_Editor_Freeze_RemoveFomatting_UL_bugs.JPG?__SQUARESPACE_CACHEVERSION=1261519570756" alt="" /></span></span></p>
<p>I&#8217;m trying to write a post and various problems keep getting in the way. Above, I was editing a list of &#8220;required reading&#8221; posts and the editor got confused, so I tried &#8220;remove formatting.&#8221; I&#8217;ve noticed that HTML markup crud accumulates sometimes, and this is often the easiest way to get the editor back on track. Unfortunately, remove formatting has a terrible bug, and shouldn&#8217;t be used on an aribitrary selection &#8212; in this case I probably needed to carefully select the entire list. My bad&#8230; start over.</p>
<p>The problem is, I was specifically doing short-turn-around editing. This follows a support ticket I submitted today regarding the lack of error recovery in the editor. If logic errors in the code result in infinite loops (forever do something useless) it freezes the brower and you have no hope of recovery, unless &#8220;auto-save&#8221; managed to save your data. I&#8217;ve been informed SqareSpace engineers are working on &#8220;auto-save.&#8221;</p>
<p>I should probably follow the lead of other bloggers of note &#8212; and edit  direcly in HTML. Offline. And post the draft by email. Feh.</p>
<p>Previous support ticket:</p>
<blockquote>
<p>I have lost hours of edits due to several problems with the WYSIWYG  editor. At the very least could you please add an option to  create a local version of the post should &#8220;save&#8221; fail. Or,  provide revision access via the &#8220;change log&#8221;. At least provide multiple  in-progress revisions until the first &#8220;Publish&#8221; These problems  together add up to lost hours of work on my part. I can elaborate  if needed.</p>
</blockquote>
<blockquote>
<p>There are many instances where I lost content. The most recent was  &#8220;permission denied&#8221; when trying to save after a long editing session.&nbsp; The  &#8220;login&#8221; had expired, I think. Regardless, the work I have in the editor  should be given top priority W.R.T. error recovery. <br /><br />You don&#8217;t  need to know what exactly I was doing; The fact remains you have no  recovery method for &#8220;save&#8221; failure. What if my internet connection died?  Same problem. After the failure, the editor was refreshed with  the post&#8217;s previous content. EXACTLY THE WRONG ANSWER. I&#8217;m trying to  save something that is local to the browser!</p>
</blockquote>
<blockquote>
<p>[suggestion to copy/paste the content to &#8220;notepad&#8221; before saving]</p>
</blockquote>
<blockquote>
<p>The problem is one doesn&#8217;t know ahead of time when failure  will occur. So, copy/paste out is a bit too much to ask. I have  boiled the problem down to a damning series of steps:</p>
<strong>1. Login<br />2.  Create post in separate editor window &#8220;failure test&#8221; content &#8220;save me&#8221;<br />3.  Logout<br />4. Save post<br />5: Result: &#8220;Access denied&#8221; and editor  contains nothing</strong></blockquote>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/22/web-war-contemporary-content-battles-and-the-future-web.html"><rss:title>Web War: Contemporary content battles and the future Web</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/22/web-war-contemporary-content-battles-and-the-future-web.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-22T16:18:15Z</dc:date><dc:subject>Internet article business collaboration profit search social media</dc:subject><content:encoded><![CDATA[<h3>UPDATE: in defense of Demand Media</h3>
<h3 style="padding-left: 30px;"><a href="http://www.poynter.org/column.asp?id=31&amp;aid=175715">Demand Media May Be Bad for Social Media, but Not for Journalism</a></h3>
<h3></h3>
<h3>The history of the Internet&nbsp;is being re-written so quickly it makes the future web a constantly moving target, even for the simple question &#8220;how will we access general information?&#8221;</h3>
<p>&nbsp;</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/300_Film_Still_1.JPG?__SQUARESPACE_CACHEVERSION=1261565754303" alt="" /></span></span></p>
<p style="padding-left: 30px;"><strong>(you really expect me to give up and go home?)</strong></p>
<p>Overshadowing this issue is the way search engines crawl the Internet and rank pages on relevance. <a href="http://google.com" target="_blank">Google</a>&nbsp;and <a href="http://bing.com" target="_blank">Bing</a>&nbsp;seem to be the two left standing. I remember having to sift through pages of AltaVista results <a href="http://searchengineland.com/a-look-back-at-the-old-search-engines-25766" target="_blank">back in the day</a>.&nbsp;</p>
<p>Search engines can be considered your primary filter for the Internet; but as they are bombarded with new content from &#8220;Content Farms&#8221; they &#8212; or we &#8212; must adapt. Some think &#8220;social search&#8221; will become the new primary filter, creating ad-hoc &#8220;ambient feeds.&#8221; These feeds would use human filtering to fight search engines defeated by 1) &#8220;SEO&#8221; gaming, or 2) drowning in a sea of mediocre content.</p>
<p>I already use <a href="http://google.com/reader" target="_blank">Google</a><a href="http://google.com/reader" target="_blank">&nbsp;reader</a>, <a href="http://twitter.com" target="_blank">Twitter</a> and <a href="http://friendfeed.com" target="_blank">FriendFeed</a> for much of my content discovery; search engines are most useful when I need references for a topic I&#8217;m writing about. &nbsp;However, it&#8217;s hard to imagine this solution working for the vast majority &#8212; who don&#8217;t &#8220;stay on top of&#8221; breaking news, and are happy enough with answers returned from&nbsp;any old portal like <a href="http://yahoo.com" target="_blank">Yahoo.com</a> or <a href="http://ask.com" target="_blank">Ask.com</a>.</p>
<p>Completely separate from yet completely bound up with the issue is business and profit, open collaboration and community and social issues, online public libraries and access to educational resources. Many blogs are profitable and growing, where news organizations are failing; some by federation and streamlining, some by ad revenue and huge traffic numbers. Some have started down the road of quantity over quality, and often echo each other, especially in the tech sector. This isn&#8217;t nearly as large a problem as that presented by &#8220;Content Farms&#8221; however. &nbsp;The number of &#8220;hot stories&#8221; in the tech sector is a drop in the ocean compared to the number of different search engine queries at any given moment. <strong>The latter is what &#8220;Content Farms&#8221; aim to capture</strong>.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/300_Film_Still_2.JPG?__SQUARESPACE_CACHEVERSION=1261565802525" alt="" /></span></span></p>
<p style="padding-left: 30px;"><strong>(if you don&#8217;t accept our low buyout offer, we will bury you until dead)</strong></p>
<p><strong>&#8220;Moderated collaboration or curated knowledge gardens&#8221;</strong>:</p>
<ul>
<li><a href="http://imdb.com" target="_blank">Imdb </a>(<a href="http://en.wikipedia.org/wiki/Imdb.com">October 1990</a>) &#8212; Film and television database started before the Internet as we know it today</li>
<li><a href="http://Wikipedia.org" target="_blank">Wikipedia </a>(<a href="http://en.wikipedia.org/wiki/Jimmy_Wales">January 2001</a>) &#8212; Arguably the most successful open collaboration effort to date</li>
<li><a href="http://stackoverflow.com" target="_blank">Stack Overflow</a> (<a href="http://meta.stackoverflow.com/questions/30128/how-old-is-stackoverflow">July 2008</a>) &#8212; Upstart latecomer; programmer&#8217;s Q&amp;A site with innovative &#8220;points&#8221; system</li>
</ul>
<p><strong>&#8220;Content farms&#8221;:</strong></p>
<ul>
<li><a href="http://demandmedia.com/" target="_blank">Demand Media</a> (<a href="http://en.wikipedia.org/wiki/Demand_Media">May 2006</a>)&nbsp;</li>
<li><a href="http://answers.com" target="_blank">Answers.com</a> (<a href="http://www.answers.com/main/ir/about_company.jsp">January 2005</a>)&nbsp;</li>
<li><a href="http://ehow.com" target="_blank">eHow.com</a> (<a href="http://www.internetvideomag.com/News/News2007/121107_ExpertVillage.htm">April 2006</a>)</li>
</ul>
<h3><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/300_Film_Still_3.JPG?__SQUARESPACE_CACHEVERSION=1261565848368" alt="" /></span></span></h3>
<p style="padding-left: 30px;"><strong>(don&#8217;t let this happen to you)</strong></p>
<p><strong>Required reading</strong></p>
<ul>
<li>RWW:&nbsp;<a href="http://www.readwriteweb.com/archives/jay_rosen_vs_demand_media_are_content_farms_demoni.php" target="_blank">Jay Rosen Interviews Demand Media: Are&nbsp;Content Farms&nbsp;&#8220;Demonic&#8221;?</a></li>
<li>RWW: Richard McManus:&nbsp;<a href="http://www.readwriteweb.com/archives/content_farms_impact.php" target="_blank">Content Farms</a><a href="http://www.readwriteweb.com/archives/content_farms_impact.php" target="_blank">: Why Media, Blogs &amp; Google Should Be Worried</a></li>
<li>Inquisitr: Duncan Riley: <a href="http://www.inquisitr.com/45366/why-demand-media-is-good/" target="_blank">Why Demand Media is Good</a></li>
<li>Inquisitr: Steven Hodson:&nbsp;<a href="http://www.inquisitr.com/52056/the-supersizing-of-content-or-how-we-are-turning-the-web-into-an-obese-mess/" target="_blank">The supersizing of content; or how we are turning the Web into an obese mess</a></li>
<li>BuzzMachine: Jeff Jarvis:&nbsp;<a href="http://www.buzzmachine.com/2009/12/14/content-farms-v-curating-farmers/">Content farms</a><a href="http://www.buzzmachine.com/2009/12/14/content-farms-v-curating-farmers/">&nbsp;v. curating farmers</a></li>
</ul>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/300_Film_Still_4.JPG?__SQUARESPACE_CACHEVERSION=1261565922157" alt="" /></span></span></p>
<p style="padding-left: 30px;"><strong>(live to fight another day)</strong></p>
<p>Still images from <a href="http://en.wikipedia.org/wiki/300_%28film%29" target="_blank">300 (film)</a> <a href="http://www.imdb.com/title/tt0416449/" target="_blank">Imdb link</a></p>
<h3>Related Post:&nbsp;<a href="http://www.softmachinecubed.com/arts/2009/4/7/expert-village-advanced-piano-vs-lang-lang-with-orange.html">Expert Village Advanced Piano vs. Lang Lang with&nbsp;Orange</a></h3>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/9/google-io-developer-conference-2010-may-san-francisco.html"><rss:title>Google I/O Developer Conference 2010 (May, San Francisco)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/9/google-io-developer-conference-2010-may-san-francisco.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-09T08:39:38Z</dc:date><dc:subject>event google note programming san francisco web dev</dc:subject><content:encoded><![CDATA[<p><span class="full-image-block ssNonEditable"><span><a href="http://code.google.com/events/io/"><img src="http://www.softmachinecubed.com/storage/post-images/Google_IO_2010_Banner.JPG?__SQUARESPACE_CACHEVERSION=1260348099810" alt="" /></a></span></span></p>
<h2 class="home-heading">May 19-20, 2010 &#8212; <a href="http://maps.google.com/maps/ms?oe=utf-8&amp;client=firefox-a&amp;ie=UTF8&amp;fb=1&amp;split=1&amp;gl=us&amp;dq=Moscone+Center,+San+Francisco&amp;daddr=747+Howard+St,+San+Francisco,+CA+94103&amp;geocode=5091253993477900111,37.783729,-122.402110&amp;ei=M1-1SZW8EYmQtQPkqKF7&amp;hl=en&amp;msa=0&amp;msid=117887825060414826229.000464b3c741e5e8c7a68&amp;z=17">Moscone Center, San Francisco</a></h2>
<blockquote>
<p>Google&#8217;s largest developer event returns to San Francisco in 2010. Google I/O brings together thousands of developers for two days of highly technical content, focused on pushing the boundaries of web applications through open web technologies and Google developer products like App Engine, Google Web Toolkit, Android, Chrome, APIs, and more.</p>
<p>Early registration for Google I/O will open in January 2010. Until then, you can check out highlights from Google I/O 2009 below, and <a href="http://twitter.com/googleio">follow our updates on Twitter</a>.</p>
</blockquote>
<p>&nbsp;</p>
<p><iframe width="500" height="400" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?oe=utf-8&amp;client=firefox-a&amp;ie=UTF8&amp;fb=1&amp;split=1&amp;gl=us&amp;dq=Moscone+Center,+San+Francisco&amp;daddr=747+Howard+St,+San+Francisco,+CA+94103&amp;geocode=5091253993477900111,37.783729,-122.402110&amp;ei=M1-1SZW8EYmQtQPkqKF7&amp;hl=en&amp;msa=0&amp;msid=117887825060414826229.000464b3c741e5e8c7a68&amp;ll=37.784147,-122.401997&amp;spn=0.005164,0.008165&amp;output=embed"></iframe><br /><small><a style="color: #0000ff; text-align: left;" href="http://maps.google.com/maps/ms?oe=utf-8&amp;client=firefox-a&amp;ie=UTF8&amp;fb=1&amp;split=1&amp;gl=us&amp;dq=Moscone+Center,+San+Francisco&amp;daddr=747+Howard+St,+San+Francisco,+CA+94103&amp;geocode=5091253993477900111,37.783729,-122.402110&amp;ei=M1-1SZW8EYmQtQPkqKF7&amp;hl=en&amp;msa=0&amp;msid=117887825060414826229.000464b3c741e5e8c7a68&amp;ll=37.784147,-122.401997&amp;spn=0.005164,0.008165&amp;source=embed">View Larger Map</a></small></p>
<p>&nbsp;</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/8/gwt-20-and-speed-tracer-campfire-one.html"><rss:title>GWT 2.0 and Speed Tracer (Campfire One)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/8/gwt-20-and-speed-tracer-campfire-one.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-09T07:56:20Z</dc:date><dc:subject>google web toolkit performance progrmming tutorial video web dev</dc:subject><content:encoded><![CDATA[<p><span class="full-image-block ssNonEditable"><a href="http://googlewebtoolkit.blogspot.com/"><img src="http://www.softmachinecubed.com/storage/post-images/googlecodegwtheader.jpg?__SQUARESPACE_CACHEVERSION=1260346381969" alt="" /></a></span></p>
<h3><a href="http://code.google.com/webtoolkit/">Google Web Toolkit</a></h3>
<h3><span>via </span><a href="http://googlewebtoolkit.blogspot.com/">Google Web Toolkit Blog </a></h3>
<blockquote>
<p><span style="font-size: 120%;">Earlier tonight, we wrapped up a very exciting <a href="http://code.google.com/campfire/">Campfire One</a> at which we announced that GWT 2.0 is now officially available. In addition to major improvements in the GWT SDK and the Google Plugin for Eclipse, GWT 2.0 includes a brand new performance analysis tool for Chrome called Speed Tracer.</span></p>
</blockquote>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/p/B3B918F30A1C7FB6&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/p/B3B918F30A1C7FB6&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" width="640" height="385" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="padding-left: 30px;">Faster development</p>
<blockquote style="padding-left: 30px;">
<ul>
<li>Declarative UI with UIBinder</li>
<li>Google plugin for Eclipse</li>
<li>Multi-browser debugging</li>
</ul>
</blockquote>
<p style="padding-left: 30px;">Faster Apps</p>
<blockquote style="padding-left: 30px;">
<ul>
<li>Compiler optimizations</li>
<li>Code splitting</li>
<li>Speed Tracer</li>
</ul>
</blockquote>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube-nocookie.com/v/Sn_3rJaexKc&hl=en_US&fs=1&rel=0&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/Sn_3rJaexKc&hl=en_US&fs=1&rel=0&hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<blockquote>
<p>We <a href="http://googlewebtoolkit.blogspot.com/2009/11/new-insights-into-web-application.html">hinted at it a few weeks ago</a>, and now it&#8217;s available: Speed Tracer is a powerful new performance analysis tool for Chrome that gives you unprecedented insight into the inner workings of <em>any</em> web application &mdash; not just those created with GWT. Want to know why your web app feels sluggish? Speed Tracer can help you find the answer.</p>
</blockquote>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube-nocookie.com/v/uExEw3OVMd0&hl=en_US&fs=1&rel=0&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/uExEw3OVMd0&hl=en_US&fs=1&rel=0&hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<blockquote>
<p>This video provides an overview of new features in Google Web Toolkit (GWT) 2.0, a tool which enables developers to produce highly optimized, browser-specific JavaScript for their apps. Bruce Johnson, Joel Webber, Andrew Bowers, and Adam Schuck walk you through the newest tools and features in GWT 2.0 such as uiBinder, code splitting, speed tracer, and more.</p>
</blockquote>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/6/googles-go-language-multi-value-return-vs-exceptions-c.html"><rss:title>Google's Go language: multi-value return vs. exceptions (C++)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/6/googles-go-language-multi-value-return-vs-exceptions-c.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-07T01:15:00Z</dc:date><dc:subject>article code code design google go language programming web server</dc:subject><content:encoded><![CDATA[<h3></h3>
<p><span class="full-image-inline ssNonEditable"><span><a href="http://golang.org/"><img src="http://www.softmachinecubed.com/storage/post-images/Google%20Go%20Mascot.JPG?__SQUARESPACE_CACHEVERSION=1260172000071" alt="" /></a></span></span><span class="full-image-inline ssNonEditable"><span><a href="http://stackoverflow.com/"><img src="http://www.softmachinecubed.com/storage/post-images/StackOverflow%20Beta%20Careers.png?__SQUARESPACE_CACHEVERSION=1260171956313" alt="" /></a></span></span></p>
<p>The following &nbsp;is a question I asked on&nbsp;<a href="http://stackoverflow.com/">Stack Overflow</a>&nbsp;and some of the answers. There is more interesting stuff at the site. This question is tricky in that I don&#8217;t want to start a religious debate about exceptions and error handling, but I do find this feature interesting in light of Google&#8217;s &#8220;exception&#8221; prohibition.</p>
<p>I do think it is worthwhile to start with a &#8220;blank slate&#8221; and borrow the best features of other languages together to address a specific need. I think the Go language shows promise; the feature set, syntax and run-time properties are very interesting. Apparently, the decision to support the C object file linkage standard means it begins life with a large set of libraries. Another interesting question is whether the language can be implemented using the JVM runtime.</p>
<h2><a class="question-hyperlink" href="http://stackoverflow.com/questions/1852186/is-googles-go-language-multi-value-return-statement-an-alternative-to-exceptio">Is Google&rsquo;s &ldquo;Go&rdquo; language multi-value return statement an alternative to exceptions?</a></h2>
<p>It seems to me Google&#8217;s alternatives to exceptions are</p>
<ul>
<li>GO: multi-value return &#8220;return val, err;&#8221;</li>
<li>GO, C++: nil checks (early return)</li>
<li>GO, C++: &#8220;handle the damn error&#8221; (my term)</li>
<li>C++: assert(expression)</li>
</ul>
<p>Is multi-value return useful enough to act as an alternative? Why are &#8220;asserts&#8221; considered alternatives? Does Google think it O.K. if a program halts if an error occurs that is not handled correctly?</p>
<p><strong><a title="Effective GO: Multiple=">Effective GO: Multiple return values</a></strong></p>
<blockquote>
<p>One of Go&#8217;s unusual features is that functions and methods can return multiple values. This can be used to improve on a couple of clumsy idioms in C programs: in-band error returns (such as -1 for EOF) and modifying an argument.</p>
<p>In C, a write error is signaled by a negative count with the error code secreted away in a volatile location. In Go, Write can return a count and an error: &ldquo;Yes, you wrote some bytes but not all of them because you filled the device&rdquo;. The signature of *File.Write in package os is:</p>
<p><code>func (file *File) Write(b []byte) (n int, err Error)</code></p>
<p>and as the documentation says, it returns the number of bytes written and a non-nil Error when n != len(b). This is a common style; see the section on error handling for more examples.</p>
</blockquote>
<p><strong><a title="GO: Named result parameters" rel="nofollow" href="http://golang.org/doc/effective_go.html#named-results">Effective GO: Named result parameters</a></strong></p>
<blockquote>
<p>The return or result &#8220;parameters&#8221; of a Go function can be given names and used as regular variables, just like the incoming parameters. When named, they are initialized to the zero values for their types when the function begins; if the function executes a return statement with no arguments, the current values of the result parameters are used as the returned values.</p>
<p>The names are not mandatory but they can make code shorter and clearer: they&#8217;re documentation. If we name the results of nextInt it becomes obvious which returned int is which.</p>
<p><code>func nextInt(b []byte, pos int) (value, nextPos int) {</code></p>
<p>Because named results are initialized and tied to an unadorned return, they can simplify as well as clarify. Here&#8217;s a version of io.ReadFull that uses them well:</p>
</blockquote>
<blockquote>
<pre class="prettyprint"><code><span class="pln">func </span><span class="typ">ReadFull</span><span class="pun">(</span><span class="pln">r </span><span class="typ">Reader</span><span class="pun">,</span><span class="pln"> buf </span><span class="pun">[]</span><span class="kwd">byte</span><span class="pun">)</span><span class="pln"> </span><span class="pun">(</span><span class="pln">n </span><span class="kwd">int</span><span class="pun">,</span><span class="pln"> err os</span><span class="pun">.</span><span class="typ">Error</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; </span><span class="kwd">for</span><span class="pln"> len</span><span class="pun">(</span><span class="pln">buf</span><span class="pun">)</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> err </span><span class="pun">==</span><span class="pln"> </span><span class="kwd">nil</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">var</span><span class="pln"> nr </span><span class="kwd">int</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; nr</span><span class="pun">,</span><span class="pln"> err </span><span class="pun">=</span><span class="pln"> r</span><span class="pun">.</span><span class="typ">Read</span><span class="pun">(</span><span class="pln">buf</span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; n </span><span class="pun">+=</span><span class="pln"> nr</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; buf </span><span class="pun">=</span><span class="pln"> buf</span><span class="pun">[</span><span class="pln">nr</span><span class="pun">:</span><span class="pln">len</span><span class="pun">(</span><span class="pln">buf</span><span class="pun">)];</span><span class="pln"><br />&nbsp; </span><span class="pun">}</span><span class="pln"><br />&nbsp; </span><span class="kwd">return</span><span class="pun">;</span><span class="pln"><br /></span><span class="pun">}</span><span class="pln"><br /></span></code></pre>
</blockquote>
<p><strong><a title="Why does Go not have exceptions?" rel="nofollow" href="http://golang.org/doc/go_lang_faq.html#exceptions">Why does Go not have exceptions?</a></strong></p>
<blockquote>
<p>Exceptions are a similar story. A number of designs for exceptions have been proposed but each adds significant complexity to the language and run-time. By their very nature, exceptions span functions and perhaps even goroutines; they have wide-ranging implications. There is also concern about the effect they would have on the libraries. They are, by definition, exceptional yet experience with other languages that support them show they have profound effect on library and interface specification. It would be nice to find a design that allows them to be truly exceptional without encouraging common errors to turn into special control flow that requires every programmer to compensate.</p>
<p>Like generics, exceptions remain an open issue.</p>
</blockquote>
<p><strong><a title="Google C++ Style Guide: Exceptions" rel="nofollow" href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Exceptions#Exceptions">Google C++ Style Guide: Exceptions</a></strong></p>
<blockquote>
<p>Decision:</p>
<p>On their face, the benefits of using exceptions outweigh the costs, especially in new projects. However, for existing code, the introduction of exceptions has implications on all dependent code. If exceptions can be propagated beyond a new project, it also becomes problematic to integrate the new project into existing exception-free code. Because most existing C++ code at Google is not prepared to deal with exceptions, it is comparatively difficult to adopt new code that generates exceptions.</p>
<p>Given that Google&#8217;s existing code is not exception-tolerant, the costs of using exceptions are somewhat greater than the costs in in a new project. The conversion process would be slow and error-prone. We don&#8217;t believe that the&nbsp;<strong>available alternatives to exceptions, such as error codes and assertions,</strong>&nbsp;introduce a significant burden.</p>
<p>Our advice against using exceptions is not predicated on philosophical or moral grounds, but practical ones. Because we&#8217;d like to use our open-source projects at Google and it&#8217;s difficult to do so if those projects use exceptions, we need to advise against exceptions in Google open-source projects as well. Things would probably be different if we had to do it all over again from scratch.</p>
</blockquote>
<p>&nbsp;</p>
<div id="subheader">
<h2>Answers I liked</h2>
<blockquote>
<div id="tabs">
<h3><a href="http://stackoverflow.com/users/13005/steve-jessop">Steve Jessop</a></h3>
<p><a href="http://stackoverflow.com/users/13005/steve-jessop"></a>Multiple returns are not unique to Go, and they&#8217;re not a substitute for exceptions. In C (or C++) terms, they are a concise and user-friendly substitute for returning a struct (object) containing multiple values.</p>
<p>They do provide a convenient means of indicating errors, if that&#8217;s all you mean.</p>
<p><em>Why are &#8220;asserts&#8221; considered alternatives?</em></p>
<p>Asserts are initially for debugging. They halt the program in situations where it is in an &#8220;impossible&#8221; state, one that the design says should not happen, but which has anyway. Returning an error is unlikely to help much. The code base obviously doesn&#8217;t work yet, so how on earth can it successfully recover? Why would you even want it to, when there&#8217;s a bug that needs attention?</p>
<p>Using asserts in production code is a bit of a different matter - obviously there are performance and code size concerns, so the usual approach is to remove them once your code analysis and tests have convinced you that the &#8220;impossible&#8221; situations really are impossible. But, if you&#8217;re running code at this level of paranoia, that it&#8217;s auditing itself, then you&#8217;re probably also paranoid that if you let it carry on running in an &#8220;impossible&#8221; state, then it might do something dangerously broken: corrupting valuable data, overflowing a stack and perhaps creating security vulnerabilities. So again, you just want to shut down as soon as possible.</p>
<p>The stuff you use asserts for really isn&#8217;t the same as the stuff you use exceptions for: when programming languages like C++ and Java provide exceptions for &#8220;impossible&#8221; situations (<code>logic_error</code>,<code>ArrayOutOfBoundsException</code>), they unintentionally encourage some programmers to think that their programs&nbsp;<em>should</em>&nbsp;attempt to recover from situations where really they&#8217;re out of control. Sometimes that is appropriate, but the Java advice not to catch RuntimeExceptions is there for a good reason. Very occasionally it&#8217;s a good idea to catch one, which is why they exist. Almost always it&#8217;s not a good idea to catch them, meaning that they amount to halting the program (or at least the thread) anyway.</p>
</div>
</blockquote>
<p>&nbsp;</p>
<blockquote>
<h3><a href="http://stackoverflow.com/users/36565/dribeas">dribeas</a></h3>
<p>It&#8217;s not Go, but in Lua, multiple return is an extremely common idiom for handling exceptions.</p>
<p>If you had a function like</p>
<pre class="prettyprint"><code><span class="kwd">function</span><span class="pln"> divide</span><span class="pun">(</span><span class="pln">top</span><span class="pun">,</span><span class="pln">bottom</span><span class="pun">)</span><span class="pln"><br />&nbsp; &nbsp;</span><span class="kwd">if</span><span class="pln"> bottom </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="kwd">then</span><span class="pln"> <br />&nbsp; &nbsp; &nbsp; &nbsp; error</span><span class="pun">(</span><span class="str">"cannot divide by zero"</span><span class="pun">)</span><span class="pln"><br />&nbsp; &nbsp;</span><span class="kwd">else</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> top</span><span class="pun">/</span><span class="pln">bottom<br />&nbsp; &nbsp;</span><span class="kwd">end</span><span class="pln"><br /></span><span class="kwd">end</span><span class="pln"><br /></span></code></pre>
<p>Then when&nbsp;<code>bottom</code>&nbsp;was 0, an exception would be raised and the program&#8217;s execution would halt, unless you wrapped the function&nbsp;<code>divide</code>&nbsp;in a&nbsp;<a rel="nofollow" href="http://www.lua.org/pil/8.4.html"><code>pcall</code>&nbsp;(or protected call)</a>.</p>
<p><code>pcall</code>&nbsp;always returns two values: the first is result is a boolean telling whether the function returned successfully, and the second result is either the return value or the error message.</p>
<p>The following (contrived) Lua snippet shows this in use:</p>
<pre class="prettyprint"><code><span class="kwd">local</span><span class="pln"> top</span><span class="pun">,</span><span class="pln"> bottom </span><span class="pun">=</span><span class="pln"> get_numbers_from_user</span><span class="pun">()</span><span class="pln"><br /></span><span class="kwd">local</span><span class="pln"> status</span><span class="pun">,</span><span class="pln"> retval </span><span class="pun">=</span><span class="pln"> pcall</span><span class="pun">(</span><span class="pln">divide</span><span class="pun">,</span><span class="pln"> top</span><span class="pun">,</span><span class="pln"> bottom</span><span class="pun">)</span><span class="pln"><br /></span><span class="kwd">if</span><span class="pln"> </span><span class="kwd">not</span><span class="pln"> status </span><span class="kwd">then</span><span class="pln"><br />&nbsp; &nbsp; show_message</span><span class="pun">(</span><span class="pln">retval</span><span class="pun">)</span><span class="pln"><br /></span><span class="kwd">else</span><span class="pln"><br />&nbsp; &nbsp; show_message</span><span class="pun">(</span><span class="pln">top </span><span class="pun">..</span><span class="pln"> </span><span class="str">" divided by "</span><span class="pln"> </span><span class="pun">..</span><span class="pln"> bottom </span><span class="pun">..</span><span class="pln"> </span><span class="str">" is "</span><span class="pln"> </span><span class="pun">..</span><span class="pln"> retval</span><span class="pun">)</span><span class="pln"><br /></span><span class="kwd">end</span><span class="pln"><br /></span></code></pre>
<p>Of course, you don&#8217;t have to use&nbsp;<code>pcall</code>, if the function you&#8217;re calling already returns in the form of<code>status, value_or_error</code>.</p>
<p>Multiple return has been good enough for Lua for several years, so while that doesn&#8217;t&nbsp;<em>ensure</em>&nbsp;that it&#8217;s good enough for Go, it is supportive of the idea.</p>
</blockquote>
<p>&nbsp;</p>
<blockquote>
<h3><a href="http://stackoverflow.com/users/69307/neil-butterworth">Neil Butterworth</a></h3>
<p>Here&#8217;s an example of how multiple return values might work in c++. I wouldn&#8217;t write this code myself, but I don&#8217;t think it is entirely out of the question to use such an approach.</p>
<pre class="prettyprint"><code><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;iostream&gt;</span><span class="pln"><br /></span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;fstream&gt;</span><span class="pln"><br /></span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;string&gt;</span><span class="pln"><br /></span><span class="kwd">using</span><span class="pln"> </span><span class="kwd">namespace</span><span class="pln"> std</span><span class="pun">;</span><span class="pln"><br /><br /></span><span class="com">// return value type</span><span class="pln"><br /></span><span class="kwd">template</span><span class="pln"> </span><span class="pun">&lt;</span><span class="kwd">typename</span><span class="pln"> T</span><span class="pun">&gt;</span><span class="pln"> <br /></span><span class="kwd">struct</span><span class="pln"> RV </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">int</span><span class="pln"> mStatus</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; T mValue</span><span class="pun">;</span><span class="pln"><br /><br />&nbsp; &nbsp; RV</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">int</span><span class="pln"> status</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">const</span><span class="pln"> T </span><span class="pun">&amp;</span><span class="pln"> rv </span><span class="pun">)</span><span class="pln"> <br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="pun">:</span><span class="pln"> mStatus</span><span class="pun">(</span><span class="pln"> status </span><span class="pun">),</span><span class="pln"> mValue</span><span class="pun">(</span><span class="pln"> rv </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{}</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">int</span><span class="pln"> </span><span class="typ">Status</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">const</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> mStatus</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">const</span><span class="pln"> T </span><span class="pun">&amp;</span><span class="pln"> </span><span class="typ">Value</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">const</span><span class="pln"> </span><span class="pun">{</span><span class="kwd">return</span><span class="pln"> mValue</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span><span class="pln"><br /></span><span class="pun">};</span><span class="pln"><br /><br /></span><span class="com">// example of possible use</span><span class="pln"><br />RV </span><span class="str">&lt;string&gt;</span><span class="pln"> </span><span class="typ">ReadFirstLine</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">const</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="pun">&amp;</span><span class="pln"> fname </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; ifstream ifs</span><span class="pun">(</span><span class="pln"> fname</span><span class="pun">.</span><span class="pln">c_str</span><span class="pun">()</span><span class="pln"> </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">string</span><span class="pln"> line</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> </span><span class="pun">!</span><span class="pln"> ifs </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> RV </span><span class="str">&lt;string&gt;</span><span class="pun">(</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> getline</span><span class="pun">(</span><span class="pln"> ifs</span><span class="pun">,</span><span class="pln"> line </span><span class="pun">)</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> RV </span><span class="str">&lt;string&gt;</span><span class="pun">(</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> line </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="kwd">return</span><span class="pln"> RV </span><span class="str">&lt;string&gt;</span><span class="pun">(</span><span class="pln"> </span><span class="pun">-</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br /></span><span class="pun">}</span><span class="pln"><br /><br /></span><span class="com">// in use</span><span class="pln"><br /></span><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; RV </span><span class="str">&lt;string&gt;</span><span class="pln"> r </span><span class="pun">=</span><span class="pln"> </span><span class="typ">ReadFirstLine</span><span class="pun">(</span><span class="pln"> </span><span class="str">"stuff.txt"</span><span class="pln"> </span><span class="pun">);</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln"> r</span><span class="pun">.</span><span class="typ">Status</span><span class="pun">()</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; cout </span><span class="pun">&lt;&lt;</span><span class="pln"> </span><span class="str">"Read: "</span><span class="pln"> </span><span class="pun">&lt;&lt;</span><span class="pln"> r</span><span class="pun">.</span><span class="typ">Value</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&lt;&lt;</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln"><br />&nbsp; &nbsp; &nbsp; &nbsp; cout </span><span class="pun">&lt;&lt;</span><span class="pln"> </span><span class="str">"Error: "</span><span class="pln"> </span><span class="pun">&lt;&lt;</span><span class="pln"> r</span><span class="pun">.</span><span class="typ">Status</span><span class="pun">()</span><span class="pln"> </span><span class="pun">&lt;&lt;</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln"><br />&nbsp; &nbsp; </span><span class="pun">}</span><span class="pln"><br /></span><span class="pun">}</span></code></pre>
</blockquote>
</div>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/4/this-week-in-startups-30-with-annie-duke-jason-calacanis.html"><rss:title>This week in startups #30 with Annie Duke (Jason Calacanis)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/4/this-week-in-startups-30-with-annie-duke-jason-calacanis.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-04T22:40:53Z</dc:date><dc:subject>business conversation gambling gaming mathematics poker profit psychology video</dc:subject><content:encoded><![CDATA[<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/TWiST banner.jpg?__SQUARESPACE_CACHEVERSION=1259970797921" alt="" /></span></span></p>
<p>This &#8220;bonus&#8221; episode of <a href="http://thisweekinstartups.com/">This Week in Startups</a> (TWiST) is an almost three-hour conversation between Jason Calacanis and Annie Duke. This is an atypical episode in that Duke is a professional poker player &#8212; not your average CEO.</p>
<p><embed src="http://blip.tv/play/g7RBgbP1cAI" type="application/x-shockwave-flash" width="640" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></p>
<p><a href="http://thisweekinstartups.com/2009/12/twist-30-with-annie-duke/">Episode link</a></p>
<blockquote>
<p>Another bonus episode of TWiST &ndash; and Jason&rsquo;s guest is the world&rsquo;s best female poker player, <a href="http://www.annieduke.com/">Annie Duke</a>!&nbsp; Annie has one over $3,000,000 in tournaments, won the <a href="http://www.wsop.com/">World Series of Poker</a> and is a noted writer, blogger, philanthropist and TV personality (she was recently on Season 2 of &ldquo;<a href="http://www.nbc.com/the-celebrity-apprentice/">Celebrity Apprentice</a>&ldquo;).&nbsp; Most impressively, she&rsquo;s managed to turn her hobby of playing poker into a full on career and brand.&nbsp; Plus, she&rsquo;s launching her own startup soon, but its probably not what you&rsquo;d expect.</p>
</blockquote>
<p>The conversation topics include traditional and online gambling, gambling media, tournament gambling, internet poker, mathematics, probability, statistics, psychology, critical thinking, skill vs. luck, result analysis, &#8220;tilt&#8221;, ethics, legislation, economics, politics, RICO act, &#8220;Betting&#8221; vs. gambling, cheating, brand issues, legal issues and twitter.</p>
<p>Calacanis played in the World Series of Poker recently, and has said he wants to &#8220;go pro&#8221;; his current job as CEO is &#8220;exhausting.&#8221;</p>
<p>Duke was discouraged from being the &#8220;smart girl&#8221; by her mother, so she focused on a liberal arts education. Thankfully, she later found an enjoyable and very profitable way to benefit from her innate &#8220;math geek&#8221; nature.</p>
<p>&nbsp;</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/12/2/all-time-best-of-youtube-michael-wesch-digital-ethnography-k.html"><rss:title>All-time best of YouTube: Michael Wesch (digital ethnography, KSU)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/12/2/all-time-best-of-youtube-michael-wesch-digital-ethnography-k.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-03T03:25:19Z</dc:date><dc:subject>activism collaboration diy social media video video</dc:subject><content:encoded><![CDATA[<p><span class="full-image-block ssNonEditable"><a href="http://www.youtube.com/user/mwesch"><img src="http://www.softmachinecubed.com/storage/post-images/mwesch_youtube_profile.jpg?__SQUARESPACE_CACHEVERSION=1259997403301" alt="" /></a></span></p>
<p><span style="font-size: 110%;"><strong><a href="http://www.youtube.com/user/mwesch">Youtube user &#8220;mwesch&#8221;</a> is an <a href="http://ksuanth.weebly.com/wesch.html">Assistant Professor of Cultural Anthropology</a> at <a href="http://ksuanth.weebly.com/wesch.html">Kansas State University</a> and represents to me the very best potential of <a href="http://youtube.com">YouTube</a> and &#8220;citizen media.&#8221;</strong></span></p>
<p><object width="640" height="515"><param name="movie" value="http://www.youtube.com/p/E385CB267F34FC9E&amp;hl=en_US&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/p/E385CB267F34FC9E&amp;hl=en_US&amp;fs=1" type="application/x-shockwave-flash" width="640" height="515" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>This is a playlist of some of his hugely successful YouTube videos.</p>
<p>From his page at Kansas State:</p>
<blockquote>
<p>Dubbed &#8220;the explainer&#8221; by Wired magazine, Michael Wesch is a cultural anthropologist exploring the effects of new media on society and culture. After two years studying the implications of writing on a remote indigenous culture in the rain forest of Papua New Guinea, he has turned his attention to the effects of social media and digital technology on global society. &nbsp;His videos on culture, technology, education, and information have been viewed by millions, translated in over 15 languages, and are frequently featured at international film festivals and major academic conferences worldwide. Wesch has won several major awards for his work, including a Wired Magazine Rave Award, the John Culkin Award for Outstanding Praxis in Media Ecology, and he was recently named an Emerging Explorer by National Geographic.</p>
</blockquote>
<p>&nbsp;</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/11/30/jennifer-leggio-of-zdnet-is-wrong-wikipedia-2008.html"><rss:title>Jennifer Leggio of ZDNet is Wrong (Wikipedia 2008)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/11/30/jennifer-leggio-of-zdnet-is-wrong-wikipedia-2008.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-12-01T01:33:11Z</dc:date><dc:subject>article collaboration journalism news social media wiki</dc:subject><content:encoded><![CDATA[<h3>FROM THE ARCHIVES: November 30, 2008</h3>
<blockquote>
<p><a href="http://wikipedia.org">Wikipedia</a> is getting a fresh round of scrutiny amidst observations that <a href="http://www.telegraph.co.uk/technology/wikipedia/6650077/Wikipedia-project-losing-contributors-in-record-numbers.html">contribution has dropped precipitously in the last year</a>.</p>
</blockquote>
<h3>Related Post: Unabashed Plea: <a href="http://reechard.vox.com/library/post/unabashed-plea-leave-wikipedia-aloooooone-sob.html">Leave Wikipedia Aloooooone</a> (sob)</h3>
<h3>See Also: <a href="http://www.schneier.com/blog/archives/2008/12/communications.html">Communications During Terrorist Attacks are Not Bad</a> - Schneier on Security</h3>
<p><br /><em>ZDNet article by Jennifer Leggio (November 28th, 2008)</em></p>
<h3><a title="Permanent Link to Mumbai attack coverage demonstrates (good and bad) maturation point of social media" rel="bookmark" href="http://blogs.zdnet.com/feeds/?p=339">Mumbai attack coverage demonstrates (good and bad) maturation point of social media</a></h3>
<p>The content on Page 2 leaves me with two choices. Either she does not understand Wikipedia, or is using it as a punching bag to make some grandiose claim about the shortcomings of social media and citizen journalism.</p>
<p>I attempted to clarify. <a href="http://friendfeed.com/e/466bc200-b8a8-9a1f-b407-29ed3638f7e9/Mumbai-attack-coverage-demonstrates-good-and-bad/">See that FriendFeed conversation here</a>. Note that she issues me a &#8220;correction&#8221; and did not respond to my concern that she flat out does not understand how Wikipedia works.</p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Why ZDNet's Jennifer Leggio is Wrong and why it Matters.JPG?__SQUARESPACE_CACHEVERSION=1259632138559" alt="" /></span></span><br />The Wikipedia article pictured on page 2 was seeded with valid information and grew from there. She saw it defaced for a moment, but didn&#8217;t manage to get a &#8220;screen shot.&#8221; She got the &#8220;screen shot&#8221; from a friend.</p>
<p>Here is the latest revision of the Wikipedia entry titled &#8220;<a href="http://en.wikipedia.org/wiki/November_2008_Mumbai_attacks">November 2008 Mumbai attacks</a>&#8221;. <del>I looked for the revision she cites, and failed to find it. Needless to say, that&#8217;s beside the point</del><em> See below.<br /></em></p>
<p>At the time of this writing (half-past Midnight the morning of November 30) the article has extensive information, time lines, pictures, and 179 references. The number of entries in the <a href="http://en.wikipedia.org/w/index.php?title=November_2008_Mumbai_attacks&amp;action=history">Page history</a> is in excess of 1500.</p>
<p>Is it possible Jennifer and her friend don&#8217;t understand that a Wikipedia article about a disaster such as this is the result of thousands of contributions? Does she not understand that for it to appear as she shows it, someone has to delete all of the content and replace it with &#8220;Bush Sucks?&#8221;</p>
<p>Does she not know that this sort of defacement is extremely noticeable to the hundreds of people making contributions in real time, and the next contributor will simply &#8220;undo&#8221; the defacement before making their changes?</p>
<p>She is betraying a stunning ignorance or bias here. I have less and less patience with lazy opinion pieces, or pieces that take cheap shots to make some trumped-up case. And in light of the tragedy of the actual events in Mumbai, I am appalled that it is reduced to &#8220;Bush Sucks.&#8221; I must say, in this case &#8220;ZDNet Sucks&#8221; also.</p>
<p>How many more ways can &#8220;main-stream media&#8221; fail? I&#8217;m not sure I know the answer to that one.</p>
<h3>UPDATE:<br /> <em>Found the notorious defacement(s). Two of them. Lasting 5 and 7 seconds for a grand total of 12.&nbsp;</em></h3>
<p><em><span class="full-image-block ssNonEditable"><span><img style="width: 640px;" src="http://www.softmachinecubed.com/storage/post-images/Why%20ZDNet%27s%20Jennifer%20Leggio%20is%20Wrong%20and%20why%20it%20Matters%203.JPG?__SQUARESPACE_CACHEVERSION=1259632402398" alt="" /></span></span></em></p>
<p><em><span class="full-image-block ssNonEditable"><span><img style="width: 640px;" src="http://www.softmachinecubed.com/storage/post-images/Why%20ZDNet%27s%20Jennifer%20Leggio%20is%20Wrong%20and%20why%20it%20Matters%204.JPG?__SQUARESPACE_CACHEVERSION=1259632379726" alt="" /></span></span><br /></em></p>
<p><strong><em>OMG STOP THE PRESSES. WIKIPEDIA IS BROKEN. I CAN HAZ PULITZER NOW?</em></strong></p>
<p><em><br /></em></p>
<p><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Why%20ZDNet%27s%20Jennifer%20Leggio%20is%20Wrong%20and%20why%20it%20Matters%202.JPG?__SQUARESPACE_CACHEVERSION=1259632511196" alt="" /></span></span></p>
<p><br />My last <a href="http://talkback.zdnet.com/5208-17925-0.html?forumID=1&amp;threadID=54818&amp;messageID=1037469&amp;start=-9991">comment on the article</a>:</p>
<blockquote>
<p>I will eagerly anticipate articles from ZDNet on how wikipedia has attained the success it has now, and what can be improved.</p>
<p>I will not entertain casual sniping at one of the best examples of a massive collaborative effort to date.</p>
<p>I wonder if Jennifer, and others at ZDNet would care to take an &#8220;official&#8221; anti-wikipedia position, and explain that this in no way is affected by business motives and an erosion of the authority of such as ZDNet. Looking forward to it!</p>
</blockquote>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/11/25/go-programming-language-google-tech-talks.html"><rss:title>Go Programming Language (Google Tech Talks)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/11/25/go-programming-language-google-tech-talks.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-11-25T20:57:00Z</dc:date><dc:subject>future google note programming tutorial video web dev</dc:subject><content:encoded><![CDATA[<p>&nbsp;</p>
<p><object width="640" height="385"><param name="movie" value="http://www.youtube-nocookie.com/v/rKnDgT73v8s&hl=en_US&fs=1&rel=0&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/rKnDgT73v8s&hl=en_US&fs=1&rel=0&hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<blockquote>
<p>What is Go?<br />Go is a new experimental systems programming language intended to make software development fast. Our goal is that a major Google binary should be buildable in a few seconds on a single machine. The language is concurrent, garbage-collected, and requires explicit declaration of dependencies. Simple syntax and a clean type system support a number of programming styles.</p>
</blockquote>
<h3><a href="http://golang.org/"><span class="full-image-block ssNonEditable"><span><img src="http://www.softmachinecubed.com/storage/post-images/Google%20Go%20Mascot%202.png?__SQUARESPACE_CACHEVERSION=1260173903198" alt="" /></span></span></a></h3>
<h3><a href="http://golang.org/">Go programming language</a></h3>
<p>&nbsp;</p>
<blockquote>
<p>&nbsp;</p>
<h4>Documents</h4>
<ul>
<li><a href="http://golang.org/doc/go_tutorial.html">Tutorial</a></li>
<li><a href="http://golang.org/doc/effective_go.html">Effective Go</a></li>
<li><a href="http://golang.org/doc/go_faq.html">FAQ</a></li>
<li><a href="http://golang.org/doc/go_lang_faq.html">Language Design FAQ</a></li>
<li><a href="http://www.youtube.com/watch?v=rKnDgT73v8s">This tech talk</a> (<a href="http://golang.org/doc/go_talk-20091030.pdf">PDF</a>)</li>
<li><a href="http://golang.org/doc/go_spec.html">Language Specification</a></li>
<li><a href="http://golang.org/doc/go_mem.html">Memory Model</a></li>
<li><a href="http://golang.org/doc/go_for_cpp_programmers.html">Go for C++ Programmers</a></li>
</ul>
<h4>How To</h4>
<ul>
<li><a href="http://golang.org/doc/install.html">Install Go</a></li>
<li><a href="http://golang.org/doc/contribute.html">Contribute code</a></li>
</ul>
<h4>Programming</h4>
<ul>
<li><a href="http://golang.org/cmd">Command documentation</a></li>
<li><a href="http://golang.org/pkg">Package documentation</a></li>
</ul>
<br /></blockquote>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/11/25/brief-introduction-to-lisp-oreilly-media.html"><rss:title>Brief Introduction to LISP (OReilly Media)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/11/25/brief-introduction-to-lisp-oreilly-media.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-11-25T18:10:00Z</dc:date><dc:subject>computer science education programming video</dc:subject><content:encoded><![CDATA[<p><object width="640" height="513"><param name="movie" value="http://www.youtube-nocookie.com/p/8F3625CB32AF9A9D&hl=en_US&fs=1&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/p/8F3625CB32AF9A9D&hl=en_US&fs=1&hd=1" type="application/x-shockwave-flash" width="640" height="513" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/11/25/structure-and-interpretation-of-computer-science-cs-61a-uc-b.html"><rss:title>Structure and Interpretation of Computer Science (CS 61A UC Berkeley)</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/11/25/structure-and-interpretation-of-computer-science-cs-61a-uc-b.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-11-25T17:52:00Z</dc:date><dc:subject>computer science education lecture programming video</dc:subject><content:encoded><![CDATA[<p><object width="640" height="513"><param name="movie" value="http://www.youtube-nocookie.com/p/6879A8466C44A5D5&hl=en_US&fs=1&hd=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/p/6879A8466C44A5D5&hl=en_US&fs=1&hd=1" type="application/x-shockwave-flash" width="640" height="513" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<blockquote>
<p><strong>CS 61A - Structure and Interpretation of Computer Science - U. C. Berkeley</strong></p>
<p>This course exposes students to techniques of abstraction at several levels: (a) within a programming language, using higher-order functions, manifest types, data-directed programming, and message-passing; (b) between programming languages, using functional and rule-based languages as examples.</p>
<p>Lectures 5 &amp; 6 contain copyrighted material and will be public when permission is granted.</p>
</blockquote>
<p>&nbsp;</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h1>CS 61A - Structure and Interpretation of Computer Science</h1>
<p>This course exposes students to techniques of abstraction at several levels: (a) within a programming language, using higher-order functions, manifest types, data-directed programming, and message-passing; (b) between programming languages, using functional and rule-based languages as examples. Lectures 5 &amp; 6 contain copyright material and will be public when permission is granted.</p>
</div>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/11/18/bing-image-search-this-explains-all-the-hits.html"><rss:title>Bing image search: This explains all the hits</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/11/18/bing-image-search-this-explains-all-the-hits.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-11-18T10:28:52Z</dc:date><dc:subject>note search</dc:subject><content:encoded><![CDATA[<p>&nbsp;</p>
<p><span class="full-image-block ssNonEditable"><span><a href="http://www.bing.com/images/search?q=twin+peaks+dwarf&amp;form=QBIR&amp;qs=n#focal=6ab03e770555610153e5d219fe2bb3d6&amp;furl=http%3A%2F%2Fwww.softmachinecubed.com%2Fstorage%2Fpost-images%2FTwin%2520Peaks%2520dwarf.jpg%3F__SQUARESPACE_CACHEVERSION%3D1253373108195"><img src="http://www.softmachinecubed.com/storage/post-images/Bing Image Search - now I understand why so many hits.JPG?__SQUARESPACE_CACHEVERSION=1258540436218" alt="" /></a></span></span></p>
<p>I&#8217;ve been wondering about all the image search hits I&#8217;ve been getting recently. Above is a screen capture linked to the <a href="http://www.bing.com/images/search?q=twin+peaks+dwarf&amp;form=QBIR&amp;qs=n#focal=6ab03e770555610153e5d219fe2bb3d6&amp;furl=http%3A%2F%2Fwww.softmachinecubed.com%2Fstorage%2Fpost-images%2FTwin%2520Peaks%2520dwarf.jpg%3F__SQUARESPACE_CACHEVERSION%3D1253373108195">bing search that generated it</a>. Note that bing indexes my tags and associates them with the image, and provides full access to my blog. I&#8217;m not quite sure how I feel about this as yet.</p>
<p>&nbsp;</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://www.softmachinecubed.com/tech/2009/10/5/omgwtfbbq-if-conc-trees-replace-cons-lists-then-mapreduce-ca.html"><rss:title>OMGWTFBBQ: if CONC trees replace CONS lists, then mapreduce can be parallel</rss:title><rss:link>http://www.softmachinecubed.com/tech/2009/10/5/omgwtfbbq-if-conc-trees-replace-cons-lists-then-mapreduce-ca.html</rss:link><dc:creator>richardwalker</dc:creator><dc:date>2009-10-05T17:20:09Z</dc:date><dc:subject>analysis code concurrency design language parallel performance programming scalability video</dc:subject><content:encoded><![CDATA[<h3>Alternate title:&nbsp; Mary had a little &lambda; (kidding!)</h3>
<h2>Guy Steele: Organizing Functional Code for Parallel Execution</h2>
<p><span class="full-image-block ssNonEditable"><img src="http://www.softmachinecubed.com/storage/post-images/Guy Steele - Big Messages.JPG?__SQUARESPACE_CACHEVERSION=1254767314747" alt="" /></span></p>
<p><span style="font-size: 120%;">CONS (or &#8220;<a href="http://en.wikipedia.org/wiki/Lisp_%28programming_language%29">Lisp</a>&#8221;) lists are inherently linear and sequential. One of CAR, CDR is constant-time, and the other is linear (on the length of the list). For a given list, there is only one CONS representation.</span></p>
<p><span style="font-size: 120%;">CONC primitives are null <strong>&lt;&gt;</strong>, singleton <strong>&lt;42&gt;</strong>, and &#8220;concatenation&#8221;<strong> a || b</strong></span></p>
<p><span style="font-size: 120%;">CONC trees can represent CONS style lists, or balanced binary trees, or sparse trees, or other structures.</span></p>
<p><span style="font-size: 120%;"><br /></span></p>
<p><span style="font-size: 120%;"> <br /></span></p>
<p><span class="full-image-block ssNonEditable"><img src="http://www.softmachinecubed.com/storage/post-images/CONC trees for one list.JPG?__SQUARESPACE_CACHEVERSION=1254765370865" alt="" /></span></p>
<ul>
<li><span style="font-size: 120%;">CAR CDR and CONS are compared to CONC primitives&#8230; and rather than use accessors left, right Guy prefers a SPLIT functional accessor which calls the second argument (a function) with the left and right parts as parameters.<br /></span></li>
<li><span style="font-size: 120%;">Guy says this somewhere later on, and it&#8217;s easy to miss:<br /><br />&nbsp;&nbsp;&nbsp; &#8220;We are going to use CONC trees to optimize delay&#8221;<br /></span></li>
</ul>
<ul>
<li><span style="font-size: 120%;">An important goal is a corollary to the equivalence&nbsp;</span>
<blockquote>
<p><span style="font-size: 120%;">(cons (car xs (cdr xs)) = xs </span></p>
</blockquote>
</li>
<li><span style="font-size: 120%;">It&#8217;s not this:</span>
<blockquote>
<p><span style="font-size: 120%;">(conc (left xs) (right xs)) = xs</span></p>
</blockquote>
</li>
<li><span style="font-size: 120%;">but this functional gem:</span>
<blockquote>
<p><span style="font-size: 120%;">(split xs (</span>&lambda; <span style="font-size: 120%;">(ys zs) (conc ys zs))) = xs</span></p>
</blockquote>
</li>
</ul>
<ul>
<li><span style="font-size: 120%;">Think of the <strong>lambda </strong></span><strong>&lambda;</strong> <span style="font-size: 120%;">as a <a href="http://en.wikipedia.org/wiki/Continuation"><strong>continuation</strong></a>, and a way to keep the left and right together. In practice, split does not have to behave uniformly, but for the sake of this talk,&nbsp; consider split to be purely functional with no side effects.</span><span style="font-size: 120%;"> You will notice we now have  a corollary to the most low-level CONS equivalence, but one which is expressed functionally, recursively, by &#8220;binary decomposition and reassembly&#8221;<br /></span></li>
</ul>
<p><span style="font-size: 120%;">Having taken care of the basics, Guy breaks down the implementations of&nbsp; MAP, REDUCE, MAPREDUCE, LENGTH, FILTER, QUICKSORT and MERGESORT for both CONS lists and the new CONC trees.</span></p>
<p><embed wmode="transparent" src="http://vimeo.com/moogaloop.swf?clip_id=6624203&server=vimeo.com&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="never" width="640" height="553"></embed></p>
<div style="font-size:0.9em;"><a href="http://vodpod.com/watch/2291604-if-conc-trees-replace-cons-lists-then-mapreduce-can-be-parallel">if CONC trees replace CONS lists, then MAPREDUCE can be parallel</a> - Watch more <a href="http://vodpod.com">Videos</a> at Vodpod.</div>
<div style="font-size:0.9em;"></div>
<div style="font-size:0.9em;"></div>
<div style="font-size:0.9em;"></div>
<div style="font-size:0.9em;">
<h3><strong>Heres the recursive mapreduce implementation with the Opportunity for Parallelism.</strong></h3>
<p>&nbsp;</p>
</div>
<div style="font-size:0.9em;"></div>
<div style="font-size: 110%; padding-left: 30px;">(define (mapreduce f g id xs)&nbsp;&nbsp;&nbsp;&nbsp; <strong>; Logarithmic in (length xs)??</strong><br />&nbsp; (cond ((null? xs) id)<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; ((singleton? xs) (f (item xs)))<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; (else (split xs (&lambda; (ys zs)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (g (mapreduce f g id ys)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>; OMG Opportunity for</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; (mapreduce f g id zs))))))) <strong>; WTF Parallelism</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>; BBQ (mmmm, barbecue&#8230; &lt;gurgle&gt;)</strong></div>
<p>&nbsp;</p>
<p>&#8230;. Almost done! &#8230;.</p>
<p>&nbsp;</p>
<p><strong>RANT ON</strong></p>
<blockquote>
<div style="font-size:0.9em;">If you are on Windows searching the Unicode characters looking for &#8220;LAMBDA&#8221;, you should STOP IMMEDIATELY. Search for &#8220;LAMDA&#8221; (no B). Microsoft doesn&#8217;t know how to <strong>spell </strong>&#8220;LAMBDA&#8221; much less describe its purpose in binding new variables dynamically, so the lambda (and its children) have a protected scope that hides variables in outer scopes, until the lambda completes and its scope goes away. Anyway HTML for the &lambda; is &#8221; &amp;lambda; &#8221; &#8212; that&#8217;s ampersand lambda semicolon&nbsp; (no spaces)</div>
</blockquote>
<div style="font-size:0.9em;"></div>
<div style="font-size:0.9em;"><strong>RANT OFF</strong></div>
<p>&nbsp;</p>
]]></content:encoded></rss:item></rdf:RDF>