<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/'>
<channel>
  <title>Bram Cohen&apos;s Journal</title>
  <link>http://bramcohen.livejournal.com/</link>
  <description>Bram Cohen&apos;s Journal - LiveJournal.com</description>
  <lastBuildDate>Thu, 09 Jul 2009 22:47:15 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>bramcohen</lj:journal>
  <lj:journalid>4644944</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://l-userpic.livejournal.com/83343469/4644944</url>
    <title>Bram Cohen&apos;s Journal</title>
    <link>http://bramcohen.livejournal.com/</link>
    <width>100</width>
    <height>82</height>
  </image>

<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/68464.html</guid>
  <pubDate>Thu, 09 Jul 2009 22:47:15 GMT</pubDate>
  <title>Someone at Mozilla Foundation needs to be fired</title>
  <link>http://bramcohen.livejournal.com/68464.html</link>
  <description>Somebody at Mozilla decided they &lt;a href=&quot;http://weblogs.asp.net/fbouma/archive/2009/07/09/the-firefox-3-5-fiasco.aspx&quot; target=&quot;_blank&quot;&gt;need lots of &apos;true&apos; random numbers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My patience for this subject completely ran out about five years ago, so this post is going to show a complete lack of diplomacy. I&amp;nbsp;would like to emphasize, in advance, that this is my honest, reasoned opinion, not said in anger, and that if you ask my opinion again in the future I&apos;ll say the exact same thing.&lt;br /&gt;&lt;br /&gt;Once a computer has collected a small number of &apos;true&apos; random bits (maybe it&apos;s 128, maybe it&apos;s 256, but regardless it&apos;s small) there&apos;s no need whatsoever for it to block on collecting more &apos;random&apos; numbers. A pseudorandom number generator based on AES will be able to generate random numbers based on that seed until the end of the universe and noone constrained by the laws of physics and math will ever be able to tell the difference between that and &apos;true&apos; random numbers. This is extremely well established cryptography. To require &apos;true&apos; random numbers is, to use an apt analogy, wankery. It does not, and cannot, do anything to improve security, and it mostly just causes huge amounts of pain. It is (and I&amp;nbsp;repeat myself, because I&amp;nbsp;have a hunch people will think I&apos;m glossing over some nuance here) of no benefit whatsoever.&lt;br /&gt;&lt;br /&gt;My advice to the Mozilla foundation (and again, this is my reasoned opinion, not said in anger, and I won&apos;t be changing my mind later):&amp;nbsp;find out who was responsible for this policy of requiring lots of &apos;true&apos; random numbers, and fire them. Fire them today. They have demonstrated gross incompetence, a total lack of understanding of the very most basic concepts in security.&lt;br /&gt;&lt;br /&gt;Some people might think that if I&amp;nbsp;knew more about who was behind this and what their specific motivations are, then that might change my mind. That is incorrect. The security field is filled with people who to non-experts seem very impressive and knowledgeable, especially when they&apos;re advocating, and even moreso demanding, very painful and difficult things in the name of security. Most of these people are frauds. I have had it with paying homage to the concept of impartiality when discussing these peoples&apos;s opinions. If someone spouts a bunch of technical mumbo-jumbo to bring the conversation to a place which a lay person has trouble understanding, then they may be able to make the argument be based on pure rhetoric, but gross incompetence is still gross incompetence, and despite having found an effective way to bullshit their way through, they&apos;re still wrong.&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/68464.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>23</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/68348.html</guid>
  <pubDate>Tue, 07 Jul 2009 18:47:27 GMT</pubDate>
  <title>Ludology in City of Heroes</title>
  <link>http://bramcohen.livejournal.com/68348.html</link>
  <description>City of Heroes has had &lt;a href=&quot;http://www.nola.com/news/index.ssf/2009/07/loyola_university_professor_be.html&quot;&gt;some interesting issues&lt;/a&gt; with its gameplay, involving a character named Twixt using some tactics which made everybody hate him.&lt;br /&gt;&lt;br /&gt;Several years ago I&amp;nbsp;happened to be seated next to the designer of City of Heroes at an event where he won something. He was a pudgy guy, wearing big round glasses, with a white city of heroes t-shirt and a blue cape on. We got into a conversation about his game, and I&amp;nbsp;asked what it was that made it compelling, and he said that it&apos;s every kid&apos;s fantasy of being a superhero, and it was very obvious that he&apos;d based the game&apos;s design on his own. I&amp;nbsp;asked him if City of Heroes is compelling as a pure abstract game, and the interesting response was that he didn&apos;t understand the question. After a few minutes of conversation he got what I&amp;nbsp;was asking, and his answer, which really perplexed me at the time, was that it was a good question, but he didn&apos;t know.&lt;br /&gt;&lt;br /&gt;Consider a game with the following semantics: You sit, unmoving, for two hours, with no user feedback, no buttons to push, nothing, completely passive, while the game plays out in front of you, exactly the same way as it would for anybody else. This sounds like a terrible game, but it&apos;s exactly what movies are, and movies are very popular and get little criticism that they&apos;re terrible games.&lt;br /&gt;&lt;br /&gt;The Twixt problem was caused not so much by any one person behaving unreasonably as the game engine having a problem. There&apos;s a battle tactic which is quite effective but has the effect of wiping out an enemy without even giving them a chance to play, making it not much fun for them and it doesn&apos;t even get much credit for you. Because City of Heroes is more fantasy than game, players have a convention of not using this tactic, because that maximizes the fun of play. This is done at the expense of an individual&apos;s success taking the game as a sport, but since the game isn&apos;t a sport, people don&apos;t worry about that too much. Real sports don&apos;t involve dressing up as superheroes (except for figure skating, but that isn&apos;t a real sport). What really should be done is that the rules should be modified so that the particular tactic isn&apos;t so nasty. It&apos;s a general rule of game design that all players should get a chance to play and have fun, even if they aren&apos;t very good, and tactics which allow a better player to win without the weaker player even having a chance to try to retaliate are no fun.&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/68348.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/67982.html</guid>
  <pubDate>Mon, 06 Jul 2009 23:26:56 GMT</pubDate>
  <title>Bandwidth fundamentals</title>
  <link>http://bramcohen.livejournal.com/67982.html</link>
  <description>A random person asks about something they read on Wikipedia:&lt;br /&gt;&lt;div style=&quot;margin-left: 40px;&quot;&gt;&lt;br /&gt;Example from wiki below: &lt;br /&gt; &lt;br /&gt;http://en.wikipedia.org/wiki/Bram_Cohen &lt;br /&gt; &lt;br /&gt;quote from site: &lt;br /&gt; &lt;br /&gt;MojoNation allows people to break up confidential files into encrypted chunks and distribute those pieces on computers also running the software. If someone wanted to download a copy of this encrypted file, he would have to download it simultaneously from many computers. This concept, Cohen thought, was perfect for a file sharing program, since programs like KaZaA take a long time to download a large file because the file is (usually) coming from one source (or &amp;quot;peer&amp;quot;). Cohen designed BitTorrent to be able to download files from many different sources, thus speeding up the download time, especially for users with faster download than upload speeds. Thus, the more popular a file is, the faster a user will be able to download it, since many people will be downloading it at the same time, and these people will also be uploading the data to other users. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;This explanation was lifted from an actual new article, which &lt;a href=&quot;http://bramcohen.livejournal.com/8502.html&quot; target=&quot;_blank&quot;&gt;doesn&apos;t necessarily mean it&apos;s true&lt;/a&gt;. In fact, it&apos;s somewhere between grossly misleading and wrong.&lt;br /&gt;&lt;br /&gt;There&apos;s a classic fallacy because if one person stands up during a concert they get a better view, then if everybody stood up during a concert they&apos;d all get a better view. This is of course is not true - they wind up slightly worse off by all standing, because they all compete with each other for a view. The same thing happens with downloading from a server. In general, web servers will give about the same rate to every client downloading from them, so if you open many more connections than everybody else you get a greater proportion of the bandwidth and hence a better rate. But you do so simply by taking bandwidth from other downloaders. The overall supply of upload is unchange, it&apos;s simply being shuffled around. If everybody does the same thing it results in overall slightly worse performance and you&apos;re basically back where you started, but with a bunch of headaches tacked on.&lt;br /&gt;&amp;nbsp;&lt;/div&gt;So why does BitTorrent perform so well? Quite simply, because it does a better job of finding more places to do uploading. Any peer which is downloading is in general willing to upload as well, and their uplink is usually unutilized, so if you can get a peer to start uploading as soon as it starts downloading, and keep uploading as long as possible, and saturate its link while it&apos;s uploading, then overall performance will be better. It doesn&apos;t necessarily help to transfer over more connections, or make more different things available at the same time, or use error correcting codes. In fact, all of those are a complex tradeoff between benefits and costs, with the net result being that small amounts of them can help reliability and robustness, but in general it&apos;s good to keep things simple and be polite to the network.&lt;br /&gt;&lt;br /&gt;On the internet, the formula is bytes downloaded = bytes uploaded. It&apos;s that simple.&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/67982.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/67591.html</guid>
  <pubDate>Mon, 06 Jul 2009 21:51:49 GMT</pubDate>
  <title>The Uncanny Cube</title>
  <link>http://bramcohen.livejournal.com/67591.html</link>
  <description>&lt;lj-embed id=&quot;10&quot; /&gt;&lt;br /&gt;&lt;br /&gt;From deep in the uncanny valley of the Rubik&apos;s Cube, it&apos;s the Uncanny Cube. At first blush this appears to be a slight variant, but it is quite profoundly and perversely different.</description>
  <comments>http://bramcohen.livejournal.com/67591.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/67449.html</guid>
  <pubDate>Fri, 03 Jul 2009 16:48:22 GMT</pubDate>
  <title>Bram&apos;s Cube</title>
  <link>http://bramcohen.livejournal.com/67449.html</link>
  <description>&lt;lj-embed id=&quot;9&quot; /&gt;&lt;br /&gt;&lt;br /&gt;This is Bram&apos;s Cube, an idea I&apos;m very fond of. It&apos;s very interesting to solve, since the middle layer and everything else can be thought of independently and solved on their own, but that scrambles the part you weren&apos;t thinking of.</description>
  <comments>http://bramcohen.livejournal.com/67449.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/67244.html</guid>
  <pubDate>Mon, 15 Jun 2009 14:58:44 GMT</pubDate>
  <title>New Puzzles - Bram&apos;s Black Hole and Fairly Twisted</title>
  <link>http://bramcohen.livejournal.com/67244.html</link>
  <description>&lt;lj-embed id=&quot;7&quot; /&gt;&lt;br /&gt;Bram&apos;s Black Hole is a concept which occurred to me a few minutes after the first time I ever played with a puzzle similar to Peter&apos;s Black Hole.&lt;br /&gt;&lt;br /&gt;&lt;lj-embed id=&quot;8&quot; /&gt;&lt;br /&gt;Fairly Twisted is a twisty puzzle with no symmetry.</description>
  <comments>http://bramcohen.livejournal.com/67244.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/66883.html</guid>
  <pubDate>Mon, 08 Jun 2009 21:12:59 GMT</pubDate>
  <title>Puzzle Ring tweaking</title>
  <link>http://bramcohen.livejournal.com/66883.html</link>
  <description>It turns out that when cadding a puzzle ring, some issues turn up. Specifically, when a band goes over one band then immediately under another, it frequently doesn&apos;t have enough space to squeeze through between them.&lt;br /&gt;&lt;br /&gt;I&apos;ve come up with some techniques for dealing with this, and drew the following diagrams, which I think are kind of pretty, and I&apos;m proud of my diagramming technique involved :-)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;

         ___
