<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>PAUL BOHM</title>
  <updated>2012-01-25T02:41:52Z
  </updated>
  <id>http://paulbohm.com/
  </id>
  <link rel="alternate" href="http://paulbohm.com/" title="PAUL BOHM" type="text/html" />
  
  <author>
    <name>Paul Bohm
    </name>
  </author>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/PaulBohm" /><feedburner:info uri="paulbohm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>http://paulbohm.com/2012/01/24/the-wishes-of-an-old-man/
    </id>
    <title type="text">The Wishes of an Old Man</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/_tNFeXyoIVk/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2012-01-24T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;I'd like to thank all of you that have at times walked with me as a friend, besides me as a partner, behind me in support, or in front of me as someone leaving footsteps that I one day hope to fill. Whether now, in the past, or in the future!&lt;/p&gt;&lt;p&gt;I'm tremendously grateful to have met, spent time with, conversed and played with all of you, the amazing people that have inspired me and shaped me in every way, and that despite their usually good judgement of character, have allowed me to call them friends throughout parts of a twenty-nine year long voyage, both back in Europe where I was born, and in my new chosen home near the bay, where i now reside.&lt;/p&gt;&lt;p&gt;I feel, and know, and believe from within the deepest of my heart that that many of you can and will achieve monumental things within your lifetimes. Some of you already have. And I know you will do it again! Keep swimming against the stream, no matter how hard it is at times, and you will achieve the happiness that can grow only from the truth of honest work. Work well done is its own reward, and there is nothing else that comes close.&lt;/p&gt;&lt;p&gt;But let's avoid getting lost, absorbed by the gentle rhythm of our own strokes, while swimming against the stream, pursuing our own goals, oblivious to where we're all going. Let's remind ourselves, and those dear to us, daily that we're all living in pivotal times, where civilization is just at the brink of finally awakening. Amazing times could be ahead. It's so tempting, you want to grasp it. But at this point it could still all go away.&lt;/p&gt;&lt;p&gt;None of us, no matter how important our projects are, can make this future happen alone. Technology is just a tool. Thus let's look around us for means to set others free. Many can't yet fulfill their potential for what amounts to trivial reasons. We're all caught up in our own private pursuits of parts of the puzzle, but on some level, we need to find ways to enable others. Empowering others to empower others can be the most powerful of actions and chain reactions. Give someone a chance and see if you can set them free. And with that I share with you my resolution for the last year of my twenties, and hopefully for years beyond: Take more time to enable others to enable others.&lt;/p&gt;&lt;p&gt;Let me know if I can help you achieve your dreams and set your free, and I'll try my best! Thank you for being my friends!&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/_tNFeXyoIVk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2012/01/24/the-wishes-of-an-old-man/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2012/01/16/a-14-year-old-could-build-1998s-google-using-her-dads-credit-card/
    </id>
    <title type="text">A 14-year-old could build 1998's Google using her Dad's credit card!</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/fjtt4QvbZ9g/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2012-01-16T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;Technology speeds everything up - more so in some areas than in others. While it's easy to see that erecting a &lt;a href="http://www.youtube.com/watch?v=Ps0DSihggio"&gt;15-story building in two days&lt;/a&gt; is faster than it's used to be done, it's harder to get a grip on the giant strides we're making in software construction. Nonetheless, software is probably the discipline with the most reliably accelerating productivity.&lt;/p&gt;&lt;p&gt;Just a few years ago software wasn't moving all that fast. In those days most programming time was spent on squeezing the maximum performance from CPU and memory and programmers like John Carmack achieved lasting fame for their knack for teasing just a little bit more performance out of machines. And a few years before that, as prog21 &lt;a href="http://prog21.dadgum.com/29.html"&gt;points out&lt;/a&gt;, even writing a working basic spellchecker was a major achievement. You simply didn't have the memory to store a list of words. Never mind building a really good spellchecker, you'd be busy with optimizing the base case.&lt;/p&gt;&lt;p&gt;But whenever hardware advanced, it only took a jiffy till programmers would again use up all that extra power. At that point in time, software's progress was held back by the (comparatively) slow-moving physical nature of hardware. However computer networks were able to free software from the shackles of hardware: If you built your software right, you could just add more servers as you needed them, instead of relying on manufacturers to provide faster and faster hardware. &lt;/p&gt;&lt;p&gt;Google was among the pioneers of networked architecture and built its service using arrays of cheap commodity hardware from the start. But it wasn't until 2006, when Amazon introduced the Elastic Compute Cloud (EC2), that the chains of physicality were finally broken for everyone. Now you could add and remove machines from software as needed. This development opened up a whole new way of thinking about software to every programmer on the planet.&lt;/p&gt;&lt;p&gt;Three years later, in 2009 I proclaimed to a friend:&lt;/p&gt;&lt;p&gt;&lt;blockquote&gt;&lt;i&gt;Today a fourteen year old could build 1998's Google using her dad's credit card!&lt;/i&gt;&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;To put that into perspective, there's three parts in play here: 1998, her dad's credit card, and the software engineering knowledge and tools required to build what Google built in 1998. Let's start with 1998: The internet was much smaller back then. By the end of 1998, Google had an index of about 60 million pages, and Larry Page's web crawler had been exploring the web since 1996. The total amount of data downloaded was probably in the ballpark of 200 gigabytes by the end of 1998. Storing 200GB of data on 33 bleeding edge 6GB hard drives at $370 a piece would have cost about $12,210 non-inflation-corrected at that time. That's without the hardware, electricity, nor bandwidth to actually operate machines to fetch and store the data. In 2009 you'd have gotten a 1000GB drive for $74.99 and could have run it from a single computer, while people regularly download more than 200GB a month on unlimited cable broadband.&lt;/p&gt;&lt;p&gt;So getting the data had become cheap enough for our hypothetical teen's dad's credit card. Crunching the numbers would require a few more resources, but 1998's internet was small enough to be crunched on EC2 with her parents's credit card. Serving the data and answering queries on a popular website without feeling sluggish would also require a few more servers. Let's assume 30 servers would handle the peak load for a start (Altavista was running off 20 multi-processor DEC 64-bit Alpha's in 1998). At not-the-cheapest-at-the-time $70 per server-month on Amazon, that would give us an estimated cost ceiling of $2100/month, with the expected cost being more along the lines of $500-$1000/month. Now I'm sure Dad wouldn't appreciate it, but for many people that's in the ballpark of what they pay for rent and thus affordable.&lt;/p&gt;&lt;p&gt;So theoretically speaking it could have been done in 2009. More than that, price-wise it probably could even have been done in 2006 without ever touching any hardware yourself. But of course money wouldn't have been the only difficulty for a hypothetical fourteen year old trying to build Google in 1998 or even 2009. Just because you can build anything you want in theory, doesn't mean you know how to do so in practice. &lt;/p&gt;&lt;p&gt;But not only has hardware gotten cheaper and easier to handle (through software), but during the same time our collective understanding of best practice software engineering has progressed by leaps and bounds as well. In between 2006 and 2009 many more people became acquainted with highly distributed architectures. More tutorials, libraries, and opensource software were written than ever before. Distributed Databases and NoSQL systems garnered a lot of attention. And with distributed version control systems like &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt;, code reuse and collaborative development became more commonplace. Many people stopped thinking about how to program individual computers altogether, and started thinking only in networked systems. Because of the wealth of information and code available, and a large community concerned with distributed system problems, a lot of things that were difficult a decade earlier, had become fairly easy to do.&lt;/p&gt;&lt;p&gt;Somewhen towards the end of 2009 I realized that writing Google as it was in 1998 didn't seem as daunting a task anymore. Not only was the hardware cheap, and the information on how to do it widely spread, but a lot of the functionality had already been implemented. Distributed Datastores? Check. Batch Data Processing? Check. Web Crawlers? Check. Web Servers? Check. The age of big data had arrived, because self-taught kids who wanted to could now play with it without asking for permission.&lt;/p&gt;&lt;p&gt;So do I think a fourteen year old could have pulled it off? I sure think so, but I realize in 2009 it would have taken a very tenacious fourteen year old. But that was 2009. If you are skeptic about my predictions for the past, how about applying them to today or 2015? How long till the technology that, at the time, precipitated the fastest wealth generation humanity had ever seen, can be replicated by a teenager with next to no budget during summer break? How long till it's something you write as a pet project while learning to program. Our tools are still getting more powerful, and our collective understanding of software problems is still increasing at a rapid pace. Do you think there's an upper ceiling for how good we can get at writing software? Are we close?&lt;/p&gt;&lt;p&gt;A few years ago, it was hard to find a library providing the functionality you'd need to write your application. A few decades ago the concept of reusable shared libraries had to be invented before you could write one. And if you'd wanted to use a hash table, if you even knew what a hash table was, you'd have to write your own. Today programmers have a wealth of collaboratively developed libraries for almost any purpose at their disposal. When you write software today, you're standing on the shoulders of countless giants.&lt;/p&gt;&lt;p&gt;Personally I believe that a large part of the reason we're collectively getting better at building software is that a portion of software written is software for building better tools for building better tools. We're not even close to peak productivity yet. We're so much drowning in solvable problems, that we don't even know what peak productivity in software engineering would look like.&lt;/p&gt;&lt;p&gt;If you like my writing or have comments, you should follow me on &lt;a href="http://twitter.com/enkido/"&gt;Twitter&lt;/a&gt; and &lt;a href="https://www.facebook.com/pbohm"&gt;Facebook&lt;/a&gt;!&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/fjtt4QvbZ9g" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2012/01/16/a-14-year-old-could-build-1998s-google-using-her-dads-credit-card/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2011/11/18/two-asynchronous-io-helpers-for-nodejs/
    </id>
    <title type="text">Two asynchronous I/O Helpers for Node.js</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/Rz0b5y3dB_c/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2011-11-18T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;I've recently started using Node.JS and Erlang. Haven't been this unfaithful to Python since 2001, and of course there are consequences:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/enki/node-iostream"&gt;IOStream&lt;/a&gt;: JS implementation of &lt;a href="http://tornadoweb.org/"&gt;Tornado&lt;/a&gt;'s IOStream class for buffered I/O.
&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/enki/node-deque"&gt;Deque&lt;/a&gt;: JS implementation of a &lt;a href="http://en.wikipedia.org/wiki/Double-ended_queue"&gt;Double-ended Queue&lt;/a&gt;.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Both are MIT licensed. Hope this is of use!&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/Rz0b5y3dB_c" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2011/11/18/two-asynchronous-io-helpers-for-nodejs/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2011/11/04/the-challenge-of-recognizing-bold-early-stage-research/
    </id>
    <title type="text">The Challenge of Recognizing Bold Early-Stage Research</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/0JSMK0zuQtE/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2011-11-04T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;Last Tuesday, Peter Thiel announced Breakout Labs, his newest philantropic endeavour.&lt;/p&gt;&lt;div style="float:left; margin-right: 5px; margin-top: 20px"&gt;
&lt;img src="http://paulbohm.com/images/240/0/logo_breakoutlabs.jpg" style="margin: auto;" width="240px" /&gt;&lt;br/&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://www.breakoutlabs.org/"&gt;Breakout Labs&lt;/a&gt; wants to reshape the way early-stage science is funded, and to return scientific innovation to the hands of independent scientists, engineers, and inventors. Funding agreements will typically range from $50,000 to $350,000 but depend on the nature of the project.&lt;/p&gt;&lt;p&gt;Thiel has long been arguing that we're not seeing the rate of progress that we should, and I think he might be right. But what rate of progress are we seeing, and what rate of progress should we be seeing?&lt;/p&gt;&lt;p&gt;Back in 1871, Lord Kelvin observed:&lt;/p&gt;&lt;blockquote&gt;
Scientific wealth tends to accumulate according to the law of compound interest. Every addition to knowledge of the properties of matter supplies [the physical scientist] with new instrumental means for discovering and interpreting phenomena of nature, which in their turn afford foundations of fresh generalisations, bringing gains of permanent value into the great storehouse of [natural] philosophy.
&lt;/blockquote&gt;

&lt;p&gt;If Kelvin's statements sufficiently described the accumulation scientific wealth, we'd expect continuous exponential growth:&lt;/p&gt;&lt;div style="text-align: center;"&gt;
&lt;img src="http://paulbohm.com/images/180/0/expgrowth.png" style="margin: auto;" width="180px" /&gt;&lt;br/&gt;
Fig.1 Exponential Growth
&lt;/div&gt;

&lt;p&gt;But progress only seems to follow an exponential pattern on the surface. Not every advance provides the same utility to future research. Progress really is made up from many smaller paradigm shifts, that each create entirely new fields. Initially a new field makes possible a lot of follow-up results, but as it matures, it becomes increasingly harder to make significant discoveries within it. Eventually all the low-hanging fruit have been picked, and revolutionary advances give way to merely incremental improvements. A logistic S-Curve is a decent visualization of this progression:&lt;/p&gt;&lt;div style="text-align: center;"&gt;
&lt;img src="http://paulbohm.com/images/240/0/scurvesingle.jpg" style="margin: auto;" width="240px" /&gt;&lt;br/&gt;
Fig.2 S-Curve of a new paradigm
&lt;/div&gt;

&lt;p&gt;Only when we overlay a series of these paradigm shifts, do we move in the direction of exponential growth:&lt;/p&gt;&lt;div style="text-align: center;"&gt;
&lt;img src="http://paulbohm.com/images/240/0/cyclescurve.jpg" style="margin: auto;" width="240px" /&gt;&lt;br/&gt;
Fig.3 Multiple S-Curves overlayed
&lt;/div&gt;

&lt;p&gt;Thiel seems to argue that we're not producing these significant breakthroughs at a high enough rate anymore. Through institutionalism, centralization and standardization, we've homogenized the kind of research that can get funding. We've stymied radical experiments in favor of safe, predictable, incremental improvements. To continue making radical discoveries, we need to be willing to accept less centralized control over the direction of research.&lt;/p&gt;&lt;p&gt;True innovation is by definition hard to recognize. Anything that is obvious would already have been discovered. New ideas require rethinking and challenging what we believe to be true and absolute. It's tough for an outsider, and most innovators are outsiders, to garner the level of attention they need to get their ideas accepted. It's only after they've succeeded that we start to idolize their way of thinking, and look towards people that fit the same pattern for the next wave of innovation. But the previous generation of rebels often aren't the ones to recognize the significance of the next. By the very nature of innovation, every new wave will be unlike the previous one. Truly new ideas always look unworkable, boring, crazy, and absurd.&lt;/p&gt;&lt;p&gt;A good example of this we find in the history of game theory: &lt;i&gt;The entire edifice of game theory rests on two theorems: von Neumann’s min-max theorem of 1928 and Nash’s equilibrium theorem of 1950. Like many great scientific ideas, from Newton’s theory of gravitation to Darwin’s theory of natural selection, Nash’s idea seemed initially too simple to be truly interesting, too narrow to be widely applicable, and, later on, so obvious that its discovery by someone was deemed all but inevitable. Today, Nash’s concept of equilibrium from strategic games is one of the basic paradigms in social sciences and biology, and earned Nash a Nobel Prize.&lt;/i&gt;
Still, the eminent von Neumann initially rejected Nash's ideas, just as Einstein had rejected one of Nash's earlier ideas, albeit more politely.&lt;/p&gt;&lt;p&gt;But Nash was lucky in that he didn't have to ask for permission to conduct his research. Since he was a mathematician and economist with a scholarship, he didn't require funds for experiments. Also Princeton at the time, was a fairly unique institution in that it &lt;i&gt;subjected its students to a maximum of pressure but a wonderful minimum of bureaucracy. The department offered courses, true, but enrollment was a fiction, as were grades. Some professors put down all As, others all Cs, on their grade reports, but both were completely arbitrary. You didn’t have to show up a single time to earn them and students’ transcripts were, more often than not, works of fiction “to satisfy the Philistines.”&lt;/i&gt; More than that, not only could he pursue his own studies, but at Princeton he had access to von Neumann and Einstein and many other of the greatest minds of his time. Given that access, he was eventually able to find established mentors that helped him get his research accepted.&lt;/p&gt;&lt;p&gt;In many other sectors however, progress can't happen without initial funding. Also an increasing number of innovators, especially those residing outside of elite academic institutions, lack the level of access to the ears of the great minds in their fields. Worse, as the amount of research grows, and the world is becoming more interconnected, an ever increasing number of researchers and ideas are vying for the attention of a comparatively small count of established individuals that can't thoroughly study even a small fraction of them.&lt;/p&gt;&lt;p&gt;Today, for ideas and proposals to reach high-profile individuals that can support them, they must pass through layers of gatekeepers or committees. But gatekeepers and committees are notoriously bad at recognizing breakout brilliance - they always tend towards the safe average. Thus we're facing a structural problem, wherein the way we discover and promote worthwhile projects can no longer scale with the volume of project proposals produced. If we can't consume the research of our peers anymore, and we're not discovering the occasional brilliance therein, how can that briliance contribute to our own research, and thus fuel progress?&lt;/p&gt;&lt;p&gt;The challenge for Breakout Labs is going to be to find ways to recognize truly exciting projects - not just by being more bold, but by developing new methodologies to determine at scale, which radical ideas are worth funding. I'll argue in a follow-up post, that the most reasonable metric might be a measurement of an individual or team's ability to execute, rather than an assessment of the research idea itself.&lt;/p&gt;&lt;p&gt;( &lt;i&gt;Italiczed parts of this text based on: Nasar, Sylvia (2011). A Beautiful Mind Simon &amp; Schuster.&lt;/i&gt; )&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/0JSMK0zuQtE" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2011/11/04/the-challenge-of-recognizing-bold-early-stage-research/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2011/06/18/ephemerisle-2011-summary/
    </id>
    <title type="text">Ephemerisle 2011 Summary</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/wXKLOjxgke0/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2011-06-18T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;
    &lt;a href="http://www.flickr.com/photos/ratha/5837830284/" title="P6100117 by papertygre, on Flickr"&gt;
        &lt;img src="http://paulbohm.com/images/240/180/5837830284_7d07e2d899_m.jpg" width="240" height="180" alt="P6100117" /&gt;
    &lt;/a&gt;
&lt;/div&gt;

&lt;div&gt;I spent last weekend at &lt;a href="http://ephemerisle.org/"&gt;Ephemerisle 2011&lt;/a&gt;, the third year of the floating festival on the Sacramento River Delta. Lots of people asked me how it was, and the short answer is: awesome - it keeps getting better every year.&lt;/div&gt;

&lt;p&gt;The long answer comes with history: I've spent years organizing and thinking about conferences and events and what makes them amazing, back in Europe. When you're regularly taking a few hundred thousand Euros in hand to make a conference, every detail starts to matter to you. How many tracks does the conference have, which speakers do you invite, where do you put the buffet, which rooms do you use for the talks. When I first started &lt;a href="http://deepsec.net/"&gt;DeepSec&lt;/a&gt; (disclosure: I'm not longer involved), I spent two months looking at every single hotel in Vienna to find the perfect location.&lt;/p&gt;

&lt;p&gt;It's easy to get things wrong too. Most people think conferences are about talks and speakers, but really they are not. It's all about giving the audience the opportunity to connect. Your job as an organizer isn't to connect them, but to remove the obstacles and optimize the connection funnel.
&lt;/p&gt;

&lt;p&gt;You can imagine that connection funnel as:
    &lt;ol&gt;
        &lt;li&gt;&lt;em&gt;Image:&lt;/em&gt; What's your events' public image? Which audience does that attract? Who'd come if they could?&lt;/li&gt;
        &lt;li&gt;&lt;em&gt;Filter:&lt;/em&gt; Who really gets there? Many events are too expensive for many that are interested. That filters, but not for awesomeness. Other events have an application process or are invitation only, but that's very prone to missing awesome people who aren't established yet. Some events like Burning Man have natural filters: They filter for dedication and persistence. Being in the desert with only the food and water you bring yourself is a pretty good way to filter for dedication and self-reliance.&lt;/li&gt;
        &lt;li&gt;Event: Layout of the location and event structure. Once you've got the people there, you still need to give them excuses and opportunities to connect. We all want connection, but we're all a bit shy. Density is an important factor in enabling connection. Have a space with lots of nooks and crannies, and give people a reason to walk through the hallway. Put your conference tracks at opposite ends of the hallway. Have competitions or just events people can observe or participate in. If the location is too big, put up walls to make it smaller and more dense.&lt;/li&gt;
    &lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;If you get all of those right you'll have an amazing event, and your event will have an impact. Not directly, but by connecting people that will go on and work on projects together.&lt;/p&gt;

&lt;p&gt;So back to Ephemerisle. What's great about it? 
&lt;ol&gt;
&lt;li&gt;It has an amazing core audience: Since year one, it has had some of the nicest, smartest and most talented people I know in attendance. And every year they bring more of their friends.&lt;/li&gt;
&lt;li&gt;It's hard to get there. You first need to hear about it, and then convince someone to host you on their boat. And someone to ferry you to the actual event. There's no central authority who keeps people away, but it's still pretty damn hard to get there.
&lt;li&gt;Once you're there, you have all these amazing people, but it's really dense and intense. There's little space on the water. Only the land you bring yourself, but it's got lots of nooks and crannies. There's a reason all the best conversations at parties happen in the kitchen or pantry. This year we had about 17 boats tied together. On each of these boats a whole bunch of people feel like they are the hosts, and are hospitable and inviting. Also there's lots of activities for people to actually do something useful together and connect. Building a temporary floating city isn't easy, and by contributing you get accepted into the community&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;So here's why Ephemerisle is amazing. It's got all the important basics right. From here on out, it's just making it better every year. And it seems we're right on track.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Look at some more pictures from &lt;a href="http://www.flickr.com/search/?w=all&amp;q=ephemerisle2011&amp;m=text"&gt;Ephemerisle 2011 on Flickr&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/wXKLOjxgke0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2011/06/18/ephemerisle-2011-summary/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2011/06/17/bitcoins-value-is-decentralization/
    </id>
    <title type="text">Bitcoin's Value is Decentralization</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/PgsDX9ZNm18/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2011-06-17T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;Recently I've read a lot of claims that Bitcoins don't have intrinsic value. I've come to a different conclusion. Bitcoins have intrinsic value if they enable desirable interactions that are not possible without them. Bitcoin is a theoretical and practical breakthrough that makes it possible to decentralize services we couldn't previously decentralize.&lt;/p&gt;

&lt;p&gt;To elaborate: Bitcoin isn't just a currency but an elegant universal solution to the Byzantine Generals' Problem&lt;a href="http://www.mail-archive.com/cryptography@metzdowd.com/msg09997.html"&gt;[1]&lt;/a&gt;, one of the core problems of reaching consensus in Distributed Systems. Until recently it was thought to not be practically solvable at all, much less on a global scale. Irrespective of its currency aspects, many experts believe Bitcoin is brilliant in that it technically made possible what was previously thought impossible.&lt;/p&gt;

&lt;p&gt;The Byzantine Generals' Problem roughly goes as follows: N Generals have their armies camped outside a city they want to invade. They know their numbers are strong enough that if at least 1/2 of them attack at the same time they'll be victorious. But if they don't coordinate the time of attack, they'll be spread too thin and all die. They also suspect that some of the Generals might be disloyal and send fake messages. Since they can only communicate by messenger, they have no means to verify the authenticity of a message. How can such a large group reach consensus on the time of attack without trust or a central authority, especially when faced with adversaries intent on confusing them?&lt;/p&gt;

&lt;p&gt;
Bitcoin's solution is this: All of the Generals start working on a mathematical problem that statistically should take 10 minutes to solve if all of them worked on it. Once one of them finds the solution, she broadcasts that solution to all the other Generals. Everyone then proceeds to extending that solution - which again should take another ten minutes. Every General always starts working on extending the longest solution he's seen. After a solution has been extended 12 times, every General can be certain that no attacker controlling less than half the computational resources could have created another chain of similar length. The existence of the 12-block chain is proof that a majority of them has participated in its creation. We call this a proof-of-work scheme.
&lt;/p&gt;

&lt;p&gt;If that sounds confusing, don't worry. What it means is just that consensus is reached, because computational resources are scarce. You vote with work. To rig the vote an attacker would need to control more computational power than the honest nodes. To ensure it's more expensive for an attacker to purchase the computational power needed to attack the system, Bitcoin adds an incentive scheme. Users who contribute computational power get rewarded for their work. If the value of a Bitcoin rises and thus attacking the system becomes more profitable, it also becomes more profitable for honest users to add computational resources. At any given point, one would expect miners to invest as much resources into mining as is profitable for them. Bitcoin is a currency, because it needs incentives to protect the consensus process from attackers. This computational process ("mining") is not wasteful at all, but an incredibly efficient way to make attacks economically unprofitable. Bitcoin never uses more computational resources than neccessary to protect the integrity of its interactions.&lt;/p&gt;

&lt;p&gt;Now let's go back to discussing the value provided by Bitcoin. Essentially it's a means to make consensus in highly distributed large-scale systems, which would otherwise never be able to reach consensus. The value of this is, that it's now possible to build applications in a decentralized fashion, that we previously thought could not be built without a central authority. The most obvious value of Bitcoin is as a medium of exchange for goods and services that can't be easily bought or sold using cash issued by a central authority. But there's more. Bitcoin also makes it possible to fully decentralize the DNS (Domain Name System). In that case, every Bitcoin Domain Name already comes with a cryptographic key pair. That means it also allows us to solve the PKI (Public Key Infrastructure) problem - every name you connect to has an encryption key associated with it that can be verified without trusting a central authority. In case network traffic monitoring prevents people from accessing information either at all or anonymously, Bitcoin  makes it feasible to pay for internet relays that anonymize or reroute traffic - that is, it makes it easier to remove central control and fight censorship. The list goes on, I've been hard-pressed to find any decentralization schemes that would not benefit from Bitcoin integration&lt;/p&gt;

&lt;p&gt;The pattern here is: Pretty much all of these applications can already be built in centralized form. But often the centralized solution comes with a whole bunch of weaknesses. In the PKI case you'll have to trust over 300 Certificate Authorities every time you make an https:// connection, many of which are located in countries with repressive governments. If any of those 300 entities get compromised or malevolent attackers will be able to read your email, access your bank account, and violate your privacy. DNS is getting censored by governments because they can. And every time you store value in currency, you're trusting a central authority that it isn't mismanaged and thus depreciates in value.&lt;/p&gt;

&lt;p&gt;Is there value in Bitcoin? Let me ask a counter question: Is decentralization valuable? If you think that we'll increasingly lose trust in the central authorities that manage the infrastructure we rely on, you might expect Bitcoins to rise a lot in value. If not, that is you believe that authorities will be able to tackle the challenges of the future better in centralized form, then from your perspective Bitcoins don't add value. We'll see.&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/PgsDX9ZNm18" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2011/06/17/bitcoins-value-is-decentralization/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/12/07/modeling-user-information-for-food-delivery/
    </id>
    <title type="text">Modeling User Information for Food Delivery</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/mdp8sx6PKiA/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-12-07T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;&lt;img src="http://paulbohm.com/images/0/88/mjam_logo.png" width="128px" height="88px"&gt;&lt;/div&gt;

&lt;p&gt;A few years ago I helped start what is now probably Austria's largest internet food delivery website. 'Mjam' is an onomatopoeia for the sound you make with your tongue when your mouth is watering in anticipation of something really tasty.&lt;/p&gt;

&lt;p&gt;While working on Mjam, one thing we really thought about was ranking quality: How can we learn from our users and find out which restaurants are the best? The better we are at satisfying our customers, the more likely they'd stick around or even get their friends to use our site.
&lt;/p&gt;

&lt;div style="float:left; margin-right: 5px;"&gt;&lt;img src="http://paulbohm.com/images/0/28/fivestar.png" width="124px" height="28px"&gt;&lt;/div&gt;

&lt;p&gt;We immediately knew that Pure 1-5 Star ratings wouldn't do. Everyone uses stars differently, and there's interaction-specific attractors to boot (on Netflix people are more likely to rate movies they like, so 5 is more popular than 4, 4 is more popular than 3, ...). The Star rating system also loses a lot of resolution: We don't want to know which 50 restaurants have 5 Stars, we want to know which ones are the best. Ordering restaurants would be a much better fit than discrete rankings.
&lt;/p&gt;
&lt;p&gt;So we experimented with modeling the knowledge our users had when they made an order: A restaurant was an unknown to a user, unless they had recently placed an order there (within the last two months). If a user knew multiple restaurants, and clearly preferred a few of them over the others, that was a vote. Not ordering from a restaurant you hadn't tried before wasn't a vote against it, nor ordering from a restaurant without knowing any of the alternatives. We completely scrapped explicit votes. Instead we decided to let people vote with their money and real orders. The more a user knew (through previous orders), the more weight we gave to that user's behavior in calculating our rankings.
&lt;/p&gt;
&lt;p&gt;The method turned out to work out incredibly well: Mjam's ratings are still by far the best I've seen (I'm no longer a shareholder nor do I work with them or have any recent inside information). For newer projects I'm focusing even more on personalizing filters, but I think this kind of information modeling still has a lot of promise for improving a lot of ranking systems. Yelp would be a prime candidate for recommending you alternatives and then tracking over time which one you prefer.&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/mdp8sx6PKiA" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/12/07/modeling-user-information-for-food-delivery/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/10/07/parex---parallel-execution-for-python-and-fabric/
    </id>
    <title type="text">Parex - Parallel Execution for Python and Fabric</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/wmy2Rm9XUvk/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-10-07T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;&lt;img src="http://paulbohm.com/images/0/88/parallel.jpg" width="87px" height="88px"&gt;&lt;/div&gt;&lt;p&gt;I've been planning for a while to release more of the tools I've developed for BBQ. Let's get this started:&lt;/p&gt;

&lt;p&gt;Parex is a simple python module that allows you to execute multiple processes in parallel, and then block till they've all finished. I use it with &lt;a href="http://fabfile.org/"&gt;fabric&lt;/a&gt; to make deployments &lt;b&gt;significantly faster&lt;/b&gt;. Find the &lt;a  href="http://github.com/enki/parex"&gt;code over at github&lt;/a&gt;.

&lt;p&gt;Usage Example:
&lt;!-- HTML generated using hilite.me --&gt;&lt;div style="background: #f8f8f8; overflow:auto;width:auto;color:black;background:white;border:solid gray;border-width:.1em .1em .1em .8em;padding:.2em .6em;"&gt;&lt;pre style="margin: 0; line-height: 125%"&gt;x &lt;span style="color: #666666"&gt;=&lt;/span&gt; TaskManager(cwd&lt;span style="color: #666666"&gt;=&lt;/span&gt;&lt;span style="color: #BB4444"&gt;"."&lt;/span&gt;)
x&lt;span style="color: #666666"&gt;.&lt;/span&gt;execute(&lt;span style="color: #BB4444"&gt;&amp;#39;ls&amp;#39;&lt;/span&gt;) &lt;span style="color: #008800; font-style: italic"&gt;# execute commands&lt;/span&gt;
x&lt;span style="color: #666666"&gt;.&lt;/span&gt;execute(&lt;span style="color: #BB4444"&gt;&amp;#39;ps auxw&amp;#39;&lt;/span&gt;)
pid &lt;span style="color: #666666"&gt;=&lt;/span&gt; x&lt;span style="color: #666666"&gt;.&lt;/span&gt;execute(&lt;span style="color: #BB4444"&gt;&amp;#39;who&amp;#39;&lt;/span&gt;) &lt;span style="color: #008800; font-style: italic"&gt;# returns pid&lt;/span&gt;
x&lt;span style="color: #666666"&gt;.&lt;/span&gt;wait() &lt;span style="color: #008800; font-style: italic"&gt;# wait till all have finished&lt;/span&gt;
&lt;span style="color: #AA22FF; font-weight: bold"&gt;for&lt;/span&gt; y &lt;span style="color: #AA22FF; font-weight: bold"&gt;in&lt;/span&gt; x&lt;span style="color: #666666"&gt;.&lt;/span&gt;data&lt;span style="color: #666666"&gt;.&lt;/span&gt;values(): &lt;span style="color: #008800; font-style: italic"&gt;# keyed by pid&lt;/span&gt;
    &lt;span style="color: #AA22FF; font-weight: bold"&gt;print&lt;/span&gt; y&lt;span style="color: #666666"&gt;.&lt;/span&gt;getvalue() &lt;span style="color: #008800; font-style: italic"&gt;# y is StringIO&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;&lt;/p&gt;&lt;p&gt;Follow me on twitter &lt;a href="http://twitter.com/enkido/"&gt;here&lt;/a&gt; or sign up for the &lt;a href="http://bbq.io/"&gt;BBQ betatest&lt;/a&gt;.&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/wmy2Rm9XUvk" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/10/07/parex---parallel-execution-for-python-and-fabric/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/10/07/logo-for-bbq/
    </id>
    <title type="text">Logo for BBQ</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/mOWncbGmJy0/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-10-07T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;
    &lt;img src="http://paulbohm.com/images/0/88/bbq.png" width="152px" height="88px"&gt;
&lt;/div&gt;
&lt;p&gt;BBQ, my information filtering project that has made me skip sleep lately, has a new logo and some additional design! I've spent more money on logos than I was planning, but sometimes moving forward is more important than being frugal. &lt;/p&gt;&lt;p&gt;&lt;br/&gt;I'll blog more about BBQ shortly, but in the meanwhile sign up for the betatest &lt;a href="http://bbq.io/"&gt;here&lt;/a&gt;.&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/mOWncbGmJy0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/10/07/logo-for-bbq/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/07/04/multi-nothing/
    </id>
    <title type="text">Multi-Nothing</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/9fxVLbYhWz8/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-07-04T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;&lt;img src="http://paulbohm.com/images/140/180/foot-juggling2_265x335.jpg" width="140px" height="180px"&gt;&lt;/div&gt;
&lt;p&gt;I used to admire the ability of people to work on many things at once or in succession, but these days I'm much more excited by people who focus intently on just one thing for a long time. It's not the quantity of things you do, but whether the parts work together to create a good whole.&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/9fxVLbYhWz8" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/07/04/multi-nothing/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/06/15/most-recently-used-wardrobe/
    </id>
    <title type="text">Most Recently Used Wardrobe</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/1mR4bMAIRrU/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-06-15T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;
        &lt;a href="#"&gt;
            &lt;img src="http://paulbohm.com/images/259/196/wardrobe.png" alt="image description" width="259" height="196"&gt;
            &lt;span class="frame"&gt;&lt;/span&gt;
        &lt;/a&gt;
    &lt;/div&gt;

&lt;p&gt;
Ok, this is probably going to blow you away. After a long hiatus from blogging, I'm sitting at my desk on such a beautiful day and bring to you applied computer science: Behold, the miracle of the Bay Area: The magnificent Most Recently Used Wardrobe.
&lt;/p&gt;

&lt;p&gt;That is: Hang all your clothes on a bar and whenever you return an item from laundry, append it to the right side of the bar. After a while all the stuff you never wear ends up on the left side - ready for archival or transfer.

&lt;/p&gt;&lt;p&gt;Remember: Random Access for pop() but appendright() for Insertion.&lt;/p&gt;&lt;p&gt;

&lt;/p&gt;&lt;p&gt;PS: paulbohm.com has an RSS feed now at &lt;a href="http://feeds.feedburner.com/PaulBohm"&gt;http://feeds.feedburner.com/PaulBohm&lt;/a&gt;&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/1mR4bMAIRrU" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/06/15/most-recently-used-wardrobe/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/06/09/the-all-new-paulbohmcom/
    </id>
    <title type="text">The all new paulbohm.com!</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/VcVhOys01E4/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-06-09T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;p&gt;It's online and already home to &lt;a href="/projects/"&gt;fine interwebs&lt;/a&gt;!&lt;/p&gt;

&lt;div class="image"&gt;
    &lt;a href="#"&gt;
        &lt;img src="http://paulbohm.com/images/706/200/img1-post.jpg" alt="image description" width="706" height="200"&gt;
        &lt;span class="frame"&gt;&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;PS: This site is running on top of Cassandra/Tornado/Tragedy/EC2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; &lt;i&gt;added some old posts from the archive&lt;/i&gt;&lt;/p&gt;

    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/VcVhOys01E4" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/06/09/the-all-new-paulbohmcom/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2010/01/10/product-discovery-not-software-development/
    </id>
    <title type="text">Product Discovery not Software Development</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/arqwTP09zxo/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2010-01-10T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;

    &lt;a href="http://www.nataliedee.com/"&gt;
            &lt;img src="http://paulbohm.com/images/259/196/he-always-says-hi-guys-and-everything.jpg" alt="image description" width="259" height="196"&gt;
            &lt;span class="frame"&gt;&lt;/span&gt;
    &lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;If you’re building a new product, your biggest risk isn’t that you won’t be able to reach a mainstream audience, but that you’ll fail to attract even 50 users that love your product.&lt;/p&gt;

&lt;p&gt;When embarking on a new venture, your goal isn’t to implement any specific idea in the best way possible, but to iterate as fast as you can, till someone is passionate about whatever product you’ll eventually converge on. Don’t worry about being scalable or cross-platform. So what if IE6 users can’t use your app - you’ve yet to find anyone that wants to use your useless app anyway. Anything that reduces your speed of iteration is poison to your startup at this point.&lt;/p&gt;

&lt;p&gt;Yes, we ridicule companies that fail to scale when they start becoming successful, but keep in mind - they’ve become successful and that makes them extraordinary in so many ways. Maybe they didn’t become successful despite being scrappy, but because they were scrappy. Seriously, once you have users that want to use your product but can’t because your tech sucks, you’ve basically won. After all, what you’ve been doing is product discovery, not software development. The tech really is the easy part, since it only becomes important once you have something that people actually want to use.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;This article was inspired by a heated discussion on irc.freenode.net #startups about whether not supporting IE and even Firefox is a viable strategy for an early-stage startup. My thoughts are above. I’d love to hear yours. Discuss over at &lt;a href="http://news.ycombinator.com/item?id=1042378"&gt;Hacker News&lt;/a&gt;.&lt;/i&gt;&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/arqwTP09zxo" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2010/01/10/product-discovery-not-software-development/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2009/12/18/florian-hufsky-oneup-13111986---16122009/
    </id>
    <title type="text">Florian Hufsky, @oneup, 13.11.1986 - 16.12.2009</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/m4_dQnQtrhc/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2009-12-18T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="margin-left: 100px; width: 440px; border: 6px coral solid; border-color: black; padding: 9px; "&gt;
&lt;p&gt;
&lt;img src="http://paulbohm.com/images/200/150/oneup.jpg" height="150px" width="200px" style="width:200px; margin-left: 120px;"&gt;
&lt;/p&gt;
&lt;p&gt;Florian Hufsky (“Flo”, “oneup”, “Hufsky”) war mehr als ein geliebter Freund, mehr als ein Pixelkünstler, Hacker und Spieledesigner. Flo war
jemand der konstant mit einer Leichtigkeit Ideen, Konzepte, Code und
Projekte produzierte, die Ihn nicht bloss nach einem Medium für seine
Ideen suchen liess, sondern zum Medium seiner Ideen machte. Jemand der
mit 23 bereits eine Partei, mehrere Spiele, Startups, und eine
Künstlertruppe gestartet hatte, und jemand der Freunde und Familie
hatte die Ihn wirklich liebten. Nicht jemand der etwas sein wollte,
sondern jemand der etwas war, und dessen Beiträge und Inspiration noch
lange in Design, Produkten und Diskurs weit über dieses kleine
Alpenland hinaus widerhallen werden. Und dennoch war er nicht
glücklich, fand nicht die Perspektive und Liebe die Ihm gebührte, und
sah scheinbar keinen Ausweg. Mir blutet das Herz daran zu denken, dass
er etwas übersehen haben könnte - ich wünschte er hätte mehr gereist,
hätte mehr gesehen - vielleicht wäre da etwas für Ihn gewesen. Doch
unendliche parallele Welten, und wir enden in einer in der ein Freund,
ein Vorbild und Inspiration mit so viel Potential, uns bewusst
verlässt. Ich kann nicht abschliessen damit, ich spüre nur Wut,
Tränen, Verzweiflung. Sein Licht brannte hell, und Ich bin dankbar für
die Zeit die er mit uns teilte. Danke Flo!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;English&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
Florian Hufsky (“Flo”, “oneup”, “Hufsky”) was more than a beloved
friend, more than a pixel artist, hacker and game designer. Flo was
someone who produced ideas, concepts, code and projects with such
ease, that he didn’t just look for a medium for his ideas, but he
himself became a medium for his ideas. Someone who at 23 years of age
had already started a political party, multiple games, startups, and
a digital art troupe, and someone who had friends and family that
truly loved him. Not someone who wanted to become someone, but someone
who was someone, and whose contributions and inspiration will continue
to be felt for a long time in designs, products and discourse, far
beyond the small alpine country that he was born in. But despite all
this, he wasn’t happy, he didn’t find the perspective and love that he
deserved, and it seems he saw no way for himself to achieve happiness.
My heart is bleeding when i think that he might have missed something
- i wish he had travelled more, had seen more - maybe there’d have
been something for him out there. But despite the infinite parallel
worlds that we live in, we end up in one in which a friend, a
role-model and inspiration with so much potential, has left us
intentionally. I can’t comprehend, I can’t move on, I only feel anger,
tears and despair. His light burned bright, and I’m thankful for the
time he shared with us. Thank you, Flo!
&lt;/p&gt;
&lt;/div&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/m4_dQnQtrhc" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2009/12/18/florian-hufsky-oneup-13111986---16122009/</feedburner:origLink></entry>
  <entry>
    <id>http://paulbohm.com/2009/08/09/wave-the-new-x-windows/
    </id>
    <title type="text">Wave, the new X-Windows?</title>
    <link href="http://feedproxy.google.com/~r/PaulBohm/~3/tnxoIUKiWV0/" rel="alternate" type="text/html" />
    <updated>2012-01-25T02:41:52Z
    </updated>
    <published>2009-08-09T08:00:00Z
    </published>
    <content type="html" xml:base="http://paulbohm.com/">&lt;div style="float:left; margin-right: 5px;"&gt;
        &lt;a href="#"&gt;
            &lt;img src="http://paulbohm.com/images/259/196/scipywave.png" alt="image description" width="259" height="196"&gt;
            &lt;span class="frame"&gt;&lt;/span&gt;
        &lt;/a&gt;
    &lt;/div&gt;

&lt;p&gt;While at the &lt;a href="http://gtug-campout-sv.eventbrite.com/"&gt;GTUG Campout&lt;/a&gt; in Mountain View, &lt;a href="http://jacobrus.com/"&gt;Jacob Rus&lt;/a&gt; and me turned &lt;a href="http://wave.google.com/"&gt;Google Wave&lt;/a&gt; into a collaborative Scientific Computing Environment using &lt;a href="http://scipy.org/"&gt;scipy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Working on Wave there and later independently on Operational Transformations (the algorithms behind wave), has led me to conclude that the protocols and ideas behind wave are far more interesting than the promise of the current implementation&lt;/p&gt;

&lt;p&gt;Most observers are portraying Google Wave as the future of email or instant&amp;#160;messaging, and celebrating or criticizing it as such. In the blog posts I've&amp;#160;read, Wave’s merits are analyzed&amp;#160;solely based on the current developer &lt;em&gt;UI preview&lt;/em&gt;. Calling it a preview is giving it a lot of credit - let's maybe call it a &lt;em&gt;debugger&lt;/em&gt; or &lt;em&gt;proof-of-concept&lt;/em&gt; instead.&amp;#160;Or in other words, people are discussing Wave like it is the newest social networking website, and not an&amp;#160;infrastructure protocol under heavy development.&lt;/p&gt;
&lt;p&gt;So let’s ignore the high-level “next-gen E-mail” sales pitch for a&amp;#160;moment and take a look at the state of Wave today. At its heart is a&amp;#160;technology called &lt;a href="http://en.wikipedia.org/wiki/Operational_transformation"&gt;Operational Transformation&lt;/a&gt; (OT). It defines a set of&amp;#160;operations, transformations, and the documents they can be applied to.&lt;/p&gt;
&lt;p&gt;For Google Wave in particular, the components involved are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Documents that can be rendered to HTML.&lt;/li&gt;
&lt;li&gt;Operations and series of operations that can be applied to documents: For&amp;#160;instance, insert a character ‘c’ at position 5, then delete the character at position 9 &lt;em&gt;(Note: this is an example, not how wave's operations really work)&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Transformations of Operations: These are rules to change operations, so&amp;#160;that if operations are received in different order on multiple clients, the document still eventually converges to the same consistent state.&lt;/li&gt;
&lt;li&gt;Robots that can monitor operations and create new operations based&lt;br&gt;on the operations previously applied to a document.&lt;/li&gt;
&lt;li&gt;An early draft of a federation protocol that allows documents to be&lt;br&gt;hosted on arbitrary servers instead of a central location, for example&lt;br&gt;at Google.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That's pretty much all there is to it. It essentially defines the data&amp;#160;structures of a collaborative document editor, and we don’t really know yet where many of the components attached to them will lead: The federation API is still a moving target, there's no client/server protocol, and robots speak yet a different moving-target protocol. Add a web UI (which right now doesn't even properly speak OT, and is built on an unspecified and &lt;a href="http://en.wikipedia.org/wiki/Google_Web_Toolkit"&gt;GWT&lt;/a&gt;-specific protocol) and what you&amp;#160;have is a collaborative web document editor with big ambitions. That’s exactly where Wave&amp;#160;is right now, and the&amp;#160;&lt;a href="http://etherpad.com"&gt;competition&lt;/a&gt; has been here before (maybe without the big vision, but who's to say?).&lt;/p&gt;
&lt;p&gt;Now where can we go from here? HTML is a document display system repurposed as an application platform. Wave seems aimed at the same route. So how could that application platform look?&lt;/p&gt;
&lt;p&gt;Let me explain using an analogy.&lt;/p&gt;
&lt;p&gt;Traditional programs can either directly access input and output devices like&amp;#160;keyboards and graphics cards, or they can use the &lt;a href="http://en.wikipedia.org/wiki/X_Window_System"&gt;X-Windows&lt;/a&gt; protocol,&amp;#160;which is more abstract, but has certain advantages. With the X protocol,&amp;#160;programs request graphics operations instead of instructing the hardware&amp;#160;directly. This level of abstraction enables multiple programs to work on&amp;#160;the same screen, cooperate with copy&amp;paste or enhance each other like&amp;#160;window managers do.&lt;/p&gt;
&lt;p&gt;Programs can even use the &lt;a href="http://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture"&gt;X-Protocol&lt;/a&gt; over a network, which&lt;br&gt;means that a program and its server with the screen can run on different&lt;br&gt;machines. I say in theory, because graphics operations are ill-suited&lt;br&gt;for high-latency, low-bandwidth environments such as the Internet, and&lt;br&gt;X-Windows is a particularly chatty protocol. More efficient solutions&lt;br&gt;like &lt;a href="http://en.wikipedia.org/wiki/RFB_protocol"&gt;RFB/VNC&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/NX_technology"&gt;NX&lt;/a&gt; have been developed, but in general, the pixel&amp;#160;transfer paradigm has proven inferior to the high-level web application paradigm&amp;#160;that has parts of the UI logic running on the clients in JavaScript.&lt;/p&gt;
&lt;p&gt;Now I'm arguing that this new webapp paradigm is still like talking to the graphics hardware directly. Developing custom JavaScript code for changing documents requires&amp;#160;re-inventing the collaboration and interoperability wheels over and over again. Wave could be the heart of protocols and standards&amp;#160;upon which we can develop the next generation of applications without&amp;#160;re-implementing everything over and over again for each new app. Apps&amp;#160;would be robots, possibly partially running within the browser, and all I/O would be operations on documents.&lt;/p&gt;
&lt;p&gt;This means that every Wave application would be collaborative "for free", and&lt;br&gt;you could combine multiple apps to interoperate on the same documents, like a latter day &lt;a href="http://en.wikipedia.org/wiki/OpenDoc"&gt;OpenDoc&lt;/a&gt;.&amp;#160;Eventually, documents could be more than just static data, and using the&amp;#160;same protocol and algorithms to build, let's say, a collaborative&amp;#160;Photoshop in Wave is entirely possible, just like classic web&amp;#160;applications have transcended the original scope of HTML.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To give you a little background: I am a software engineer working on distributed systems, and particularly on OT algorithms.&amp;#160;&amp;#160;I am posting&amp;#160;this from the&amp;#160;&lt;a href="http://gtug-campout-sv.eventbrite.com/"&gt;GTUG Campout&lt;/a&gt; at the Google Campus in Mountain View where I have just built a few Wave-based apps with my co-conspirator&amp;#160;&lt;a href="http://jacobrus.com/"&gt;Jacob Rus&lt;/a&gt;.&amp;#160;Among them is a collaborative scientific computing environment (think Mathematica or Matlab - but based on the awesome Python &lt;a href="http://scipy.org/"&gt;Scipy&lt;/a&gt; environment - &lt;a href="http://lolstartups.com/post/159322545/while-at-the-gtug-campout-in-mountain-view-jacob"&gt;screenshot here&lt;/a&gt;), and a Wave Robot IDE, which allows you to write wave robots collaboratively from within Wave. Both projects will be opensourced soon. You should follow me &lt;a href="http://twitter.com/enkido"&gt;here&lt;/a&gt; on twitter, if you want to get updates.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Thanks&lt;/strong&gt; to&amp;#160;Christiane Ruetten, Jacob Rus and someone knowledgeable who can't be named for reading drafts of this.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Discussion and comments on&amp;#160;&lt;a href="http://news.ycombinator.com/item?id=752340"&gt;news.yc&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;



    &lt;img src="http://feeds.feedburner.com/~r/PaulBohm/~4/tnxoIUKiWV0" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://paulbohm.com/2009/08/09/wave-the-new-x-windows/</feedburner:origLink></entry>
</feed>

