<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Humanist &amp;rarr; Blog by Luke Hoersten</title>
	
	<link>http://humani.st</link>
	<description>Computer Science, Business, Blogging, and Technology Blog by Luke Hoersten</description>
	<lastBuildDate>Sat, 24 Jan 2009 18:33:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Humanist" /><feedburner:info uri="humanist" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/Humanist" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2FHumanist" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><item>
		<title>Google Friend Connect: Deface Your Site</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/aDuX0MmrAaE/</link>
		<comments>http://humani.st/google-friend-connect-deface-your-site/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 06:00:43 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://humani.st/?p=404</guid>
		<description><![CDATA[After adding a few Google Friend Connect widgets to my site, I&#8217;ve determined that relationship just wont work out. GFC looks like trash. All the widgets must be pre-formatted to a specific pixel width and height. I&#8217;ve spent hours searching for this theme, tweaking it, crafting everything to the em, and making sure everything integrates [...]]]></description>
			<content:encoded><![CDATA[<p>After adding a few <a title="Google Friend Connect" href="http://www.google.com/friendconnect/">Google Friend Connect</a> widgets to my site, I&#8217;ve determined that relationship just wont work out. <abbr title="Google Friend Connect">GFC</abbr> looks like trash. All the widgets must be pre-formatted to a specific pixel width and height. I&#8217;ve spent <em>hours</em> searching for this theme, tweaking it, crafting everything to the <em>em</em>, and making sure everything integrates perfectly. Imagine spending hours baking the perfect multi-layer wedding cake and then at the end, scribbling the name of the bride and groom on a few sticky notes and slapping them on the frosted flowers. Sure, value is being added, but at what cost?<a href="http://flickr.com/photos/romanlily/2195757922/"><img class="alignnone size-thumbnail wp-image-406" title="Cake" src="http://humani.st/wordpress/wp-content/uploads/2008/12/2195757922_a3721055bc_o-200x60.jpg" alt="Cake" width="200" height="60" /></a></p>
<p>I was a bit afraid that Google had the girth to capture some of the potential mainstream demographic from <a title="Disqus" href="http://disqus.com">Disqus</a> but now I realize that Google&#8217;s going for the cut-copy-paste website owners. Google used to be so good at design but somehow they&#8217;re becoming the web2.0 version of good ol&#8217; 90&#8217;s Geocities.</p>
<p>Disqus will soon have more <a title="Disqus and Facebook Connect" href="http://blog.disqus.net/2008/12/16/disqus-and-facebook-connect/">mainstream accessibility</a> with the comming addition of Facebook Connectect. Facebook Connect will achieve the same &#8220;value added&#8221; as Google— linking Facebook accounts with websites— but with the elegance and tailored integration of Disqus blog connection.</p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 1.347 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=aDuX0MmrAaE:Y51LqkKjjkU:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=aDuX0MmrAaE:Y51LqkKjjkU:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/aDuX0MmrAaE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/google-friend-connect-deface-your-site/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://humani.st/google-friend-connect-deface-your-site/</feedburner:origLink></item>
		<item>
		<title>Talking to Erlang</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/huXdMEKs4MA/</link>
		<comments>http://humani.st/talking-to-erlang/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 02:25:54 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://humani.st/?p=393</guid>
		<description><![CDATA[In a previous post, Scalable Web Apps: Erlang + Python, I talked broadly about using HTTP to make external applications talk to an Erlang cluster over the internet or network. The following code is an example of a MochiWeb server set up to receive HTTP requests with embedded JSON. HTTP is basically used as a [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous post, <a title="Scalable Web Apps: Erlang + Python" href="http://humani.st/scalable-web-apps-erlang-python/"><em>Scalable Web Apps: Erlang + Python</em></a>, I talked broadly about using HTTP to make external applications talk to an Erlang cluster over the internet or network. The following code is an example of a <a href="http://code.google.com/p/mochiweb/">MochiWeb</a> server set up to receive HTTP requests with embedded <a href="http://www.json.org/">JSON</a>. HTTP is basically used as a nice wrapper around whatever data is being sent and data is wrapped-up in a serialized form called JSON. The following goes in the generated MochiWeb skeleton code file called <code><em>project_name</em>_web.erl</code>:</p>
<pre>%% @author Luke Hoersten &lt;Luke@Hoersten.org&gt;
%% @copyright 2008 Luke Hoersten.

%% @doc Web server for example.

-module(example_web).
-author('Luke Hoersten &lt;Luke@Hoersten.org&gt;').

-export([start/1, stop/0, loop/2]).

%% External API
start(Options) -&gt;
    {DocRoot, Options1} = get_option(docroot, Options),
    Loop = fun (Req) -&gt; ?MODULE:loop(Req, DocRoot) end,
    mochiweb_http:start([{name, ?MODULE}, {loop, Loop} | Options1]).

stop() -&gt;
    mochiweb_http:stop(?MODULE).

loop(Req, _) -&gt;
    io:format("~nReceived:~n~p~n", [Req]),
    case {Req:get(method), Req:get_header_value("Content-Type")} of
        {'POST', "application/jsonrequest"} -&gt;
            do_stuff(mochijson2:decode(Req:recv_body())),
            Req:ok("text/plain",
                   [{"User-Agent", "Erlang/example/0.1"}],
                   &lt;&lt;"Processing Request"&gt;&gt;)
        _ -&gt;
            Req:not_found()
    end.

%% Internal API
do_stuff(Data) -&gt;
    io:format("~nData: ~p~n", [Data]),
    Nodes = [{'erlang@pod5-1', 4}, {'erlang@pod5-2', 4},
             {'erlang@pod5-3', 4}, {'erlang@pod5-4', 4},
             {'erlang@pod5-5', 4}],
    plists:foreach(fun stuff:do_stuff/1, Data, {nodes, Nodes}).

get_option(Option, Options) -&gt;
    {proplists:get_value(Option, Options), proplists:delete(Option, Options)}.</pre>
<h3>How it Works</h3>
<p>The server is basically a loop which uses MochiWeb to pull HTTP requests out of a TCP/IP socket. If the HTTP header is a JSON HTTP POST, then the JSON is deserialized and applied to the function <code>do_stuff</code>. <code>do_stuff</code> then parallelizes the data over a cluster of Erlang nodes using the <a title="plists library" href="http://code.google.com/p/plists/">plists</a> library for processing which can talk to each other with message passing as needed. The &#8220;OK&#8221; response is sent back to the application which sent the HTTP request, after the parallelized processing completes, without doing any exception handling.</p>
<p>For reference, here is the example Python from the other end of the connection:</p>
<pre>def send_to_erlang(data):
    url = "http://erlang.nodes.tld:8000/"
    body = json.dumps(data)
    headers = {'Content-Type': 'application/jsonrequest',
               'User-Agent'  : 'Python/Project/0.1'}
    urlopen(Request(url, body, headers))</pre>
<p>It may seem simple, and <em>it is simple</em> because of Erlang and MochiWeb, but before seeing how this all fits together, it can seem mysterious. Please feel free to comment with questions and I&#8217;ll try to clarify as much as possible. Thanks to the <a href="http://groups.google.com/group/mochiweb">MochiWeb mailing list</a> for helping me when I was starting out.</p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 43.423 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=huXdMEKs4MA:dYeTCXC6kQs:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=huXdMEKs4MA:dYeTCXC6kQs:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/huXdMEKs4MA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/talking-to-erlang/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://humani.st/talking-to-erlang/</feedburner:origLink></item>
		<item>
		<title>Why Make Erlang a Functional Language?</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/q5PWNInXzF4/</link>
		<comments>http://humani.st/why-make-erlang-a-functional-language/#comments</comments>
		<pubDate>Fri, 27 Jun 2008 02:30:08 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://humani.st/?p=381</guid>
		<description><![CDATA[Why Does Erlang Have Weird Syntax?

I&#8217;ve heard the argument many times. People &#8220;don&#8217;t like Erlang&#8217;s syntax so [they] don&#8217;t like Erlang.&#8221; I, for instance, didn&#8217;t understand the block terminator syntax when I was first learning Erlang, so I asked Yariv Sadan about it:
Erlang syntax came from Prolog. The &#8216;end&#8217; keyword is used to end code [...]]]></description>
			<content:encoded><![CDATA[<h3>Why Does Erlang Have Weird Syntax?</h3>
<p><a href="http://www.erlang.org/"><img class="alignright size-full wp-image-379" title="Erlang" src="http://humani.st/wordpress/wp-content/uploads/2008/04/erlang.png" alt="" align="right" /></a></p>
<p>I&#8217;ve heard the argument many times. People &#8220;don&#8217;t like Erlang&#8217;s syntax so [they] don&#8217;t like Erlang.&#8221; I, for instance, didn&#8217;t understand the block terminator syntax when I was first learning Erlang, so I asked Yariv Sadan about it:</p>
<blockquote><p>Erlang syntax came from <a title="Prolog" href="http://en.wikipedia.org/wiki/Prolog">Prolog</a>. The &#8216;end&#8217; keyword is used to end code blocks that are contained inside the body of a function, and the &#8216;.&#8217; symbol is used to close top-level function definitions.</p>
<p>&mdash; <a title="Yariv Sadan" href="http://yarivsblog.com/">Yariv Sadan</a></p></blockquote>
<p>But what is the <em>purpose</em> of such a strange syntax? Is Erlang&#8217;s syntax really that weird or is it the <a title="Erlang &amp; Single Assignment: You&rsquo;re Doing It Wrong" href="http://weblog.hypotheticalabs.com/?p=281">single-assignment semantics</a> which people don&#8217;t like? Erlang&#8217;s <abbr title="Single-assignment semantics">SAS</abbr> derives from the <a title="functional programming" href="http://en.wikipedia.org/wiki/Functional_programming">functional programming</a> paradigm which begs the real question: <strong>&#8220;Why is Erlang a functional language?&#8221;</strong></p>
<p>The answer in a nutshell: To attain more language features, like message passing in Erlang&#8217;s case, the language incurs some overhead so efficiency gains must be made to compensate. It&#8217;s the same concept behind <a title="Red-Black Trees" href="http://en.wikipedia.org/wiki/Red-black_tree#Properties">data structures</a>: In order to know more about data, semantic restrictions can be imposed. In this case, the data is the program source itself and the imposed restriction is <strong>data immutability</strong>.</p>
<p>Erlang&#8217;s data immutability can be split into two levels: <abbr title="within one process">intra-process</abbr> <strong>variable immutability</strong> and <abbr title="between two processes">inter-process</abbr> <strong>data isolation</strong>.</p>
<h3>Why Doesn&#8217;t Erlang Have Share Data?</h3>
<p>Concurrency is obviously the justification for Erlang&#8217;s isolation memory model, with the alternative being locking to synchronize destructive shared data operations. <a title="Why Threads are a Bad Idea (for most purposes)" href="http://www.softpanorama.org/People/Ousterhout/Threads/index.shtml">Lock complexity</a> makes scaling hard because <strong>locks aren&#8217;t <a title="Composability" href="http://en.wikipedia.org/wiki/Composability">composable</a></strong> and are unassociated with the shared data. If data isolation is enforced between concurrent components (what Erlang calls processes), composibility can be maintained because<strong> destructive shared data modifications do not occur</strong>. Composability, or building instructions with instructions, is an inherent concept of programming and it&#8217;s why sequential programs are desirable.</p>
<p>This example excerpt from an older java.lang.StringBuffer class illustrates a common locking misconception. The author wanted to compose the <code>length</code> and <code>getChars</code> calls into one atomic operation to ensure critical data wouldn&#8217;t be modified between them. The author attempted to compose the calls by wrapping them in a synchronized method which locks <em><code>this</code></em>, not <code>sb</code>. Unfortunately, another thread could still modify <code>sb</code> in between the calls.</p>
<pre>public final class StringBuffer {
  public synchronized StringBuffer append(StringBuffer sb) {
      int len = sb.length();
      ... // other threads may change sb.length(),
      ... // so len does not reflect the length of sb
      sb.getChars(0, len, value, count);
      ...
    }
    public synchronized int length() { ... }
    public synchronized void getChars(...) { ... }
    ...
}</pre>
<p><a title="Simon Peyton Jones" href="http://research.microsoft.com/users/simonpj/papers/stm/index.htm">Software transactions</a> and message passing are fundamentally better synchronization abstractions than locks because of, among other things, composibility and accuracy, at the cost of greater overhead. <abbr title="Software Transactional Memory">STM</abbr> <a title="Joe Armstrong on Simple Transaction Memories" href="http://armstrongonsoftware.blogspot.com/2006/09/pure-and-simple-transaction-memories.html">can be built from message passing</a> and I consider both to be acceptable replacements for lock based synchronization.</p>
<h3>Why Does Erlang Have Data Immutability?</h3>
<p>It seems that intra-process data isolation would be enough for a clean synchronization scheme, yet this is not entirely true. The immutable <em>shared</em> data model can be made even more complete when applied at the <em>local</em> sequential data level to achieve even more benefits:</p>
<ul>
<li><strong><em>Immutability</em> efficiency gains compensate for message passing overhead.</strong><br />
<blockquote><p>Immutability of data can, in many cases, lead to execution efficiency in allowing the compiler to make assumptions that are unsafe in an imperative language.</p>
<p>&mdash; <a title="functional programming" href="http://en.wikipedia.org/wiki/Functional_programming#Efficiency_issues">Wikipedia</a></p></blockquote>
<p>To reiterate what I said earlier, the restriction of data immutability allows the compiler to know more about the program and as a result, regain some efficiency.</li>
<li><strong><em>Immutability</em> simplifies type policies for message passing.</strong><br />
<blockquote><p>In Scala, [an <abbr title="Object Oriented Programming">OOP</abbr> language with message passing,] you can send between actors pointers to mutable objects. This is the classic recipe for race conditions, and it leaves you just where you started: having to ensure synchronized access to shared memory.</p>
<p>&mdash; <a href="http://yarivsblog.com/articles/2008/05/18/erlang-vs-scala/">Yariv Sadan</a></p></blockquote>
<p>To expand on the type policy issue a bit more, it&#8217;s simpler to make all data immutable, both local <em>and</em> shared. This reduces the need for special cases intended to disallow sending pointers, or data structures containing pointers, through message passing. This congruency keeps message passing at the core of Erlang&#8217;s semantic focus.</li>
<li><strong><em>Immutability</em> makes Garbage Collection simpler, faster, and soft real-time.</strong><br />
<blockquote><p>The generational [Erlang] collector is simpler than in some languages, because there&#8217;s no way to have an older generation pointing to data in a younger generation (remember, you can&#8217;t destructively modify a list or tuple in Erlang).</p>
<p>&mdash; <a title="Garbage Collection in Erlang" href="http://prog21.dadgum.com/16.html">James Hague</a></p></blockquote>
<p>Again, more restrictions means different ways of efficiency gains.</li>
</ul>
<h3>Downsides to Erlang&#8217;s Non-destructive Memory Model</h3>
<p>Many common algorithms are designed with destructive memory in mind. As a result, Erlang doesn&#8217;t have some of the same types of data structures and libraries as imperative languages. This, combined with the confusion of learning a completely new programming paradigm, can be a large deterrent for learning functional languages. But what libraries Erlang lacks is largely made up for by an extensive actor based <a title="Erlang StdLib" href="http://erlang.org/doc/apps/stdlib/ref_man_frame.html">library platform</a>.</p>
<blockquote><p>Virtually all &ldquo;big&rdquo; Erlang libraries use Erlang&rsquo;s features concurrency and fault tolerance. In the Erlang ecosystem, you can get web servers, database connection pools, XMPP servers, database servers, all of which use Erlang&rsquo;s lightweight concurrency, fault tolerance, etc.<br />
&mdash; <a href="http://yarivsblog.com/articles/2008/05/18/erlang-vs-scala/">Yariv Sadan</a></p></blockquote>
<p>Erlang is clearly a domain specific language, focusing on problems that can be solved with parallelism. Erlang&#8217;s libraries favor this same domain and <a href="http://shootout.alioth.debian.org/debian/benchmark.php?test=all&amp;lang=hipe&amp;lang2=gcc">Erlang holds it&#8217;s own against even C</a> in the targeted many-thread/process arena. <em><strong>Note:</strong> the &#8220;thread-ring&#8221; test on the last line of the chart</em>:</p>
<p><a href="http://shootout.alioth.debian.org/debian/benchmark.php?test=all&amp;lang=hipe&amp;lang2=gcc"><img class="alignright size-full wp-image-388" title="Erlang vs. C" src="/wordpress/wp-content/uploads/2008/06/erl-c.png" alt="note the thread-ring test" align="right" /></a></p>
<p>An <a href="http://www.sics.se/~joe/apachevsyaws.html">Erlang web server was also compared to Apache</a> as another more practical comparison (again, intentionally a problem in Erlang&#8217;s domain). &#8220;Apache dies at about 4,000 parallel sessions. Yaws is still functioning at over 80,000 parallel connections.&#8221; So, Erlang may be hard to use because of it&#8217;s lack of conventional libraries or it&#8217;s different syntax, but as I&#8217;ve hopefully shown, the differences were chosen by design with good reason. Erlang is clearly one of the strongest languages in it&#8217;s parallelism domain and after a little over 20 years, is a very mature language.</p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 5.603 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=q5PWNInXzF4:hDXf4QmQF5Q:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=q5PWNInXzF4:hDXf4QmQF5Q:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/q5PWNInXzF4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/why-make-erlang-a-functional-language/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		<feedburner:origLink>http://humani.st/why-make-erlang-a-functional-language/</feedburner:origLink></item>
		<item>
		<title>Google Health Can Fix U.S. Healthcare</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/hzZ_TtuiO8A/</link>
		<comments>http://humani.st/google-health-can-fix-us-healthcare/#comments</comments>
		<pubDate>Tue, 27 May 2008 06:00:10 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Research/Education]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://humani.st/?p=385</guid>
		<description><![CDATA[Current Healthcare Situation

Healthcare in the U.S. is far from equilibrium, with hyper-inflated costs in response to insane insurance costs. This causes healthcare to be unattainable by most lower class and an increasing number of middle class families. Healthcare should be an inalienable right but people avoid visiting the doctor because to them, the impending financial [...]]]></description>
			<content:encoded><![CDATA[<h3>Current Healthcare Situation</h3>
<p><a href="https://www.google.com/health"><img class="alignright size-full wp-image-386" title="google-health" src="/wordpress/wp-content/uploads/2008/05/google-health.png" alt="Google Health" width="200" height="60" align="right" /></a></p>
<p>Healthcare in the U.S. is far from equilibrium, with hyper-inflated costs in response to insane insurance costs. This causes healthcare to be unattainable by most lower class and an increasing number of <a title="The Collapse of the Middle Class" href="http://www.stefanhayden.com/blog/2008/05/01/the-coming-collapse-of-the-middle-class/">middle class</a> families. Healthcare should be an inalienable right but people avoid visiting the doctor because to them, the impending financial situation is worse than health risks. Still, the U.S.&#8217;s healthcare system is one of the best in the world in terms of quality and speed. The looming threat of being sued helps keep us safe though it&#8217;s grown so large from being unchecked that it&#8217;s too costly for both parties: the healthcare providers and the patients.</p>
<h3>Insurance Issues</h3>
<blockquote><p>A <strong>free market</strong> is a market in which prices of goods and services are arranged completely by the mutual consent of sellers and buyers. By definition, in a free market environment buyers and sellers do not coerce or mislead each other nor are they coerced by a third party.<br />
&mdash; <a title="Free Market" href="http://en.wikipedia.org/wiki/Free_market">Wikipedia</a></p></blockquote>
<p>Healthcare is another story. Insurance companies are the &#8220;third party&#8221; behind both sides, the buyers (patients) and the sellers (healthcare providers), and are not working for the &#8220;mutual consent of buyers and sellers.&#8221; Furthermore, most healthcare is not actually paid for by the patients directly, but instead by patients&#8217; employers who are, by law, not allowed to know about the employees&#8217; health issues. This dichotomy is what has enabled healthcare costs to grow so wildly out of control.</p>
<h3>Google Health&#8217;s Fix</h3>
<p><a title="Eric Schmidt's HIMSS Keynote Speech" href="http://www.youtube.com/watch?v=dTZKNcx9sBA"><span>Eric Schmidt&#8217;s </span></a><span><a title="Eric Schmidt's HIMSS Keynote Speech" href="http://www.youtube.com/watch?v=dTZKNcx9sBA">keynote speech</a> at the <em>Healthcare Information and Management Systems Society Conference </em>directly addressed what Google sees as &#8220;the problem&#8221; with U.S. healthcare and how Google could help fix it. <strong>In short, put information in the hands of patients to enable informed buying decisions and to rebuild the &#8220;mutual consent.&#8221;</strong> Currently, when a patient needs a medical procedure, say a surgery, they don&#8217;t shop around for the best price. The patient goes where their <em>insurance company</em> tells them; Where the insurance company has business affiliations. So informing patients will theoretically break the &#8220;employer/insurance payment&#8221; dichotomy, disarming the &#8220;third party coercers.&#8221;<br />
</span></p>
<p>Other benefits of Google Health are clear from a computer science standpoint. Technically it will serve three purposes:</p>
<ul>
<li><strong><a title="Cloud Computing" href="http://www.productionscale.com/home/2008/4/24/cloud-computing-get-your-head-in-the-clouds.html">Cloud</a> storage</strong> &mdash; Let the IT professionals deal with data backup and retrieval instead of local medical staff.</li>
<li><strong>Information channel</strong> &mdash; Directly connect patient information to patients and healthcare provider.</li>
<li><strong>Privacy</strong> &mdash; Take sensitive information out of the clear-text paper world of office workers and into the human-free, automated, and encrypted world of cloud computing.</li>
</ul>
<h3>Privacy Issues</h3>
<p>Clearly potential Google Health uses will have privacy concerns regarding Google obtaining access to medical records as well as having records available online. IT specialism in general has some clear benefits over the paper trail world:</p>
<ul>
<li><strong>Reduce human interaction</strong> &mdash; When paper information is being sent around, it passes though many hands in clear text. Most hands are simply staff members intended to help organize office work and should not have access to the sensitive content. Computerized health record retrieval and storage would minimize and automate the amount of human interaction needed, reducing the amount of human mistakes as well as accidental (or intentional) security leaks. <a title="Catch Me If You Can" href="http://www.imdb.com/title/tt0264464/"><em>Catch Me If You Can</em></a> illustrates the 1960s banking industry&#8217;s similar situation to today&#8217;s healthcare industry. Today, all banking is computerized and online. Paper trail security is a myth. For example, <a title="George Clooney" href="http://www.people.com/people/article/0,,20151481,00.html">George Clooney</a> recently had his hospital records leaked to the press and something like 27 employees were facing repercussions. There were probably many more people that had seen his records as well.</li>
<li><strong>Google already knows everything about us</strong> &mdash; Between searching and emails, Google knows what its users are thinking. They are data mining experts and easily have the ability to learn about most users&#8217; health issues already. There is no hiding form large corporations and <a href="http://en.wikipedia.org/wiki/Electronic_medical_record#Privacy">laws</a> are in place to protect against intentional misuse of healthcare information.</li>
<li><strong>Breaking into an office is easier than hacking into Google</strong> &mdash; Hacking requires a much higher level of knowledge and is many times more traceable than breaking into an office. If employers wanted access to medical records, it would be safer for them to stage a break-in physically rather than virtually. Local offices also store records in computers and probably gave access to IT consultants as well. Google Health gives the IT side some accountability.</li>
<li><strong>Companies are companies</strong> &mdash; Whether it&#8217;s a hospital or an IT company, it&#8217;s still private firms charged with keeping our data private.</li>
</ul>
<p>The office paper trails will probably be around for quite some time but Google is providing a layer beneath it: secure storage, access, and transfer for medical records. From a technical standpoint, our data only stands to be more secure and the small risk of this being false is worth it for what we stand to gain: The free market that was intended by the private healthcare design. Informing patients means educated and mutual consent on healthcare costs.</p>
<p><a title="George Clooney" href="http://www.people.com/people/article/0,,20151481,00.html"><br />
</a></p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 5.572 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=hzZ_TtuiO8A:pMKgwQr8E8k:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=hzZ_TtuiO8A:pMKgwQr8E8k:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/hzZ_TtuiO8A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/google-health-can-fix-us-healthcare/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://humani.st/google-health-can-fix-us-healthcare/</feedburner:origLink></item>
		<item>
		<title>Suspicious Design Similarities</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/ECQUJREa4mw/</link>
		<comments>http://humani.st/suspicious-design-similarities/#comments</comments>
		<pubDate>Sat, 17 May 2008 02:38:00 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Internet]]></category>

		<guid isPermaLink="false">http://humani.st/?p=382</guid>
		<description><![CDATA[
While reading a design blog about new site designs and typography in early April of 2008, I noticed a site called &#8220;Hell Yeah Dude&#8221; which bore a strikingly similar title and logo design to my personal web site, Luke.Hoersten.org. In particular, the lighter colored top level domain (.com/.org) in contrast to the darker title text, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://luke.hoersten.org"><img class="alignright size-full wp-image-383" title="Luke.Hoersten.org" src="/wordpress/wp-content/uploads/2008/05/lukehoerstenorg.png" alt="Luke.Hoersten.org Logo" /></a></p>
<p>While reading a design blog about new site designs and typography in early April of 2008, I noticed a site called &#8220;<a title="Hell Yeah Dude" href="http://hellyeahdude.com">Hell Yeah Dude</a>&#8221; which bore a strikingly similar title and logo design to my personal web site, <a title="Luke Hoersten Personal Site" href="http://luke.hoersten.org">Luke.Hoersten.org</a>. In particular, the lighter colored top level domain (.com/.org) in contrast to the darker title text, and the asterisk logo and placement with respect to the title. It turns out the site owner, Patrick Algrim, released the site on April 9<sup>th</sup>, 2008. I have been using the lighter colored top level domain title style since around December 6<sup>th</sup>, 2007 and released the asterisk logo around <a href="http://twitter.com/LukeHoersten/statuses/781213605">March 31<sup>st</sup>, 2008</a>. That&#8217;s <em>at least</em> nine days before Patrick&#8217;s design was released.</p>
<p><a href="http://hellyeahdude.com"><img class="alignright size-full wp-image-384" title="HellYeahDude.com" src="/wordpress/wp-content/uploads/2008/05/hellyeahdude.png" alt="Hell Yeah Dude Logo" /></a></p>
<p>I don&#8217;t mean to suggest that I&#8217;m the first to come up with lighter colored <abbr title="Top-Level Domain">TLD</abbr> with a darker title or the asterisk logo, and perhaps I&#8217;m being a bit presumptuous to even suggest that Patrick may have even seen my site, but it seems suspicious the way the two design elements have been used together in a fashion so close to mine. I&#8217;m sure it&#8217;s just coincidence but I wanted to be clear that I didn&#8217;t rip the design from Patrick.</p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 43.944 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=ECQUJREa4mw:sTlzqiYTt7Y:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=ECQUJREa4mw:sTlzqiYTt7Y:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/ECQUJREa4mw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/suspicious-design-similarities/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://humani.st/suspicious-design-similarities/</feedburner:origLink></item>
		<item>
		<title>Scalable Web Apps: Erlang + Python</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/zKt1T-hEFw4/</link>
		<comments>http://humani.st/scalable-web-apps-erlang-python/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 04:25:28 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://humani.st/?p=377</guid>
		<description><![CDATA[Motivation

This post describes how to program scalable web applications with Erlang and Python using computational parallelism. Caching and load balancing are well documented elsewhere and beyond the scope of this post.
Web applications, by nature, span two drastically different programming domains: The high-level web design and development domain and the low-level, high-performance, and distributed domain. Since [...]]]></description>
			<content:encoded><![CDATA[<h3>Motivation</h3>
<p><a href="http://erlang.org/"><img class="alignright size-medium wp-image-379" title="Erlang" src="/wordpress/wp-content/uploads/2008/04/erlang.png" alt="" width="200" height="60" align="right" /></a></p>
<p>This post describes how to program scalable web applications with <a title="Erlang Programming Language" href="http://www.erlang.org/">Erlang</a> and <a title="Python Programming Language" href="http://www.python.org/">Python</a> using computational parallelism. Caching and load balancing are well documented elsewhere and beyond the scope of this post.</p>
<p>Web applications, by nature, span two drastically different programming domains: The high-level web design and development domain and the low-level, high-performance, and distributed domain. Since the internet has <a title="Is a GUI a Document?" href="/is-a-gui-a-document/">provided a bridge</a> between these two domains, it&#8217;s now possible to realistically provide high-level user interfaces to high-performance back-end applications.</p>
<p>I prefer to do as much programming in Python and the <a href="http://www.djangoproject.com/">Django</a> web framework as possible because it&#8217;s just so easy. <a href="http://erlyweb.org/">ErlyWeb</a> is an Erlang web framework which should provide similar features to Django, though I&#8217;ve never used it. In a web application setting, it&#8217;s easy to have <a href="http://compoundthinking.com/blog/index.php/2008/05/14/threads-processes-rails-trubogears-and-scalability/">too many Apache/Python processes</a> which max out server memory or the CPU. For those tasks, I like Erlang. Erlang has parallelism and distribution primitives, which are arguably more elegant than <a href="http://blog.ianbicking.org/gil-of-doom.html">Python&#8217;s concurrency</a> primitives, and has <abbr title="Symmetric Multi-Processor">SMP</abbr> support.</p>
<h3>Erlang + Python Communication</h3>
<p>It seems like a no-brainier to use domain specific languages to ease development efforts in the corresponding domain but the tricky part is making multiple languages communicate when multiple domains are spanned. <a title="MochiMedia" href="http://www.mochimedia.com/">MochiMedia</a> is a small company that builds many of their products around Erlang + Python and, after shopping around, I chose to use their method of interfacing between the two languages: <strong>HTTP + JSON</strong>. The data being sent between the two languages is serialized, sometimes with <a href="http://www.json.org/">JSON</a>, and then passed along via HTTP. This has a few benefits. First, since HTTP is being used, my Erlang cluster can be <strong>across the internet</strong> from my Python front-end server. Second, since I&#8217;m using an independent intermediate representation to serialize the data (JSON), <strong>any component of the application stack may be swapped out</strong> for something completely new.</p>
<p>Here&#8217;s how it&#8217;s done:</p>
<ol>
<li><strong>Use <a href="http://www.mochiweb.com/">MochiWeb</a> to enable the Erlang nodes to communicate over HTTP.</strong> The latest version of Erlang and OpenSSL headers are needed to compile MochiWeb.</li>
<li><strong>Create a <a href="http://bob.pythonmac.org/archives/2007/12/17/using-the-mochiweb-project-skeleton/">MochiWeb project skeleton</a>.</strong> Since MochiWeb is a <em>framework</em>, a script is provided to help create a web server which uses MochiWeb.</li>
<li><strong>Modify the request handler to understand JSON.</strong> The only Erlang that really needs to be modified is in <code><em>[project name]</em>/src/<em>[project name]</em>_web.erl</code>. This is where the processing code goes (ex: map/reduce).</li>
</ol>
<p>On the Python side, a simple <a href="http://docs.python.org/lib/module-urllib2.html">urllib2.urlopen</a> can be used to build Request objects to send to Erlang. Django comes pre-packaged with <a href="http://simplejson.googlecode.com/svn/tags/simplejson-1.8.1/docs/index.html">SimpleJSON</a> to serialize the body of the HTTP request:</p>
<pre>def send_to_erlang(data):
    url = "http://erlang.nodes.tld:8000/"
    body = json.dumps(data)
    headers = {'Content-Type': 'application/jsonrequest',
               'User-Agent'  : 'Python/Project/0.1'}
    urlopen(Request(url, body, headers))</pre>
<h3>Parallelism</h3>
<p>Kevin Smith, of <a href="http://weblog.hypotheticalabs.com/">Hypothetical Labs</a>, did a great <a href="http://weblog.hypotheticalabs.com/?p=171">interview</a> with <a href="http://bob.pythonmac.org/">Bob Ippolito</a>, CTO at MochiMedia, which is a great case study for Erlang + Python. Bob talks in-depth about the engineering tasks the model helps overcome.</p>
<p>Computation tasks which can be executed in parallel are key to utilizing Erlang&#8217;s distributed parallelism. A relatively small message with big computations is the desired abstraction. For example, the Django web interface could wrap an Erlang distributed map/reduce implementation. The <a href="/thorn-erlang/">Erlang book</a> enumerates many different paradigms for Erlang distributed parallelism and for programmers who already have an idea, the <a href="http://code.google.com/p/plists/">plists</a> library takes care of all the distribution automatically. A programmer with at least a little experience in both Erlang and Python should be able to hack their way through to a fully functional and scalable web application from here.</p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 40.025 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=zKt1T-hEFw4:Ik_-EF53jV0:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=zKt1T-hEFw4:Ik_-EF53jV0:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/zKt1T-hEFw4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/scalable-web-apps-erlang-python/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		<feedburner:origLink>http://humani.st/scalable-web-apps-erlang-python/</feedburner:origLink></item>
		<item>
		<title>Erlang Circular Process Communication</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/cxG_RywBiPY/</link>
		<comments>http://humani.st/erlang-circular-process-communication/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 20:07:41 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Code Snippet]]></category>
		<category><![CDATA[Computer Science]]></category>
		<category><![CDATA[Erlang]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://openradix.org/?p=347</guid>
		<description><![CDATA[The 1984 Chandy / Misra solution to the dining philosophers problem1 requires philosophers to communicate with each other. In Erlang, one way to do this is to have the philosophers tell the philosopher who sat before them that they are neighbors.
Below is my first Erlang program which sets up the circular communication between processes:
%% Dining [...]]]></description>
			<content:encoded><![CDATA[<p>The 1984 Chandy / Misra solution to the dining philosophers problem<sup>1</sup> requires philosophers to communicate with each other. In Erlang, one way to do this is to have the philosophers tell the philosopher who sat before them that they are neighbors.</p>
<p>Below is my first Erlang program which sets up the <a href="http://humani.st/wordpress/wp-content/uploads/2008/04/dine_phil.erl">circular communication between processes</a>:</p>
<pre>%% Dining Philosophers setup.
%% By Luke Hoersten
%% Public Domain (PD) No Rights Reserved.

%% This is the Chandy / Misra Dining Philosophers Solution and it
%% assumes philosophers can talk to eachother.

-module(dine_phil).
-export([dine/1,sit/1]).

%%%% Setup
dine(Places) -&gt; sit(Places).

%%%% Fork
pickup_fork(Clean) -&gt;
    spawn(fun() -&gt; fork(Clean) end).

fork(IsClean) -&gt;
    receive
        {Phil, is_clean} -&gt;
            Phil ! IsClean,
            fork(IsClean);
        set_dirty -&gt; fork(false);
        set_clean -&gt; fork(true)
    end.

%%%% Sit
sit(Num) -&gt; %% first expects last as left
    First = spawn(fun() -&gt; greet(last, pickup_fork(true)) end),
    sit(Num-1, First, First).

sit(1, Left, First) -&gt; %% last expects first as right
    spawn(fun() -&gt; greet(Left, First, pickup_fork(false)) end);
sit(Num, Left, First) -&gt;
    Current = spawn(fun() -&gt; greet(Left, pickup_fork(false)) end),
    sit(Num-1, Current, First).

%%%% Greet
greet(Left, First, Fork) -&gt;
    First ! {last, self()}, %% last tells first when he's seated
    greet(Left, Fork).

greet(last, Fork) -&gt; %% first waits for his right and last to sit
    receive
        {last, Last} -&gt; greet(Last, Fork)
    end;
greet(Left, Fork) -&gt; %% everyone tells left when he's seated
    Left ! {right, self()},
    receive
        {right, Right} -&gt; eat(Left, Right, Fork)
    end.
</pre>
<ol class="footnotes"><li id="footnote_0_347" class="footnote"></p>
<blockquote><p>In computer science, the dining philosophers problem is an illustrative example of a common computing problem in concurrency. It is a classic multi-process synchronization problem.<br />
&mdash; <a href="http://en.wikipedia.org/wiki/Dining_philosophers">Wikipedia</a></p></blockquote>
<p></li></ol><strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 6.052 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=cxG_RywBiPY:zWkgyZRypV8:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=cxG_RywBiPY:zWkgyZRypV8:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/cxG_RywBiPY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/erlang-circular-process-communication/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://humani.st/erlang-circular-process-communication/</feedburner:origLink></item>
		<item>
		<title>Fix Disqus Validation Errors on Wordpress</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/SNJehF8d6lg/</link>
		<comments>http://humani.st/fix-disqus-validation-errors-on-wordpress/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 19:47:58 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Code Snippet]]></category>
		<category><![CDATA[Disqus]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://humani.st/?p=373</guid>
		<description><![CDATA[Disqus is a great comment system but unfortunately the Wordpress plugin generates invalid XHTML. Luckily it&#8217;s pretty easy to fix. I&#8217;ve made the necessary changes and packaged them up. A simple diff will show the minimal amount of changes needed.
Disqus Wordpress Plugin &#8212; Fixed validation
Similar Posts:None Found
]]></description>
			<content:encoded><![CDATA[<p><a href="http://disqus.com">Disqus</a> is a great comment system but unfortunately the Wordpress plugin generates invalid XHTML. Luckily it&#8217;s pretty easy to fix. I&#8217;ve made the necessary changes and packaged them up. A simple diff will show the minimal amount of changes needed.</p>
<p><a href="/wordpress/wp-content/uploads/2008/04/lh-disqus-wordpress-104.zip">Disqus Wordpress Plugin &mdash; Fixed validation</a></p>
<strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 5.270 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=SNJehF8d6lg:p8RN7OKavtE:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=SNJehF8d6lg:p8RN7OKavtE:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/SNJehF8d6lg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/fix-disqus-validation-errors-on-wordpress/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		<feedburner:origLink>http://humani.st/fix-disqus-validation-errors-on-wordpress/</feedburner:origLink></item>
		<item>
		<title>SocialThing vs. FriendFeed</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/A3fcwp-ma_U/</link>
		<comments>http://humani.st/socialthing-vs-friendfeed/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 18:48:49 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Media/Culture]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://humani.st/?p=371</guid>
		<description><![CDATA[With blogs, Tumblr, Twitter, Flickr, Facebook, Pownce, Vimeo etc, it&#8217;s hard staying on top of the social web. It&#8217;s the ever-clichÃ© problem of &#8220;more information that we know what to do with.&#8221; The social web, to me, is analogous to CML&#8217;s message passing model. All the modular social apps listed above are communication channels and [...]]]></description>
			<content:encoded><![CDATA[<p>With blogs, Tumblr, Twitter, Flickr, Facebook, Pownce, Vimeo etc, it&#8217;s hard staying on top of the social web. It&#8217;s the ever-clichÃ© problem of &#8220;more information that we know what to do with.&#8221; The social web, to me, is analogous to <abbr title="Concurrent ML">CML</abbr>&#8217;s message passing model. All the modular social apps listed above are communication channels and humans are the actors (the actor model comes full circle ;-D ). Life feeds like SocialThing and FriendFeed are the anonymous send and receive primitives and without them, the social web is nothing more than Java <abbr title="Remote Method Invocation">RMI</abbr>. SocialThing and FriendFeed essentially do the same thing but solve the problem from completely different angles of attack.</p>
<h3>FriendFeed</h3>
<p><a title="FriendFeed lifefeed" href="http://friendfeed.com">FriendFeed</a> requires all the users friends to also be users of FriendFeed and have added all their feeds to FriendFeed as well. Then, the user must subscribe to all their friends. Since the user has already subscribed to all their friends on all the applications being aggregated anyway, why subscribe again? It&#8217;s FriendFeed&#8217;s method of filtering. To not hear from certain friends, just don&#8217;t add them.</p>
<h3>SocialThing</h3>
<p><a href="http://socialthing.com"><img class="alignright size-full wp-image-372" title="SocialThing" src="http://humani.st/wordpress/wp-content/uploads/2008/04/socialthing.png" alt="SocialThing social web life feed" align="right" /></a></p>
<p><a title="SocialThing lifefeed" href="http://socialthing.com">SocialThing</a><sup>1</sup>, in my opinion, has a much better method of aggregation. The users tells SocialThing about all their web app accounts and SocialThing basically just reads them. So since I already have all my friends added to Twitter, SocialThing will show whatever Twitter would show. FriendFeed would only show my FriendFeed friends I&#8217;ve subscribed too who also told FriendFeed about <em>their</em> Twitter. To borrow a bit form set theory, SocialThing starts with the universe and subtracts things out of the friend set (it acutally don&#8217;t have that functionality yet). FriendFeed starts with nothing and explicity adds friends to the set.</p>
<p>In my mind, a life feed&#8217;s job is to basically act as a join point for sends and receives on my social channels. FriendFeed went and added a whole other later of abstract channels. SocialThing, on the other hand, is much younger than FriendFeed and only has the ability to aggregate a handful of apps. I really need <a title="Disqus distributed comment system" href="http://disqus.com">Disqus</a> integration before I can fully use it.</p>
<p><em>Thanks to <a href="http://sahild.com/">Sahil</a> for motivating this post!</em></p>
<ol class="footnotes"><li id="footnote_0_371" class="footnote">I have one SocialThing beta invite left. Comment if you want it. First come, first serve.</li></ol><strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 5.441 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=A3fcwp-ma_U:WAkpCgHqnKU:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=A3fcwp-ma_U:WAkpCgHqnKU:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/A3fcwp-ma_U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/socialthing-vs-friendfeed/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://humani.st/socialthing-vs-friendfeed/</feedburner:origLink></item>
		<item>
		<title>How Google App Engine Affects Startups</title>
		<link>http://feedproxy.google.com/~r/Humanist/~3/bYmWcvptkqI/</link>
		<comments>http://humani.st/how-google-app-engine-affects-startups/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 08:18:54 +0000</pubDate>
		<dc:creator>LukeHoersten</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Business/Marketing]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Startup]]></category>

		<guid isPermaLink="false">http://humani.st/?p=368</guid>
		<description><![CDATA[
Google has just announced a new service called Google App Engine. &#8220;Google App Engine enables [developers] to build web applications on the same scalable systems that power Google applications.&#8221; Basically GAE is a scalable web application back-end with a nice API. So what does this mean for web startups?1 Because web startups commonly have an [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/appengine/"><img class="alignright size-full wp-image-369" title="Google Code" src="http://humani.st/wordpress/wp-content/uploads/2008/04/google-code.png" alt="Google App Engine" align="right" /></a><br />
Google has just announced a new service called <a href="http://code.google.com/appengine/">Google App Engine</a>. &#8220;Google App Engine enables [developers] to build web applications on the same scalable systems that power Google applications.&#8221; Basically <abbr title="Google App Engine">GAE</abbr> is a scalable web application back-end with a nice <abbr title="Application Programming Interface">API</abbr>.<strong> So what does this mean for web startups?</strong><sup>1</sup> Because web startups commonly have an exit strategy based on being acquired by Google or a similar company, and because web startups are bounded financially in growth by constraints such as scalability, GAE means a lot.</p>
<h3>Google App Engine Effects on Google</h3>
<p><strong>Previous to GAE</strong>, Google only directly benefits from startups by acquisition. After an acquisition, Google must spend time scaling the acquired assets to Google proportions.</p>
<p><strong>Now with GAE</strong>, Google will profit more directly from startups who pay for GAE services, allowing profit in numbers. Also, if Google chooses to acquire a certain startup, the startups assets are already generally fitted to work with Google&#8217;s internal scaled systems.</p>
<h3>Google App Engine Effects on Startups</h3>
<p><strong>Previous to GAE</strong>, startups really only truly ever made big money if they are acquired by Google or, by chancing the storm of scalability investment and try to break though the scalability investment wall like Facebook and Digg. Breaking through is obviously extremely rare and few startups even consider this a valid &#8220;exit&#8221; strategy.</p>
<p><strong>Now with GAE</strong>, startups don&#8217;t have to avoid designing their systems to scale up, right from the beginning (a previously extremely expensive and questionably worth it endeavor). GAE&#8217;s inherent scalability dramatically reduces the dependency for startups to be acquired as an exit strategy. Growing big is much more practical than in the past.</p>
<h3>How&#8217;s the Model Changed?</h3>
<p>So, is the startup-Google bond being loosened or tightened. Breaking the situation down, it seems that Google is spreading their endeavors more thinly. Without GAE, the startup-Google bond is an &#8220;all eggs in one basket&#8221; situation. With GAE, startups will be less likely to sell out to Google but, Google&#8217;s made more money in the numbers of startups using GAE.</p>
<ol class="footnotes"><li id="footnote_0_368" class="footnote">Based on <a title="Life in a Web Startup" href="http://humani.st/life-in-a-web-startup/">my observations</a> after visiting Disqus.</li></ol><strong>Similar Posts:</strong><ul>None Found
</ul><!-- Similar Posts took 5.710 ms --><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Humanist?a=bYmWcvptkqI:jNh81heNO9E:jjzCSUnjtBs"><img src="http://feeds.feedburner.com/~ff/Humanist?i=bYmWcvptkqI:jNh81heNO9E:jjzCSUnjtBs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Humanist/~4/bYmWcvptkqI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://humani.st/how-google-app-engine-affects-startups/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://humani.st/how-google-app-engine-affects-startups/</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic page generated in 1.854 seconds. --><!-- Cached page generated by WP-Super-Cache on 2010-03-12 11:22:29 -->