_______ /   \ _______
       \     \
      / \   / \
___   |  |  |  |  ___
   \ /   \ /   \ /
    \     /     \
___/ \   / \   / \___
      |  |  |  |  
      \ /   \ /
_______\     \_______
        \___/ 


         ___   __________
_______ /   \ /          ___________
       \     /          / \
      / \   / \    __   |  \
___   |  |  |  |  /  \ /    | ______
   \ /   \ /   \ /    /     \
    /     /     \    / \   / \
___/ \   / \   / \   |  |  |  |  ___
      |  |  |  |  \ /   \ /   \ /
      \ /   \ /    \     /     \
______ \     \    / \   / \   / \___
        |   / \__/   |  |  |  |
        \   |        \ /   \ /
___________/          \     \_______
          \__________/ \___/


              __   ___   __
       ___   /  \ /   \ /  \   ___
_____ /   \ /    \     /    \ /   \ ________
     \     \    / \   / \    /     /
    / \   / \   |  |  |  |  / \   / \   
___/   \ /   \ /   \ /   \ /   \ /   \ _____
        \     \     \     /     /     /
       / \   / \   / \   / \   / \   / \
____   |  |  |  |  |  |  |  |  |  |  |  L___
    \ /   \ /   \ /   \ /   \ /   \ /
     /     /     /     \     \     \
____/ \   / \   / \   / \   / \   / \   ____
       |  |  |  |  |  |  |  |  |  |  |  |
       \ /   \ /   \ /   \ /   \ /   \ /
___     /     /     /     \     \     \_____
   \   / \   / \   / \   / \   / \   /
    \ /   \ /   |  |  |  |  \ /   \ /
_____/     /    \ /   \ /    \     \________
      \___/ \    /     \    / \___/
             \__/ \___/ \__/
&lt;/pre&gt;</description>
  <comments>http://bramcohen.livejournal.com/66883.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/66606.html</guid>
  <pubDate>Mon, 01 Jun 2009 06:03:31 GMT</pubDate>
  <title>Kite wind power</title>
  <link>http://bramcohen.livejournal.com/66606.html</link>
  <description>There are a number of different projects going on to harness wind power using kites. Most of them are utter lunacy, involving so many gizmos and unproven techniques that you might as well be trying to &lt;a href=&quot;http://advogato.org/person/Bram/diary/96.html&quot;&gt;get power from lightning&lt;/a&gt;. That said, I have an approach which I think is plausible, but before even idly thinking about working on it I&apos;d like to know if the whole concept of kite-based power even works on paper. Gathering the necessary information and running the numbers is a bit beyond my off the top of the head skills, so I&apos;d greatly appreciated it if anyone would help me calculate the following:&lt;br /&gt;&lt;br /&gt;For several points of interest on earth (particularly plausible/notable/typical places) calculate the following for both ground level and an altitude of half a kilometer:&lt;br /&gt;&lt;br /&gt;What is the minimum, average, and max wind velocity? For the average wind velocity what would be the pull of a kite with an area of a hundred square meters? What would be the weight of the kevlar necessary to hold down something producing that much force at the maximum wind velocity? After factoring in holding up all that kevlar, could a kite stay up at minimum wind speed? How much power could be generated by its remaining upwards force? How much of that would be lost in the electrical generator? How does that amount of power output compare to the per capita max and average power consumption in the United States?&lt;br /&gt;&lt;br /&gt;My suspicion is that flying kites at an altitude of more than a few hundred meters is simply not worth it, and that the optimal kite size in practice is around a thousand square meters, and that in an area where the wind never dies down a kite system compares quite favorably to a turbine system, once you get all the engineering problems worked out.&lt;br /&gt;&lt;br /&gt;Also, I have a dumb question about controls - At what altitude do the sorts of control systems used for power kites simply stop working due to even very tensioned materials having a lot of slop at that length?</description>
  <comments>http://bramcohen.livejournal.com/66606.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/66555.html</guid>
  <pubDate>Mon, 01 Jun 2009 05:11:25 GMT</pubDate>
  <title>Maybe goto isn&apos;t so bad after all.</title>
  <link>http://bramcohen.livejournal.com/66555.html</link>
  <description>I&apos;ve used this pattern a lot over the last few days:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
for eggs in spam:
    for jello in eggs:
        if jello is the one I want:
            break
    else:
        continue
    break
else:
    return
do stuff with eggs and jello
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;People familiar with my code will find this amount of complex control flow unsurprising. But the reasoning here is different from my past practices. In the past I always optimized to have as few lines of code as possible, regardless of how upside down and backwards it made everything be organized, but that could be done much better in this case like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
for eggs in spam:
    for jello in eggs:
        if jello is the one I want:
            do stuff with eggs and jello
            return
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There are two reasons I find this construct objectionable. First is that it leads to a lot of code having a lot of indentation (the &apos;do stuff&apos; is in many cases dozens of lines) which isn&apos;t good for readability. Second is that the natural flow of the code is &apos;scan for the thing I want, and then do something with it&apos; which is the flow of the structure I&apos;ve been using. I suppose one could write it like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
def my_little_func():
    for eggs in spam:
        for jello in eggs:
            if jello is the one I want:
                return eggs, jello
    return None, None

eggs, jello = my_little_func()
if eggs is None:
    return
do stuff with eggs and jello
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But that&apos;s hardly elegant and forces the flow to jump around in terms of the visual layout of the code, which goes against what I&apos;m trying to accomplish.&lt;br /&gt;&lt;br /&gt;At the risk of starting a religious war, I&apos;d like to point out that the most readable and versatile way of doing what I want is like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
for eggs in spam:
    for jello in eggs:
        if jello is the one I want:
            goto x
return
x: do stuff with eggs and jello
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But short of that the following may be the best option currently available. I might switch to it:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
for eggs in spam:
    for jello in eggs:
        if jello is the one I want:
            after_func(eggs, jello)
            return

def after_func(eggs, jello):
    do stuff with eggs and jello
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;But it still doesn&apos;t look as nice as the version with a goto.</description>
  <comments>http://bramcohen.livejournal.com/66555.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>15</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/66270.html</guid>
  <pubDate>Fri, 29 May 2009 05:04:38 GMT</pubDate>
  <title>Geary Cube</title>
  <link>http://bramcohen.livejournal.com/66270.html</link>
  <description>&lt;lj-embed id=&quot;6&quot; /&gt;&lt;br /&gt;This is the Geary Cube puzzle, another Bram and Oskar collaboration. It&apos;s externally identical to a Rubik&apos;s Cube, but has internal gearing which forces opposite faces to turn in opposite directions simultaneously. It&apos;s my favorite subgroup of the Rubik&apos;s Cube (you can try it yourself with a regular Rubik&apos;s Cube) and easily makes a bunch of pretty patterns. It&apos;s overall easier than a regular Rubik&apos;s Cube is, but the solution technique is very different and interesting and not related to the standard ways one solves twisty puzzles.</description>
  <comments>http://bramcohen.livejournal.com/66270.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/66035.html</guid>
  <pubDate>Fri, 17 Apr 2009 23:43:25 GMT</pubDate>
  <title>CodeCon 2009 now streaming live</title>
  <link>http://bramcohen.livejournal.com/66035.html</link>
  <description>Live streaming of CodeCon 2009 is now up. It&apos;s linked from the &lt;a href=&quot;http://www.codecon.org/2009/&quot;&gt;CodeCon 2009 front page&lt;/a&gt;.&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/66035.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/65748.html</guid>
  <pubDate>Fri, 17 Apr 2009 01:03:39 GMT</pubDate>
  <title>CodeCon 2009 starting Tomorrow</title>
  <link>http://bramcohen.livejournal.com/65748.html</link>
  <description>&lt;a href=&quot;http://www.codecon.org/2009/&quot;&gt;CodeCon 2009&lt;/a&gt; starts tomorrow. We&apos;re just finishing up getting ready, and it&apos;s going to be great. See everybody there!&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/65748.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/65399.html</guid>
  <pubDate>Wed, 08 Apr 2009 19:42:36 GMT</pubDate>
  <title>I&apos;m twittering</title>
  <link>http://bramcohen.livejournal.com/65399.html</link>
  <description>I&apos;ve signed up for &lt;a href=&quot;http://twitter.com/bramcohen&quot; target=&quot;_blank&quot;&gt;a twitter account&lt;/a&gt;, and have been posting there a lot more than here. I also linked my Facebook and Twitter accounts, and started using bit.ly. The facebook reposts get a lot more comments, because I&amp;nbsp;have more friends there, and oh yeah, Twitter doesn&apos;t have comments yet. Please fix.&lt;br /&gt;&lt;br /&gt;In the future, I&apos;ll post headline links to all my blog posts on the twitter stream for all my regular blog posts, and continue to post here for thoughts which require more than one sentence to convey.&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/65399.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/65060.html</guid>
  <pubDate>Sun, 05 Apr 2009 17:13:10 GMT</pubDate>
  <title>The End is Nigh</title>
  <link>http://bramcohen.livejournal.com/65060.html</link>
  <description>Science fiction authors have dreams of the world&apos;s last days, and our distant descendants watching the sun flame out about four billion years from now. They&apos;re living in fantasy land. There&apos;s no way we&apos;re going to last even close to that long.&lt;br /&gt;&lt;br /&gt;You see, the sun is getting hotter as it approaches flameout, and the earth is slowing down in its spin on its axis as tidal forces drag it down. As the earth&apos;s spin slows down, the cycle between day and night will become longer. A mere billion years from now the earth will stop spinning completely, and the light side will turn into smolding embers while the dark side will become a truly frozen wasteland. Long before that the day/night cycle will become so long that peak daytime temperature will surpass the boiling point of water, causing moisture to get into the upper atmosphere and get blown away by the solar wind, depleting the oceans while cooking all the water-based life forms during the day.&lt;br /&gt;&lt;br /&gt;There is only one way to avoid this. We must force the earth&apos;s temperature down until the oceans freeze, thus stopping tidal forces and allowing the earth to continue with its current length of day/night cycle indefinitely and allowing us to live an extended, if slightly chilly, existence. Anyone opposed to this plan is engaged in strictly short term thinking.</description>
  <comments>http://bramcohen.livejournal.com/65060.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/64905.html</guid>
  <pubDate>Wed, 01 Apr 2009 15:33:25 GMT</pubDate>
  <title>Codecon</title>
  <link>http://bramcohen.livejournal.com/64905.html</link>
  <description>Remember that today&apos;s the last day to get the early bird discount to &lt;a href=&quot;http://codecon.org/2009/&quot;&gt;Codecon 2009&lt;/a&gt;, so if you haven&apos;t signed up yet, do it now.</description>
  <comments>http://bramcohen.livejournal.com/64905.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/64635.html</guid>
  <pubDate>Fri, 27 Mar 2009 19:14:54 GMT</pubDate>
  <title>Rotacubes</title>
  <link>http://bramcohen.livejournal.com/64635.html</link>
  <description>&lt;lj-embed id=&quot;4&quot; /&gt;&lt;br /&gt;This is the Rotacubes puzzle, a collaboration between me and Oskar van Deventer. Nobody could make out how this one worked from pictures/text descriptions, so here&apos;s a video.</description>
  <comments>http://bramcohen.livejournal.com/64635.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/64486.html</guid>
  <pubDate>Mon, 23 Mar 2009 19:36:27 GMT</pubDate>
  <title>CodeCon 2009 Program Posted</title>
  <link>http://bramcohen.livejournal.com/64486.html</link>
  <description>The Program to &lt;a href=&quot;http://www.codecon.org/2009/index.html&quot;&gt;CodeCon 2009&lt;/a&gt; is now up, and &lt;a href=&quot;http://www.codecon.org/2009/registration.html&quot;&gt;registration&lt;/a&gt; is at the early rate of $75 for all three days until April 1st, after which the cost goes up.&lt;br /&gt;&lt;br /&gt;An explanation of CodeCon, from the site:&lt;br /&gt;&lt;blockquote&gt;CodeCon is a conference of working demonstrations. Three days of quick presentations of actual working code, shown by people who wrote them, all for under $100. Past highlights include early presentations of BitTorrent, PGP, and SiteAdvisor.&lt;/blockquote&gt;&lt;br /&gt;Presentations this year include:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;BioHack! Track:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#DIYSynthenticBio&quot;&gt;DIY Synthetic Biology&lt;/a&gt; - From Design to Construction with New Model Organisms &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#HomebrewGeneticTesting&quot;&gt;Homebrew Genetic Testing&lt;/a&gt; - Read your own source code - at home! &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#KeikiGels&quot;&gt;Keiki Gels&lt;/a&gt; - Visualize DNA -- in a drinking straw! &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Code Track:&lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#BitTorrentDNA&quot;&gt;BitTorrent DNA&lt;/a&gt; - Effortless BitTorrent deployment &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#DistributedTrans&quot;&gt;Distributed Transaction Layer for Google App Engine&lt;/a&gt; - Transaction semantics across multiple entity groups for applications written in the Google App Engine &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#HeliosVoting&quot;&gt;Helios Voting&lt;/a&gt; - The first and only web-based voting system that enables voters to verify their vote and the overall tally with cryptographic certainty.&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#LibEvent&quot;&gt;Libevent&lt;/a&gt; - making fast asynchronous network programs portable &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#MozillaPork&quot;&gt;Pork&lt;/a&gt; - Largescale Automatic Rewriting of C++ &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#OneSwarm&quot;&gt;OneSwarm&lt;/a&gt; - privacy preserving peer-to-peer data sharing &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#ParallelWeb&quot;&gt;Parallel Web Browser&lt;/a&gt; - a web browser for handhelds &amp; multicore laptops &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#Switzerland&quot;&gt;Switzerland&lt;/a&gt; - a semi-P2P system for detecting forged and modified IP packets between clients &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#TahoeLAFS&quot;&gt;Tahoe, the Least-Authority Filesystem &lt;/a&gt; - a secure, decentralized, fault-tolerant storage network &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#TorFlow&quot;&gt;TorFlow&lt;/a&gt; - A Python-based Tor Research Toolset &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#TrendProf&quot;&gt;Trend Profiler / trend-prof&lt;/a&gt; - Finding performance surprises (super-linearities) in C / C++ code based on trends in the runs on different size inputs. &lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.codecon.org/2009/program.html#TyphonScream&quot;&gt;Typhon / Scream&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;To learn more about CodeCon, you can look at the sites from previous years:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codecon.org/2006/&quot;&gt;2006&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codecon.org/2006/&quot;&gt;2005&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codecon.org/2006/&quot;&gt;2004&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codecon.org/2006/&quot;&gt;2003&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.codecon.org/2006/&quot;&gt;2002&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://digg.com/submit?url=http%3A%2F%2Fbramcohen.livejournal.com%2F64486.html&quot;&gt;Digg this!&lt;/a&gt;</description>
  <comments>http://bramcohen.livejournal.com/64486.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/64012.html</guid>
  <pubDate>Sun, 01 Mar 2009 08:04:09 GMT</pubDate>
  <title>version control tidbits</title>
  <link>http://bramcohen.livejournal.com/64012.html</link>
  <description>I &lt;a href=&quot;http://n2.nabble.com/Bram-Cohen-speaks-up-about-patience-diff-td2277041.html&quot;&gt;wrote up an explanation&lt;/a&gt; of when patience diff gives significantly different results, and why they&apos;re important.&lt;br /&gt;&lt;br /&gt;The trickiest case for line based merging is when the number of blank lines between two functions changes. Were the new lines inserted at the beginning or the end? If two different people add a single line, should that clean merge? What if one person adds one blank line and another person adds two? Should that be a conflict of one blank line on one side and two on another, or a conflict of no lines on one side and a blank line on the other with a single line added, or no conflict and merge to the original length plus two, or no conflict and merge to the original length plus three? How about if a function was added in the middle of a section of blank lines and the number of blank lines after it was changed - should the new lines be at the end of the new function or the beginning of the old one? What if lines were removed, where should they have been removed from?&lt;br /&gt;&lt;br /&gt;There aren&apos;t clear answers to these questions. Any answer you come up with will involve some tradeoffs, and it&apos;s a judgement call what behavior really is best. The one clear lesson is that you shouldn&apos;t change the number of blank lines between functions willy-nilly, because it will confuse the version control system.&lt;br /&gt;&lt;br /&gt;A difficult distributed merge scenario which hasn&apos;t been written up anywhere is one I like to call the circular staircase. Three different branches are all made off of trunk, and all make changes to the same section of code. Think of the branches as all sitting around a circular table. Each branch then simultaneously pulls the most recent version of the branch to their right, and resolves the conflict in favor of their version. This situation is weird because any two of the three branches will now do a clean merge together, but pulling in the third one should cause a conflict. I won&apos;t give the full explanation as to why that is here, because my point is that the scenario is completely counterintuitive and inscrutable. As soon as the relationship between branches ceases to be a tree, it becomes impossible for users to understand what&apos;s going on. The lesson is that you should have clear relationships between your branches, and not do anything goofy. At this point I&apos;m in favor of the version control system not allowing you to do goofy things, and keep track of the coherent relationships between branches which you do have. I have more ideas than were given in my last post on this subject, but more on that at a later time.&lt;br /&gt;&lt;br /&gt;Another interesting case is the following:&lt;br /&gt;&lt;pre&gt;
     a
    / \
   b   c
  / \ /
 c   b
  \ /
   ?
&lt;/pre&gt;&lt;br /&gt;If we want to support cherry-picking, we have a problem here. On the one hand, the change to c has already been applied to and rejected from on the right hand side. On the other hand, the change to c on the left happened &apos;after&apos; the change on the right, so by the staircase criterion the new value should be c.&lt;br /&gt;&lt;br /&gt;I think that if you want to support implicit cherry-picking you need to suck it up and accept that this scenario creates the weird action at a distance of merging to b. I don&apos;t really want to argue it all that much though, because the horse has already been beaten to death, and basically nobody in the real world is asking for implicit cherry-picking, because nobody has proposed a good UI for it, and nobody other than a handful of experts understands how it behaves, and because it directly conflicts with implicit undo.</description>
  <comments>http://bramcohen.livejournal.com/64012.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/63946.html</guid>
  <pubDate>Wed, 25 Feb 2009 18:00:27 GMT</pubDate>
  <title>Trigears video</title>
  <link>http://bramcohen.livejournal.com/63946.html</link>
  <description>&lt;lj-embed id=&quot;3&quot; /&gt;&lt;br /&gt;When I&amp;nbsp;last posted about this several people guessed that it&apos;s easy. It&apos;s not, it&apos;s quite difficult, and the logic behind the solution is very interesting. It also has no planar equivalent.&amp;nbsp;</description>
  <comments>http://bramcohen.livejournal.com/63946.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/63672.html</guid>
  <pubDate>Tue, 17 Feb 2009 20:10:07 GMT</pubDate>
  <title>Bram explains unix time</title>
  <link>http://bramcohen.livejournal.com/63672.html</link>
  <description>&lt;pre style=&quot;margin: 0px; padding: 0px; display: block;&quot;&gt;&lt;lj-embed id=&quot;2&quot; /&gt;

&lt;/pre&gt;Here&apos;s me explaining unix time. A thought on appearing on TV - if somebody puts a video camera on you, it&apos;s best to babble on about all your thoughts on a matter without concern for time, because they&apos;re going to edit it down later.&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/63672.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/63411.html</guid>
  <pubDate>Fri, 13 Feb 2009 23:20:30 GMT</pubDate>
  <title>CodeCon deadline coming up</title>
  <link>http://bramcohen.livejournal.com/63411.html</link>
  <description>The deadline for CodeCon submissions is &lt;a href=&quot;http://www.codecon.org/2009/cfp.txt&quot;&gt;coming up this sunday&lt;/a&gt;! If you&apos;ve got a cool project with actual working code, you should submit. CodeCon is designed to only require a few minutes to put together a submission if you&apos;ve got something to show, and the amount of time to present is short enough that all you need to do is cover your project to fill it. Get your submissions in!&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/63411.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/63031.html</guid>
  <pubDate>Wed, 11 Feb 2009 01:12:04 GMT</pubDate>
  <title>Corrections</title>
  <link>http://bramcohen.livejournal.com/63031.html</link>
  <description>Believe it or not, you can&apos;t believe everything you read on wikipedia.&lt;br /&gt;&lt;br /&gt;I currently live in the San Francisco area.&lt;br /&gt;&lt;br /&gt;I have three children.&lt;br /&gt;&lt;br /&gt;I&apos;ve never heard of badger and badger.&lt;br /&gt;&lt;br /&gt;Also, the article about my asperger&apos;s said that I&amp;nbsp;was in college for one year. I&amp;nbsp;was actually there for two years, but flunked most of my classes my last term (I knew I&amp;nbsp;was leaving and never wanted to come back, so didn&apos;t see much point in doing any schoolwork).</description>
  <comments>http://bramcohen.livejournal.com/63031.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/62851.html</guid>
  <pubDate>Thu, 29 Jan 2009 18:22:44 GMT</pubDate>
  <title>Sea Snakes</title>
  <link>http://bramcohen.livejournal.com/62851.html</link>
  <description>Earlier this week (I&amp;nbsp;think it was on Monday) I&amp;nbsp;was riding the ferry to work, and saw a sea snake in the water. It was a couple feet long (my guess would be about four, but it was at a distance so that could be way off) and black. A minute or so later I&amp;nbsp;saw another one, and then got the amazing site of a cluster of what I&apos;m guessing was over a hundred of them. They were arranged into approximately parallel groupings in regions, with an overall effect of looking like a line drawing of an octopus.&lt;br /&gt;&lt;br /&gt;I hadn&apos;t seen a sea snake in the water here before, so didn&apos;t think much of it, but then I&amp;nbsp;looked it up online and it turns out hardly anyone else has seen them up here either! There&apos;s a species of sea snake native to California, but they live way down south, and aren&apos;t even all that common down there. Sitings up here are extremely rare.&lt;br /&gt;&lt;br /&gt;Unfortunately I&amp;nbsp;didn&apos;t take a picture. Were I&amp;nbsp;used to using my phone camera and had any idea how unusual it was to see that I&apos;d definitely have taken some footage.</description>
  <comments>http://bramcohen.livejournal.com/62851.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/61952.html</guid>
  <pubDate>Fri, 16 Jan 2009 00:22:17 GMT</pubDate>
  <title>Linked Cranks Puzzle</title>
  <link>http://bramcohen.livejournal.com/61952.html</link>
  <description>&lt;lj-embed id=&quot;1&quot; /&gt;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/61952.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://bramcohen.livejournal.com/61845.html</guid>
  <pubDate>Tue, 13 Jan 2009 23:56:17 GMT</pubDate>
  <title>CodeCon Call For Papers out</title>
  <link>http://bramcohen.livejournal.com/61845.html</link>
  <description>For everybody who&apos;s been wondering and long anticipating when the next CodeCon is going to happen, here&apos;s the announcement:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;

CodeCon 2009
April 17-19, 2009
San Francisco CA, USA
www.codecon.org

Call For Presentations

CodeCon is the premier showcase of cutting edge software development. It
is an excellent opportunity for programmers to demonstrate their work and
keep abreast of what&apos;s going on in their community.

All presentations must include working demonstrations, ideally accompanied
by source code. Presentations must be done by one of the active developers
of the code in question. We emphasize that demonstrations be of *working*
code.

We hereby solicit papers and demonstrations.

    * Papers and proposals due: February 15, 2009
    * All Authors notified: March 1, 2009

Possible topics include, but are by no means restricted to:

    * community-based web sites - forums, weblogs, personals
    * development tools - languages, debuggers, version control
    * file sharing systems - swarming distribution, distributed search
    * security products - mail encryption, intrusion detection, firewalls
    * malware analysis - detection, compensation, and mitigation of
      emerging threats

--

As a new feature this year, CodeCon will be presenting a Biohack! track.
While we will continue our tradition of presenting only one talk at a
time, a portion of one of the days&apos; talks will be reserved for interesting
biotechnology hacking projects. A key requirement for these presentations
is ease of reproduction with minimal access to expensive laboratory
equipment.

Example topics include:

    * Purifying DNA using common household items
    * Developing genetically-modified bacteria in a kitchen laboratory
    * Using specially-designed software to assist in bioengineering
    * The use of simple bioengineering techniques to solve real-world
      problems.

Ideal Biohack! Track submissions will have a strong emphasis on the
&amp;quot;hack&amp;quot; portion of the talk -- in the last few years, there has been a
strong growth in the community of biology hackers; we aim to bring these
hackers together to discuss their techniques for inexpensive, at home
experimentation in biological engineering research.

--

Presentations will be 30 minutes long, with an additional 15 minutes
allocated for Q&amp;amp;A. Overruns will be truncated.

Submission details:

Submissions are being accepted immediately. Acceptance dates are
February 7th and March 1st. After the first acceptance date, submissions
will be either accepted, rejected, or deferred to the second acceptance
date.

The conference language is English.

The conference venue is open to all ages.

Ideally, technical demonstrations should be usable by attendees with
802.11b connected devices either via a web interface, or locally on
Windows, UNIX-like, or MacOS platforms. Cross-platform applications are
most desirable. Biohacking demonstrations should be viewable with a
presenter-provided camera, or prepared movies for projection.


To submit, send mail to submissions-2009@codecon.org including the
following information:

    * Project name
    * Code track or Biohack! track
    * url of project home page
    * tagline - one sentence or less summing up what the project does
    * names of presenter(s) and urls of their home pages, if they have any
    * one-paragraph bios of presenters, optional, under 100 words each
    * project history, under 150 words
    * what makes the project novel -- how it differs from similar projects
    * what will be done in the project demo, under 200 words
    * slides to be shown during the presentation, if applicable
    * future plans

General Chairs: Jonathan Moore and Bram Cohen
Program Chair: Jered Floyd and Len Sassaman

Program Committee:

    * Jon Callas, PGP, USA
    * Bram Cohen, BitTorrent, USA
    * Roger Dingledine, The Tor Project, USA
    * Jered Floyd, Permabit, USA
    * Ben Laurie, Google, UK
    * Nick Mathewson, The Tor Project, USA
    * David Molnar, University of California, Berkeley, USA
    * Jonathan Moore, Mosuki, USA
    * Meredith L. Patterson, Osogato, USA
    * Andrew S. Peek, Integrated DNA Technologies, USA
    * Len Sassaman, Katholieke Universiteit Leuven, BE
    * Cliff Skolnick
    * Paul Syverson, Naval Research Laboratory, USA
    * [Others may be added]

Sponsorship:

If your organization is interested in sponsoring CodeCon, we would love to
hear from you. In particular, we are looking for sponsors for social meals
and parties on any of the three days of the conference, as well as
sponsors of the conference as a whole and donors of door prizes. If you
might be interested in sponsoring any of these aspects, please contact the
conference organizers at codecon2009@codecon.org

Press policy:

CodeCon provides a limited number of passes to qualifying press.
Complimentary press passes will be evaluated on request. Everyone is
welcome to pay the low registration fee to attend without an official
press credential.

Questions:

If you have questions about CodeCon, or would like to contact the
organizers, please mail codecon2009@codecon.org. Please note this address
is only for questions and administrative requests, and not for workshop
presentation submissions.

&lt;/pre&gt;&lt;br /&gt;</description>
  <comments>http://bramcohen.livejournal.com/61845.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
</channel>
</rss>
