<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Hacker News 100</title>
    <link>http://news.ycombinator.com</link>
    <description>Hacker News stories with a score above 100</description>
    <item>
      <title> Chris's Wiki :: blog/linux/SystemdWhyItWon </title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7222313'&gt;" Chris's Wiki :: blog/linux/SystemdWhyItWon "&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://utcc.utoronto.ca/~cks/space/blog/linux/SystemdWhyItWon'&gt;http://utcc.utoronto.ca/~cks/space/blog/linux/SystemdWhyItWon&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;Recently, an article by Rich Felker called &lt;a href="http://ewontfix.com/14/"&gt;Broken by design:
systemd&lt;/a&gt; has been making the rounds.
I have a number of things to say about this article but today
I want to talk about one specific issue it brings up, which is
systemd's novelty (or lack thereof) and why it is succeeding.
To start with, here is the relevant quote from Felker's article:&lt;/p&gt;
 None of the things systemd "does right" are at all
revolutionary. They've been done many times before. DJB's
daemontools,
runit, and Supervisor, among others, have solved the "legacy init
is broken" problem over and over again (though each with some of
their own flaws). Their failure to displace legacy sysvinit in major
distributions had nothing to do with whether they solved the problem,
and everything to do with marketing. [...]
 
&lt;p&gt;This is wrong on several levels. To start with and as usual, &lt;a href="/~cks/space/blog/tech/SocialProblemsMatter"&gt;social
problems are the real problems&lt;/a&gt;. In
specific, &lt;strong&gt;none of these alternate init systems did the hard work
to actually become a replacement init system for anything much&lt;/strong&gt;.
Anyone can write an init system, especially a partial one (I did
once, long ago). Getting it adopted by people is the hard part and
none of these alternatives tackled that effectively (if they did
so at all, and some of them certainly didn't). And as Felker admits,
each of these theoretical alternatives have flaws of their own.&lt;/p&gt;
&lt;p&gt;(Note that this is not a criticism of those alternate init systems. I
don't think any of them have really been developed with replacing SysV
init in Linux distributions or elsewhere as a goal. DJB daemontools
certainly wasn't; I believe that DJB's attitude towards it, as towards
more or less everything he's developed, can be summed up as 'I showed
you the way, what you do with it is up to you'.)&lt;/p&gt;
&lt;p&gt;The reason systemd has succeeded in becoming an SysV init replacement
is simple: it did the work. Not only did it put together &lt;a href="/~cks/space/blog/linux/SystemdRight"&gt;a lot
of good ideas&lt;/a&gt; regardless of their novelty or lack
thereof but its developers put in the time and effort to convince
people that it was a good idea, the right answer, a good solution
to problems and so on. Then they dealt with lots and lots of practical
concerns, backwards compatibility, corner cases, endless arguments,
and so on and so forth. I want to specifically mention here that
one of the things the systemd people did was &lt;em&gt;write extensive
documentation&lt;/em&gt; on systemd's design, how to configure and operate
it, and what sorts of neat things you can do with it. While this
documentation is not perfect, most init systems are an order of
magnitude less well documented.&lt;/p&gt;
&lt;p&gt;(I am sure that in some quarters it's popular to believe that
Lennart Poettering bulldozed the Fedora technical people into
adopting his new thing. I do not think that the Fedora technical
people are that easily overrun (or that impressed by Poettering,
especially after PulseAudio), and for that matter at least some
of the Debian technical people feel that systemd is the best
option despite having looked deeply at the alternatives (&lt;a href="https://lists.debian.org/debian-ctte/2013/12/msg00234.html"&gt;cf&lt;/a&gt;).)&lt;/p&gt;
&lt;p&gt;You can call this marketing if you want, although I don't think that
that's a useful label for what is really happening. I call this 'trying'
versus 'not trying'. If you don't try hard and work hard to become a
replacement init system, it should be no surprise when you don't.&lt;/p&gt;
&lt;p&gt;(In particular, note that SysV init is not a particularly bad init
system so it should be no surprise when it is not particularly easy
to displace.)&lt;/p&gt;
&lt;p&gt;Beyond that I have some degree of experience with one of these
alternate init systems, specifically DJB daemontools, and I've
looked at the documentation for the other two. Speaking as a system
administrator, &lt;a href="/~cks/space/blog/linux/SystemdRight"&gt;&lt;em&gt;systemd solves my problems better&lt;/em&gt;&lt;/a&gt;.
The authors of systemd have looked at problems that are not solved
by SysV init and come up with real solutions to them. Many of these
problems are not solved by any of the alternatives that Felker put
forward. In specific, often the alternatives assume (or require)
cooperative daemon processes in order to fully realize their benefits;
systemd is deliberately designed so that it does not and can fully
manage even existing obstreperous Unix daemons with their willful
backgrounding and other inconvenient behaviors.&lt;/p&gt;
&lt;p&gt;(I don't know the field of Linux and Unix init-like systems well enough
to say whether or not features like socket activation and clever use of
control groups are genuinely novel in systemd or simply the first time
I've become aware of them. They do feel novel.)&lt;/p&gt;
&lt;p&gt;Since that may not be clear, let me be plain: &lt;strong&gt;systemd is a better init
system than the alternatives&lt;/strong&gt;. It does more to solve real problems and
it does it better. That alone is a good reason for it to win in the
practical world, the one where people care about getting stuff done.
That systemd is not necessarily novel or the first to come up with the
ideas that it embodies is irrelevant to this. &lt;strong&gt;Implementation matters
more than ideas&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;(Arguably it's an advantage that systemd feels no urge to reinvent
different wheels when perfectly decent ones exist.)&lt;/p&gt;
&lt;p&gt;PS: Please note that the reason that Unix itself succeeded is not its
ideas alone, it is that Unix implemented them very well. A number of
Unix's ideas are both great and novel, but a bad implementation would
have doomed the whole enterprise. The fate of good ideas with a bad
implementation is to be reimplemented elsewhere, cf the Xerox Alto and
for that matter the Apple Lisa.&lt;/p&gt;
&lt;p&gt;PPS: Also note that the one serious competitor to systemd is Upstart,
which is also the product of a great deal of work and polishing.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 11 Feb 2014 19:29:20 -0800</pubDate>
      <link>http://utcc.utoronto.ca/~cks/space/blog/linux/SystemdWhyItWon</link>
      <guid>http://utcc.utoronto.ca/~cks/space/blog/linux/SystemdWhyItWon</guid>
    </item>
    <item>
      <title>5 Ways To Burn Out Programming</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7222666'&gt;"5 Ways To Burn Out Programming"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://blog.braegger.pw/5-ways-to-burn-out-programming/'&gt;http://blog.braegger.pw/5-ways-to-burn-out-programming/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;I've only recently come out of my burnout, despite it happening years ago. It sucks. It sucks bad. But looking back, I can see many of the causes crystal clearly, that weren't so apparent at the time. Here's a list:&lt;/p&gt;
&lt;h3&gt;1. Think about your project and only the project&lt;/h3&gt;
&lt;p&gt;Let's face it. Business wants you to make the best product you can "for our customers". You put off fun features for the sake of hitting a deadline. You plan and analyze and break a project into sets of deliverables that then must be coded by a monkey (you). You demo it, gather feedback, iterate. All without thinking anything for yourself.&lt;/p&gt;
&lt;p&gt;But newsflash: you started programming because you thought it was fun, why not keep programming because it's fun? Take that little extra time to put in a feature you want. Challenge yourself a little bit in doing something you didn't think you could. Show it to everyone you know, and don't just ask for feedback, but brag about what you've done.&lt;/p&gt;
&lt;h3&gt;2. Have a negative attitude toward everything.&lt;/h3&gt;
&lt;p&gt;You know Docker? It sucks. Who would trust their production environment to a new, unstable, toy. Go? Do I look like I want to write every library myself? Everything I need is already in PyPI. This project I'm working on is so caught up in office politics, it's never going to work. Jenkins? 2008 wants their tech back.&lt;/p&gt;
&lt;p&gt;It's really easy to fall into the "being critical" trap. It's easy to tell other people what the "wrong" choice is. I imagine it's because as software engineers, our job is to find faults in our applications and fix them. And if we don't find them, someone else finds them for us.&lt;/p&gt;
&lt;p&gt;But I don't think we need to be negative about our job, decisions that are being made (even if it's not our decision) and what we're working on. Some of the best projects I've worked on worked out that way because we had a great, positive team. We enjoyed showing up every day to work, told each other when we did awesome things, held back heavy-handed criticism and phrased it in a productive manner.&lt;/p&gt;
&lt;p&gt;So you're an uber expert in Java + Spring + Hibernate. Nobody can touch your python skillz. Every personal project you do should be in these, because all that matters is the business side of things, right?&lt;/p&gt;
&lt;p&gt;Wrong.&lt;/p&gt;
&lt;p&gt;While it definitely makes good business sense, you should prototype, play around, and become an expert in new tech, even if it's unvetted. While this might seem like obvious advice (it's repeated alllll the time), it becomes a lot harder to do as you grow more experienced.&lt;/p&gt;
&lt;h3&gt;4. Switch jobs often&lt;/h3&gt;
&lt;p&gt;Otherwise known as "chasing butterflies". Getting bored with what you're working on? Have an itch? Time to dust off that resume!&lt;/p&gt;
&lt;p&gt;This is bad, bad, bad.&lt;/p&gt;
&lt;p&gt;When you have several short employments, it can usually help boost your salary quite a bit, but you are robbing yourself of:&lt;/p&gt;
 Growing in the company (developer -&amp;gt; manager -&amp;gt; director) 
Gaining an expertise in a specific area. Considering it takes 4-6 years for a PhD student to get their PhD, that's a lot of time you need for learnin. 
You are having to start from scratch often. 
If you are a good developer, you have to "prove" yourself (people listen to you) all over again.
 &lt;p&gt;So how do these contribute to burnout? Your career stagnates, you don't develop your skills as deeply (only breadth), people dont trust you'll stay employed for a while, and you're constantly having to prove yourself.&lt;/p&gt;
&lt;h3&gt;5. Work long hours, ignore your life&lt;/h3&gt;
&lt;p&gt;"You don't have to work a lot of hours, but some people choose to." You want to impress your boss. Hell, you want to impress yourself. So you go die-hard to meet an impossible deadline. You delivered the project on time, with all the extra features you wanted. You are the hero. High fives all around. And if you're lucky, you'll get that bonus.&lt;/p&gt;
&lt;p&gt;That's great the first time. But how about the second. And the third. It's a bomb, and you dont know how short the fuse is.&lt;/p&gt;
&lt;h3&gt;Summary&lt;/h3&gt;
&lt;p&gt;In short, it's easy to burnout. Do these 5 things, and you can burnout too.&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Tue, 11 Feb 2014 21:28:31 -0800</pubDate>
      <link>http://blog.braegger.pw/5-ways-to-burn-out-programming/</link>
      <guid>http://blog.braegger.pw/5-ways-to-burn-out-programming/</guid>
    </item>
    <item>
      <title>The Day the Internet Didn&#8217;t Fight Back</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7223196'&gt;"The Day the Internet Didn&#8217;t Fight Back"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://bits.blogs.nytimes.com/2014/02/11/the-day-the-internet-didnt-fight-back/'&gt;http://bits.blogs.nytimes.com/2014/02/11/the-day-the-internet-didnt-fight-back/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Wed, 12 Feb 2014 00:31:03 -0800</pubDate>
      <link>http://bits.blogs.nytimes.com/2014/02/11/the-day-the-internet-didnt-fight-back/</link>
      <guid>http://bits.blogs.nytimes.com/2014/02/11/the-day-the-internet-didnt-fight-back/</guid>
    </item>
    <item>
      <title>IBM layoffs strike first in India; workers describe cuts as 'slaughter' and 'massive' :: Editor's Blog at WRAL Tech Wire</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7223582'&gt;"IBM layoffs strike first in India; workers describe cuts as 'slaughter' and 'massive' :: Editor's Blog at WRAL Tech Wire"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://wraltechwire.com/ibm-layoffs-strike-first-in-india-workers-describe-cuts-as-slaughter-and-massive-/13379415/'&gt;http://wraltechwire.com/ibm-layoffs-strike-first-in-india-workers-describe-cuts-as-slaughter-and-massive-/13379415/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
Updated Feb. 12, 2014 at 7:49 a.m.
&lt;h2&gt;IBM layoffs strike first in India; workers describe cuts as 'slaughter' and 'massive'&lt;/h2&gt;
&lt;!-- Needed a date here for Outbrain --&gt;
&lt;div&gt; &lt;p&gt;Published: 2014-02-11 11:34:00 &lt;br&gt;Updated: 2014-02-12 07:49:18&lt;/p&gt;
&lt;/div&gt;
&lt;!-- End Outbrain --&gt;
&lt;p&gt;By RICK SMITH, WRALTechWire Editor&lt;/p&gt;
&lt;br&gt;&lt;p&gt;&lt;span&gt;Research Triangle Park, N.C. &#8212; &lt;/span&gt;&lt;strong&gt;Dispatches from the firing line at IBM:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"People broke down after seeing the inhuman treatment. Laptops along&#160;with the cases were confiscated, so several employees were seen crying&#160;and exiting building carrying and balancing their personal belongings&#160;with their two hands."&#160;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"IBM STG INDIA is doing RA and it is very deep and numbers are huge."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Just heard from a colleague in Bangalore that job cuts there have begun. Workers asked to leave on the spot. He claims 6 out of 23 people in his department."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RESEARCH TRIANGLE PARK, N.C. -&lt;/strong&gt;&#160;IBM's latest $1 billion "rebalancing," as &lt;a href='http://wraltechwire.com/ibm-earnings-top-estimates-even-as-revenue-falls-short/13316043/'&gt;described by its CFO last month&lt;/a&gt;, is underway. And the first country hit is India, based on reports from Blue Blue workers there on Tuesday. The so-called "Resource Action" struck in the country where IBM reportedly employs its greatest number of workers.&lt;/p&gt;
&lt;p&gt;One employee describes the layoff process as a "slaughter."&lt;/p&gt;
&lt;p&gt;The business unit hit is the Systems Technology Group - IBM's troubled hardware group which is selling its low-end x86 server business to Lenovo for $2.3 billion.&lt;/p&gt;
&lt;p&gt;Workers were given little notice. Reads one note just sent to the union seeking to represent IBM workers:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Job cuts in India STG. .Announced today including&#160;managers.Asked to return laptops with in 2 hrs and leave premises."&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Other notes as cited below were much more detailed. All reflect sudden notices - and quick departures, with many reportedly being quite emotional.&lt;/p&gt;
&lt;p&gt;One analyst has estimated that IBM will cut 13,000 of its more than 434,000 workers, based on the amount of money set aside for the rebalancing IBM disclosed after another quarter of disappointing earnings. A similar action in 2013 led to some 3,500 job cuts in North America alone, with several hundred hitting IBM's North Carolina work force.&#160;&lt;/p&gt;
&lt;p&gt;Lee Conrad, head of union efforts to unionize IBMers, has received emails from workers as well as a reporter in India. The "RA" is expected to hit IBMers in North America as early as Feb. 19, based on internal speculation.&lt;/p&gt;
&lt;p&gt;"Still waiting here in the U.S.," Conrad wrote.&#160;&lt;/p&gt;
&lt;p&gt;IBMers have described the rebalancing as "Project Apollo." The 2013 action was called "Project Phoenix."&lt;/p&gt;
&lt;p&gt;WRALTechWire has reached out to IBM for comment but as of early Wednesday had received no response.&#160;&lt;/p&gt;
&lt;p&gt;Given IBM's importance to the company both as a market for its business and the number of employees based there, Conrad said the cuts starting first in that country came as an unexpected development.&lt;/p&gt;
&lt;p&gt;"I am a bit surprised, but given it is STG it was expected," he said.&#160;&lt;/p&gt;
&lt;p&gt;One email from India &#160;is printed in full in order to capture the atmosphere of what took place. Acronyms refer to various IBM work units, except TP which is believed to refer to employee ThinkPad computers. Bangalore is the headquarters for IBM's India-based operations.&#160;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;"Slaughter House"&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;"STG Bangalore literally turned into a slaughter house today.&lt;/p&gt;
&lt;p&gt;"Several employees were called to a meeting and RA'd.&lt;/p&gt;
&lt;p&gt;"Their TPs were&#160;confiscated and they were asked to vacate premises immediately.&lt;/p&gt;
&lt;p&gt;"Severance package was on an average 3 months basic component of&#160;salary, which is like 6 weeks full pay.&lt;/p&gt;
&lt;p&gt;"RA per department as on today&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SRDC 40%&lt;/li&gt;
&lt;li&gt;Processors 15%&lt;/li&gt;
&lt;li&gt;SRAM 80%&lt;/li&gt;
&lt;li&gt;SSE Just began, final numbers not available&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;"RAs expected to last till friday.&lt;/p&gt;
&lt;p&gt;"The fear is that HCM might be wiped&#160;off totally in a day or two. EDA and methodology numbers not yet&#160;available"&lt;/p&gt;
&lt;p&gt;"People broke down after seeing the inhuman treatment.&lt;/p&gt;
&lt;p&gt;"Laptops along&#160;with the cases were confiscated, so several employees were seen crying&#160;and exiting building carrying and balancing their personal belongings&lt;br&gt;with their two hands"&lt;/p&gt;
&lt;p&gt;Two posts at the Alliance website also referenced layoffs at Bangalore, which is known as India's "Silicon Valley."&lt;/p&gt;
&lt;p&gt;IBM employs more than 100,000 people across India, according to India media reports. IBM no longer discloses employee numbers by location.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;"RAs Started in Bangalore"&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Three other posts give insight into what's happening in Bangalore:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;"IBM today had a massive layoff in STG bangalore more than 40%&#160;staff was let go off in a single day. Be it PBC 1 or 2 doesnot matter&#160;you are just asked to leave IBM premises by immediate effect. I fail&#160;to understand how joB cut will help management to achieve 20 EPS. The&#160;upper executives lack vision and clarity to restructure business&#160;process. Good bye to ibm hopefully will be in better place than ibm."&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;(Note: PBC refers to personal evaluations. EPS references IBM's target of delivering $20 per share in earnings by 2015.)&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;"RAs started in STG Bangalore, hearing that large numbers impacted. Will keep you posted on the details as i get them. the job market is reasonably good outside and the average experience here is about 6-7 years.people are not too worried. most were anyway sick of the company and its junk policies. &lt;strong&gt;-Bangalore RAs started-&lt;/strong&gt;"&lt;/li&gt;
&lt;li&gt;"People were reacting to the sale of semiconductor business news rather harshly, well wishers were asking me when was I planning to leave IBM, and the others sarcastically asked me what am I still doing here in STG. Felt very embarrassed walking in the corridor today. The general perception here is that if you are still with IBM, it is because you did not find a job elsewhere. Phew !! that just means to say IBM STG is being considered the worst place to be at this time. We all at STG India would like to express solidarity with the IBM USA work force preparing for yet another RA in the coming weeks. Rest assured we do not feel any better being employed with IBM either. The flood gates are opening and I anticipate that we will lose all our above average work force in the next 3 months. Good luck to you all, I am sure there is life outside of IBM. bye for now, time to update my resume, keep in touch. &lt;strong&gt;-STG INDIA-&lt;/strong&gt;"&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The second poster is referring to reports that IBM is looking to sell or find a partner for its semiconductor business.&lt;/p&gt;
&lt;p&gt;IBM still employs some 9,500 people across North Carolina. Of those, some 2,000 would be transferred to Lenovo if government regulators approve the x86 deal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&#160;&lt;/p&gt;
&lt;p&gt;&#160;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;WRAL Tech Wire any time:&lt;/em&gt; &lt;a href="https://twitter.com/WRALTechWire"&gt;Twitter,&lt;/a&gt; &lt;a href="http://www.facebook.com/WRALTechWire"&gt;Facebook&lt;/a&gt;&lt;/p&gt;Copyright 2014 WRAL Tech Wire. All rights reserved.
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 02:45:00 -0800</pubDate>
      <link>http://wraltechwire.com/ibm-layoffs-strike-first-in-india-workers-describe-cuts-as-slaughter-and-massive-/13379415/</link>
      <guid>http://wraltechwire.com/ibm-layoffs-strike-first-in-india-workers-describe-cuts-as-slaughter-and-massive-/13379415/</guid>
    </item>
    <item>
      <title>Hemingway</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7223969'&gt;"Hemingway"&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 12 Feb 2014 05:29:50 -0800</pubDate>
      <link>http://www.hemingwayapp.com/</link>
      <guid>http://www.hemingwayapp.com/</guid>
    </item>
    <item>
      <title>I challenged hackers to investigate me and what they found out is chilling | PandoDaily</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7224006'&gt;"I challenged hackers to investigate me and what they found out is chilling | PandoDaily"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://pando.com/2013/10/26/i-challenged-hackers-to-investigate-me-and-what-they-found-out-is-chilling/'&gt;http://pando.com/2013/10/26/i-challenged-hackers-to-investigate-me-and-what-they-found-out-is-chilling/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;
 
 &lt;img src="http://pandodaily.files.wordpress.com/2012/08/adam-pix-book-jacket-2.jpeg?w=66"&gt;
 By &lt;a href="http://pando.com/author/penenberg/"&gt;Adam L. Penenberg&lt;/a&gt; &lt;br&gt;
 On October 26, 2013&lt;/p&gt;
 
&lt;p&gt;It&#8217;s my first class of the semester at New York University. I&#8217;m discussing the evils of plagiarism and falsifying sources with 11 graduate journalism students when, without warning, my computer freezes. I fruitlessly tap on the keyboard as my laptop takes on a life of its own and reboots. Seconds later the screen flashes a message. To receive the four-digit code I need to unlock it I&#8217;ll have to dial a number with a 312 area code. Then my iPhone, set on vibrate and sitting idly on the table, beeps madly.&lt;/p&gt;
&lt;p&gt;I&#8217;m being hacked &#8212; and only have myself to blame.&lt;/p&gt;
&lt;p&gt;Two months earlier I challenged Nicholas Percoco, senior vice president of SpiderLabs, the advanced research and ethical hacking team at Trustwave, to perform a personal &#8220;pen-test,&#8221; industry-speak for &#8220;penetration test.&#8221; The idea grew out of a cover story I wrote for Forbes some 14 years earlier, when I retained a private detective to investigate me, starting with just my byline. In a week he pulled up an astonishing amount of information, everything from my social security number and mother&#8217;s maiden name to long distance phone records, including who I called and for how long, my rent, bank accounts, stock holdings, and utility bills.&lt;/p&gt;
&lt;p&gt;The detective, Dan Cohn, owned and operated Docusearch, a website that trafficked in personal information, and at the time, he was charging $35 to dig up someone&#8217;s driving record, $45 for his bank account balances, $49 for a social security number, $84 to trace a mobile number, and $209 to compile his stocks, bonds, and securities. The site offered a simple clickable interface and Amazon-like shopping cart. It&#8217;s &lt;a href="http://www.docusearch.com/"&gt;still around today&lt;/a&gt;, boasting similar services. &#8220;Licensed Investigators for Accurate Results&#8221; reads the tag line, calling itself &#8220;America&#8217;s premier provider of on-line investigative solutions.&#8221;&lt;/p&gt;
&lt;p&gt;For Cohn, digging through what I had assumed was personal information, was less challenging than filling in a crossword puzzle. He was able to collect this amalgam of data on me without leaving the air-conditioned cool of his office in Boca Raton, Florida. In addition to maintaining access to myriad databases stuffed with Americans&#8217; personal information, he was a master of &#8220;pre-texting.&#8221; That is, he tricked people into handing over personal information, usually over the telephone. Simple and devilishly effective. When the story hit newsstands with a photo of Cohn on the cover and the eerie caption: &#8220;I know what you did last night,&#8221; it caused quite a stir. It was even read into the Congressional Record during hearings on privacy.&lt;/p&gt;
 
All it takes is a person or persons with enough patience and know-how to pierce anyone&#8217;s privacy &#8212; and, if they choose, to wreak havoc on your finances and destroy your reputation.
 
&lt;p&gt;A decade and a half later, and given the recent Edward Snowden-fueled brouhaha over the National Security Agency&#8217;s snooping on Americans, I wondered how much had changed. Today, about 250 million Americans are on the Internet, and spend an &lt;a href="http://www.businessnewsdaily.com/4718-weekly-online-social-media-time.html"&gt;average of 23 hours a week&lt;/a&gt; online and texting, with &lt;a href="http://www.poynter.org/latest-news/mediawire/210593/study-americans-spend-nearly-one-third-of-their-time-online-on-social-media/"&gt;27 percent of that&lt;/a&gt; engaged in social media. Like most people, I&#8217;m on the Internet, in some fashion, most of my waking hours, if not through a computer then via a tablet or smart phone.&lt;/p&gt;
&lt;p&gt;With so much of my life reduced to microscopic bits and bytes bouncing around in a netherworld of digital data, how much could Nick Percoco and a determined team of hackers find out about me? Worse, how much damage could they potentially cause?&lt;/p&gt;
&lt;p&gt;What I learned is that virtually all of us are vulnerable to electronic eavesdropping and are easy hack targets. Most of us have adopted the credo &#8220;security by obscurity,&#8221; but all it takes is a person or persons with enough patience and know-how to pierce anyone&#8217;s privacy &#8212; and, if they choose, to wreak havoc on your finances and destroy your reputation.&lt;/p&gt;
&lt;p&gt;I&#8217;ve never actually met Nick Percoco, which, for all he knows about me, might seem strange.&lt;/p&gt;
&lt;p&gt;Earlier this year I contacted him to pen&#160;&lt;a href="http://pandodaily.com/2013/01/21/think-youre-safe-at-starbucks-think-again/"&gt;a guest post&lt;/a&gt;&#160;for PandoDaily. In it, Percoco warned that unscrupulous people could potentially intercept your private messages and inject malevolent code into your computer over a coffee shop&#8217;s Wi-Fi. I liked how he wrote the piece. He didn&#8217;t hype the threat. Instead he laid out the facts, relayed some anecdotes from his work, and offered basic, actionable prescriptions.&lt;/p&gt;
&lt;p&gt;You can tell a lot about a person by the way he writes. As a journalism professor, I get to know my students&#8217; writing better than they know it themselves. And Percoco, through his prose, struck me as someone who was smart, well informed on security issues, and careful with what he said and how he said it. &#8220;Comp-sec,&#8221; as it&#8217;s called &#8211; short for computer security &#8211; is rife with&#160;&lt;a href="http://attrition.org/errata/charlatan/"&gt;charlatans&lt;/a&gt;. It often seems the more fame someone accrues in that world, the less he&#8217;s accomplished and even less he knows.&lt;/p&gt;
&lt;p&gt;For this particular job, trust would be vital. If I were to invite someone to wheedle his way into my life, sneak into my finances, sniff my email, capture my web surfing, maybe even break into my home, I had to be damn sure he and the people he worked with wouldn&#8217;t use this information for nefarious purposes.&#160;I checked up on Percoco and couldn&#8217;t find anything that reflected badly on his character.&lt;/p&gt;
 
Over the years [Percoco] has performed hundreds of pen-tests and physical break-ins, slipping into hospitals, insurance companies, manufacturers, magazine and newspaper companies, power companies, and many more.
 
&lt;p&gt;Percoco, 38, considers himself a white hat hacker, and has been breaking into companies (with their blessing) for 14 years. In what is perhaps the perfect metaphor for what he does and who he is, he lacks recognizable fingerprints, a quirk of nature, he assures. Once in Colombia, he says, he was denied entry into a building because the turnstile, equipped with a fingerprint identification pad, couldn&#8217;t get a fix on his digits. Percoco prides himself on having the skills of a black hat hacker while maintaining what he calls the highest ethical standards.&lt;/p&gt;
&lt;p&gt;Not only does he attack computer vulnerabilities, Percoco performs on-site intrusions. Over the years he has performed hundreds of pen-tests and physical break-ins, slipping into hospitals, insurance companies, manufacturers, magazine and newspaper companies, power companies, and many more &#8211; clients, he says, that he&#8217;s forbidden to reveal.&lt;/p&gt;
&lt;p&gt;Once, he says, he was hired to gain access to a hospital&#8217;s computer systems housed in a data center. Wandering the hallways, he followed the signs until he saw one for the IT department. It led him to a server room behind a glass door. Inside there was a woman printing out patient records. All Percoco had to do was knock and she let him in, no questions asked. He ambled over to a computer with a mouse and in a few clicks logged on as the systems administrator. Now he had access to patient records, and could have, if he&#8217;d wanted, taken down the entire network. The hospital&#8217;s chief information officer had wanted more resources for security. He got them.&lt;/p&gt;
&lt;p&gt;Percoco told me he was intrigued by my proposal because he and his team almost always investigate corporations, not individuals. He wondered aloud whether I would be easier or harder to attack than a corporation. Both he and I were eager to find out.&lt;/p&gt;
&lt;p&gt;In 1999, detective Dan Cohn&#8217;s most powerful weapons were a telephone and unmitigated gall. True to his word, exactly one week after he started my investigation, he faxed me a three-page summary of my life. It began with my base identifiers &#8211; full name, date of birth, social security number, home address &#8211; which he obtained from my credit report. Companies like Equifax claim they have protections in place to prevent against fraudsters, but Cohn told me he went through a reseller.&lt;/p&gt;
&lt;p&gt;Equipped with my credit header, Cohn had what he needed to access a Federal Reserve database listing my deposit accounts, some of which I had long forgotten &#8211; $503 at Apple Bank for Savings in an account held by a long-ago landlord as a security deposit; $7 in a dormant savings account at Chase Manhattan Bank; $1,000 in another Chase account. A few days later Cohn located my Merrill Lynch cash management account, which I had opened a few months earlier. He then had my checking and savings account balances, direct deposits from work, withdrawals, ATM visits, check numbers with dates and amounts, and the name of my broker. In addition to my finances, he also obtained utility bills and two unlisted phone numbers, which cataloged a bevy of long distance and local phone calls I had made.&lt;/p&gt;
&lt;p&gt;Armed with this information, Cohn could have easily mapped out my routines. He knew how much cash I withdrew from ATMs each week, how much Forbes deposited into my checking account twice a month, the cafes and restaurants I frequented, the monthly checks I wrote to a shrink. He possessed my latest phone bill and a list of long distance calls to and from my home, including late-night fiber-optic dalliances with a woman I was dating and who worked for an advertising agency and traveled a lot. Cohn also divined phone numbers of a few of my sources, including a couple of computer hackers who had told me of their black hat activities.&lt;/p&gt;
&lt;p&gt;While databases assisted him with my basic information, to secure the nitty-gritty detail of my life, he needed help, which he wrangled from the actual companies I did business with.&lt;/p&gt;
&lt;p&gt;Part of the deal I struck with Cohn required him to tell me exactly how he did what he did, but he held back&#160;when it came time to pony up. To fill in the gaps I contacted my phone company (Bell Atlantic, now Verizon), long distance phone provider (Sprint), and bank (Merrill Lynch), telling them what Cohn had done and demanding an explanation. Each, in turn, launched an investigation. With the results I went back to Cohn, who confirmed the information and added additional detail.&lt;/p&gt;
&lt;p&gt;Sprint informed me a Mr. Penenberg had called to inquire about my most recent bill. He posed as me, and had enough information to convince the customer service representative he was me. The caller had the operator run through the last couple of dozen calls I had made. It was a similar story with Bell Atlantic, only this time it was a Mrs. Penenberg who did the dirty deed.&lt;/p&gt;
 
He knew how much cash I withdrew from ATMs each week, how much Forbes deposited into my checking account twice a month, the cafes and restaurants I frequented, the monthly checks I wrote to a shrink.
 
&lt;p&gt;With Merrill Lynch, Cohn also phoned customer service. This time, however, he was relatively upfront. &#8220;Hi,&#8221; he said, &#8220;I&#8217;m Dan Cohn, a licensed state investigator conducting an investigation of an Adam Penenberg.&#8221; Later Cohn told me official-sounding words like &#8220;licensed&#8221; and &#8220;state&#8221; make him sound legit, as if he worked in law enforcement. Then he reeled off my social security number, birth date and address, which he had gleaned from my credit report, and, he told me later, &#8220;before I could get out anything more he spat out your account number.&#8221;&lt;/p&gt;
&lt;p&gt;Cohn wrote it down then told the helpful operator, &#8220;I talked to Penenberg&#8217;s broker, um, I can&#8217;t remember his name&#8230;&#8221;&lt;/p&gt;
&lt;p&gt;&#8220;Dan Dunn?&#8221; the Merrill operator asked.&lt;/p&gt;
&lt;p&gt;&#8220;Yeah, Dan Dunn,&#8221; Cohn repeated.&lt;/p&gt;
&lt;p&gt;Merrill&#8217;s minion then recited my balance, deposits, withdrawals, check numbers and amounts. &#8220;You have to talk in the lingo the bank people talk so they don&#8217;t even know they are being taken,&#8221; Cohn said, obviously pleased with himself.&lt;/p&gt;
&lt;p&gt;Such pretext calls are technically illegal under the Gramm-Leach-Bliley Act of 1999, at least if used to obtain financial data from individuals or financial institutions, but it&#8217;s rarely enforced and hard to catch.&lt;/p&gt;
&lt;p&gt;But I needn&#8217;t have worried, Cohn assured me. He promised he would never resell the information to anyone else. &#8220;Unlike an information broker, I won&#8217;t break the law,&#8221; he told me. &#8220;I turn down jobs, like if a jealous boyfriend wants to find out where his ex is living.&#8221;&lt;/p&gt;
&lt;p&gt;At the time, I thought this was an odd statement, strangely specific, which he had volunteered. What I didn&#8217;t know was that at the same time he was digging up dirt on me, Cohn was embroiled in a tragic case involving a stalker, who had paid Docusearch to locate his victim.&lt;/p&gt;
&lt;p&gt;According to &lt;a href="http://www.courts.state.nh.us/supreme/opinions/2003/remsb017.htm"&gt;court documents&lt;/a&gt;, on July 29, 1999, New Hampshire resident Liam Youens paid Docusearch for the social security number, home and work addresses for&#160;20-year-old Amy Lynn Boyer, another New Hampshire resident.&#160;Docusearch went through a subcontractor, Michele Gambino, who relied on pretexting. She called Boyer in New Hampshire, lying about who she was and why she was calling in a bid to trick Boyer into revealing her employment information. Gambino passed this information on to Docusearch, which provided it to Youens.&lt;/p&gt;
&lt;p&gt;A week later Youens drove to the dentist&#8217;s office in Nashua, New Hampshire, where Boyer worked. He waited in ambush while she got in her car and drove up beside her. Leaning out of his car, he put the barrel against her window. He called her name so that she would look up.&lt;/p&gt;
&lt;p&gt;Then he shot and killed her.&lt;/p&gt;
&lt;p&gt;Seconds later he turned the gun on himself.&lt;/p&gt;
&lt;p&gt;&#8220;Amy never knew it was coming,&#8221; her stepfather, Tim Remsberg, said in &lt;a href="http://www.cbsnews.com/8301-18559_162-175556.html"&gt;an interview&lt;/a&gt; with the tabloid news show, &#8220;48 Hours.&#8221;&lt;/p&gt;
&lt;p&gt;Youens, who was unemployed and lived with his mother, had been stalking Boyer for years, chronicling his obsessions on a web site. On it, he confessed that he had fallen in love with her in 8th grade. Later, after Boyer rebuffed his advances, he decided she must die. On the website, &#8220;48 Hours&#8221; reported, he foretold how he would kill her: &#8220;When she gets in, I&#8217;ll drive up to the car blocking her in, window to window. I&#8217;ll shoot her with my Glock.&#8221;&lt;/p&gt;
&lt;p&gt;Amy Boyer&#8217;s mother sued Docusearch, alleging that Cohn and his partner had invaded her daughter&#8217;s privacy and broke other laws when it assisted Youens in locating her while the online information broker claimed the information wasn&#8217;t private. After the case wound through the courts, the New Hampshire Supreme Court ruled that the lawsuit could proceed to a jury trial, and Cohn and Zeiss ended up settling with the family for &lt;a href="http://usatoday30.usatoday.com/tech/news/internetprivacy/2004-03-10-boyer-suit-settled_x.htm"&gt;a reported $85,000&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Afterward, Cohn promised, &#8220;Our policies and the way we do business has changed as a result.&#8221;&lt;/p&gt;
&lt;p&gt;After Nick Percoco and I hammered out the broad outlines of our project &#8211; his team would not break any laws, and they would leave my kids out of this &#173;&#8211;&#173; I signed a waiver (courtesy of Trustwave&#8217;s lawyers) that barred me from suing the company if my information ended up in the wrong hands. Percoco kept the timetable vague and frankly, after a month dragged into two, I almost forgot about it. But his team, comprised of security analyst Garret Picchioni, digital forensics specialist Josh Grunzweig, and hacker Matthew Jakubowski (Jaku), were anything but idle.&lt;/p&gt;
&lt;p&gt;Percoco didn&#8217;t tell me who my investigators would be, and even if he had told me in advance it wouldn&#8217;t have done me much good. Like most information security professionals who pen-test for a living, Picchioni and Grunzweig had taken steps to limit their online footprints. Google their names and you won&#8217;t find all that much, other than they have all given presentations at hacker conferences on highly technical topics.&lt;/p&gt;
&lt;p&gt;Garret Picchioni&#8217;s &lt;a href="https://twitter.com/Picchioni"&gt;Twitter bio&lt;/a&gt; says &#8220;Information Security Professional for {redacted}, Network Engineer, and resident pain in the ass&#8221; accompanied by a photo of South Park&#8217;s Cartman wearing a cheese hat. His &lt;a href="http://www.linkedin.com/pub/garret-picchioni/13/b83/118"&gt;LinkedIn profile&lt;/a&gt; also reveals little. He&#8217;s been in the information security business since 2004, authored an academic paper that analyzed more than 2.5 million anonymized passwords, took six years to graduate from the University of Arizona, where he majored in history and minored in information security). Meanwhile, SpiderLabs &#8220;has performed over a thousand incident investigations, thousands of penetration tests and hundreds of application security tests globally.&#8221;&lt;/p&gt;
&lt;p&gt;Josh Grunzweig is even more stealthy. His &lt;a href="https://twitter.com/jgrunzweig"&gt;Twitter bio&lt;/a&gt; is simply &#8220;malware reverser | beer drinker | hockey fan&#8221; and his &lt;a href="http://www.linkedin.com/profile/view?id=59092444&amp;amp;authType=NAME_SEARCH&amp;amp;authToken=DGTG&amp;amp;locale=en_US&amp;amp;srchid=75193731382209152141&amp;amp;srchindex=2&amp;amp;srchtotal=2&amp;amp;trk=vsrp_people_res_name&amp;amp;trkInfo=VSRPsearchId%3A75193731382209152141%2CVSRPtargetId%3A59092444%2CVSRPcmpt%3Aprimary"&gt;LinkedIn profile&lt;/a&gt; barely qualifies as a profile. He graduated from Rochester Institute of Technology with a degree in Applied Networking and System Administration, and minored in criminal justice. Some activities he listed are information security, snowboarding, running, movies, music, traveling, and grabbing a drink with friends.&lt;/p&gt;
&lt;p&gt;Of the three, Matthew Jakubowski, or &#8220;Jaku,&#8221; as he likes to be called, has the most Google juice. Last year he &lt;a href="http://www.youtube.com/watch?v=QyN-8CeNSZg"&gt;turned a dry erase marker into a tool&lt;/a&gt; that could pick a hotel lock in seconds flat. In the avalanche of media attention that followed, &lt;a href="http://www.nbcchicago.com/blogs/inc-well/unit-5-ethical-hacker-trustwave-177415001.html"&gt;he revealed&lt;/a&gt; that he could steal credit cards wirelessly using a radio identification reader without your having to pull your Mastercard out of your wallet. His Twitter bio warns, &#8220;Neque dicas, quid neque,&#8221; which in Latin means &#8220;Don&#8217;t tell me what to do.&#8221; According to his scant LinkedIn profile Jaku majored in &#8220;Sandwich Engineering&#8221; and minored in &#8220;Witch Hunting&#8221; at &#8220;College University.&#8221;&lt;/p&gt;
&lt;p&gt;Percoco told me they began the project by pulling up everything they could about me on the Web, sifting through my website and various writings, looking for anything that could point to potential vulnerabilities. They gleaned some interesting nuggets, including the type of computer I use (I&#8217;ve written that I&#8217;m an Apple aficionado), my home and work addresses (easily found through public records searches), and the location of the Pilates studio my wife, Charlotte, owns and operates. This helped them formulate a plan of attack.&lt;/p&gt;
&lt;p&gt;Here&#8217;s the strategy they sketched out (from the confidential report I was provided afterward):&lt;/p&gt;

&lt;p&gt;&lt;em&gt;After doing some initial research on Adam and his family, a preliminary game plan was created before traveling onsite that included both technical and physical (security) attacks on Adam.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The initial rough plan is outlined as follows and included multiple attack vectors as contingency plans:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Just rereading that feels weird. Even though I brought this on myself, I still marvel at how many attack vectors someone like me can provide any would-be attacker. Substitute your name for mine; your wife&#8217;s, husband&#8217;s, or partner&#8217;s business for my wife&#8217;s; your office locations for mine. How would you feel?&lt;/p&gt;
&lt;p&gt;SpiderLabs&#8217; three-member team failed at some of these tasks, like 1) breaking into my apartment, 2) cracking the security on my Time Warner cable modem, and 6) gaining access to my computer and office at NYU. Sneaking into my home would have necessitated coming through neighbors&#8217; apartments or trespassing through their yards, or climbing a fence at the courthouse down the street. One thing they did not want to do was violate any laws. Others, like 8) luring me to a malicious blog and 9) using my web designer to help them access my website, turned out to be unnecessary.&lt;/p&gt;
&lt;p&gt;Still, what they did end up doing is impressive. They flew to New York on August 20th to stake out my home and immediately ran into problems that an urban environment can present. Brooklyn Heights is saturated with Wi-Fi networks. The team sniffed 1200 of them within a tenth of a mile radius of my brownstone. The fact they knew I use Apple computers narrowed it down somewhat, since they determine that through their canvassing. But they couldn&#8217;t identify, with any certainty, which specific Wi-Fi network was mine, and they could run afoul of the law if they intercepted traffic from someone else&#8217;s.&lt;/p&gt;
&lt;p&gt;They then repaired to my wife&#8217;s Pilates studio, located 10 blocks away, and confronted similar wireless saturation. From the 2nd floor of a Barnes &amp;amp; Noble they could see through the studio&#8217;s side windows, which offers a limited view inside. While they had pictures of my wife they found online on her studio&#8217;s website &#8211; just typing that creeps me out &#8211; they couldn&#8217;t see her while she was working nor could they determine her work schedule.&lt;/p&gt;
 
One bench gave them a bird&#8217;s eye view of my front stoop if they looked through binoculars. From there they watched my wife and me come and go.
 
&lt;p&gt;As a result, they hatched a plan for a &#8220;client-side attack.&#8221; A female friend of Jaku, the hacker, signed up for a Pilates group class at my wife&#8217;s studio. Since Charlotte only teaches private sessions at Streamline (although she runs a class at another studio she operates, but it has a private membership) the friend enrolled in an introductory class taught by one of the other instructors. Before leaving she left behind a large purple flash drive in a changing room. The SpiderLab&#8217;s team hoped an instructor would find it and plug it into the studio&#8217;s computer in an attempt to identify the owner. The flash drive held various payloads titled &#8220;Resume&#8221; but would actually install a remote backdoor on the system upon opening of the file and &#8220;phone home&#8221; to the team.&lt;/p&gt;
&lt;p&gt;No one, however, plugged the thumb drive into the studio&#8217;s computer. A few days later Jaku took the decoy back to the Pilates studio for another session, this time equipped with another flash drive. After the class was over the decoy informed the instructor that she had a job interview shortly after class, and asked if she could print out her resume, which was located on the flash drive. What the team didn&#8217;t know was that the studio runs an old version of Apple&#8217;s operating system &#8211; so old, in fact, that the hacker program Jaku coded couldn&#8217;t execute its nefarious deeds.&lt;/p&gt;
&lt;p&gt;Meanwhile, the team, back in front of my apartment, had to cope with nosy neighbors. I live in a city but my block is quiet and residential, home to many families. The SpiderLabs guys had a police scanner tuned to the local Brooklyn Heights precinct, just in case someone called the cops. Three men hanging around in front of my building, however, was bound to attract attention, and it did. While trying to secret a laptop computer behind a potted plant on my stoop in an attempt to try and isolate my Wi-Fi network, they spotted a woman in a red shirt glaring from a short distance away. Eventually she gave up. Another neighbor confronted the men as she was walking her dog, telling them she had noticed them hanging around the past few days. Picchioni, the team leader, finessed an answer, claiming they were from out of town, here on business, and wanted to work outside because it was such a nice day.&lt;/p&gt;
&lt;p&gt;The SpiderLabs gang had been put on notice. They ended up renting a ZipCar and trawled around the front of my building by hiding in the back of the car and whiling away hours in a nearby park. One bench gave them a bird&#8217;s eye view of my front stoop if they looked through binoculars. From there they watched my wife and I come and go.&lt;/p&gt;
&lt;p&gt;Around this time, I published &lt;a href="http://pandodaily.com/2013/08/28/how-to-manipulate-children-for-fun-and-profit/"&gt;a piece on PandoDaily&lt;/a&gt; about my experience with an iPad app that coaxes children into purchasing virtual crap if they want to progress in the game. I talked a bit about my own children&#8217;s screen habits and how they read insatiably on Kindle Paperwhites. I wrote: &#8220;I prefer ebooks to hardcovers and paperbacks because we live in Brooklyn and don&#8217;t have space for all the books they read. Our basement is packed with them. Feel free to come by and cart them away to your favorite library or charity.&#8221;&lt;/p&gt;
&lt;p&gt;Shortly after my piece posted, a woman on Twitter asked if she could take me up on my offer. It was a real Twitter account, which, I learned later, belonged to a friend of Jaku&#8217;s. &#8220;We really wanted to get into your basement,&#8221; he later told me. Not suspecting anything, I responded that my wife and I would have to go through these books before we&#8217;d give any away.&lt;/p&gt;
&lt;p&gt;Really, though, all this on-premises &lt;em&gt;mishegas&lt;/em&gt; would turn out to be for naught. Like Dan Cohn, the team from SpiderLabs was able to get the information they sought through other means. Not with pretext calls, which are oh-so last century. Nick Percoco and his minions are children of the Internet, and have little need of a telephone. Instead, they know the art of the phish.&lt;/p&gt;
&lt;p&gt;The first one they tried was a message to me from a student in Ohio who expressed interest in attending NYU to study journalism.&lt;/p&gt;
&lt;p&gt;I read the email but didn&#8217;t open the attachment because it was a file type I didn&#8217;t recognize. I remember thinking &lt;i&gt;why would a high school student send me an attachment with a JAR suffix?&lt;/i&gt; Plus, I was on break from teaching and filed the email away for the week after the semester would begin.&lt;/p&gt;
&lt;p&gt;Since I didn&#8217;t reply the team took aim at Charlotte with a phish.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Editor&#8217;s note: Amber, whose last name has been redacted from these images, is a real person &#8212; a Pilates instructor, in fact. The SpiderLabs team did what hackers often do, which was to use a real person&#8217;s identity in case Charlotte looked her up online. The email address, however, was fake. T&lt;em&gt;he real Amber contacted us after the story was published. We then added the&#160;&lt;/em&gt;redactions.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When Charlotte didn&#8217;t respond, they re-sent Amber&#8217;s message, and at 4:30 p.m. ET on August 27, she clicked on the link and by doing so downloaded the malware that Jaku had coded especially for us.&lt;/p&gt;
&lt;p&gt;The video didn&#8217;t work, so Charlotte sent a reply, telling Amber that while she couldn&#8217;t meet over Labor Day, she would like to see her resume, and said she couldn&#8217;t open the video clip.&lt;/p&gt;
&lt;p&gt;There was, however, a bug in the malware (Jaku says this was his first time writing it for a Mac) and the SpiderLabs gang couldn&#8217;t maintain persistent access. So they replied to Charlotte&#8217;s reply. This time, instead of a web link the payload was a zip file:&lt;/p&gt;
&lt;p&gt;The newly updated OSX malware, which another member of the team,&#160;digital forensics specialist Josh Grunzweig coded,&#160;was dropped on to her machine. SpiderLabs now had complete access to her laptop whenever it was on the Internet.&lt;/p&gt;
 
They got into our checking and savings accounts, a corporate bond account, our credit card statements and online bills. They could, if they had wanted to, wipe us out financially.
 
&lt;p&gt;On Charlotte&#8217;s machine were our family&#8217;s W2s, which included our social security numbers as well as our income and all of our deductions, paperwork and copies of credit card and banking statements. They also came upon a password to our home router. More frightening, they discovered her password and log in to our Chase online banking account.&lt;/p&gt;
&lt;p&gt;Chase.com uses a two-step verification system, which momentarily stymied SpiderLabs&#8217; hackers. Every time she or I logs on from an IP address that Chase doesn&#8217;t recognize, it offers to send us an activation code via text to our mobile phones. But a search of Charlotte&#8217;s hard drive revealed Chase cookies, which the team copied and used to convince Chase that she was logging in from home. While inside they got into our checking and savings accounts, a corporate bond account, our credit card statements and online bills. They could, if they wanted to, have wiped us out financially.&lt;/p&gt;
&lt;p&gt;What&#8217;s more, buried deep on the hard drive, they located something else: old files of mine. Some years earlier I had bequeathed Charlotte my old PowerBook G4 Titanium, and didn&#8217;t bother to wipe clean the hard drive. Months later I smelled acrid smoke in our apartment and saw that the keyboard was on fire. After I put out the flames, the laptop refused to boot up. (The motherboard had melted.) We brought it to the Apple Store and staff &#8212; I refuse to call them geniuses, except ironically &#8212; copied the hard drive to a new Mac laptop. That was two or three computers ago, and each time my wife has had her hard drive ported over to the next machine. All these years these files of mine have persisted. One of them contained passwords for several online accounts, including Amazon.&lt;/p&gt;
&lt;p&gt;In and of itself, you might think this wasn&#8217;t much of a find. So what? The SpiderLabs boys could rack up charges on my Amazon credit card. But like many people, I have developed my own system for passwords. Because I can&#8217;t possibly remember every single one to every site I use not only do I reuse passwords, I also have come up with an informal formula to create them. I might spell out a common name like Gracie (my old cat) but spell it &#8216;Gray see&#8217; and use an &#8216;8&#8217; to stand in for the &#8216;G&#8217; and a &#8216;5&#8217; for the &#8216;s.&#8217; You get the idea. Recall that one of SpiderLabs&#8217; team members is an expert in computer forensics. It didn&#8217;t take him long to crack all of my passwords.&lt;/p&gt;
&lt;p&gt;The SpiderLabs gang broke into my Twitter account and tweeted &#8220;I love Stephen Glass,&#8221; which led to some head scratching on Twitter from those who know my role in that story. (I&#8217;m the one who outed the serial fabulist from The New Republic.) They breached my Facebook account and ordered 100 plastic spiders from Amazon then had them shipped to my home. And they cracked my iCloud password, sending me an email with the subject: SpiderLabs was here and a message consisting of a single emoticon: :-)&lt;/p&gt;
&lt;p&gt;Once they cracked iCloud they activated the &#8220;find my iPhone&#8221; app. Apple had also enabled this functionality for laptops, so they put both my iPhone and laptop in stolen mode.&lt;/p&gt;
&lt;p&gt;The first I learned to what extent SpiderLabs had penetrated my privacy was during my class at NYU, when my laptop shut down and demanded a four-digit code to gain re-entry and my iPhone began beeping.&lt;/p&gt;
&lt;p&gt;During our debriefing, Percoco told me that I had been, in some ways, more difficult to get to than many of his corporate clients. With a company employing thousands, there are thousands of potential vulnerabilities that can be attacked. What&#8217;s more, the rules are more constrained. For example, a corporate client will tell SpiderLabs which specific servers to target once they&#8217;re inside the network or what division to focus on within the corporate hierarchy.&lt;/p&gt;
&lt;p&gt;With me, however, there were fewer paths that could lead to the mother lode: my laptop, email, bank, social media accounts, and home. Once in, though, his team found few firewalls protecting my data, and mostly in the form of a pastiche of passwords and log-in credentials. These, I quickly learned, were not secure.&lt;/p&gt;
&lt;p&gt;My wife, Charlotte, was practically speechless when I told her about the hack. I had not given her any advance warning, hoping to keep the experiment as realistic as possible. At first she was fascinated, but the more she thought about it, the more uncomfortable she became. The idea that an undercover client had visited her studio and a team of spies had put our home under surveillance made her uneasy. She was relieved, as I was, that our children had been off limits.&lt;/p&gt;
&lt;p&gt;&#8220;Promise me you&#8217;ll never do anything like this again,&#8221; she said. And, of course, I did.&lt;/p&gt;
&lt;p&gt;Earlier this month, Percoco left SpiderLabs for a new job as Director at KPMG, the professional services firm, in the Information Protection practice where he&#8217;s running the same kinds of penetration tests.&lt;/p&gt;
&lt;p&gt;As for me, since we concluded this exercise I&#8217;ve changed my passwords and log ins but I don&#8217;t delude myself into thinking I&#8217;m protected from prying eyes &#8212; the government&#8217;s or anyone else&#8217;s, if they belong to someone with the right combination of skills, resources and determination.&lt;/p&gt;
&lt;p&gt;And if I&#8217;m not safe, are you?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Illustrations by &lt;a href="http://www.zinepolice.com"&gt;Alex Schubert&lt;/a&gt; for Pandodaily]&lt;/em&gt;&lt;/p&gt;
 
 
 
 &lt;!-- #author-info --&gt;
 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 05:07:49 -0800</pubDate>
      <link>http://pando.com/2013/10/26/i-challenged-hackers-to-investigate-me-and-what-they-found-out-is-chilling/</link>
      <guid>http://pando.com/2013/10/26/i-challenged-hackers-to-investigate-me-and-what-they-found-out-is-chilling/</guid>
    </item>
    <item>
      <title>Introducing Wit Speech API</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7224436'&gt;"Introducing Wit Speech API"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://wit.ai/blog/2014/02/12/speech-api'&gt;https://wit.ai/blog/2014/02/12/speech-api&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 12 Feb 2014 feature, speech
 &lt;p&gt;Voice commands are the future. Science-fiction has had them for decades and yet, we still have to reach for the remote to turn on the TV or set an alarm. Our mission is to change this. Adding a voice interface to an app or device should be simple.&lt;/p&gt;
&lt;h2&gt;Turning speech into actionable data&lt;/h2&gt;
&lt;p&gt;Today, we&#8217;re very excited to announce our new &lt;a href="https://wit.ai/docs/api"&gt;&#8220;Speech to JSON&#8221; API&lt;/a&gt;, four months after the launch of the &#8220;Text to JSON&#8221; API.&lt;/p&gt;
&lt;p&gt;From now on, your app, device or even your website can stream audio to our server, and get actionable data in return.&lt;/p&gt;
&lt;p&gt;See it in action for home automation:&lt;/p&gt;
&lt;h2&gt;How does it work?&lt;/h2&gt;
&lt;p&gt;Behind the scene, Wit combines various state-of-the-art Natural Language Processing techniques and several speech recognition engines in order to achieve low latency and high robustness to both surrounding noise and paraphrastic variations (there are millions of ways to say the same thing).&lt;/p&gt;
&lt;p&gt;Fortunately, you don&#8217;t need to care about all this machinery. We focus all our energy into creating the simplest developer experience possible. You can be up and running in a few minutes using &lt;a href="https://wit.ai"&gt;our website&lt;/a&gt;. Wit will adapt to your domain over time, from ice-cream distribution to space missions. Wit makes no assumptions and remains 100% configurable.&lt;/p&gt;
&lt;p&gt;It will take you 5 minutes to build your own Wit configuration:&lt;/p&gt;
&lt;h2&gt;Consuming the API&lt;/h2&gt;
&lt;p&gt;Then, calling the API is simple. We provide client-side SDKs that handle audio recording and streaming for &lt;a href="https://wit.ai/docs/ios"&gt;iOS&lt;/a&gt;, &lt;a href="https://wit.ai/docs/android"&gt;Android&lt;/a&gt; or &lt;a href="https://wit.ai/docs/wit-for-websites"&gt;even a simple webpage like this one&lt;/a&gt;. You can also use the &lt;a href="https://wit.ai/docs/api"&gt;HTTP interface&lt;/a&gt; to stream live audio or post a sound file:&lt;/p&gt;
&lt;p&gt;Let&#8217;s take this sound (recorded from a celebrity in the valley &#8211; do you know who?):&lt;/p&gt;
&lt;p&gt;Submit it to the Wit API with a POST request:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -XPOST 'https://api.wit.ai/speech' \
 -i -L \
 -H "Authorization: Bearer $TOKEN" \
 -H "Content-Type: audio/wav" \
 --data-binary "@sample.wav"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You&#8217;ll get this in return:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
 "msg_id" : "6a84eae3-969c-41ad-94d9-85076fbbdc99",
 "msg_body" : "set the kitchen table on fire",
 "outcome" : {
 "intent" : "set_fire",
 "entities" : {
 "object" : {
 "value" : "kitchen table",
 "body" : "kitchen table"
 }
 },
 "confidence" : 0.997
 }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="https://wit.ai"&gt;Interested to build your own voice interface? Sign up here!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Team Wit&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/WitNL"&gt;@WitNL&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 06:33:40 -0800</pubDate>
      <link>https://wit.ai/blog/2014/02/12/speech-api</link>
      <guid>https://wit.ai/blog/2014/02/12/speech-api</guid>
    </item>
    <item>
      <title>FlapMMO -- flapmmo.com</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7224458'&gt;"FlapMMO -- flapmmo.com"&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 12 Feb 2014 07:31:19 -0800</pubDate>
      <link>http://flapmmo.com/</link>
      <guid>http://flapmmo.com/</guid>
    </item>
    <item>
      <title>Chris Hates Writing &#8226; The anonymity I know</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7225025'&gt;"Chris Hates Writing &#8226; The anonymity I know"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://chrishateswriting.com/post/76431353368/the-anonymity-i-know'&gt;http://chrishateswriting.com/post/76431353368/the-anonymity-i-know&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;h2&gt;The anonymity I know&lt;/h2&gt;
 &lt;p&gt;Yesterday Sam Altman published a&#160;&lt;a href="http://blog.samaltman.com/anonymity"&gt;short post&lt;/a&gt;&#160;containing his thoughts on Secret, and also anonymity in general&#8212;namely that it breeds meanness, and that anonymous social networks are destined to decay and grow worse over time.&lt;/p&gt;
&lt;p&gt;I strongly disagree.&#160;What I&#8217;ve observed is the opposite&#8212;that anonymity facilitates honest discourse, creates a level playing field for ideas to be heard, and enables creativity like none other.&lt;/p&gt;
&lt;p&gt;"Anonymity" is itself a slippery term because people frequently use it to refer to everything that isn&#8217;t "real identity." Obviously identity is more nuanced than that (I prefer "&lt;a href="http://chrishateswriting.com/post/63564095133/prismatic-identity"&gt;prismatic&lt;/a&gt;&#8221;), but for some reason we choose to paint it in broad strokes comprised of two extremes. In the interest of simplicity, I&#8217;ll use anonymity to encompass the part of the spectrum that is not real identity, including pseudonymity&#160;and everything in between.&lt;/p&gt;
&lt;p&gt;When I &lt;a href="http://new.ted.com/talks/christopher_m00t_poole_the_case_for_anonymity_online"&gt;spoke at TED&lt;/a&gt; four years ago I concluded the talk with my concern that in the race to embrace social networking, anonymous communities were quickly going the way of the dinosaur, and that the world was on the verge of losing something incredibly valuable.&lt;/p&gt;
&lt;p&gt;It&#8217;s an issue near and dear to me, as I&#8217;ve had the privilege of founding and presiding over one of the largest anonymous online communities&#8212;&lt;a href="http://www.4chan.org"&gt;4chan&lt;/a&gt;&#8212;for more than a decade.&lt;/p&gt;
&lt;p&gt;I was myself once ignorant of the benefits of anonymity. As a 15-year-old who spent his childhood and early teens hanging out in online chatrooms and forums, I wasn&#8217;t particularly drawn to the idea of anonymous contribution. When I encountered the inspiration for 4chan, a Japanese website called Futaba Channel, I found myself captivated by its unconventional imageboard format and how quickly content seemed to roll on and off the site&#8212;not its emphasis on anonymity and impermanence. Fascinated and frustrated by my inability to contribute (my Japanese is abysmal), I quickly translated the source code and threw it up for a few Internet friends to use.&lt;/p&gt;
&lt;p&gt;The very things I overlooked as a teen quickly became the driving force behind the site, and are now deeply ingrained in its ethos as well as my own. Few communities have grown in size and come to influence mainstream culture as 4chan has, for as long as it has, and it is without a doubt the result of allowing people to interact without the &lt;a href="http://www.nytimes.com/roomfordebate/2013/09/23/facebook-and-narcissism/dont-hate-the-player-hate-the-game"&gt;burden of identity&lt;/a&gt;, and to share and explore new ideas together. For many, 4chan has become their &#8220;third place,&#8221; and provided a sanctuary away from the everyday stresses of home, school, and work life.&lt;/p&gt;
&lt;p&gt;The combination of anonymity and ephemerality has fostered experimentation and creativity rarely seen elsewhere. It&#8217;s incredible what people can make when they&#8217;re able to fail publicly without fear, since not only will those failures not be attributed to them, but they&#8217;ll be washed away by a waterfall of new content. Only ideas that resonate with the broader community persist, creating the most ideal conditions for the production of viral content, which established 4chan as one of the Web&#8217;s earliest &#8220;meme factories.&#8221;&lt;/p&gt;
&lt;p&gt;The conversation is &#8220;raw&#8221; to say the least&#8212;almost everyone checks their filter at the door. The resulting dialogue is about as honest as it gets. In lieu of traditional barriers to membership, the community uses cryptic and crude language to regulate who can and cannot participate. On the surface this may seem offensive, but it&#8217;s often meant to do little more than keep newcomers on their toes and encourage they lurk and learn the house rules before participating.&lt;/p&gt;
&lt;p&gt;Few sites give their users a platform to share ideas quite like 4chan&#8217;s&#8212;a virtual Speakers&#8217; Corner&#8212;where &lt;em&gt;anyone&lt;/em&gt; can express their opinions on equal footing. Every person who creates a thread has that thread appear at the very top of the index, and no amount of karma or social capital can save it from the depths of irrelevance. It&#8217;s ideas, not reputations, that shine here.&lt;/p&gt;
&lt;p&gt;4chan isn&#8217;t without its problems and is by no means a utopia, but in many ways provides an accurate representation of who we are: flawed, imperfect. I see beauty in that, and something worthy of continued exploration.&lt;/p&gt;
&lt;p&gt;As someone who has spent their entire adult life educating the public about the benefits of anonymity and advocating for alternatives to &#8220;real identity,&#8221; I&#8217;m simultaneously excited and hesitant about what the next few months might bring.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://chrishateswriting.com/post/67378144174/ephemerality-goes-mainstream-viva-la-snapchat"&gt;Snapchat has changed the game&lt;/a&gt;. Its success has demonstrated that given the right offering, there is in fact mainstream demand for products that incorporate anonymity and ephemerality, and I&#8217;ve watched with bated breath as it&#8217;s kicked off renewed interest and debate over their merits.&lt;/p&gt;
&lt;p&gt;It feels like we&#8217;re on the cusp of a fever pitch to explore this new&#8212;well, rediscovered&#8212;terrain, with entrepreneurs, investors, and journalists all lining up to understand and capitalize on the opportunities that await. I welcome these expeditions,&#160;but pray we will see people create thoughtful products that truly reimagine identity for the digital age rather than simply incorporating &#8220;anonymity&#8221; and &#8220;ephemerality&#8221; as marketing buzzwords.&lt;/p&gt;
&lt;p&gt;It&#8217;s bound to be an interesting ride. Whatever may happen, I&#8217;m grateful to have a front row seat.&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 08:05:19 -0800</pubDate>
      <link>http://chrishateswriting.com/post/76431353368/the-anonymity-i-know</link>
      <guid>http://chrishateswriting.com/post/76431353368/the-anonymity-i-know</guid>
    </item>
    <item>
      <title>Elasticsearch.org 1.0.0 Released | Blog | Elasticsearch</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7225363'&gt;"Elasticsearch.org 1.0.0 Released | Blog | Elasticsearch"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.elasticsearch.org/blog/1-0-0-released/'&gt;http://www.elasticsearch.org/blog/1-0-0-released/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Wed, 12 Feb 2014 08:53:10 -0800</pubDate>
      <link>http://www.elasticsearch.org/blog/1-0-0-released/</link>
      <guid>http://www.elasticsearch.org/blog/1-0-0-released/</guid>
    </item>
    <item>
      <title>Rails 4 Engines - TechRabbit</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7225447'&gt;"Rails 4 Engines - TechRabbit"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://tech.taskrabbit.com/blog/2014/02/11/rails-4-engines/'&gt;http://tech.taskrabbit.com/blog/2014/02/11/rails-4-engines/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;At &lt;a href="https://www.taskrabbit.com"&gt;TaskRabbit&lt;/a&gt;, we have gone through a few iterations on how we make our app(s). In the beginning, there was the monolithic Rails app in the standard way with 100+ models and their many corresponding controllers and views. Then we moved to several apps with their own logic and often using the big one via API. Our newest &lt;a href="https://taskrabbit.co.uk"&gt;project&lt;/a&gt; is a single &#8220;app&#8221; made up of several Rails engines. We have found that this strikes a great balance between the (initial) straightforwardness of the single Rails app and the modularity of the more service-oriented architecture.&lt;/p&gt;
&lt;p&gt;We&#8217;ve talked about this approach with a few people and they often ask very specific questions about the tactics used to make this happen, so let&#8217;s go through it here and via a &lt;a href="https://github.com/taskrabbit/rails_engines_example"&gt;sample application&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Rails Engines&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://edgeguides.rubyonrails.org/engines.html"&gt;Rails Engines&lt;/a&gt; is basically a whole Rails app that lives in the container of another one. Put another way, as the docs note: an app itself is basically just an engine at the root level. Over the years, we&#8217;ve seen sen engines as parts of gems such as &lt;a href="https://github.com/plataformatec/devise/blob/7a9ae13baadc3643d0f5b74077d9760d19c56adb/lib/devise/rails.rb"&gt;devise&lt;/a&gt; or &lt;a href="https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/engine.rb"&gt;rails_admin&lt;/a&gt;. These example show the power of engines by providing a large set of relatively self-contained functionality &#8220;mounted&#8221; into an app.&lt;/p&gt;
&lt;p&gt;At some point, there was a talk that suggested the approach of putting my our functionality into engines and that the Rails team seemed to be devoting more and more time to make them a first class citizen. Our friends at Pivotal Labs were talking about it a lot, too. Sometimes &lt;a href="http://pivotallabs.com/migrating-from-a-single-rails-app-to-a-suite-of-rails-engines/"&gt;good&lt;/a&gt; and sometimes &lt;a href="http://pivotallabs.com/experience-report-engine-usage-that-didn-t-work/"&gt;not so good&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Versus Many Apps&lt;/h2&gt;
&lt;p&gt;We&#8217;d seen an app balloon and get out of control before, leading us to try and find better ways of modularization. It was fun and somewhat liberating to say &#8220;Make a new app!&#8221; when there was a new problem domain to tackle. We also used it as a way to handle our growing organization. We could ask Team A to work on App A and know that they could run faster by understanding the scope was limited to that. As a side-note and in retrospect, we probably let organizational factors affect architecture way more than appropriate.&lt;/p&gt;
&lt;p&gt;Lots of things were great about this scenario. The teams had freedom to explore new approaches and we learned a lot. App B could upgrade Rack (or whatever) because it depend on the crazy thing that App A depended on. App C had the terrible native code-dependent gem and we only had to put that on the App C servers. Memory usage was kept lower, allowing us to run more background workers and unicorn threads.&lt;/p&gt;
&lt;p&gt;But things got rough in coordinating across these apps. It wasn&#8217;t just the data access. We made APIs and allowed any app to have read-only access to the platform app&#8217;s database. This allowed things go much faster by preventing creation of many GET endpoints and possible points of failure. The main issue in coordinating releases that spanned apps. They just went slower than if it was one codebase. There was also interminable bumping of gem versions to get shared code to all the apps. Integration testing the whole experience was also very rough.&lt;/p&gt;
&lt;p&gt;So it&#8217;s a simple one, but the main advantage that we&#8217;ve seen in the engine model is that it is one codebase and git repo. A single pull request has everything related to that feature. It rolls out atomically. Gems can be bumped once and our internal gems aren&#8217;t bumped at all as they live unbuilt in a &lt;code&gt;gems&lt;/code&gt; folder in the app itself. We still get most of the modularization that multiple apps had. For example, the User model in the payments engine has all the stuff about balances and the one in the profile engine doesn&#8217;t know anything about all that and it&#8217;s various helper methods.&lt;/p&gt;
&lt;p&gt;The issue with gem upgrades and odd server configurations does continue to exist in the engine model and is mostly fine in the many app model. The gem one is tough and we just try to stay on top of upgrading to the newest things and overall reducing dependencies. The specs will also run slower in the engine app, but you&#8217;ll have better integration testing. I&#8217;ll go over a little bit about we&#8217;ve tackled server configurations and memory further down.&lt;/p&gt;
&lt;h2&gt;Versus Single App&lt;/h2&gt;
&lt;p&gt;It&#8217;s very tempting when green-fielding a project to just revert back to the good-old-days of the original app. Man, that was so nice back before the (too) fat models and tangled views and combinatorics of 4 years of iterating screwed things up. And we&#8217;ve learned a lot since then too, right? Especially about saying no to all those &lt;a href="http://firstround.com/article/The-one-cost-engineers-and-product-managers-dont-consider"&gt;combinatorics&lt;/a&gt; and also using &lt;a href="http://robots.thoughtbot.com/tidy-views-and-beyond-with-decorators"&gt;decorators&lt;/a&gt; and &lt;a href="http://adequate.io/culling-the-activerecord-lifecycle"&gt;service objects&lt;/a&gt; and using &lt;a href="http://www.api-first.com/"&gt;APIs&lt;/a&gt;. Maybe.&lt;/p&gt;
&lt;p&gt;What we do know is that you can feel that way again even a year into an app. Inside any given engine, you have the scope of a much smaller project. Some engines may grow larger and you&#8217;ll start to use those tools to keep things under control. Some will (correctly) have limited scope and feel like a simple app in which you understand everything that is happening. For example, decorators are great tool and they came in handy in our big app and larger engines. However, we&#8217;ve found in an a targeted engine that only serves its one purpose, it feels like there is room in that model to have some things that would have been decorated in a larger app. This is because it doesn&#8217;t have all that other junk in it. Only this engine&#8217;s junk :-)&lt;/p&gt;
&lt;h2&gt;Engine Usage&lt;/h2&gt;
&lt;p&gt;We&#8217;ve seen a few different ways to use engines in a Rails project. A few examples are below. The basic variables are what is in the &#8220;operator&#8221; (root) app and what kind of app we&#8217;re making (API driven or not).&lt;/p&gt;
&lt;h3&gt;Admin&lt;/h3&gt;
&lt;p&gt;The first engine we&#8217;ve recommend making to people is the admin engine. In the first app, we made the mistake of putting admin functionality in the &#8220;normal&#8221; pages. It was very enticing. We had that form already for the user to edit it. Just by changing the permissions, we could allow the admin to edit it, too. Forms are cheap and admins want extra fields. And more info. And basically a different UI.&lt;/p&gt;
&lt;p&gt;So we can made an engine basically just like rails_admin did and gave it&#8217;s own layout and views and JS and models and controllers, etc. Overall, we started treating our hardworking admins like we should: a customer with their own needs and dedicated experience.&lt;/p&gt;
&lt;p&gt;The structure looked something like this&#8230;&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
app
 assets
 controllers
 models
 user.rb
 post.rb
 views
 layouts
admin
 app
 assets
 controllers
 models
 admin
 user.rb
 post.rb
 views
 layouts
config
db
 migrate
gems
spec&lt;p&gt;When we had this all mixed into one interface and set of models, at least a third of the code in a model like &lt;code&gt;Post&lt;/code&gt; or &lt;code&gt;User&lt;/code&gt; would be admin-specific actions. With this approach, we can give the admins a better, targeted experience and keep that code in admin-land.&lt;/p&gt;
&lt;p&gt;Throughout these engine discussions, the question of sharing code and/or inheriting from objects will keep coming up. Specifically, for the admin scenario, we say do whatever works for you and on a case by case basis. In the above approach, we would probably tend to have &lt;code&gt;Admin::Post &amp;lt; ::Post&lt;/code&gt; and other such inheritance. In Rails 2, we probably wouldn&#8217;t have done what as they would have different &lt;code&gt;attr_accessible&lt;/code&gt; situations but that&#8217;s happening in the controller these days, so now inheriting from them will just get the benefit of the data validations, which is something we definitely want to share.&lt;/p&gt;
&lt;p&gt;Note that inheriting is probably a bad choice if you have callbacks in the root model that you don&#8217;t want triggered when the admin saves the record. In that case, it would be better to &lt;code&gt;Admin::Post &amp;lt; ActiveRecord::Base&lt;/code&gt; and either duplicate the logic, have it only in SQL table (unique indexes for example), or have a mixin that is included in both.&lt;/p&gt;
&lt;h3&gt;Shared Code&lt;/h3&gt;
&lt;p&gt;The note about controllers being in charge of the parameters involved leads to the next possibility. You can have your models (at least the ones you need to have shared) in the operator and all the other stuff in the engines. At this point, maybe you could add the &lt;code&gt;engines&lt;/code&gt; namespace to be more clear.&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
app
 models
 user.rb
 post.rb
config
db
 migrate
engines
 customer
 app
 assets
 controllers
 models
 customer
 something_admin_doesnt_use.rb
 views
 layouts
 admin
 app
 assets
 controllers
 models
 admin
 admin_notes.rb
 views
 layouts
gems
spec&lt;p&gt;Now you can use &lt;code&gt;Post&lt;/code&gt; from both and everything is just fine. This would work out well if it&#8217;s mostly the data definition you are using and like to use things like decorators and/or service objects and/or fat controllers in your engines.&lt;/p&gt;
&lt;p&gt;You could also put layouts or mixins in the operator. This might be a good idea if you were sharing the layout between two engines. At that point, maybe we&#8217;ll just go all in on the engines by making a &lt;code&gt;shared&lt;/code&gt; engine. Having a namespace for clarity is much simpler.&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apps
 shared
 app
 assets
 controllers
 shared
 authentication.rb
 models
 shared
 post.rb
 user.rb
 views
 shared
 layouts
 marketing
 app
 controllers
 marketing
 application_controller.rb
 home_controller.rb
 content
 controllers
 models
 content
 something_admin_doesnt_use.rb
 admin
 app
 assets
 controllers
 models
 admin
 admin_notes.rb
 views
 layouts
config
db
 migrate
gems
spec&lt;p&gt;In this structure, admin can still get it&#8217;s own layout if it wants, but marketing and content can easily share the same layout in addition to the models.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://github.com/taskrabbit/rails_engines_example"&gt;example in Github&lt;/a&gt; takes this just one step farther by not sharing models at all. Sharing the actual model can still lead to the &lt;a href="http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/"&gt;god model&lt;/a&gt; situation of a mono-Rails app without the use of other mitigating objects. To keep things as tight as possible, we&#8217;ve allowed each engine to have their own &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/content/app/models/content/user.rb"&gt;User&lt;/a&gt; object, for example. If there is model code to share, it would still go in the shared engine, but as a mixin like &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/shared/app/models/shared/user/display.rb"&gt;this one&lt;/a&gt;. Note that in a well-designed schema, only one of these actually writes to the database and the others include a &lt;code&gt;ReadOnly&lt;/code&gt; module from the shared engine.&lt;/p&gt;
&lt;p&gt;The repo&#8217;s structure looks as follows:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
apps
 shared
 app
 assets
 controllers
 shared
 controller
 authentication.rb
 models
 shared
 model
 read_only.rb
 user
 user_display.rb
 views
 shared
 layouts
 marketing
 app
 controllers
 marketing
 application_controller.rb
 home_controller.rb
 models
 marketing
 user.rb
 db
 migrate
 account
 app
 controllers
 models
 content
 user.rb
 post.rb
 db
 migrate
 content
 app
 assets
 controllers
 models
 admin
 post.rb
 user.rb
 db
 migrate
 admin
 app
 assets
 controllers
 models
 admin
 admin_notes.rb
 post.rb
 user.rb
 views
 layouts
 db
 migrate
config
gems
spec&lt;h3&gt;API Server&lt;/h3&gt;
&lt;p&gt;Our latest project at TaskRabbit basically looks the the above and the &lt;a href="https://github.com/taskrabbit/rails_engines_example"&gt;example&lt;/a&gt; with one difference: we don&#8217;t share layouts between our engines. We&#8217;ve made the choice to have all the frontend code in one engine and all of the other engines just serve API endpoints. There are several shared mixins for these backend engines, but they don&#8217;t need a layout because they are just using &lt;a href="https://github.com/rails/jbuilder"&gt;jbuilder&lt;/a&gt; to send back JSON to the frontend client. The frontend engine, therefore, doesn&#8217;t really use any models and has all the assets and such. Admin still has its own layout and uses a more traditional Rails MVC approach.&lt;/p&gt;
&lt;p&gt;It looks like this:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
apps
 shared
 app
 assets
 controllers
 shared
 controller
 authentication.rb
 models
 shared
 model
 read_only.rb
 user
 user_display.rb
 frontend
 app
 assets
 controllers
 marketing
 application_controller.rb
 home_controller.rb
 models
 marketing
 user.rb
 views
 frontend
 layouts
 account
 app
 controllers
 models
 content
 user.rb
 post.rb
 views
 account
 users
 show.json.jbuilder
 db
 migrate
 content
 app
 controllers
 models
 admin
 post.rb
 user.rb
 views
 db
 migrate
 admin
 app
 assets
 controllers
 models
 admin
 admin_notes.rb
 post.rb
 user.rb
 views
 layouts
 db
 migrate
config
gems
spec&lt;p&gt;The API setup alleviates one of the odder things about the example approach. Ideally, there is no interaction between engines. Particularly in the models and views, this is critical. However, some knowledge leaks out in the example though from the controllers. For example, the &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/app/controllers/account/application_controller.rb#L11"&gt;login controller&lt;/a&gt; redirects to &lt;code&gt;/posts&lt;/code&gt; after login. This is in the content engine. It&#8217;s probably not the end of the world but that is coupling. We get around this using our one frontend engine and the several API ones, but this does some serious commitment.&lt;/p&gt;
&lt;h2&gt;Strategies&lt;/h2&gt;
&lt;p&gt;We&#8217;ve gotten lots of questions and read about issues people are having with engines so let&#8217;s go through them here.&lt;/p&gt;
&lt;h3&gt;Migrations and Models&lt;/h3&gt;
&lt;p&gt;Rails bills itself as &#8220;convention over configuration&#8221; so it&#8217;s not too surprising to be confronted with lots of questions about &#8220;where to put stuff&#8221; when deviating (slightly) from the conventions. The one people seem the most worried about are migrations. We&#8217;ve never had an issue, but there must be scenarios that get a little tricky. If you are sharing the models, wewould just put them in the normal &lt;code&gt;db/migrate&lt;/code&gt; location. If your models live inside the engines, it&#8217;s probably not a huge deal to still do that, but we&#8217;ve decided to have the migrations live with their models.&lt;/p&gt;
&lt;p&gt;As notes, each model/table (say &lt;code&gt;users&lt;/code&gt;) ideally has one master model. In the sample app, the &lt;code&gt;User&lt;/code&gt; model&#8217;s master is in the &lt;a href="https://github.com/taskrabbit/rails_engines_example/tree/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account"&gt;account&lt;/a&gt; engine. This engine is in charge of signing up and logging in users. Fleshed out, it would also be responsible for reseting a lost password and editing account information. It&#8217;s the only &lt;code&gt;User&lt;/code&gt; model that &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/app/models/account/user.rb#L7"&gt;mentions&lt;/a&gt; &lt;code&gt;has_secure_password&lt;/code&gt; and knows anything about that kind of thing. The rest of the engines may &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/content/app/models/content/user.rb#L5"&gt;need&lt;/a&gt; a &lt;code&gt;User&lt;/code&gt; model but they have the &lt;code&gt;ReadOnly&lt;/code&gt; &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/shared/app/models/shared/model/read_only.rb"&gt;module&lt;/a&gt; to prevent actually writing to the table.&lt;/p&gt;
&lt;p&gt;Therefore, the account engine has the &lt;a href="https://github.com/taskrabbit/rails_engines_example/tree/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/db/migrate"&gt;migrations&lt;/a&gt; having to do with the users table. In order to register that migrations are within these engines, we &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/lib/account/engine.rb"&gt;add&lt;/a&gt; a snippet like the following to each engine.&lt;/p&gt;
1
2
3
4
5
6
7
initializer 'account.append_migrations' do |app|
 unless app.root.to_s == root.to_s
 config.paths["db/migrate"].expanded.each do |path|
 app.config.paths["db/migrate"].push(path)
 end
 end
end
&lt;p&gt;This (via &lt;a href="http://pivotallabs.com/leave-your-migrations-in-your-rails-engines/"&gt;here&lt;/a&gt;) puts the engine&#8217;s migrations in the path. Migrations continue to work as they normally do with the timestamps and such. So our &lt;code&gt;db/migrate&lt;/code&gt; folder doesn&#8217;t have any files in it (and is not checked into git). I have one locally, just because when I make a migration, Rails creates it automatically. However, I end up doing something like this immediately.&lt;/p&gt;
1
2
3
4
$ bundle exec rails g migration CreatePosts
 invoke active_record
 create db/migrate/20140207011608_create_posts.rb
$ mv db/migrate/20140207011608_create_posts.rb apps/content/db/migrate
&lt;p&gt;You might wonder, and it does come up, what to do when you are adding a column to the users table for some other feature in some other engine. For example, we added a boolean &lt;code&gt;admin&lt;/code&gt; column to the example users table to know if the given user is allowed to do stuff in the admin engine. We see the notion of permissions as being within the account engine&#8217;s scope, even if it&#8217;s not being actively leveraged there. Tt&#8217;s still part of the account. Therefore, we &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/db/migrate/20140207164357_add_admin_to_users.rb"&gt;added&lt;/a&gt; the migration to the account engine.&lt;/p&gt;
&lt;p&gt;In part, if I couldn&#8217;t justify to myself why it would be part of the account engine, it would be a red flag. Specifically, should this even be in the users table at all. If the answer is &#8220;yes&#8221; for whatever reason, then I&#8217;d likely still put the migration in the account engine, but usually it helps me realize that it shouldn&#8217;t be in the users table at all. A good example that came up in our app was the notion of profile. It seemed like it was 1-to-1 with users and what ever columns supported it should go in the users table. For a variety of reasons, including that we wanted a different engine for that, we ended up making it&#8217;s own table with a a &lt;code&gt;has_one&lt;/code&gt; relationship in that engine. This paid off even further as we realized that a &lt;code&gt;User&lt;/code&gt; should actually have two profiles, one for their activity as a TaskPoster and one as a TaskRabbit, as they record and display very different information. Each has their own table and engine now.&lt;/p&gt;
&lt;p&gt;Let&#8217;s say we wanted to cache the number of posts the user had made. That&#8217;s a pretty clearcut case to use &lt;code&gt;counter_cache&lt;/code&gt; and put a &lt;code&gt;posts_count&lt;/code&gt; in the users table. We&#8217;ll want to look closely at this situation. First of all, the &lt;code&gt;counter_cache&lt;/code&gt; code would clearly go on the &lt;code&gt;User&lt;/code&gt; model in the content engine. That would also require that model to not be read-only or at least not in spirit (depending on the specifics used to implement the feature). It&#8217;s not a good feeling when you do all this architecture stuff and it gets in the way of something that is so easy and we have to look out for those cases. If this is one of those cases, just do it; literally, however you want. We would probably keep the migration in the account engine.&lt;/p&gt;
&lt;p&gt;It might not be one of those cases, though. I have almost never been sorry when I&#8217;ve made another model in these cases. So we could make a &lt;code&gt;PostStatistic&lt;/code&gt; model or something in the content engine which &lt;code&gt;belongs_to :user&lt;/code&gt; for recording this (and likely other things that come up). The counter cache feature is not magic - we just increment that table as necessary. It also doesn&#8217;t feel that superfluous as it exists only inside that engine (which. in turn, doesn&#8217;t have all the random stuff internal to other engines). We have some tables that started out that way. Mostly because we actively try not to do JOINs on our API calls, these tables ending up being the hub of the most relevant data of what has happening in our marketplace. Another option that we&#8217;ve used in similar situations is not to make the column at all. The content engine, or whoever is using this kind of data, would use the timestamp of the last &lt;code&gt;Post&lt;/code&gt; or some other data to use as the cache key to look up all kinds of stuff in a store like memcache or Redis. If it&#8217;s not there, it will take bit the bullet and calculate it and store it in the cache.&lt;/p&gt;
&lt;p&gt;Again, architecture does not exist for fun or to get in the way. If something is super-simple and obvious and easy to maintain while doing the &#8220;right&#8221; way for the design is difficult and fragile, we just do it the easy way. That&#8217;s the way to ship things for customers. However, we&#8217;ve found that in most case the rules of the system kick off useful discussions and behaviors that tend to work out quite well.&lt;/p&gt;
&lt;h3&gt;Admin&lt;/h3&gt;
&lt;p&gt;One of the cases where it&#8217;s important to really examine the value and return on investment in engine separation is with the admin engine. We believe it&#8217;s a special case.&lt;/p&gt;
&lt;p&gt;In our system, the admin engine has it&#8217;s own migrations. For example, we have a model called &lt;code&gt;AdminNote&lt;/code&gt; where an admin can jot down little notes about most objects in the system. It clearly owns that. But the reason this whole experience exists in the first place is that it also is able to write more or less whatever it wants to &lt;em&gt;all&lt;/em&gt; the objects in the system. This clearly violates our single-model-master rule. So we don&#8217;t fight an uphill battle here by making a special case and saying that the admin engine can literally do whatever it wants. All the other engines live in complete isolation from each other for a variety of reasons. Admin can depend directly on any or all of them. It&#8217;s at the top of the food chain because it needs to regulate the whole system.&lt;/p&gt;
&lt;p&gt;So it&#8217;s &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/admin/app/models/admin/post.rb"&gt;fine&lt;/a&gt; if &lt;code&gt;Admin::Post &amp;lt; Content::Post&lt;/code&gt; or just uses &lt;code&gt;Content::Post&lt;/code&gt; directly in it&#8217;s controllers. It&#8217;s just not worth it to share all of the data definitions and validations with when it will almost always be with engine X and admin. Note that it&#8217;s important to have the same validations because admin might be in charge, but it still needs to produce valid data as that other engine will be using it.&lt;/p&gt;
&lt;p&gt;In our much larger app, we inherit from and/or use most of the models in the system as well as service objects from other engines. We do not use outside controllers or views. Our admin engine does use it&#8217;s own layout and much simpler request cycle than our much fancier frontend app. We tried to show the admin engine using a different layout in the example app, but they&#8217;re both bootstrap so it might be hard to tell. The header is red in admin :-)&lt;/p&gt;
&lt;h3&gt;Assets&lt;/h3&gt;
&lt;p&gt;Everyone seems to have struggled with this one and I can&#8217;t even imagine pulling apart assets if they weren&#8217;t coded in a modular way at the start. However, starting with them separate in Rails 4 has been fairly straightforward. We add the following &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/lib/account/engine.rb"&gt;code&lt;/a&gt; to our engine much like the migration code.&lt;/p&gt;
1
2
3
initializer 'account.asset_precompile_paths' do |app|
 app.config.assets.precompile += ["account/manifests/*"]
end
&lt;p&gt;You could list all the manifests one by one, but we&#8217;ve found that it&#8217;s simpler to just always put them in a folder created for the purpose. This works for both css and js. You would would reference those files something like this:&lt;/p&gt;
1
2
= stylesheet_link_tag 'account/manifests/application'
= javascript_include_tag 'account/manifests/application'
&lt;h3&gt;Routes&lt;/h3&gt;
&lt;p&gt;In an Engine, routes go within the engine directory at the &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/config/routes.rb"&gt;same&lt;/a&gt; &lt;code&gt;config/routes.rb&lt;/code&gt; path. It&#8217;s important to note here that in order for these routes to be put into use in the overall app, the engine needs to be mounted. In a normal engine use case, you would mount rails_admin (say to /admin) to give a namespace in the url, but we think it&#8217;s important that all of these engines get mounted at the root level. You can see our root routes.rb file &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/config/routes.rb"&gt;here&lt;/a&gt;.&lt;/p&gt;
1
2
3
4
5
RailsEnginesExample::Application.routes.draw do
 BootInquirer.each_active_app do |app|
 mount app.engine =&amp;gt; '/', as: app.gem_name
 end
end
&lt;p&gt;So as expected, the operator app has no routes of it&#8217;s own and it&#8217;s all handled by the engines. I&#8217;ll add little more about the &lt;code&gt;BootInquirer&lt;/code&gt; in a bit. It is just a helper class that knows all the engines. This means that the code is functionally something more like this:&lt;/p&gt;
1
2
3
4
5
6
RailsEnginesExample::Application.routes.draw do
 mount Admin::Engine =&amp;gt; '/', as: 'admin'
 mount Account::Engine =&amp;gt; '/', as: 'account'
 mount Content::Engine =&amp;gt; '/', as: 'content'
 mount Marketing::Engine =&amp;gt; '/', as: 'marketing'
end
&lt;p&gt;It would really clean to have something other than root in these mountings, but it doesn&#8217;t seem practical or that important. We want to be able to have full control over our url structure. For example, mounting the account engine at anything but root would prevent it from handling both the &lt;code&gt;/login&lt;/code&gt; and &lt;code&gt;/signup&lt;/code&gt; paths. The tradeoff is that two engines could claim the same URLs and conflict with much confusion. That&#8217;s something we can manage with minimal effort. We&#8217;ve found that most engine route files start with &lt;code&gt;scope&lt;/code&gt; to put most things under one directory or a few &lt;code&gt;resources&lt;/code&gt; which does basically the same thing.&lt;/p&gt;
&lt;p&gt;Another important note is to &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/account/lib/account/engine.rb#L3"&gt;use&lt;/a&gt; &lt;code&gt;isolate_namespace&lt;/code&gt; in your Engine declaration. That prevents various things like helper methods from leaking into other engines. This makes sense for our case because the whole point is to stay contained. Another side effect is route helpers like &#8216;posts_path&#8217; to work as expected without needing to prefix them like &lt;code&gt;content.posts_path&lt;/code&gt; in your views. I believe it might also make the parameters more regular (for example having &lt;code&gt;params[:post]&lt;/code&gt; instead of &lt;code&gt;params[:content_post]&lt;/code&gt;). Oh, just put it in &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/apps/admin/lib/admin/engine.rb"&gt;there&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Tests&lt;/h3&gt;
&lt;p&gt;Many of the issues noted &lt;a href="http://pivotallabs.com/experience-report-engine-usage-that-didn-t-work/"&gt;here&lt;/a&gt; revolve around testing. One of the promises of engines is the existence of the subcomponents that you could (theoretically) use in some other app. This is not the goal here. We are using engines maximize local simplicity in our application, not create a reusable library. To that end, we don&#8217;t think the normal Engine testing mechanism of creating a dummy app within the engine is helpful.&lt;/p&gt;
&lt;p&gt;On our first engine application, we put a &lt;code&gt;spec&lt;/code&gt; folder within each engine and then wrote a &lt;code&gt;rspec_all.sh&lt;/code&gt; script to run each of them. It was not the right way. To do that really correctly, you&#8217;d test at that level and you&#8217;d have to test again at the integration level. This is another case of it not being worth it. Now we just put all our specs in the spec &lt;a href="https://github.com/taskrabbit/rails_engines_example/tree/434e687b795ec52705a3be1dd2c635f0054336d4/spec"&gt;directory&lt;/a&gt; and run &lt;code&gt;rspec spec&lt;/code&gt; to run them all.&lt;/p&gt;
&lt;p&gt;Each engine has it&#8217;s own directory in there to keep it somewhat separate and to be able to easily test all of a single engine and it ends up looking like a normal app&#8217;s root spec folder with models, requests, controllers, etc. Much like the admin engine, there are no rules about what you can and can&#8217;t use in the tests. The goal is make sure the code is right, not to follow some architectural edict. For example, in a test that checks whether a Task can be paid for, it&#8217;s fine to use the models from the payment engine to make sure everything worked together well.&lt;/p&gt;
&lt;p&gt;One thing that is interesting is &lt;a href="http://api.rubyonrails.org/v3.2.13/classes/ActiveRecord/Fixtures.html"&gt;fixtures&lt;/a&gt;. We like using fixtures because it&#8217;s a pretty good balance between speed and fully executing most of the code in out tests. We use &lt;a href="https://github.com/rdy/fixture_builder"&gt;fixture_builder&lt;/a&gt; to save the hassle of maintaining those yml files precisely. Anyway, the issue in the case where we have multiple engine&#8217;s each with their own model class is that fixtures (and &lt;a href="https://github.com/thoughtbot/factory_girl"&gt;factories&lt;/a&gt; for that matter) only get one class. So if you do something like this while testing in the content engine, you&#8217;d be in trouble:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
describe Content::Post do
 fixtures :users
 it "should be associated with a user" do
 user = users(:willy)
 post = Content::Post.new(content: "words")
 post.user = user
 post.save.should == true
 user.posts.count.should == 1
 end
end
&lt;p&gt;This is a problem because of classes expecting to be a certain type. You&#8217;d get this error:&lt;/p&gt;
1
2
3
4
5
6
Failures:
 1) Content::Post should be associated with a user
 Failure/Error: post.user = user
 ActiveRecord::AssociationTypeMismatch:
 Content::User(#70346317272500) expected, got Account::User(#70346295701620)
&lt;p&gt;So the user has to be and instance of the &lt;code&gt;Content::User&lt;/code&gt; and not an &lt;code&gt;Account::User&lt;/code&gt; class. We use a &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/spec/support/fixture_class_name_helper.rb"&gt;helper&lt;/a&gt; to say what the classes are as well as switch between them. So this test will use the correct classes:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
describe Content::Post do
 fixtures :users
 it "should be associated with a user" do
 user = fixture(:users, :willy, Content)
 post = Content::Post.new(content: "words")
 post.user = user
 post.save.should == true
 user.posts.count.should == 1
 end
end
&lt;p&gt;The same sort of thing could be done with FactoryGirl too. Often, we end up just using the ids more than we would in a normal test suite. The important thing to note is to just do whatever you feel gives you the best coverage with the most return on investment for your time.&lt;/p&gt;
&lt;h3&gt;Memory&lt;/h3&gt;
&lt;p&gt;You may have noticed the &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/lib/boot_inquirer.rb"&gt;BootInquirer&lt;/a&gt; class mentioned earlier. This is a class that know about all the engines in the system.&lt;/p&gt;
1
2
3
4
5
6
 APPS = {
 'a' =&amp;gt; 'account',
 'c' =&amp;gt; 'content',
 'm' =&amp;gt; 'marketing',
 'z' =&amp;gt; 'admin'
 }
&lt;p&gt;It is called from three places.&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Gemfile
gemspec path: "apps/shared"
BootInquirer.each_active_app do |app|
 gemspec path: "apps/#{app.gem_name}"
end
# application.rb
require_relative "../lib/boot_inquirer"
BootInquirer.each_active_app do |app|
 require app.gem_name
end
# routes.rb
BootInquirer.each_active_app do |app|
 mount app.engine =&amp;gt; '/', as: app.gem_name
end
&lt;p&gt;The main point here is to simplify even further how to add a new engine to the app. The secondary point is somewhat interesting, though. One of the potential downsides of an engine-based app over multiple apps is the larger memory footprint or larger scale production rollout of some obscure and complicated native library for just one of the engines. This would not be a problem if you could &#8220;boot&#8221; the app with the just &lt;em&gt;some&lt;/em&gt; of the engines enabled. The &lt;code&gt;BootInquirer&lt;/code&gt; makes that possible. It inspects and environment variable to know which engines to add to the gemspec and require and route towards.&lt;/p&gt;
1
2
3
4
$ ENGINE_BOOT=am bundle exec rails c
 =&amp;gt; will boot the account and marketing engines - but not content, admin, etc.
$ ENGINE_BOOT=-m bundle exec rails c
 =&amp;gt; will boot all engines except marketing
&lt;p&gt;We haven&#8217;t actually seen memory be that different that in our large Rails app. In fact, it is less because of a combination of Ruby upgrades and less conspicuous gem consumption. However, memory-wise this setup allows us to use our one codebase like multiple apps. In that case, we use a load balancer to map url paths to the correct app.&lt;/p&gt;
&lt;p&gt;This is also useful in processing background workers. You would likely get an extra Resque worker or two. It&#8217;s important to have a good queue strategy (different queues per engine) and to really not have the engines depend on each other to make this work, of course.&lt;/p&gt;
&lt;p&gt;In order for this to work, we need to be more mindful of our gem usage. The first step is changing &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/config/application.rb#L7"&gt;application.rb&lt;/a&gt; to say &lt;code&gt;Bundler.setup(:default, Rails.env)&lt;/code&gt; instead of &lt;code&gt;Bundler.require(:default, Rails.env)&lt;/code&gt; as usual. This mean we will have to explicitly require the gems we are using instead of it happening automatically. Most of those dependencies are in the engines&#8217; gemspecs and they&#8217;d have to be required anyway. However, by changing this line, we&#8217;ll have to require what is needed from the main Gemfile as well. Ideally, there wouldn&#8217;t be anything in &lt;a href="https://github.com/taskrabbit/rails_engines_example/blob/434e687b795ec52705a3be1dd2c635f0054336d4/Gemfile"&gt;there&lt;/a&gt; at all, but we have some Rails and test stuff that all the engines use.&lt;/p&gt;
&lt;p&gt;You may notice that the exception we made for the admin engine rears its head here. If admin depends on the other engines, you won&#8217;t be able to use admin experience unless you launch the app with all those engines. This is definitely true. The servers that the admin urls route to will have to have all of the engines running. We found it was useful to quarantine admin usage anyway as there are a few requests and inputs that could blow out the heap size fairly easily.&lt;/p&gt;
&lt;h3&gt;Folders and Files&lt;/h3&gt;
&lt;p&gt;If you&#8217;re interested in this setup, you&#8217;re just going to have to get used to it. There are a lot of directories. There are lot of files named the same thing. I&#8217;ve found that Sublime Text is better for this than Textmate. I&#8217;m a huge fan of &#8984;T to open files and Sublime allows the use of the directory names in that typeahead list. If your editor doesn&#8217;t do this, then you&#8217;ll spend more time than you want to look through the six different &lt;code&gt;user.rb&lt;/code&gt; or &lt;code&gt;application_contoller.rb&lt;/code&gt; files in the project.&lt;/p&gt;
&lt;h3&gt;Interaction Between Engines&lt;/h3&gt;
&lt;p&gt;So we&#8217;ve gone through a lot of trouble to keep that shiny new Rails app feel. Each engine has a particular goal in life and everything is nice and simple. Particularly in the API case, it writes and reads its data and generally just takes of business. But the world isn&#8217;t always perfect and sometimes the engines need to talk to each other. If it&#8217;s happening too much, we probably didn&#8217;t modularize along the right lines and we should consider throwing them together. We don&#8217;t have all the answers, but engine naming and scoping seems to be a fine art. It&#8217;s very tempting to go very narrow for cleanliness and it&#8217;s also very tempting to just throw stuff in to an existing one so I&#8217;m not surprised when we find that the lines are a not drawn quite right.&lt;/p&gt;
&lt;p&gt;There are other cases, though, that are not systemic errors in engine-picking and future-prediction. It&#8217;s the kind of case I talked about with the &lt;code&gt;posts_count&lt;/code&gt; above. Let&#8217;s say we had a good reason to make that happen. Actually let&#8217;s change it just a little bit to be more realistic. Let&#8217;s say we had a profile engine where user could manage his online presence. Let&#8217;s also say that other users could see and rate his posts. It&#8217;s a completely reasonable thing to have an average post rating shown on his profile. Does this data about posts mean that the profile pages or API should be part of the content engine? We don&#8217;t think so. This is likely just one tiny detail in an engine otherwise setup to upload photos, quote favorite movies, or whatever. We just need a little average rating on the there somewhere with a link to the posts.&lt;/p&gt;
&lt;p&gt;In this case, we use our &lt;a href="https://github.com/taskrabbit/resque-bus"&gt;Resque Bus&lt;/a&gt; gem extensively. This is a minor add-on to &lt;a href="https://github.com/resque/resque/blob/1-x-stable/README.markdown"&gt;Resque&lt;/a&gt; that changes the paradigm just enough to allow us to decouple these engines. In a normal Rails apps using Resque, we would queue up a background worker to process the rating. This worker would calculate the new average rating and store it in the profile. Resque Bus uses publishing and subscription to accomplish similar goals. If you buy into this model, you have all of your engines and in this case the content engine, publishing to the bus when interesting things happen. Creation of a post or rating would be a good example. Other engines (or completely separate apps) then subscribe to events they find interesting. There can be more than one subscriber. Even when there is nothing particularly interesting to do, we&#8217;ve found that always having a subscriber to record the event produces a really useful log. In the rating case, though, the profile engine would also subscribe to the event and record the new rating. By one engine simply noting that something happened and the other reacting to the occurrence, we maintain the conceptual as well as physical (these engines could be on different servers) decoupling.&lt;/p&gt;
&lt;p&gt;What exactly gets published and how that is used is up to the developers involved. There seems to be a few options in this specific case.&lt;/p&gt;
&lt;p&gt;A) The content engine is publishing data changes. &lt;code&gt;ResqueBus.publish('post_rated', {post_id: 42, author_id: 2, rated_by: 4, rating: 4})&lt;/code&gt;
B) The content engine adds some calculations. &lt;code&gt;ResqueBus.publish('post_rated', {post_id: 42, author_id: 2, rated_by: 4, rating: 4, new_average: 4.25, total_ratings: 20})&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Choosing option B is interesting for a few reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It is predicting the information other engines will want to know.&lt;/li&gt;
&lt;li&gt;It decreases the coupling because now the profile engine now just records the info instead of having to calculate it.&lt;/li&gt;
&lt;li&gt;It creates a record of the averages in our event store. Maybe we&#8217;ll draw a graph of it sometime.&lt;/li&gt;
&lt;li&gt;It adds to the time required to complete the request to create the rating.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This would mean the post engine would have something like this in an initializer:&lt;/p&gt;
1
2
3
4
5
6
7
8
ResqueBus.dispatch('profile') do
 subscribe 'post_rated' do |attributes|
 profile = Profile::Document.find_by(user_id: attributes['author_id'])
 profile.post_ratings_total = attributes['total_ratings']
 profile.post_rating_average = attributes['new_average']
 profile.save!
 end
end
&lt;p&gt;Or in the way that we prefer using a subscriber class that we would put in &lt;code&gt;profile/app/subscribers&lt;/code&gt;:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
class Profile::ContentSubscriber
 include ResqueBus::Subscriber
 subscribe :post_created
 def post_created(attributes)
 profile = Profile::Document.find_by(user_id: attributes['post_author_id'])
 profile.post_ratings_total = attributes['total_ratings']
 profile.post_rating_average = attributes['new_average']
 profile.save!
 end
end
&lt;p&gt;It&#8217;s clearly a fine option and the added time probably isn&#8217;t too much assuming we have the right indexes on our database, but we actually tend to use option A. We don&#8217;t particularly like trying to predict which events are interesting and how other engines will use them so we just publish on all creations or updates. We are fine with the profile engine having read-only &lt;code&gt;Rate&lt;/code&gt; model and code to calculate the average. It could keep a running tally of the total number and just add this one to it, but we tend to recalculate it every time because it&#8217;s not that hard and is less fragile.&lt;/p&gt;
&lt;p&gt;It would look something like this:&lt;/p&gt;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Profile::ContentSubscriber
 include ResqueBus::Subscriber
 subscribe :post_created
 def post_created(attributes)
 total = Profile::Rate.where(author_id: attributes['author_id']).count
 sum = Profile::Rate.where(author_id: attributes['author_id']).sum(:rating)
 profile = Profile::Document.find_by(user_id: attributes['post_author_id'])
 profile.post_ratings_total = total
 profile.post_rating_average = sum.to_f / (5*total.to_f)
 profile.save!
 end
end
&lt;p&gt;However you do it, the point is that this engine is working on it&#8217;s own for it&#8217;s own purposes. Layering it on, it&#8217;s quite straightforward to see how we could build spam detection as its own engine or into the admin one. We could subscribe to ratings or post creation and react accordingly, maybe pulling the post or giving the user a score that limits his visibility, etc. Or we could add a metrics engine, to report the conversion of a user on his first post to a variety of external services. Then, when a new developer starts and asks where the metrics code is, we don&#8217;t have to say what we said before which was, &#8220;everywhere.&#8221; We could show very simple mappings between things that are happening throughout the system and the numbers like revenue or engagement that are getting reported to something like Google Analytics.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;Try out engines. We like them.&lt;/p&gt;
&lt;p&gt;Discuss on &lt;a href="https://news.ycombinator.com/item?id=7225447"&gt;Hacker News&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 09:04:10 -0800</pubDate>
      <link>http://tech.taskrabbit.com/blog/2014/02/11/rails-4-engines/</link>
      <guid>http://tech.taskrabbit.com/blog/2014/02/11/rails-4-engines/</guid>
    </item>
    <item>
      <title>
		Scientific method: Statistical errors : Nature News &amp; Comment
	</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7225739'&gt;"
		Scientific method: Statistical errors : Nature News &amp; Comment
	"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.nature.com/news/scientific-method-statistical-errors-1.14700'&gt;http://www.nature.com/news/scientific-method-statistical-errors-1.14700&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 
 
 &lt;div&gt; &lt;div&gt;
 &lt;img src="/polopoly_fs/7.15481.1392118822!/image/pvalue_art.jpg_gen/derivatives/landscape_630/pvalue_art.jpg"&gt;&lt;p&gt;DALE EDWIN MURRAY&lt;/p&gt; &lt;/div&gt;
 &lt;/div&gt;
 &lt;p&gt;For a brief moment in 2010, Matt Motyl was on the brink of scientific glory: he had discovered that extremists quite literally see the world in black and white.&lt;/p&gt; 
 
 
 &lt;p&gt;The results were &#8220;plain as day&#8221;, recalls Motyl, a psychology PhD student at the University of Virginia in Charlottesville. Data from a study of nearly 2,000 people seemed to show that political moderates saw shades of grey more accurately than did either left-wing or right-wing extremists. &#8220;The hypothesis was sexy,&#8221; he says, &#8220;and the data provided clear support.&#8221; The &lt;i&gt;P&lt;/i&gt; value, a common index for the strength of evidence, was 0.01 &#8212; usually interpreted as 'very significant'. Publication in a high-impact journal seemed within Motyl's grasp.&lt;/p&gt; &lt;p&gt;But then reality intervened. Sensitive to controversies over reproducibility, Motyl and his adviser, Brian Nosek, decided to replicate the study. With extra data, the &lt;i&gt;P&lt;/i&gt; value came out as 0.59 &#8212; not even close to the conventional level of significance, 0.05. The effect had disappeared, and with it, Motyl's dreams of youthful fame1.&lt;/p&gt; &lt;p&gt;It turned out that the problem was not in the data or in Motyl's analyses. It lay in the surprisingly slippery nature of the &lt;i&gt;P&lt;/i&gt; value, which is neither as reliable nor as objective as most scientists assume. &#8220;&lt;i&gt;P&lt;/i&gt; values are not doing their job, because they can't,&#8221; says Stephen Ziliak, an economist at Roosevelt University in Chicago, Illinois, and a frequent critic of the way statistics are used.&lt;/p&gt; &lt;p&gt;For many scientists, this is especially worrying in light of the reproducibility concerns. In 2005, epidemiologist John Ioannidis of Stanford University in California suggested that most published findings are false2; since then, a string of high-profile replication problems has forced scientists to rethink how they evaluate results.&lt;/p&gt; &lt;p&gt;At the same time, statisticians are looking for better ways of thinking about data, to help scientists to avoid missing important information or acting on false alarms. &#8220;Change your statistical philosophy and all of a sudden different things become important,&#8221; says Steven Goodman, a physician and statistician at Stanford. &#8220;Then 'laws' handed down from God are no longer handed down from God. They're actually handed down to us by ourselves, through the methodology we adopt.&#8221;&lt;/p&gt; &lt;h2&gt;Out of context&lt;/h2&gt; &lt;p&gt;&lt;i&gt;P&lt;/i&gt; values have always had critics. In their almost nine decades of existence, they have been likened to mosquitoes (annoying and impossible to swat away), the emperor's new clothes (fraught with obvious problems that everyone ignores) and the tool of a &#8220;sterile intellectual rake&#8221; who ravishes science but leaves it with no progeny3. One researcher suggested rechristening the methodology &#8220;statistical hypothesis inference testing&#8221;3, presumably for the acronym it would yield.&lt;/p&gt; &lt;p&gt;The irony is that when UK statistician Ronald Fisher introduced the &lt;i&gt;P&lt;/i&gt; value in the 1920s, he did not mean it to be a definitive test. He intended it simply as an informal way to judge whether evidence was significant in the old-fashioned sense: worthy of a second look. The idea was to run an experiment, then see if the results were consistent with what random chance might produce. Researchers would first set up a 'null hypothesis' that they wanted to disprove, such as there being no correlation or no difference between two groups. Next, they would play the devil's advocate and, assuming that this null hypothesis was in fact true, calculate the chances of getting results at least as extreme as what was actually observed. This probability was the &lt;i&gt;P&lt;/i&gt; value. The smaller it was, suggested Fisher, the greater the likelihood that the straw-man null hypothesis was false.&lt;a&gt;&lt;/a&gt;&lt;/p&gt; 
 
 
 &lt;div&gt; &lt;div&gt;
 &lt;a href="http://www.nature.com/news/506150a-i2-jpg-7.15482?article=1.14700"&gt;&lt;img src="/polopoly_fs/7.15482.1392118899!/image/p-graphic.jpg_gen/derivatives/landscape_630/p-graphic.jpg"&gt;&lt;/a&gt; &lt;p&gt;R. NUZZO; SOURCE: T. SELLKE ET AL. AM. STAT. 55, 62&#8211;71 (2001)&lt;/p&gt; &lt;/div&gt;
 &lt;/div&gt;
 &lt;p&gt;For all the &lt;i&gt;P&lt;/i&gt; value's apparent precision, Fisher intended it to be just one part of a fluid, non-numerical process that blended data and background knowledge to lead to scientific conclusions. But it soon got swept into a movement to make evidence-based decision-making as rigorous and objective as possible. This movement was spearheaded in the late 1920s by Fisher's bitter rivals, Polish mathematician Jerzy Neyman and UK statistician Egon Pearson, who introduced an alternative framework for data analysis that included statistical power, false positives, false negatives and many other concepts now familiar from introductory statistics classes. They pointedly left out the &lt;i&gt;P&lt;/i&gt; value.&lt;/p&gt; &lt;p&gt;But while the rivals feuded &#8212; Neyman called some of Fisher's work mathematically &#8220;worse than useless&#8221;; Fisher called Neyman's approach &#8220;childish&#8221; and &#8220;horrifying [for] intellectual freedom in the west&#8221; &#8212; other researchers lost patience and began to write statistics manuals for working scientists. And because many of the authors were non-statisticians without a thorough understanding of either approach, they created a hybrid system that crammed Fisher's easy-to-calculate &lt;i&gt;P&lt;/i&gt; value into Neyman and Pearson's reassuringly rigorous rule-based system. This is when a &lt;i&gt;P&lt;/i&gt; value of 0.05 became enshrined as 'statistically significant', for example. &#8220;The &lt;i&gt;P&lt;/i&gt; value was never meant to be used the way it's used today,&#8221; says Goodman.&lt;/p&gt; &lt;h2&gt;What does it all mean?&lt;/h2&gt; &lt;p&gt;One result is an abundance of confusion about what the &lt;i&gt;P&lt;/i&gt; value means4. Consider Motyl's study about political extremists. Most scientists would look at his original &lt;i&gt;P&lt;/i&gt; value of 0.01 and say that there was just a 1% chance of his result being a false alarm. But they would be wrong. The &lt;i&gt;P&lt;/i&gt; value cannot say this: all it can do is summarize the data assuming a specific null hypothesis. It cannot work backwards and make statements about the underlying reality. That requires another piece of information: the odds that a real effect was there in the first place. To ignore this would be like waking up with a headache and concluding that you have a rare brain tumour &#8212; possible, but so unlikely that it requires a lot more evidence to supersede an everyday explanation such as an allergic reaction. The more implausible the hypothesis &#8212; telepathy, aliens, homeopathy &#8212; the greater the chance that an exciting finding is a false alarm, no matter what the &lt;i&gt;P&lt;/i&gt; value is.&lt;/p&gt; 
 
 
 &lt;p&gt;These are sticky concepts, but some statisticians have tried to provide general rule-of-thumb conversions (see &lt;a href="#cause"&gt;'Probable cause'&lt;/a&gt;). According to one widely used calculation5, a &lt;i&gt;P&lt;/i&gt; value of 0.01 corresponds to a false-alarm probability of at least 11%, depending on the underlying probability that there is a true effect; a &lt;i&gt;P&lt;/i&gt; value of 0.05 raises that chance to at least 29%. So Motyl's finding had a greater than one in ten chance of being a false alarm. Likewise, the probability of replicating his original result was not 99%, as most would assume, but something closer to 73% &#8212; or only 50%, if he wanted another 'very significant' result6, 7. In other words, his inability to replicate the result was about as surprising as if he had called heads on a coin toss and it had come up tails.&lt;/p&gt; &lt;p&gt;Critics also bemoan the way that &lt;i&gt;P&lt;/i&gt; values can encourage muddled thinking. A prime example is their tendency to deflect attention from the actual size of an effect. Last year, for example, a study of more than 19,000 people showed8 that those who meet their spouses online are less likely to divorce (&lt;i&gt;p&lt;/i&gt; &amp;lt; 0.002) and more likely to have high marital satisfaction (&lt;i&gt;p&lt;/i&gt; &amp;lt; 0.001) than those who meet offline (see &lt;span&gt;Nature&lt;/span&gt; &lt;a href="http://doi.org/rcg"&gt;http://doi.org/rcg&lt;/a&gt;; 2013). That might have sounded impressive, but the effects were actually tiny: meeting online nudged the divorce rate from 7.67% down to 5.96%, and barely budged happiness from 5.48 to 5.64 on a 7-point scale. To pounce on tiny &lt;i&gt;P&lt;/i&gt; values and ignore the larger question is to fall prey to the &#8220;seductive certainty of significance&#8221;, says Geoff Cumming, an emeritus psychologist at La Trobe University in Melbourne, Australia. But significance is no indicator of practical relevance, he says: &#8220;We should be asking, 'How much of an effect is there?', not 'Is there an effect?'&#8221;&lt;/p&gt; &lt;p&gt;Perhaps the worst fallacy is the kind of self-deception for which psychologist Uri Simonsohn of the University of Pennsylvania and his colleagues have popularized the term &lt;i&gt;P&lt;/i&gt;-hacking; it is also known as data-dredging, snooping, fishing, significance-chasing and double-dipping. &#8220;&lt;i&gt;P&lt;/i&gt;-hacking,&#8221; says Simonsohn, &#8220;is trying multiple things until you get the desired result&#8221; &#8212; even unconsciously. It may be the first statistical term to rate a definition in the online Urban Dictionary, where the usage examples are telling: &#8220;That finding seems to have been obtained through &lt;i&gt;p&lt;/i&gt;-hacking, the authors dropped one of the conditions so that the overall &lt;i&gt;p&lt;/i&gt;-value would be less than .05&#8221;, and &#8220;She is a &lt;i&gt;p&lt;/i&gt;-hacker, she always monitors data while it is being collected.&#8221;&lt;/p&gt; 
 
 &lt;div&gt;
 &lt;div&gt;
 
 &#8220;The P value was never meant to be used the way it's used today.&#8221;
 
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;p&gt;Such practices have the effect of turning discoveries from exploratory studies &#8212; which should be treated with scepticism &#8212; into what look like sound confirmations but vanish on replication. Simonsohn's simulations have shown9 that changes in a few data-analysis decisions can increase the false-positive rate in a single study to 60%. &lt;i&gt;P&lt;/i&gt;-hacking is especially likely, he says, in today's environment of studies that chase small effects hidden in noisy data. It is tough to pin down how widespread the problem is, but Simonsohn has the sense that it is serious. In an analysis10, he found evidence that many published psychology papers report &lt;i&gt;P&lt;/i&gt; values that cluster suspiciously around 0.05, just as would be expected if researchers fished for significant &lt;i&gt;P&lt;/i&gt; values until they found one.&lt;/p&gt; &lt;h2&gt;Numbers game&lt;/h2&gt; &lt;p&gt;Despite the criticisms, reform has been slow. &#8220;The basic framework of statistics has been virtually unchanged since Fisher, Neyman and Pearson introduced it,&#8221; says Goodman. John Campbell, a psychologist now at the University of Minnesota in Minneapolis, bemoaned the issue in 1982, when he was editor of the &lt;i&gt;Journal of Applied Psychology&lt;/i&gt;: &#8220;It is almost impossible to drag authors away from their &lt;i&gt;p&lt;/i&gt;-values, and the more zeroes after the decimal point, the harder people cling to them&#8221;11. In 1989, when Kenneth Rothman of Boston University in Massachusetts started the journal &lt;i&gt;Epidemiology&lt;/i&gt;, he did his best to discourage &lt;i&gt;P&lt;/i&gt; values in its pages. But he left the journal in 2001, and &lt;i&gt;P&lt;/i&gt; values have since made a resurgence.&lt;/p&gt; &lt;p&gt;Ioannidis is currently mining the PubMed database for insights into how authors across many fields are using &lt;i&gt;P&lt;/i&gt; values and other statistical evidence. &#8220;A cursory look at a sample of recently published papers,&#8221; he says, &#8220;is convincing that &lt;i&gt;P&lt;/i&gt; values are still very, very popular.&#8221;&lt;/p&gt; &lt;p&gt;Any reform would need to sweep through an entrenched culture. It would have to change how statistics is taught, how data analysis is done and how results are reported and interpreted. But at least researchers are admitting that they have a problem, says Goodman. &#8220;The wake-up call is that so many of our published findings are not true.&#8221; Work by researchers such as Ioannidis shows the link between theoretical statistical complaints and actual difficulties, says Goodman. &#8220;The problems that statisticians have predicted are exactly what we're now seeing. We just don't yet have all the fixes.&#8221;&lt;/p&gt; &lt;p&gt;Statisticians have pointed to a number of measures that might help. To avoid the trap of thinking about results as significant or not significant, for example, Cumming thinks that researchers should always report effect sizes and confidence intervals. These convey what a &lt;i&gt;P&lt;/i&gt; value does not: the magnitude and relative importance of an effect.&lt;/p&gt; &lt;p&gt;Many statisticians also advocate replacing the &lt;i&gt;P&lt;/i&gt; value with methods that take advantage of Bayes' rule: an eighteenth-century theorem that describes how to think about probability as the plausibility of an outcome, rather than as the potential frequency of that outcome. This entails a certain subjectivity &#8212; something that the statistical pioneers were trying to avoid. But the Bayesian framework makes it comparatively easy for observers to incorporate what they know about the world into their conclusions, and to calculate how probabilities change as new evidence arises.&lt;/p&gt; &lt;p&gt;Others argue for a more ecumenical approach, encouraging researchers to try multiple methods on the same data set. Stephen Senn, a statistician at the Centre for Public Health Research in Luxembourg City, likens this to using a floor-cleaning robot that cannot find its own way out of a corner: any data-analysis method will eventually hit a wall, and some common sense will be needed to get the process moving again. If the various methods come up with different answers, he says, &#8220;that's a suggestion to be more creative and try to find out why&#8221;, which should lead to a better understanding of the underlying reality.&lt;/p&gt; &lt;p&gt;Simonsohn argues that one of the strongest protections for scientists is to admit everything. He encourages authors to brand their papers '&lt;i&gt;P&lt;/i&gt;-certified, not &lt;i&gt;P&lt;/i&gt;-hacked' by including the words: &#8220;We report how we determined our sample size, all data exclusions (if any), all manipulations and all measures in the study.&#8221; This disclosure will, he hopes, discourage &lt;i&gt;P&lt;/i&gt;-hacking, or at least alert readers to any shenanigans and allow them to judge accordingly.&lt;/p&gt; &lt;p&gt;A related idea that is garnering attention is two-stage analysis, or 'preregistered replication', says political scientist and statistician Andrew Gelman of Columbia University in New York City. In this approach, exploratory and confirmatory analyses are approached differently and clearly labelled. Instead of doing four separate small studies and reporting the results in one paper, for instance, researchers would first do two small exploratory studies and gather potentially interesting findings without worrying too much about false alarms. Then, on the basis of these results, the authors would decide exactly how they planned to confirm the findings, and would publicly preregister their intentions in a database such as the Open Science Framework (&lt;a href="https://osf.io"&gt;https://osf.io&lt;/a&gt;). They would then conduct the replication studies and publish the results alongside those of the exploratory studies. This approach allows for freedom and flexibility in analyses, says Gelman, while providing enough rigour to reduce the number of false alarms being published.&lt;/p&gt; &lt;p&gt;More broadly, researchers need to realize the limits of conventional statistics, Goodman says. They should instead bring into their analysis elements of scientific judgement about the plausibility of a hypothesis and study limitations that are normally banished to the discussion section: results of identical or similar experiments, proposed mechanisms, clinical knowledge and so on. Statistician Richard Royall of Johns Hopkins Bloomberg School of Public Health in Baltimore, Maryland, said that there are three questions a scientist might want to ask after a study: 'What is the evidence?' 'What should I believe?' and 'What should I do?' One method cannot answer all these questions, Goodman says: &#8220;The numbers are where the scientific discussion should start, not end.&#8221;&lt;/p&gt; 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 09:35:31 -0800</pubDate>
      <link>http://www.nature.com/news/scientific-method-statistical-errors-1.14700</link>
      <guid>http://www.nature.com/news/scientific-method-statistical-errors-1.14700</guid>
    </item>
    <item>
      <title>CandySwipe Open Letter to King regarding trademark.</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7225945'&gt;"CandySwipe Open Letter to King regarding trademark."&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.candyswipe.com/king.html'&gt;http://www.candyswipe.com/king.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Wed, 12 Feb 2014 09:57:31 -0800</pubDate>
      <link>http://www.candyswipe.com/king.html</link>
      <guid>http://www.candyswipe.com/king.html</guid>
    </item>
    <item>
      <title>Scaling Asana.com - Asana Engineering Blog</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7226237'&gt;"Scaling Asana.com - Asana Engineering Blog"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://eng.asana.com/2014/02/scaling-asana-com/'&gt;http://eng.asana.com/2014/02/scaling-asana-com/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;This post isn&#8217;t about the Asana app &#8211; it&#8217;s about Asana.com, our &#8220;content site&#8221; &#8211; the place where we &lt;a href="https://asana.com?noredirect"&gt;sign up new users&lt;/a&gt;, market the &lt;a href="https://asana.com/product"&gt;app&lt;/a&gt; &amp;amp; &lt;a href="http://asana.com/apps"&gt;ecosystem&lt;/a&gt;, publish &lt;a href="http://asana.com/guide/learn"&gt;help&lt;/a&gt; and &lt;a href="http://asana.com/guide/aspire"&gt;other&lt;/a&gt; content, &lt;a href="http://asana.com/jobs"&gt;recruit&lt;/a&gt; new &lt;a href="http://asana.com/team"&gt;Asanas&lt;/a&gt;, and &lt;a href="http://asana.com/kittens"&gt;more&lt;/a&gt;. Ultimately, it is the place where we tell our story to the world.&lt;/p&gt;
&lt;p&gt;When people think about web scalability, they often think about requests, servers, and load balancers. We use (and love) &lt;a href="http://aws.amazon.com/elasticbeanstalk/"&gt;Elastic Beanstalk&lt;/a&gt;, so this isn&#8217;t a problem for us. The real issue is people: as Asana has grown from 20 to 60, and soon to 100, the challenge is creating a system where many people from different teams can contribute to the various parts of our site.&lt;/p&gt;
&lt;p&gt;Every team that reaches a certain size has this problem, and it is a much harder scaling challenge than adding servers. Teams that overcome it have great websites &#8211; where content is updated and the story evolves effortlessly with the team.&lt;/p&gt;
&lt;p&gt;At Asana, we&#8217;ve figured out a way to rapidly deploy changes to our content site. Non-technical teammates can jump right in and see their updates realtime, without bottlenecks, and without requests to developers. Everything we do is version controlled with Git &#8211; even copy changes. Virtually every team is contributing in some way to the site every week, and &lt;strong&gt;we do it all without a dedicated web developer&lt;/strong&gt;. We&#8217;re saving so much time that we can write blog posts about it.&lt;/p&gt;
&lt;p&gt;Here is how we do it:&lt;/p&gt;
 &lt;h2&gt;Everyone learns Markdown; all content is in Markdown&lt;/h2&gt;
&lt;p&gt;Markdown is the minimum required skill to contribute to Asana.com. You don&#8217;t have to know code. Luckily, if you can write, you can write Markdown. Everyone at Asana reads &lt;a href="http://daringfireball.net/projects/markdown/basics"&gt;this &lt;i&gt;Daring Fireball&lt;/i&gt; article&lt;/a&gt; to get familiar with the conventions. If you need to use an HTML snippet, such as a video embed code, Markdown parses it without a problem.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Every page on our site is based on a Markdown file:&lt;/strong&gt; every landing page, every help article, every job listing, and every showcase app. Literally every word on our site is in a Markdown file where anyone on our team can edit it.&lt;/p&gt;
&lt;h2&gt;We put the Markdown in Statamic, a file-based CMS&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://statamic.com"&gt;Statamic&lt;/a&gt; has an&lt;a href="http://statamic.com/learn/core-concepts/url-structure-and-your-content-directory"&gt; intuitive folder structure&lt;/a&gt; that anyone can understand. Content contributors know they can jump right into the _content folder and edit the Markdown files. Designers and developers know they can use templates and partials in virtually unlimited ways &#8211; we&#8217;ve never had to say &#8220;no&#8221; to a design because of limitations related to our CMS.&lt;/p&gt;
&lt;h2&gt;We make our changes in Github&lt;/h2&gt;
&lt;p&gt;Our content site is in a private Github repository that all Asanas have access to. We create and edit the Markdown files &lt;a href="https://github.com/blog/905-edit-like-an-ace"&gt;directly through their web interface&lt;/a&gt;. Technical teammates can clone the repo locally and use whatever tool stack they choose.&lt;/p&gt;
&lt;p&gt;Non-technical teammates don&#8217;t need to know Git &#8211; they just need to know that &#8220;commit&#8221; basically equals &#8220;save&#8221; &#8211; and that they can&#8217;t break anything because it&#8217;s all version controlled. The Github editor renders the Markdown for you when you commit &#8211; so you can see that your styling worked. But even better than that, we&#8217;ve found a way to show Asanas their changes immediately on the website itself. Here&#8217;s how&#8230;&lt;/p&gt;
&lt;h2&gt;Our staging server is realtime&lt;/h2&gt;
&lt;p&gt;Using Github&#8217;s &lt;a href="https://help.github.com/articles/post-receive-hooks%20"&gt;Post-Receive Hooks&lt;/a&gt;, every time anyone commits, we ping our staging server to pull and deploy a fresh version of our master branch. The person who added content can immediately see their change live on our staging server &#8211; and share it with the team if it requires feedback.&lt;/p&gt;
&lt;p&gt;Why is this such a big deal? The vast majority of contributors don&#8217;t need a local development environment &#8211; they just need a Github account and a web browser. In fact, they don&#8217;t need technical skills of any kind.&lt;/p&gt;
&lt;h2&gt;The work in Github is linked to Asana&lt;/h2&gt;
&lt;p&gt;Not surprisingly, we use Asana to track all the work we&#8217;re doing across the company. Using the &lt;a href="https://asana.com/apps/github"&gt;Asana Service Hook&lt;/a&gt; (available to everyone), we seamlessly connect Asana to Github. Anytime anyone commits, they add the relevant Asana #task_id to the commit message; this comments on the associated task in Asana with a link to the commit in Github, showing the whole team that the work has been done.&lt;/p&gt;
&lt;h2&gt;Before deploying, we test the site with CasperJS&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://casperjs.org"&gt;CasperJS&lt;/a&gt; is a web testing utility written on top of &lt;a href="http://phantomjs.org"&gt;PhantomJS&lt;/a&gt;. Before we push any change to our production server, we run a quick suite of tests to make sure that links resolve, resources load, and there are no Javascript errors. CasperJS can also do CSS regression testing by comparing screenshots.&lt;/p&gt;
&lt;h2&gt;Deploy daily&lt;/h2&gt;
&lt;p&gt;After running tests, I review the changes to the master branch since our last deployment (which are mainly Markdown changes &#8211; PHP/MySQL, HTML, JS, or CSS changes require a more thorough code review). We deploy daily to our production servers using the &lt;a href="http://aws.amazon.com/code/6752709412171743%20"&gt;Elastic Beanstalk CLI&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;This process has profound effects on our team and our site. Adding content to Asana.com is exciting &#8211; a recruiter presses &#8220;commit&#8221; and sees a new job listing; someone on user operations improves a support article and immediately sees the results on a staging server. This decentralizes responsibility, makes peoples&#8217; jobs more fun, and gives Asanas a strong sense of ownership over the content that relates to their function.&lt;/p&gt;
&lt;p&gt;It also gives us tremendous leverage (&lt;a href="http://blog.asana.com/2013/05/solving-the-ultimate-meta-problem/%20"&gt;and we&#8217;re all about that&lt;/a&gt;). This January, we completely redesigned a large portion of our site called the &lt;a href="http://asana.com/guide"&gt;Asana Guide&lt;/a&gt;. The effort involved a dozen people writing, editing, changing design, updating links and navigation, and adjusting our CMS &#8211; &lt;strong&gt;at the same time&lt;/strong&gt;. We tracked the work in Asana, did much of the work in Github, and watched it all unfold on a staging server&#8230; and we launched the site ontime without any issues.&lt;/p&gt;
&lt;p&gt;We are frequently asked by other startups (and our customers) how we keep our content site so up to date. The answer is simple: &lt;strong&gt;with the right tools, it&#8217;s a team effort&lt;/strong&gt;.&lt;/p&gt; 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 10:36:32 -0800</pubDate>
      <link>http://eng.asana.com/2014/02/scaling-asana-com/</link>
      <guid>http://eng.asana.com/2014/02/scaling-asana-com/</guid>
    </item>
    <item>
      <title>Saying Goodbye To&#160;Python</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7226372'&gt;"Saying Goodbye To&#160;Python"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html'&gt;http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;This post is long overdue; this isn&#8217;t a declaration of intent (any intent was long ago made real), just my reflection about my own path. I left the Python world a long time ago but I never took a chance to say&#160;goodbye.&lt;/p&gt;
&lt;p&gt;While I had moved on from Python years ago, I felt a certain attachment to it well past then, not quite admitting to myself that I wasn&#8217;t coming back. When my proposal for PyCon 2013 was rejected I was frustrated (it was going to be a fun talk!) but for some reason that made me fully realized that I wasn&#8217;t part of the Python community&#160;anymore.&lt;/p&gt;
&lt;p&gt;Python was the first &#8212; and I sometimes wonder if the only &#8212; programming community I was part of. Coming to Python was a conscious choice. In college I was interested in Scheme and Smalltalk. High-minded languages with interesting ideas, but hard to find practical uses. Scheme was always too underserved by its libraries and sparse academic community. In contrast Smalltalk was &lt;em&gt;productive&lt;/em&gt; &#8212; it was built by and for people who loved to build things. (More credit here should probably go to &lt;a href="http://en.wikipedia.org/wiki/Daniel_Henry_Holmes_Ingalls,_Jr."&gt;Dan Ingalls&lt;/a&gt; than &lt;a href="http://en.wikipedia.org/wiki/Alan_Kay"&gt;Alan Kay&lt;/a&gt; &#8212; I can sense in Dan Ingalls&#8217;s work a real passion for making things, and a pure but unproductive language would not have satisfied him.) But Smalltalk was and is a world of its own. It was culturally and technically pre-internet, pre-open-source, pre-online-community. And despite all the great things about the Smalltalk environment and language it couldn&#8217;t fulfill these then-new potentials, event as it tried to adapt. (I wrote a couple posts about this, intended as a sort of sympathetic explanation of why I couldn&#8217;t stick with Smalltalk: &lt;a href="http://www.ianbicking.org/where-smalltalk-went-wrong.html"&gt;Where Smalltalk Went Wrong&lt;/a&gt; and &lt;a href="http://www.ianbicking.org/where-smalltalk-went-wrong-2.html"&gt;a followup&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;At the end of my college career (1999ish) I consciously looked for a new home. I flirted with Perl, C, but knew they weren&#8217;t for me. Somewhere along the way I came upon Python, and it was good enough that I didn&#8217;t look for anything better. I can&#8217;t say I fell in love with Python like I had with Scheme and Smalltalk &#8212; Scheme was like an opening up of the world after going far beyond what anyone should ask of &lt;a href="http://en.wikipedia.org/wiki/GW-BASIC"&gt;&lt;span&gt;GW&lt;/span&gt;-&lt;span&gt;BASIC&lt;/span&gt;&lt;/a&gt;, and Squeak/Smalltalk was a deep mysterious world, like coming upon the ruins of an ancient and advanced civilization. Python in comparison was practical &#8212; but I wasn&#8217;t in the mood at that time to &lt;em&gt;discover&lt;/em&gt;, I wanted to &lt;em&gt;build&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And I &lt;a href="http://www.ianbicking.org/projects.html"&gt;built a lot of things in Python&lt;/a&gt;. I was doing workaday web programming and my enthusiasm went more towards building tools to build stuff than in the building itself. I &lt;em&gt;did&lt;/em&gt; build some cool products in those days, not just libraries, but for some reason it&#8217;s only the smaller units that I was able to push out. And I found a community in&#160;Python.&lt;/p&gt;
&lt;p&gt;And I built. Back in the days I contributed to &lt;a href="http://www.webwareforpython.org/"&gt;Webware&lt;/a&gt;, what felt like a completely different generation of web development in Python than today. I wrote &lt;a href="http://sqlobject.org/"&gt;SQLObject&lt;/a&gt;, my first foray into a oh-shit-people-are-using-this-I&#8217;m-not-sure-how-I-feel-about-that library. But SQLObject explored a lot of metaprogramming concepts that were quite novel in the Python world at that time. At the same time maintaining it felt like a terrible burden. It took me far too long to resolve that, and only once interest had died down (in no small part due to my lack of attention) did I hand it over to &lt;a href="http://phdru.name/"&gt;Oleg&lt;/a&gt; who has been a far more steady hand. This would be a pattern I would unfortunately repeat. But if SQLObject helped the &lt;a href="http://www.sqlalchemy.org/"&gt;next generation&lt;/a&gt; be better that&#8217;s good enough for&#160;me.&lt;/p&gt;
&lt;p&gt;Later came &lt;a href="http://wsgi.readthedocs.org/"&gt;&lt;span&gt;WSGI&lt;/span&gt;&lt;/a&gt; which excited me with its subtly functional basis. I built a whole web framework toolkit (or a framework for building web frameworks?) in &lt;a href="http://pythonpaste.org/"&gt;Paste&lt;/a&gt;. Few people really understood what I was trying to do with Paste &#8212; at times including me. Some people like &lt;a href="http://groovie.org/"&gt;Ben Bangert&lt;/a&gt; were able to see the principles underneath the code, and get them out into the world in the kind of usable state that I intended to enable. (And along the way I sometimes felt like I was doing the same for &lt;a href="http://dirtsimple.org/programming/"&gt;&lt;span&gt;PJE&lt;/span&gt;&lt;/a&gt;.) Python web frameworks were a mess back then; ultimately &lt;a href="https://www.djangoproject.com/"&gt;reaching for the crown&lt;/a&gt; using a monolithic approach was a more successful technique than trying to build bridges as I attempted with Paste. I&#8217;m still not sure what lesson to take from that. Not a &lt;em&gt;general&lt;/em&gt; lesson, but more understanding the landscape. And understanding what you can bring to a problem, and who you can bring with. I feel like I&#8217;m only now really understanding the importance of vision combined with a diverse group of skills and perspectives, and I have even more to learn about how to actually assemble and coordinate the right group of people in the right environment to&#160;succeed.&lt;/p&gt;
&lt;p&gt;Somewhere around here I feel like I reached my 10,000 hours of Python coding. I wrote &lt;a href="http://webob.org/"&gt;WebOb&lt;/a&gt;, taking the lessons of Paste and a better intuition for library design. I still think it&#8217;s the best mapping of &lt;span&gt;HTTP&lt;/span&gt; to Python. Other libraries include more aspects of web development in their scope, or have better documentation, and more users, but when viewed with a particular lens I&#8217;m still very proud of WebOb. And it&#8217;s been an important building block in a lot of people&#8217;s explorations into &lt;a href="http://docs.webob.org/en/latest/do-it-yourself.html"&gt;building a web framework&lt;/a&gt;. Other libraries from this period are &lt;a href="http://lxml.de/lxmlhtml.html"&gt;lxml.html&lt;/a&gt;, smaller things like &lt;a href="http://lxml.de/lxmlhtml.html"&gt;WebTest&lt;/a&gt;, &lt;a href="http://pythonpaste.org/scripttest/"&gt;ScriptTest&lt;/a&gt;, &lt;a href="https://pypi.python.org/pypi/MiniMock"&gt;MiniMock&lt;/a&gt;, &lt;a href="http://pythonpaste.org/tempita/"&gt;Tempita&lt;/a&gt;, perhaps the over-ambition (or just mis-ambition) of &lt;a href="http://www.coactivate.org/projects/deliverance/introduction"&gt;Deliverance&lt;/a&gt;. That period felt like a clearing out of my system, unloading a bunch of&#160;ideas.&lt;/p&gt;
&lt;p&gt;But for whatever reason my most successful tools were &lt;a href="http://www.virtualenv.org/"&gt;virtualenv&lt;/a&gt; and &lt;a href="http://www.pip-installer.org/"&gt;pip&lt;/a&gt;. These were never my greatest passions, or even close. They were about: (a) fixing personal annoyances in deployment (virtualenv), and (b) getting people to stop fucking whining about Setuptools and easy_install (pip). I&#8217;m not sure whether I blame the uneasy success of these tools on broad appeal, or that they are in a sense user-visible tools and not libraries, or that I didn&#8217;t like doing them because no one liked doing them and so there was a vacuum waiting to be&#160;filled.&lt;/p&gt;
&lt;p&gt;And then my last project, &lt;a href="https://bitbucket.org/ianb/silverlining/src"&gt;Silver Lining&lt;/a&gt;. It was early on in the devops revolution, an attempt to think about what a generic container for web applications might look like. It was in a sense going deeper down the hole of virtualenv and pip, but with an aim to build a full product and not just a set of eclectic tools. No one cared. And I only cared a little &#8212; I cared because it was completing some ideas I&#8217;d long had about deployment, because for a certain kind of web application development it felt nimble and reliable, because it removed or automated tasks I didn&#8217;t like to do. But I didn&#8217;t &lt;em&gt;care&lt;/em&gt;, no more than I cared about virtualenv or pip. I&#8217;d gone down a path that was about code and technical design, but if I stepped back it was&#160;unexciting.&lt;/p&gt;
&lt;p&gt;And when I did step back there wasn&#8217;t anything in Python that excited me. Python was doing great, my interest had nothing to jumping on or off bandwagons. Python &lt;em&gt;is&lt;/em&gt; doing great &#8212; better than ever (&lt;a href="https://plus.google.com/+IanBicking/posts/iEVXdcfXkz7"&gt;minor bumps with versions aside&lt;/a&gt;). But I think in my mind I&#8217;d always imagined I could build up just the right toolset, and using that toolset create the product I actually wanted to create &#8212; what exactly that product was, I don&#8217;t know, but with the right tools I imagined I could move fast enough and confidently enough to find&#160;it.&lt;/p&gt;
&lt;p&gt;Sometimes when I&#8217;m feeling particularly excited about an idea, like &lt;em&gt;really&lt;/em&gt; excited, I have to take a break. I need to calm down. Try to wrap my head around the ideas, because I know if I push forward directly that I&#8217;ll just muddle things up and feel disappointed. No, I don&#8217;t &lt;em&gt;know&lt;/em&gt; that is true: maybe I don&#8217;t want to have to confront, in that moment, that the idea is not as cool as I think it is, or as possible as I think it is. But often I do step back into the problem, with ideas that are more mature for having thought more deeply about them. In a sense I think creating tools and libraries was a similar process: I felt too excited about creating something great, because I worried I&#8217;d muddle everything up, or afraid I just couldn&#8217;t pull it off, and so I stepped away and would work on&#160;tools.&lt;/p&gt;
&lt;p&gt;I always directed my attention to the web, even if I got bogged down in the server. Somehow I skipped native GUIs, even as a user. But pure data processing without consideration for what you &lt;em&gt;do&lt;/em&gt; with the data felt unexciting. And ops &#8212; that&#8217;s just the worst. I was, and am, a true believer in Free Software; and I was, and am, a true believer in the web. That is, I don&#8217;t see either as simply a means to an ends. But not for the same reasons, and I can believe in a web that isn&#8217;t open source, and open source that isn&#8217;t for the web. And yet writing it down I realize I don&#8217;t &lt;em&gt;care&lt;/em&gt; about open source that isn&#8217;t for the&#160;web.&lt;/p&gt;
&lt;p&gt;When I stepped back Python no longer seemed relevant to the web, at least not the part of the web that interested me. The tools I had built were no longer relevant either, they were not the tools with which I could realize my ambitions. The database-backed website, or the dynamic-&lt;span&gt;HTTP&lt;/span&gt;-based web application, templates and deployments, anything you&#8217;d call &#8220;&lt;span&gt;REST&lt;/span&gt;&#8221; &#8212; none of it seemed like the future, and whatever this vague thing was that I&#8217;d been looking for, I wasn&#8217;t going to find it&#160;there.&lt;/p&gt;
&lt;p&gt;This wasn&#8217;t an actual revelation, I&#8217;m constructing it in retrospect. If you&#8217;d asked me I would have agreed with this notion even years earlier, and it&#8217;s not like I came up with some unique idea, if anything I would call it self-evident, don&#8217;t we all know this is where the world is going? And so I started to look towards Javascript and the browser and the&#160;&lt;span&gt;DOM&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Somewhat before this I also joined Mozilla. But it would be backwards to say that Mozilla induced this change in perspective, that it tempted me away from Python. In fact I would have had a much easier time of it if I had just stuck with doing Python backend stuff at&#160;Mozilla.&lt;/p&gt;
&lt;p&gt;The last few years of transition have been a struggle. With Python and the server I knew what I was doing. I was good at it, I felt competent. I could construct an opinion with confidence about all kinds of design questions. I was respected and my opinion would be listened to. I&#8217;d put in my 10,000 hours, I had achieved&#160;mastery.&lt;/p&gt;
&lt;p&gt;Moving to Javascript none of this was true, and most of it &lt;em&gt;still&lt;/em&gt; isn&#8217;t true. It might be easier to pull off this change if I was doing web development, surrounded with people making similar transitions, a little fish in the little pond of whatever group I was working with. But Mozilla is not that kind of environment. Which is okay &#8212; if I had been felt confident it would only be because there was no one to correct&#160;me.&lt;/p&gt;
&lt;p&gt;It&#8217;s oddly common to see people talk about how a programmer can pick up something new in the matter of a few days or months. To find programmers that consider all that knowledge transferable (&lt;a href="https://news.ycombinator.com/item?id=7204515"&gt;for instance&lt;/a&gt;). I don&#8217;t know what to make of it &#8212; my less forgiving self thinks these people have never known what real mastery is. I don&#8217;t think it takes another 10,000 hours to get mastery in a new language and environment&#8230; but it definitely takes some thousands of hours, some years of hard work. I only now feel like I&#8217;m getting&#160;close.&lt;/p&gt;
&lt;p&gt;Maybe it&#8217;s my perspective on what mastery is. Deciding to do something and then doing it is good. It is not mastery. You have to pick the right problem to solve. You have to pick the right way to solve it. You need to know when to revise that plan, and understand the constraints that inform that revision. You need both large scale and small scale intuitions. And you need to be good enough at all the details of programming in that environment that you don&#8217;t get overwhelmed with the &#8220;easy&#8221; stuff, so you have mental energy to spare on the big stuff. The jump from Python to Javascript isn&#8217;t &lt;em&gt;that&lt;/em&gt; big, the languages have a very similar shape. And the browser was already the environment focused on. And yet redeveloping my intuition for this new environment has taken&#160;time.&lt;/p&gt;
&lt;p&gt;Sadly I&#8217;m not going to get back where I was, because Javascript is not Python. If there&#8217;s a Javascript community I haven&#8217;t found it, or it&#8217;s at least not a single entity. There is no community that created Javascript like the Python community created Python. Python comes from the internet in a way Javascript does not; Javascript was built &lt;em&gt;for&lt;/em&gt; the internet, but Python was built &lt;em&gt;on&lt;/em&gt; the internet. And I do miss the Python community, you&#8217;re good&#160;people.&lt;/p&gt;
&lt;p&gt;But also whatever language partisanship I had is gone, and won&#8217;t come back in the guise of a new favorite language. This shouldn&#8217;t be confused with a disinterest in language. I still get as annoyed as ever by &#8220;use the right tool for the job&#8221; &#8212; the bland truism meant to shut down critical discussion and engagement with the tasks and choices in software engineering, replacing it with a weak passionless technical&#160;fatalism.&lt;/p&gt;
&lt;p&gt;I suppose it is the platform that I am drawn to now before language. And the browser seems like the most interesting platform, not because it&#8217;s novel (though it is, it&#8217;s a runtime like few others), but because of how concrete it is, and of course how relevant it is to&#8230; anything. And the browser is no longer just the servant of a server, I prefer now to think of the browser as an independent agent, connecting to &lt;em&gt;services&lt;/em&gt; instead of &lt;em&gt;servers&lt;/em&gt;. Obviously that doesn&#8217;t describe a great number of running web sites, but it&#8217;s the model I see for the future, and a better perspective for understanding future&#160;architectures.&lt;/p&gt;
&lt;p&gt;Still this only addresses which direction I&#8217;m looking towards, I still have to walk the path. I don&#8217;t want to get caught up in the weeds again, building tools for something I never manage to make. Right now I think I&#8217;m on to something in the area of collaboration, first with &lt;a href="https://togetherjs.com/"&gt;TogetherJS&lt;/a&gt; and now I&#8217;m thinking bigger with a &lt;a href="http://github.com/mozilla/hotdish"&gt;new experiment&lt;/a&gt;. But while I feel like I&#8217;ve reached some competence in executing on these projects, programming is only one piece of bringing forward a larger vision. I still have a lot of learning to do, skills for which I haven&#8217;t put in the necessary time. How to recruit support, how to manage the project, how to negotiate between feasibility and user value, how to negotiate compromises in strategy and design. And collaboration itself is a whole domain of expertise. I&#8217;ve learned a lot, I can &lt;em&gt;do&lt;/em&gt; things, but I am definitely not yet experienced enough to &lt;em&gt;choose to do the right thing&lt;/em&gt; in these areas. And at this moment I&#8217;m worried I won&#8217;t have the room to learn these things, it feels like time is running out just when I&#8217;m pulling stuff&#160;together.&lt;/p&gt;
&lt;p&gt;Anyway, that&#8217;s where I am now. No longer a language partisan, unclear of what community I am even participating in, I am less sure how to identify and self-identify myself. How do I describe myself now? Even as I find my technical footing I am still adrift. And so it&#8217;s hard to say goodbye. So instead I&#8217;ll say, Pythonistas: until we meet again. Maybe I&#8217;ll meet some of you over&#160;here.&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 11:31:42 -0800</pubDate>
      <link>http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html</link>
      <guid>http://www.ianbicking.org/blog/2014/02/saying-goodbye-to-python.html</guid>
    </item>
    <item>
      <title>Scientists Say Their Giant Laser Has Produced Nuclear Fusion : The Two-Way : NPR</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7227028'&gt;"Scientists Say Their Giant Laser Has Produced Nuclear Fusion : The Two-Way : NPR"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.npr.org/blogs/thetwo-way/2014/02/12/275896094/scientists-say-their-giant-laser-has-produced-nuclear-fusion'&gt;http://www.npr.org/blogs/thetwo-way/2014/02/12/275896094/scientists-say-their-giant-laser-has-produced-nuclear-fusion&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;div&gt;
 
 
&lt;!-- END CLASS="IMAGEWRAP" --&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;p&gt;&lt;b&gt;&lt;b&gt;hide caption&lt;/b&gt;&lt;/b&gt;The National Ignition Facility's 192 laser beams focus onto a tiny target.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="CAPTION" --&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="CAPTIONWRAP" --&gt;
 &lt;span&gt;&lt;span&gt;LLNL&lt;/span&gt;&lt;/span&gt; 
 
&lt;!-- END CLASS="ENLARGE_MEASURE" --&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;p&gt;The National Ignition Facility's 192 laser beams focus onto a tiny target.&lt;/p&gt; &lt;span&gt;&lt;span&gt;LLNL&lt;/span&gt;&lt;/span&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="IMAGE_DATA" --&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="ENLARGE_HTML" --&gt;
 &lt;/div&gt;
 &lt;p&gt;Researchers at a laboratory in California say they've had a breakthrough in producing fusion reactions with a giant laser. The success comes after years of struggling to get the laser to work and is another step in the decades-long quest for fusion energy.&lt;/p&gt; &lt;p&gt;Omar Hurricane, a researcher at &lt;a href="https://www.llnl.gov/"&gt;Lawrence Livermore National Laboratory&lt;/a&gt;, says that for the first time, they've produced significant amounts of fusion by zapping a target with their laser. "We've gotten more energy out of the fusion fuel than we put into the fusion fuel," he says.&lt;/p&gt; &lt;p&gt;Strictly speaking, while more energy came from fusion than went into the hydrogen fuel, only about 1 percent of the laser's energy ever reached the fuel. Useful levels of fusion are still a long way off. "They didn't get more fusion power out than they put in with the laser," says &lt;a href="http://www.imperial.ac.uk/AP/faces/pages/read/Home.jsp?person=steve.cowley&amp;amp;_adf.ctrl-state=timymaqt6_3&amp;amp;_afrRedirect=5442471409837098"&gt;Steve Cowley&lt;/a&gt;, the head of a huge fusion experiment in the U.K. called the &lt;a href="http://www.efda.org/jet/"&gt;Joint European Torus&lt;/a&gt;, or JET.&lt;/p&gt; &lt;p&gt;The laser is known as the &lt;a href="https://lasers.llnl.gov/"&gt;National Ignition Facility&lt;/a&gt;, or NIF. Constructed at a cost of more than $3 billion, it consists of 192 beams that take up the length of three football fields. For a brief moment, the beams can focus 500 trillion watts of power &#8212; more power than is being used in that same time across the entire United States &#8212; onto a target about the width of a No. 2 pencil.&lt;/p&gt; &lt;p&gt;The goal is fusion: a process where hydrogen atoms are squeezed together to make helium atoms. When that happens, a lot of energy comes out. It could mean the answer to the world's energy problems, but fusion is really, really hard to do. Hurricane says that each time they try, it feels like they're taking a test.&lt;/p&gt; &lt;div&gt;
 
 
&lt;!-- END CLASS="IMAGEWRAP" --&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;p&gt;&lt;b&gt;&lt;b&gt;hide caption&lt;/b&gt;&lt;/b&gt;Inside a capsule the width of a No. 2 pencil sits a tiny ball of hydrogen fuel. The lasers squeeze the fuel until it fuses, releasing energy.&lt;/p&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="CAPTION" --&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="CAPTIONWRAP" --&gt;
 &lt;span&gt;&lt;span&gt;E. Dewald/LLNL&lt;/span&gt;&lt;/span&gt; 
 
&lt;!-- END CLASS="ENLARGE_MEASURE" --&gt;
 &lt;div&gt;
 &lt;div&gt;
 &lt;p&gt;Inside a capsule the width of a No. 2 pencil sits a tiny ball of hydrogen fuel. The lasers squeeze the fuel until it fuses, releasing energy.&lt;/p&gt; &lt;span&gt;&lt;span&gt;E. Dewald/LLNL&lt;/span&gt;&lt;/span&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="IMAGE_DATA" --&gt;
 &lt;/div&gt;
 
&lt;!-- END CLASS="ENLARGE_HTML" --&gt;
 &lt;/div&gt;
 &lt;p&gt;"Of course you want to score real well, you think you've learned the material, but you just have to see how you do," he says.&lt;/p&gt; &lt;p&gt;Over the past few years, &lt;a href="http://www.npr.org/2012/11/28/166095618/a-short-fuse-for-fusion-as-ignition-misses-deadline"&gt;NIF has been getting a fat "F."&lt;/a&gt; For all its power, it just couldn't get the hydrogen to fuse, and researchers didn't know why. The failures have led NIF's critics to label the facility an enormous waste of taxpayer dollars. In 2012, the government shifted NIF away from its fusion goals to focus on its other mission: &lt;a href="https://lasers.llnl.gov/science/stockpile-stewardship"&gt;simulating the conditions inside nuclear weapons&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But the fusion experiments continued, and Hurricane says researchers now understand why their original strategy wasn't working. In the journal &lt;em&gt;Nature, &lt;/em&gt;&lt;a href="http://dx.doi.org/10.1038/nature13008"&gt;he and his colleagues report&lt;/a&gt; that they've finally figured out how to squeeze the fuel with the lasers. By doing a lot of squeezing right at the start, they were able to keep the fuel from churning and squirting out. The lasers squeezed evenly and the hydrogen turned into helium.&lt;/p&gt; &lt;p&gt;The new technique can't reach "ignition," which is the point at which the hydrogen fusion feeds on itself to make more. Even so, JET's Cowley says, this is still a big moment for NIF.&lt;/p&gt; &lt;p&gt;"I think it's still a very important step forward, they reached fusion conditions, they made some fusion happen, and that's not been done before [with a laser]," he says.&lt;/p&gt; &lt;p&gt;Hurricane says no one knows for sure whether NIF can really reach the point of ignition. "It's not up to me; it's up to Mother Nature," he says. "But we're certainly going to try."&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 12:28:19 -0800</pubDate>
      <link>http://www.npr.org/blogs/thetwo-way/2014/02/12/275896094/scientists-say-their-giant-laser-has-produced-nuclear-fusion</link>
      <guid>http://www.npr.org/blogs/thetwo-way/2014/02/12/275896094/scientists-say-their-giant-laser-has-produced-nuclear-fusion</guid>
    </item>
    <item>
      <title>Obama Sued by Rand Paul Over Phone Surveillance Program - Bloomberg
</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7227567'&gt;"Obama Sued by Rand Paul Over Phone Surveillance Program - Bloomberg
"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.bloomberg.com/news/2014-02-12/obama-sued-by-rand-paul-over-surveillance-as-challenges-grow-1-.html'&gt;http://www.bloomberg.com/news/2014-02-12/obama-sued-by-rand-paul-over-surveillance-as-challenges-grow-1-.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;President &lt;a href="http://topics.bloomberg.com/barack-obama/"&gt;Barack Obama&lt;/a&gt; was sued by
Senator Rand Paul over U.S. electronic surveillance he claims is
illegal, adding to challenges that may land post-Sept. 11
government data collection in the U.S. Supreme Court. &lt;/p&gt;
&lt;p&gt;The Kentucky Republican announced today that he had filed
his complaint in Washington federal court. Paul was joined as
co-plaintiff by &lt;a href="http://www.freedomworks.org/about/about-freedomworks"&gt;FreedomWorks Inc.&lt;/a&gt;, a Tea Party-backed group. The
filing couldn&#8217;t be immediately confirmed in court records. &lt;/p&gt;
&lt;p&gt;The government is collecting phone data about U.S. citizens
&#8220;without any belief by defendants at the time of collection or
retention or searches that any of the information is connected
with international terrorism or an international terrorist
organization,&#8221; in violation of the U.S. Constitution&#8217;s Fourth
Amendment prohibition of unreasonable searches, according to a
draft copy of Paul&#8217;s suit provided by his office. &lt;/p&gt;
&lt;p&gt;Consumers&#8217; willingness to provide companies with
information about themselves to get phone service &#8220;does not
reflect a willingness or expectation that they are surrendering
the privacy of the information,&#8221; Paul said in his complaint. &lt;/p&gt;
&lt;p&gt;The suit challenges the &lt;a href="http://www.nsa.gov/"&gt;National Security Agency&lt;/a&gt;&#8217;s bulk
collection of phone records of millions of Americans, a program
disclosed last year by former agency contractor Edward Snowden. &lt;/p&gt;
&lt;p&gt;Caitlin Hayden, a spokeswoman for the National Security
Council, referred a request for comment on the suit to the
Justice Department. The council, a White House group, consists
of administration advisers, mostly from the Cabinet and the
military. &lt;/p&gt;
&lt;h2&gt;Found Legal &lt;/h2&gt;
&lt;p&gt;&#8220;We believe the program as it exists is lawful,&#8221; Hayden
said by e-mail, addressing the data collection generally. &#8220;It
has been found to be lawful by multiple courts. And it receives
oversight from all three branches of government.&#8221; &lt;/p&gt;
&lt;p&gt;&#8220;We remain confident that the Section 215 telephone
metadata program is legal, as at least 15 judges have previously
found,&#8221; Peter Carr, a Justice Department spokesman, said in an
e-mailed statement. White House spokesman Jay Carney declined to
comment on the specific litigation. He repeated Obama&#8217;s position
that the program is lawful and has been upheld by courts. &lt;/p&gt;
&lt;p&gt;A federal judge in New York ruled Dec. 27 that the program
is legal. The ruling came less than two weeks after a federal
court in &lt;a href="http://topics.bloomberg.com/washington/"&gt;Washington&lt;/a&gt; said it may be illegal. The two judges came
to opposite conclusions about a landmark 1979 ruling on
telephone data in the pre-Internet age. &lt;/p&gt;
&lt;p&gt;A divided U.S. privacy-policy board last month concluded
the NSA program is illegal and should be stopped. &lt;/p&gt;
&lt;h2&gt;&#8216;Minimal&#8217; Usefulness &lt;/h2&gt;
&lt;p&gt;The five-member Privacy and Civil Liberties Oversight
Board, created by Congress under post-Sept. 11 anti-terrorism
laws, said in a 238-page report that the program to collect and
store the records has provided only &#8220;minimal&#8221; help in
thwarting terrorist attacks. &lt;/p&gt;
&lt;p&gt;The NSA receives phone records from U.S. telecommunications
companies and stores them in a database that can be queried to
determine who is in contact with suspected terrorist
organizations. &lt;/p&gt;
&lt;p&gt;The surveillance was authorized by President George W. Bush
after the Sept. 11, 2001, terrorist attacks,. It has been
defended as &#8220;critically important&#8221; to national security,
according to records declassified this month by National
Intelligence Director James Clapper. &lt;/p&gt;
&lt;p&gt;In the two court rulings, U.S. District Judge William H. Pauley III in &lt;a href="http://topics.bloomberg.com/manhattan/"&gt;Manhattan&lt;/a&gt; granted a government motion to dismiss a
suit filed by groups led by the American Civil Liberties Union. &lt;/p&gt;
&lt;h2&gt;D.C. Decision &lt;/h2&gt;
&lt;p&gt;In Washington, Judge Richard Leon barred collection of
metadata from the Verizon Wireless accounts of the two
plaintiffs. Leon suspended the injunction for a government
appeal. &lt;/p&gt;
&lt;p&gt;The ACLU appealed Pauley&#8217;s ruling to the federal Court of
Appeals in New York. If appeals courts uphold their respective
lower courts, creating a split, the Supreme Court is more likely
to take the case. &lt;/p&gt;
&lt;p&gt;The information at issue in all three cases involves
&#8220;metadata,&#8221; which includes the numbers used to make and
receive calls and their duration. &lt;/p&gt;
&lt;p&gt;It doesn&#8217;t include information about the content of the
communications or the names, addresses or financial information
of parties, according to government filings in the Washington
case. &lt;/p&gt;
&lt;p&gt;To contact the reporters on this story:
Andrew Zajac in federal court in Washington
at &lt;a href="mailto:azajac@bloomberg.net"&gt;azajac@bloomberg.net&lt;/a&gt;;
Phil Milford in Wilmington, &lt;a href="http://topics.bloomberg.com/delaware/"&gt;Delaware&lt;/a&gt;,
at &lt;a href="mailto:pmilford@bloomberg.net"&gt;pmilford@bloomberg.net&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;To contact the editor responsible for this story:
Michael Hytha at &lt;a href="mailto:mhytha@bloomberg.net"&gt;mhytha@bloomberg.net&lt;/a&gt;. &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 13:47:52 -0800</pubDate>
      <link>http://www.bloomberg.com/news/2014-02-12/obama-sued-by-rand-paul-over-surveillance-as-challenges-grow-1-.html</link>
      <guid>http://www.bloomberg.com/news/2014-02-12/obama-sued-by-rand-paul-over-surveillance-as-challenges-grow-1-.html</guid>
    </item>
    <item>
      <title>
            Evan M Rose. - Last Thursday, my brother, Stephen Rose fought...
        </title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7227820'&gt;"
            Evan M Rose. - Last Thursday, my brother, Stephen Rose fought...
        "&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://evanmrose.tumblr.com/post/76463244600/last-thursday-my-brother-stephen-rose-fought'&gt;http://evanmrose.tumblr.com/post/76463244600/last-thursday-my-brother-stephen-rose-fought&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;&lt;span&gt;Last Thursday, my brother, Stephen Rose fought courageously against symptoms of mental illness. &#160;In the last 12 hours of his life, he did all the things he was supposed to do to get help in a moment of crisis - made multiple calls to his care providers, to 911 and even went to the hospital. &#160;He had been experiencing symptoms for several years but was in a highly-respected treatment program that was working intimately with him. He was planning for his happiness, his dreams and his future. Nonetheless, in a sudden and surprising turn, Stephen lost the battle and passed from this world. But despite this loss, through the efforts he inspired in us, we will not lose the war.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;We often have preconceived notions of what someone struggling with mental health issues looks like. Steve did not fit any of them. He was polite, athletic, good looking and highly intelligent. He was a Harvard graduate and achieved a GPA of 3.5 in his recently completed psychology masters program. &#160;He applied to law schools and was receiving acceptances and even full &#160;scholarships. &#160;He planned to visit one of his top law school campuses and had social events planned for the week. &#160;Steve struggled with, but was not defined by his mental health issues. While his affliction sought to isolate him, he fought to connect with others. Where anxiety would cripple most, Steve put on a brave face and did his best to reach out. He wasn&#8217;t a tortured soul, crumbling under the weight of an impossible burden. He was a warrior, fighting an invisible and silent assailant in a battle to the death. His story &#8212; and the stories of many others struggling silently &#8212; must be told for the war to be won.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Steve&#8217;s legacy is one of love for his family and friends, kindness to all, deep thought and desire to connect with others despite the obstacles mental illness presented in his life. One of his favorite quotes was by Oliver Wendell Holmes, Sr.: &#160;&#8220;The mind, once stretched by a new idea, never regains its original dimensions.&#8221; &#160;This perfectly encapsulates how he was approaching his life and what he wished for others. Stephen sought to connect deeply with the ideas he engaged with as well as the people he met. &#160;The week before he passed, he started a blog for this exact purpose. &#160;We believe that even in death, his ideals can inspire others to share and connect&#8212;both those who are struggling silently to tell their story and connect with others, and for others who are not.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;What happened to Stephen and our family is something that &#8220;happens to someone else.&#8221; Mental health issues exist at and beyond the fringe of acceptable conversation. In certain populations, like African American men and women, there is stigma. People are afraid to speak about it and those afflicted are even more afraid to seek help for fear of being ostracized. &#160;In populations of ambitious young people who are high achievers, the challenges are even more profound. &#160;This cannot be allowed to continue. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Mental health disorders should be better understood by young people in our society, as many of these disorders strike people in their teens and twenties. Families, schools, and communities need to be empowered to spot, understand, and embrace those who are struggling. &#160;And our failsafe systems to prevent a tragedy such as Stephen&#8217;s must be truly failsafe.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Our family will be inviting others to join us in sharing Steve&#8217;s story in the hopes of opening the conversation around mental health and eventually making an impact so that other families don&#8217;t have to go through the pain of losing a loved one. &#160;We will also focus on promoting the values that defined Stephen&#8212;kindness and sensitivity to others, inclusiveness, and open dialogue about ideas and ideals.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;If you&#8217;re interested in building Steve&#8217;s legacy or hearing about the memorial service, leave your contact information at: &lt;/span&gt;&lt;a href="http://bit.ly/stevecrose"&gt;&lt;span&gt;&lt;a href="http://bit.ly/stevecrose"&gt;http://bit.ly/stevecrose&lt;/a&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;For those interested: He had just started a Tumblr at &lt;a href="http://scrose.tumblr.com"&gt;http://scrose.tumblr.com&lt;/a&gt; We are probably going to make it a memorial and keep it alive.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 14:30:24 -0800</pubDate>
      <link>http://evanmrose.tumblr.com/post/76463244600/last-thursday-my-brother-stephen-rose-fought</link>
      <guid>http://evanmrose.tumblr.com/post/76463244600/last-thursday-my-brother-stephen-rose-fought</guid>
    </item>
    <item>
      <title>robsheldon.com: Hello, world.</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7228491'&gt;"robsheldon.com: Hello, world."&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.robsheldon.com/blog/depression-programming/'&gt;http://www.robsheldon.com/blog/depression-programming/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;So here I am again, in a mild funk. My sleep patterns are looking like the plot from a random number generator; I don't want to talk to anybody, and I try to get through the day using as few words as possible; I don't really want to do anything, though I keep forcing myself to spit out just enough work to keep most of the bills paid. Depression is rarely without a cause of some kind, and in this case there are a handful of causes that are converging down to a single sense of defeat: I am stuck.&lt;/p&gt;
 &lt;p&gt;Depression and burning out seem to be a common theme amongst programmers. I started thinking about &lt;a href="http://jacquesmattheij.com/dealing+with+burn+out"&gt;some of the stuff I've read from fellow programmers about burning out&lt;/a&gt;, and some of the threads that have popped up periodically on programmer forums like HN regarding depression. I started wondering why it seemed more prevalent than in other professions.&lt;/p&gt;
 &lt;h2&gt;I have a theory&lt;/h2&gt;
 &lt;p&gt;Let's set aside for the moment some obvious assumptions: that, because I'm a programmer, I will be more aware of trends amongst programmers than I will be of, say, stage actors; and that programmers as a whole tend towards being introspective and analytical individuals who are sometimes articulate and interested in sharing their thoughts with others, and therefore more likely to think about and discuss the subject.&lt;/p&gt;
 &lt;p&gt;Let's instead just ask the question, "Is there something unique, or at least less common, about programming compared to other professions?"&lt;/p&gt;
 &lt;p&gt;I think there is.&lt;/p&gt;
 &lt;p&gt;It occurred to me while I was watching &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=LLQS27yQZYY"&gt;this video of some incredible talent&lt;/a&gt; that if you play the guitar, and play it well, you can demonstrate it to people. Even if people don't fully understand how long it took you to develop the skills to play a musical instrument that way, how much work and effort went in to it, or how talented you really are, they at least can have some appreciation of it. You are doing something that they can't do, and it sounds good and looks good besides.&lt;/p&gt;
 &lt;p&gt;But if you are a programmer, you can't do that. If you muster decades worth of practice and experience and, over some amount of time, write something brilliant &#8212; let's say, some kind of amazing new database interface, some piece of code architecture that will make something that was difficult into something that is now more straightforward &#8212; well, nobody else is really going to ever see that. What are you going to do, stand up in a coffee house one night and show off your code on a projector? "And this, ladies and gentlemen, is where I got the brilliant idea to use my new mutex to manage simultaneous multithreaded access to the same chunk without the risk of a race condition!" There's wild cheering, somebody buys you drinks, and you get to go home with a cute girl who thinks your brain is super hot.&lt;/p&gt;
 &lt;p&gt;No, not really.&lt;/p&gt;
 &lt;p&gt;What you &lt;i&gt;can&lt;/i&gt; do is share your code with other programmers. I think that's the real value of things like Github. But, programmers are a notoriously savage bunch, and Github attracts top talent from all corners of the world. You are just as likely to hear a comment breaking down why your approach was wrong, or why you're using the incorrect syntax here or there, or why there's already some library by some other Joe Schmuck that does the same thing, only better.&lt;/p&gt;
 &lt;p&gt;Imagine if you were that guy playing that guitar, and at the end of it, some guy in the crowd gets up on stage and tells you, "Look, it's not that you're bad, it's just that you weren't chording some of those notes right. Look, I'll show you," and then you get completely schooled in front of everyone by some guy you've never met before.&lt;/p&gt;
 &lt;p&gt;Auto mechanics are about the closest thing I can think of in this regard. To many people, they take their car in to a mechanic, they say, "it's making this funny noise, like &lt;i&gt;whirr-ker-chunk-ker-chunk-ker-chunk&lt;/i&gt;, but only when I'm coasting downhill," and then a few days and a few hundred or thousand dollars later it's fixed.&lt;/p&gt;
 &lt;p&gt;Magic. Except that, even then, at some point in their life most people put the hood of their car up at least once, or they try to fix something around the house, or they have a friend or family member that does basic simple repairs. So, people still have &lt;i&gt;some&lt;/i&gt; notion of what it takes to be a good mechanic, even if that notion is wildly inaccurate.&lt;/p&gt;
 &lt;p&gt;But programming?&lt;/p&gt;
 &lt;p&gt;I've yet to meet the grocery clerk that says, "Yeah, so like I was browsing this website the other day, and I noticed it was doing something pretty neat with the menus, so I looked around in the code and whoever did it came up with this super cool approach..."&lt;/p&gt;
 &lt;p&gt;So at the end of several days' worth of programming, and problem-solving, and forward-thinking, all a programmer might get is a "thanks, now here's the next thing I need you to do."&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 16:31:17 -0800</pubDate>
      <link>http://www.robsheldon.com/blog/depression-programming/</link>
      <guid>http://www.robsheldon.com/blog/depression-programming/</guid>
    </item>
    <item>
      <title>Hueman, how are you?</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7229040'&gt;"Hueman, how are you?"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.huemanapp.com/apple.html'&gt;http://www.huemanapp.com/apple.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;h2&gt;Apple,&lt;br&gt;Have a Little Huemanity&lt;/h2&gt;
 We made something. We use it. We love it. Apple rejected it. 
 &lt;p&gt;The Hueman Collective got together over a long weekend, made up of developers, designers, musicians and filmmakers. Our goal was simply to get together to make something that weekend; anything.&lt;/p&gt;
 &lt;p&gt;The seed of Hueman was planted by data: A friend that has methodically tracked his personal relative happiness level for 10 years. Walking us through his data, he could instantly recall events from his life that affected his happiness. We could clearly see the 3 month period when his previous long-term relationship was faltering, and later, the 6 months leading to the marriage proposal to his (now) wife. He was able to see the ebbs and flow of life.&lt;/p&gt;
 &lt;p&gt;We were psyched. We wanted everyone to be able to see their own data. That weekend, we built a prototype that asked you every day, How was today compared to yesterday? &lt;/p&gt;
 Deceptively Simple 
 
 &lt;p&gt;One bad day can't really ruin you, just like one amazing day doesnt actually change your life - but one day can start a domino effect. You don't always realize it's happening, you just know that you've felt shitty or great for a while.&lt;/p&gt;
 &lt;p&gt;By taking 10 seconds a day to answer one question, you quickly figure out a few things about yourself:&lt;/p&gt;
 &lt;ul&gt;
&lt;li&gt;Are you an optimist or pessimist?&lt;/li&gt;
 &lt;li&gt;Is something happening that is out of the ordinary?&lt;/li&gt;
 &lt;li&gt;Is it time to make a change?&lt;/li&gt;
 &lt;/ul&gt; 8 months of private beta later, what have we learned? 
 &lt;p&gt;Each of these graphs are an individual's life map, the spikes and dips instantly recognizable. In these intial months, our beta users have excitedly shared their personal graphs with others. They have told stories in response to the "What the hell happened there??" question. They've taken a moment, daily, to think about how things are going.&lt;/p&gt;
 
 
 &lt;p&gt;In our beta metrics, the average session length was 31 seconds. The submission takes, on average, between 5-10 seconds. The remaining time seems to be spent on the graph view, seeing how their most recent submission stacks up against their history. &lt;/p&gt;
 
 
 
 Take a moment to reflect 
 &lt;div&gt;
 &lt;p&gt;Thank you for your reply.&lt;/p&gt;
&lt;p&gt;We have found the following issue with your app.&lt;/p&gt;
&lt;p&gt;2.12&lt;/p&gt;
&lt;p&gt;We found that your app only provides a very limited set of features. It only functions as a once a day mood tracker. While we value simplicity, we consider simplicity to be uncomplicated - not limited in features and functionality.&lt;/p&gt;
&lt;p&gt;We understand that there are no hard and fast rules to define useful, but Apple and Apple customers expect apps to provide a really great user experience. Apps should provide valuable utility, draw people in by offering compelling capabilities or content, or enable people to do something they couldn't do before or in a way they couldn't do it before.&lt;/p&gt;
&lt;p&gt;We encourage you to review your app concept and evaluate whether you can incorporate additional content and features to provide a more robust user experience. For information on the basics of creating great apps, watch the video &lt;a href="https://developer.apple.com/videos/ios/?id=7"&gt;"The Ingredients of Great Apps"&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
 
 &lt;p&gt;Apple seems to think Hueman lacks features and functionality, but they are completely missing the point.&lt;/p&gt;
 &lt;p&gt;For those that will argue that Apple rejected it for those reasons, the app is quite simple from a code perspective. It is written primarily in two simple web views: the submission screen and the graph.
 &lt;/p&gt;
&lt;p&gt;If it's just using webviews, why does this need to be an app?
 &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hueman is free and anonymous, and to create that seamless experience, it needs to store data on your phone. If it was a web page on mobile safari, that data is more ephemeral.&lt;/li&gt; 
 &lt;li&gt;The user needs daily local iOS Notifications to make Hueman part of their day.&lt;/li&gt;
 &lt;li&gt;The user needs the ability to share with other native apps such as Twitter, Facebook, Messages and more.&lt;/li&gt;
 &lt;li&gt;The next couple planned releases on our roadmap will heavily rely on native iOS functions and code to include things like tagging, additional graph views and scrubbing, ability to add media. etc... And by eventually letting people combine their data, you will be able to see how their relative happiness aligns to other users, a neighborhood and even the world.&lt;/li&gt;
 &lt;/ul&gt; Bring Hueman to life 
 &lt;p&gt;Automatically tracking every instant, every moment, using technology is great. We do it ourselves, and have invested in fun upcoming products like &lt;a href="http://www.scanadu.com/"&gt;Scanadu Scout Tricorder&lt;/a&gt; and &lt;a href="https://www.kickstarter.com/projects/activereplay/trace-the-most-advanced-activity-monitor-for-actio"&gt;TRACE&lt;/a&gt;. We're users of &lt;a href="http://www.moves-app.com/"&gt;Moves&lt;/a&gt; and &lt;a href="http://www.strava.com/"&gt;Strava&lt;/a&gt;, and the newly released &lt;a href="http://www.reporter-app.com/"&gt;Reporter&lt;/a&gt; from &lt;a href="http://feltron.com"&gt;Feltron.&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;And for all the valuable data these apps collect, it still doesn't address the core value of Hueman. Hueman is about personal reflection, and presenting that data in a useful way.&lt;/p&gt;
 &lt;p&gt;It's been humbling for each of us to look back over the days and months that shape us, and look forward to when others can too.&lt;/p&gt;
 
 How you can help 
 &lt;p&gt;We'd love to hear your thoughts. Please contact us via &lt;a href="https://twitter.com/huemanapp"&gt;Twitter&lt;/a&gt;, &lt;a href=""&gt;Facebook&lt;/a&gt; or &lt;a href="http://www.cloudflare.com/email-protection#4f2c2023232a2c3b26392a0f273a2a222e212e3f3f612c2022"&gt;email&lt;/a&gt; and let us know what you think of our app concept and the situation we're in. Please &lt;a href="http://www.twitter.com/home?status=Oh%20the%20huemanity,%20Apple%20rejected%20us%20from%20the%20@AppStore.%20Our%20take%20on%20the%20situation:%20http://www.huemanapp.com/apple.html"&gt;share this&lt;/a&gt; and help spread the word. Together, we can make this simple, yet extremely valuable app freely available to everyone.&lt;/p&gt;
 &lt;p&gt;Sincerely,
 &lt;a href="http://www.cloudflare.com/email-protection#b1d2deddddd4d2c5d8c7d4f1d9c4d4dcd0dfd0c1c19fd2dedc"&gt;The Hueman Collective&lt;/a&gt;&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 18:57:58 -0800</pubDate>
      <link>http://www.huemanapp.com/apple.html</link>
      <guid>http://www.huemanapp.com/apple.html</guid>
    </item>
    <item>
      <title>Comcast Acquiring Time Warner Cable in All-Stock Deal Worth $45 Billion - WSJ.com</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7229141'&gt;"Comcast Acquiring Time Warner Cable in All-Stock Deal Worth $45 Billion - WSJ.com"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://online.wsj.com/news/articles/SB10001424052702303704304579379801986541412'&gt;http://online.wsj.com/news/articles/SB10001424052702303704304579379801986541412&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 
 &lt;p&gt; Comcast Corp. said it agreed to buy Time Warner Cable for about $45.2 billion in stock, in a deal that would combine the nation's two biggest cable operators.&lt;/p&gt; &lt;p&gt;The boards of both companies have approved the transaction, which was announced Thursday morning.&lt;/p&gt; &lt;p&gt;With the proposed deal, Comcast almost certainly ends an eight-month takeover...
 &lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 19:22:58 -0800</pubDate>
      <link>http://online.wsj.com/news/articles/SB10001424052702303704304579379801986541412</link>
      <guid>http://online.wsj.com/news/articles/SB10001424052702303704304579379801986541412</guid>
    </item>
    <item>
      <title>The Facebook Comment That Ruined a Life - Page 1 - News - Dallas - Dallas Observer</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7229930'&gt;"The Facebook Comment That Ruined a Life - Page 1 - News - Dallas - Dallas Observer"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.dallasobserver.com/2014-02-13/news/the-facebook-comment-that-ruined-a-life/'&gt;http://www.dallasobserver.com/2014-02-13/news/the-facebook-comment-that-ruined-a-life/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;&lt;i&gt;A&lt;/i&gt;pproximately one hour after &lt;a href="/related/to/Justin+Carter/"&gt;Justin Carter&lt;/a&gt; posted a sarcastic comment on a Facebook thread, his life began to &#173;unravel.&lt;/p&gt;
&lt;p&gt;The first reaction occurred behind the scenes, in another country. The 18-year-old Carter had no way of knowing that, while he did grunt work at a drapery shop in San Antonio, a person in Canada saw his comments &#8212; posted 60 days after the &lt;a href="/related/to/Sandy+Hook/"&gt;Sandy Hook&lt;/a&gt; school-shooting tragedy in &lt;a href="/related/to/Newtown+(Connecticut)/"&gt;Newtown, Connecticut&lt;/a&gt; &#8212; freaked out and initiated a 24-hour chain reaction of insanity that would wind up with Carter facing 10 years in prison.&lt;/p&gt;
&lt;p&gt;Carter's comments were part of a duel between dorks, and may have had something to do with a game with strong dork appeal called &lt;i&gt;&lt;a href="/related/to/League+of+Legends/"&gt;League of Legends&lt;/a&gt;&lt;/i&gt;. But the actual details and context of the online exchange are, in the eyes of Texas authorities, unimportant. Prosecutors say they don't have the entire thread &#8212; instead, they have three comments on a cell-phone screenshot.&lt;/p&gt;
&lt;div&gt;
 
 
 &lt;div&gt;
 &lt;a href='http://www.dallasobserver.com/photoGallery/index/3551810/0'&gt;&lt;img src="http://media.dallasobserver.com/the-facebook-comment-that-ruined-a-life.9526589.40.jpg"&gt;&lt;/a&gt;
 
 &lt;p&gt;Prosecutors have failed to produce the entire thread containing Carter&#8217;s alleged threat, according to his attorney, Don Flanary.&lt;/p&gt;
 &lt;/div&gt;
 &lt;div&gt;
 &lt;a href='http://www.dallasobserver.com/photoGallery/index/3551810/1'&gt;&lt;img src="http://media.dallasobserver.com/the-facebook-comment-that-ruined-a-life.9526590.40.jpg"&gt;&lt;/a&gt;
 &lt;p&gt;Josh Huskin&lt;/p&gt;
 &lt;p&gt;Attorney Don Flanary of San Antonio says Justin Carter was coerced into confessing something that wasn&#8217;t even a crime.&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;One of the comments appears to be a response to an earlier comment in which someone called Carter crazy. Carter's retort was: "I'm fucked in the head alright, I think I'ma SHOOT UP A KINDERGARTEN [sic]."&lt;/p&gt;
&lt;p&gt;Carter followed with "AND WATCH THE BLOOD OF THE INNOCENT RAIN DOWN."&lt;/p&gt;
&lt;p&gt;When a person writing under the profile name "&lt;a href="/related/to/Hannah+Love/"&gt;Hannah Love&lt;/a&gt;" responded with "i hope you [burn] in hell you fucking prick," Carter put the cherry on top: "AND EAT THE BEATING HEART OF ONE OF THEM." (The Austin police officer who wrote up the subsequent report noted: "all caps to emphasize his anger or rage." )&lt;/p&gt;
&lt;p&gt;That's when someone in Canada &#8212; an individual as yet unidentified in court records &#8212; notified local authorities. Because Carter's profile listed him as living in Austin, the Canadians sent the tip to the &lt;a href="/related/to/Austin+Police+Department/"&gt;Austin Police Department&lt;/a&gt;. Along with a cell-phone screenshot of part of the thread and a link to Carter's Facebook page, the tipster provided this narrative: "This man, Justin Carter, made a number of threats on Facebook to shoot up a class of kindergartners. ... He also made numerous comments telling people to go shoot themselves in the face and drink bleach. The threats to shoot the children were made approximately an hour ago."&lt;/p&gt;
&lt;p&gt;The information was forwarded to the &lt;a href="/related/to/Austin+Regional+Intelligence+Center/"&gt;Austin Regional Intelligence Center&lt;/a&gt;, an information clearinghouse for law enforcement agencies in Travis, Hays and Williams counties.&lt;/p&gt;
&lt;p&gt;Center personnel ran Carter's name, found either a driver's license or a state ID card and discovered that the address listed was "within 100 yards" of Wooldridge Elementary School. Based on a &lt;a href="/related/to/Travis+County/"&gt;Travis County&lt;/a&gt; prosecutor's belief that there was probable cause to charge Carter with a third-degree terroristic threat &#8212; which carries a penalty of two to 10 years &#8212; a judge issued an arrest warrant. U.S. marshals traced Carter to the drapery shop in San Antonio, where he worked, and handcuffed the cherub-faced, brown-haired teen. Until that point, his only brush with the law was a temporary restraining order two years earlier.&lt;/p&gt;
&lt;p&gt;After his booking into the &lt;a href="/related/to/Bexar+County/"&gt;Bexar County&lt;/a&gt; Jail, authorities discovered that he actually lived in &lt;a href="/related/to/New+Braunfels/"&gt;New Braunfels&lt;/a&gt; &#8212; &lt;a href="/related/to/Comal+County/"&gt;Comal County&lt;/a&gt;. After his transfer there, his bond was increased from $250,000 to half a million dollars.&lt;/p&gt;
&lt;p&gt;According to Carter's attorney, Don Flanary, the 18-year-old suffered brutal attacks in the Comal County Jail during the four months he was held there.&lt;/p&gt;
&lt;p&gt;Police records allege that, upon being booked into Bexar County Jail, Carter stated, "I guess what you post on Facebook matters."&lt;/p&gt;
&lt;p&gt;He had no idea.&lt;/p&gt;
 &lt;p&gt;&lt;i&gt;W&lt;/i&gt;hen officers searched Carter's home, Flanary says, they did not find the hallmarks of a lunatic.&lt;/p&gt;
&lt;p&gt;"They found no guns in his house," Flanary says from his San Antonio office. "They found no bomb-making materials." He follows this up with a dash of sarcasm that's not a far stretch from the rhetorical flourishes that put his client in peril: "They didn't find &lt;i&gt;The Anarchist Cookbook&lt;/i&gt;. ... They didn't find, you know, a bunch of newspaper clippings on the wall &#8212; conspiracy theories, with yarn from one place to another. They didn't find pentagrams and candles. He wasn't listening to &lt;a href="/related/to/Judas+Priest/"&gt;Judas Priest&lt;/a&gt;."&lt;/p&gt;
&lt;p&gt;Flanary's explanation for this is simple: His client is not a nut. But Flanary can't say the same for the jam his client's in. "This whole thing is totally and completely bonkers."&lt;/p&gt;
&lt;p&gt;In the absence of any other evidence mentioned in Comal County prosecutor &lt;a href="/related/to/Laura+Bates/"&gt;Laura Bates&lt;/a&gt;' filings, it's hard to disagree. Despite repeated calls, the &lt;i&gt;Houston Press&lt;/i&gt; was unable to speak with Bates or anyone else in the &lt;a href="/related/to/Comal+County+District+Attorney's+Office/"&gt;Comal County District Attorney's Office&lt;/a&gt; &#8212; a receptionist told us that the only person authorized to speak to the media was &lt;a href="/related/to/Jennifer+Tharp/"&gt;District Attorney Jennifer Tharp&lt;/a&gt; herself, and she was unavailable.&lt;/p&gt;
&lt;p&gt;One of the most striking things about the evidence so far tendered by the state is what's missing: the entire thread &#8212; which wasn't on Carter's Facebook page &#8212; containing the damning comments.&lt;/p&gt;
&lt;p&gt;"The state tells us Facebook didn't give it to them," Flanary says. He's unsuccessfully tried to find "Hannah Love," the only other profile included in the cell-phone screenshot; at this point, it's still unclear whether "Hannah Love" is the anonymous Canadian tipster.&lt;/p&gt;
&lt;p&gt;Flanary believes it's paramount that if someone is criminally charged on the basis of his words, a jury needs to see &lt;i&gt;all&lt;/i&gt; the words. In this case, that includes whatever comment precipitated Carter's hyperbolic rant.&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Wed, 12 Feb 2014 23:31:54 -0800</pubDate>
      <link>http://www.dallasobserver.com/2014-02-13/news/the-facebook-comment-that-ruined-a-life/</link>
      <guid>http://www.dallasobserver.com/2014-02-13/news/the-facebook-comment-that-ruined-a-life/</guid>
    </item>
    <item>
      <title>Dug.js &#8212;&#160;A JSONP to HTML Script &#8212; Rog.ie</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7230411'&gt;"Dug.js &#8212;&#160;A JSONP to HTML Script &#8212; Rog.ie"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://rog.ie/blog/dugjs-a-jsonp-to-html-script'&gt;http://rog.ie/blog/dugjs-a-jsonp-to-html-script&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;So you want to display your Dribbble shots, recent pins on Pinterest, 500px or Instagram photos, Github commits, or recently listened to music on your blog or site? Then this chunk of javascript is for you. It was designed to be a lightweight, simple, library-independent script to pull in feeds of content available on the web as JSONP (there's lots of em!) to display on your site.&lt;/p&gt;
&lt;p&gt;I wrote this script because I wanted a dead-simple way to show my dribbble shots on my site. I wanted to be able to customize the markup with a custom template and have the content client side cache. I wanted to do the same with Pinterest inspiration that I was finding for illustrations that I love. Instead of having dedicated scripts for every service, why not just have one very small raw script (~200 lines) to do it all?&lt;/p&gt;
&lt;h2&gt;Dug.js Setup&lt;/h2&gt;
&lt;p&gt;Enough windbaggery, let me show you how to use it. Because Dug.js is on my site, I can run the code in this blog post. Let's talk about that Dribbble implementation first. So, I want to pull in my latest Dribbble shots. Scanning the &lt;a href="http://dribbble.com/api"&gt;Dribbble api&lt;/a&gt;, I see that they do support JSONP and that you can pull in all player shots with the following url: &lt;em&gt;http://api.dribbble.com/players/:id/shots&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Rad! With Dug.js, we're nearly there. In it's simplest form, you really only need two things. &lt;/p&gt;
 An api endpoint (jsonp callbacks supported)
An HTML template to display the data
 &lt;p&gt;With that in mind, let's setup dug.js to pull dribbble shots from &lt;a href="http://justinmezzell.com"&gt;an awesome illustrator&lt;/a&gt;'s account:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
 dug({
 endpoint: 'http://api.dribbble.com/players/justinmezzell/shots',
 template: '{{#shots}}&amp;lt;img src="{{image_400_url}}"&amp;gt;{{/shots}}'
 });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you're familiar with mustache or similar templating, the {{#shots}}...{{/shots}} section apply the html within it over every shot, in this case, emitting an image for each shot. Hint: you can also supply a CSS selector to target a template script, and Dug.js will pull the content from it.&lt;/p&gt;
&lt;p&gt;That's a pretty simple example, but what if you want each shot linking to it's detail page? Here ya go:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
 dug({
 endpoint: 'http://api.dribbble.com/players/justinmezzell/shots',
 template: '&amp;lt;ul&amp;gt;\
 {{#shots}}\
 &amp;lt;li&amp;gt;\
 &amp;lt;a href="{{url}}" title="{{title}}"&amp;gt;\
 &amp;lt;img src="{{image_400_url}}" alt="Image of {{title}}"&amp;gt;\
 &amp;lt;/a&amp;gt;\
 &amp;lt;/li&amp;gt;\
 {{/shots}}\
 &amp;lt;/ul&amp;gt;'
 });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here's an actual demo of the above code, running:&lt;/p&gt;
&lt;p&gt;That's it! Pretty simple huh? Yeah, thats why I dig it too!&lt;/p&gt;
&lt;h2&gt;Dug.js Parameters&lt;/h2&gt;
&lt;p&gt;For those that are curious, here's a few parameters (as json name-value pairs) that you can pass into dug to do some additional schnazzy things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;target&lt;/strong&gt; &#8212; the id of an existing DOM element to put the html results in. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cacheExpire&lt;/strong&gt; &#8212;&#160;# of milliseconds to cache data on the client side (using localstorage). 0 for no caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;callbackParam&lt;/strong&gt; &#8212;&#160;the name of the query variable a JSONP service will use for a callback function. Most services just use 'callback=functionName', but sometimes a service will use a different query variable name.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;success&lt;/strong&gt; &#8212;&#160;a function to call when JSONP data is successfully retrieved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;error&lt;/strong&gt; &#8212;&#160;a function to call when JSONP data is &lt;em&gt;not&lt;/em&gt; successfully retrieved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;beforeRender&lt;/strong&gt; &lt;em&gt;@param data&lt;/em&gt; &#8212;&#160;a function called before Dug.js renders the template. Helpful for trimming/changing the data before it renders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;afterRender&lt;/strong&gt; &lt;em&gt;@param data&lt;/em&gt; &#8212;&#160;a function called after Dug.js renders the template. &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Download Dug.js&lt;/h2&gt;
&lt;p&gt;Dug.js is completely free! Although, if you're diggin' this script hard and want to help fund my graphic tablet purchase (for art like Dug the dog above. Yay!), feel free to donate. &lt;/p&gt;
&lt;p&gt;&lt;a href="#download-dug"&gt;Download Dug.js&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;License&lt;/h2&gt;
&lt;p&gt;Dug.js is 100% free under the &lt;a href="http://en.wikipedia.org/wiki/WTFPL"&gt;WTFPL&lt;/a&gt; &#8212; no link backs or anything needed. &lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 01:34:42 -0800</pubDate>
      <link>http://rog.ie/blog/dugjs-a-jsonp-to-html-script</link>
      <guid>http://rog.ie/blog/dugjs-a-jsonp-to-html-script</guid>
    </item>
    <item>
      <title>Why Your Python Runs Slow. Part 1: Data Structures &#8211; Blog ~ Saulius Lukauskas</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7230820'&gt;"Why Your Python Runs Slow. Part 1: Data Structures &#8211; Blog ~ Saulius Lukauskas"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://lukauskas.co.uk/articles/2014/02/13/why-your-python-runs-slow-part-1-data-structures/'&gt;http://lukauskas.co.uk/articles/2014/02/13/why-your-python-runs-slow-part-1-data-structures/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Thu, 13 Feb 2014 03:59:22 -0800</pubDate>
      <link>http://lukauskas.co.uk/articles/2014/02/13/why-your-python-runs-slow-part-1-data-structures/</link>
      <guid>http://lukauskas.co.uk/articles/2014/02/13/why-your-python-runs-slow-part-1-data-structures/</guid>
    </item>
    <item>
      <title>Technical Details Behind a 400Gbps NTP Amplification DDoS Attack | CloudFlare Blog</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7230847'&gt;"Technical Details Behind a 400Gbps NTP Amplification DDoS Attack | CloudFlare Blog"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack'&gt;http://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;On Monday we mitigated a large DDoS that targeted one of our customers. The attack peaked just shy of 400Gbps. We've seen a handful of other attacks at this scale, but this is the largest attack we've seen that uses NTP amplification. This style of attacks has grown dramatically over the last six months and poses a significant new threat to the web. Monday's attack serves as a good case study to examine how these attacks work.&lt;/p&gt;
&lt;h2&gt;NTP Amplification 101&lt;/h2&gt;
&lt;p&gt;Before diving into the particular details of this attack, it's important to understand the basic mechanics of how NTP amplification attacks work. This is a quick overview of how these attacks occur. John Graham-Cumming on our team previously wrote a &lt;a href="http://blog.cloudflare.com/understanding-and-mitigating-ntp-based-ddos-attacks"&gt;detailed primer on NTP amplification attacks&lt;/a&gt; if you're interested in further technical details. If you're interested in amplification attacks, you may also find interesting &lt;a href="http://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack"&gt;our posts about DNS Amplification attacks&lt;/a&gt;. These attacks use a similar method but target open DNS resolvers rather than NTP servers.&lt;/p&gt;
&lt;p&gt;An NTP amplification attack begins with a server controlled by an attacker on a network that allows source IP address spoofing (e.g., it does not follow &lt;a href="http://tools.ietf.org/html/bcp38"&gt;BCP38&lt;/a&gt;). The attacker generates a large number of UDP packets spoofing the source IP address to make it appear the packets are coming from the intended target. These UDP packets are sent to Network Time Protocol servers (port 123) that support the MONLIST command.&lt;/p&gt;
&lt;p&gt;I'd personally be curious to talk with whoever added MONLIST as a command to NTP servers. The command seems of such little practical use -- it returns a list of up to the last 600 IP addresses that last accessed the NTP server -- and yet it can do so much harm. If an NTP server has its list fully populated, the response to a MONLIST request will be 206-times larger than the request. In the attack, since the source IP address is spoofed and UDP does not require a handshake, the amplified response is sent to the intended target. An attacker with a 1Gbps connection can theoretically generate more than 200Gbps of DDoS traffic.&lt;/p&gt;
&lt;h2&gt;Not Just Theoretical&lt;/h2&gt;
&lt;p&gt;Monday's DDoS proved these attacks aren't just theoretical. To generate approximately 400Gbps of traffic, the attacker used 4,529 NTP servers running on 1,298 different networks. On average, each of these servers sent 87Mbps of traffic to the intended victim on CloudFlare's network. Remarkably, it is possible that the attacker used only a single server running on a network that allowed source IP address spoofing to initiate the requests.&lt;/p&gt;
&lt;p&gt;While NTP servers that support MONLIST are less common than open DNS resolvers, they tend to run on beefier servers with fatter connections to the network. Combined with the high amplification factor, this allows a much smaller number of NTP servers to generate very large attacks. For comparison, the attack that targeted Spamhaus used 30,956 open DNS resolvers to &lt;a href="http://blog.cloudflare.com/the-ddos-that-almost-broke-the-internet"&gt;generate a 300Gbps DDoS&lt;/a&gt;. On Monday, with 1/7th the number of vulnerable servers, the attacker was able to generate an attack that was 33% larger than the Spamhaus attack.&lt;/p&gt;
&lt;h2&gt;Globally Distributed Threat&lt;/h2&gt;
&lt;p&gt;We saw attack traffic hitting every one of CloudFlare's data centers. While we were generally able to mitigate the attack, it was large enough that it caused network congestion in parts of Europe. The map above shows the global distribution of the 4,529 NTP servers used in the attack. The chart below lists the AS Numbers and names of the top 24 networks we saw traffic from in the attack, as well as the number of exploited NTP servers running on each.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; ASN Network Count 
 9808 CMNET-GD Guangdong Mobile Communication Co.Ltd. 136
 4134 CHINANET-BACKBONE No.31,Jin-rong Street 116
16276 OVH OVH Systems 114
 4837 CHINA169-BACKBONE CNCGROUP China169 Backbone 81
 3320 DTAG Deutsche Telekom AG 69
39116 TELEHOUSE Telehouse Inter. Corp. of Europe Ltd 61
10796 SCRR-10796 - Time Warner Cable Internet LLC 53
 6830 LGI-UPC Liberty Global Operations B.V. 48
 6663 TTI-NET Euroweb Romania SA 46
 9198 KAZTELECOM-AS JSC Kazakhtelecom 45
 2497 IIJ Internet Initiative Japan Inc. 39
 3269 ASN-IBSNAZ Telecom Italia S.p.a. 39
 9371 SAKURA-C SAKURA Internet Inc. 39
12322 PROXAD Free SAS 37
20057 AT&amp;amp;T Wireless Service 37
30811 EPiServer AB 36
 137 ASGARR GARR Italian academic and research network 34
 209 ASN-QWEST-US NOVARTIS-DMZ-US 33
 6315 XMISSION - XMission, L.C. 33
52967 NT Brasil Tecnologia Ltda. ME 32
 4713 OCN NTT Communications Corporation 31
56041 CMNET-ZHEJIANG-AP China Mobile communications corporation 31
 1659 ERX-TANET-ASN1 Tiawan Academic Network (TANet) Information Center 30
 4538 ERX-CERNET-BKB China Education and Research Network Center 30
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;At this time, we've decided not to publish the full list of the IP addresses of the NTP servers involved in the attack out of concern that it could give even more attackers access to a powerful weapon. However, we have published a &lt;a href="https://docs.google.com/spreadsheet/ccc?key=0AhuvvqAkGlindHFtS0pJa0lYZGNlLXNONWtlY01qanc&amp;amp;usp=sharing"&gt;spreadsheet with the complete list of the networks with NTP servers that participated in the attack&lt;/a&gt;. While the per server amplification makes these attacks troubling, the smaller number of servers and networks involved gives us some hope that we can make a dent in getting them cleaned up. We are reaching out to network operators whose resources were used in the attack to encourage them to restrict access to their NTP servers and disable the MONLIST command.&lt;/p&gt;
&lt;p&gt;Somewhat ironically, the large French hosting provider OVH was one of the largest sources of our attack and also a victim of a large scale NTP amplification attack around the same time. The company's founder Tweeted:&lt;/p&gt;
 We see today lot of new DDoS attacks from Internet to our network. Type: NTP AMP Size: &amp;gt;350Gbps. No issue. VAC is great :)&#8212; Oles (@olesovhcom) February 12, 2014 
&lt;h2&gt;Time to Clean Up the Problem&lt;/h2&gt;
&lt;p&gt;If you're a network administrator and on Monday you saw network graphs like the one in the Tweet below then you are running a vulnerable NTP server.&lt;/p&gt;
 and here's what it looks like when a device participates in the NTP DDOS against @CloudFlare pic.twitter.com/QcrPGxbcUz&#8212; Eric C (@ctrl_alt_esc) February 12, 2014 
&lt;p&gt;You can check whether there are open NTP servers that support the MONLIST command running on your network by visiting the &lt;a href="http://openntpproject.org/"&gt;Open NTP Project&lt;/a&gt;. Even if you don't think you're running an NTP server, you should check your network because you may be running one inadvertently. For example, some firmware on Supermicro's ICMP controllers &lt;a href="http://blog.gmane.org/gmane.network.ntp.pool/month=20140201"&gt;shipped with a MONLIST-enabled NTP server on by default&lt;/a&gt;. More details on NTP attacks and instructions on how to disable the MONLIST command can be found on the &lt;a href="https://isc.sans.edu/diary/NTP+reflection+attack/17300"&gt;Internet Storm Center's NTP attack advisory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;NTP and all other UDP-based amplification attacks rely on source IP address spoofing. If attackers weren't able to spoof the source IP address then they would only be able to DDoS themselves. If you're running a network then you should ensure that you are following BCP38 and preventing packets with spoofed source addresses from leaving your network. You can test whether your network currently follows BCP38 using tools from MIT's &lt;a href="http://spoofer.cmand.org/summary.php"&gt;the Spoofer Project&lt;/a&gt;. If you're running a naughty network that allows source IP address spoofing, you can easily implement BCP38 by following the &lt;a href="http://www.bcp38.info/index.php/Main_Page"&gt;instructions listed at BCP38.info&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, if you think NTP is bad, just wait for what's next. SNMP has a theoretical 650x amplification factor. We've already begun to see evidence attackers have begun to experiment with using it as a DDoS vector. Buckle up.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 04:07:22 -0800</pubDate>
      <link>http://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack</link>
      <guid>http://blog.cloudflare.com/technical-details-behind-a-400gbps-ntp-amplification-ddos-attack</guid>
    </item>
    <item>
      <title> Making Remote Work Work - Learning - Source: An OpenNews project</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7231947'&gt;" Making Remote Work Work - Learning - Source: An OpenNews project"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://source.opennews.org/en-US/learning/making-remote-work-work/'&gt;https://source.opennews.org/en-US/learning/making-remote-work-work/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 
 
 &lt;h4&gt;Christopher Groskopf&#8217;s Tricks for Going to the Office without Going to the&#160;Office&lt;/h4&gt;
 
 
 
 &lt;p&gt;For the last two-and-a-half years I&#8217;ve been a 100% remote worker, first on &lt;a href="http://pandaproject.net/"&gt;&lt;span&gt;PANDA&lt;/span&gt; Project&lt;/a&gt; and now with &lt;a href="http://blog.apps.npr.org/"&gt;&lt;span&gt;NPR&lt;/span&gt; visuals&lt;/a&gt;. Recently, several people have asked me how I make this work. At the same time, I&#8217;ve taken on new responsibilities at &lt;span&gt;NPR&lt;/span&gt; as a project manager. This change has brought into sharp relief the things I&#8217;ve learned about how to work effectively from far away. Whereas I used to only have to figure out how to coordinate with my own small team, I now routinely connect remotely with our stakeholders, sponsorship and marketing departments, member stations, and&#160;more.&lt;/p&gt;
&lt;div&gt;
 &lt;img src="https://source.opennews.org/media/img/uploads/article_images/1-scrum_2.jpg"&gt;&lt;p&gt;My view for &lt;span&gt;NPR&lt;/span&gt; visuals 10:00 am (&lt;span&gt;ET&lt;/span&gt;) scrum. On this morning there were so many of us that several people are off the left and right sides of the&#160;camera.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In this piece, I&#8217;ll codify some of the lessons I&#8217;ve learned. If you&#8217;re already a remote developer, you may pick up some new tricks and a more rigorous way of thinking about how you work. If you are planning to go remote, oh boy, you should clear your calendar because I have so many things to tell you. Effective remote work comes down to maintaining those things which are necessary no matter where you work&#8212;organization, communication and&#160;motivation.&lt;/p&gt;
&lt;div&gt;
 &lt;img src="https://source.opennews.org/media/img/uploads/article_images/2-at-work_1.jpg"&gt;&lt;p&gt;What my coworkers see. If you&#8217;re curious about the thing on the wall, well, so is everybody else. It makes for a great long-distance&#160;icebreaker.&lt;/p&gt;
&lt;/div&gt;
 
 &lt;div&gt;
 &lt;h3&gt;Staying&#160;organized&lt;/h3&gt;
 
 &lt;p&gt;It goes without saying that if you&#8217;re going to be apart from your team, you need to take responsibility for your own organization. What may be less obvious is that you&#8217;re going to need to take that organization to much greater lengths than would probably otherwise be necessary. Why? The lack of tangible reminders. It&#8217;s amazing how much we rely on subtle environmental and social cues for how and when things get done. If you never lock eyes with a homepage producer, you might forget to tell them about an impending&#160;launch.&lt;/p&gt;
&lt;p&gt;In lieu of these contextual, human reminders, you&#8217;re going to need to rely on systems to help you remember. Whenever possible, you should use systems that allow you to collaborate directly with your coworkers. The most basic example of this is your office calendaring software. Going remote has taught me the value of having a schedule. Your calendar software does lots of smart things for you, like compensating for time zones and preventing conflicts. The most important thing it does for you is prevent other people from creating conflicts for you. (You can&#8217;t just &#8220;not be around&#8221; when you work&#160;remotely.)&lt;/p&gt;
 
Pro tip: if you&#8217;ve got school-age kids, schedule yourself for the half-hour they get out of school for the next ten years. In practice nobody will even notice you&#8217;ve done this and it will save you the hassle of having to reschedule a meeting because you have to pick your kids&#160;up.
 
&lt;div&gt;
 &lt;img src="https://source.opennews.org/media/img/uploads/article_images/3-clock.jpg"&gt;&lt;p&gt;Get yourself a nice multi-timezone clock. It&#8217;s invaluable and looks cool. The Nexus 7&#8217;s clock works great for&#160;this.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The flip-side of this is that you&#8217;ll often be scheduling meetings for a group of folks who aren&#8217;t remote. When you do this you need to keep their needs in mind. Don&#8217;t schedule meetings for ten people and just send them a Google Hangout &lt;span&gt;URL&lt;/span&gt;. Make sure a room is available (preferably one on their floor), reserve it and then annotate the calendar event with the location. Do yourself a favor and appoint someone to make sure the A/V setup in the room works well a few minutes before the meeting starts. Taking up a dozen people&#8217;s time with your telepresence issues is even more annoying than just being late. Everyone can relate to being late, but not everyone can relate to being unintelligibly garbled or echoing like the Grand&#160;Canyon.&lt;/p&gt;
 
Pro tip: If your office has a phone system that uses short extensions internally, have your IT department set one up to redirect to your cell phone. That way you can tell your coworkers to dial &#8220;5555&#8221;, instead of your whole&#160;number.
 
&lt;p&gt;Beyond calendaring and meeting coordination, it&#8217;s important to extend your organized persona into other interactions with your team. The best example I can offer of this is being rigorous in your usage of tickets/issues. If you&#8217;re a programmer this &lt;em&gt;should&lt;/em&gt; already be second nature, but even if you aren&#8217;t, you should be using some way of tracking who is working on what. Making sure everyone is being prompt and thorough in their ticketing can massively reduce the friction of remote collaboration. It simply minimizes &lt;em&gt;how often&lt;/em&gt; you actually need to talk by making that information readily available to everyone on the&#160;team.&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div&gt;
 &lt;h3&gt;Staying in&#160;communication&lt;/h3&gt;
 
 &lt;p&gt;No ticketing system will allow you to completely avoid conversation, and the synchronous part of remote collaboration is really where the bytes hit the information super highway. It goes without saying that modern tools like real-time video chat have made this style of work possible, but they aren&#8217;t a cure-all and they can be used ineffectively. I recommend a two-pronged approach to synchronous communication: one-part text chat and one-part video chat. Using each to its maximum potential requires some&#160;consideration.&lt;/p&gt;
&lt;p&gt;For text chat our team uses &lt;a href="http://hipchat.com"&gt;Hipchat&lt;/a&gt;, a wonderful piece of software that has Android, iOS, Windows, Mac, Linux &lt;em&gt;and&lt;/em&gt; web clients. Among its charms are its image sharing integration and its capacity to quickly spin up ad-hoc chat rooms. This is our &#8220;always-on backchannel,&#8221; which is to say that during working hours our entire team is in this chat. This serves a number of&#160;purposes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It reduces the number of unnecessary phone or video calls that get made, because, &#8220;Hey, did you get that thing I sent you?&#8221; is much faster in&#160;text.&lt;/li&gt;
&lt;li&gt;It serves as a status indicator of who is at work (available = green light), who is at lunch (away = yellow light) and who is out (not&#160;online).&lt;/li&gt;
&lt;li&gt;It can be ignored. Sometimes you just need to focus. Text chat is asynchronous when you need it to&#160;be.&lt;/li&gt;
&lt;li&gt;It&#8217;s perfect for quickly bringing the entire team up to date on the latest funny GIFs of football players crying or cats dancing. (Or if the production servers are&#160;down.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When the backchannel isn&#8217;t good enough, then you switch into video chat mode. &lt;em&gt;Never&lt;/em&gt; use a phone if you can video chat. Body language matters, even when you&#8217;re talking about database normalization. It&#8217;s the difference between &#8220;I don&#8217;t want to do it this way&#8221; and &#8220;I will hate my job for the next week if we do it this way.&#8221; You should get comfortable jumping into a Hangout even if it&#8217;s only for a five minute conversation. In fact, you should get comfortable telling people to do it. Don&#8217;t be afraid. It may annoy somebody once, but they&#8217;ll quickly get used to it and it&#8217;s much better than the alternative&#160;miscommunications.&lt;/p&gt;
 
Pro tip: If you have a Hubot in your backchannel, you can snag our hangouts script to automatically generate new hangouts on&#160;demand!
 
&lt;p&gt;Among the best things you can do for yourself as a remote employee is to get comfortable asking for help. You&#8217;re going to need somebody to make sure the A/V in the conference room works. You&#8217;re going to need somebody to wander the halls looking for that stakeholder who can&#8217;t find the conference room in the first place. You&#8217;re going to need somebody to assure less technically savvy people that your presence in the room is not magic. Don&#8217;t be afraid to ask for help. You&#8217;re all on the same team and it&#8217;s in everyone&#8217;s interest to make things&#160;work.&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div&gt;
 &lt;h3&gt;Remote-work gear worth&#160;having&lt;/h3&gt;
 
 &lt;p&gt;Your work is going to depend on video chat, so invest in a good quality webcam. Expense it if you can, but if you can&#8217;t, buy one anyway. I recommend the &lt;a href="http://www.amazon.com/Logitech-Webcam-Portable-Calling-Autofocus/dp/B004WO8HQ4/ref=sr_1_1?ie=UTF8&amp;amp;qid=1391745477&amp;amp;sr=8-1&amp;amp;keywords=logitech+c525"&gt;Logitech C525&lt;/a&gt;. It&#8217;s simple, inexpensive, and a huge upgrade over even the current generation MacBook&#8217;s embedded webcam. Your own meaningful body language will suddenly be visible to the rest of the&#160;team.&lt;/p&gt;
&lt;p&gt;While you&#8217;re shopping, buy a pair of document cameras too. This is one of those wonderful bits of technology you don&#8217;t know you need. They are especially helpful for &lt;span&gt;UX&lt;/span&gt; wire-framing and &lt;span&gt;UI&lt;/span&gt; sketching, but I bet you&#8217;ll find other uses for them too. I recommend the &lt;a href="http://www.amazon.com/Ziggi-HD-High-Definition-Document-Camera-CDVU-04IP/dp/B008DBF5Z8/ref=sr_1_1?ie=UTF8&amp;amp;qid=1391745602&amp;amp;sr=8-1&amp;amp;keywords=ziggi+hd"&gt;Ipevo Ziggi-&lt;span&gt;HD&lt;/span&gt;&lt;/a&gt;. They also make a nice &lt;a href="http://www.amazon.com/IPEVO-Carrying-Ziggi-HD-Document-Camera/dp/B0093TVWGA/ref=sr_1_2?ie=UTF8&amp;amp;qid=1391745602&amp;amp;sr=8-2&amp;amp;keywords=ziggi+hd"&gt;travel case&lt;/a&gt; for it if you, like me, work from more than one&#160;location.&lt;/p&gt;
&lt;div&gt;
 &lt;img src="https://source.opennews.org/media/img/uploads/article_images/4-switch.jpg"&gt;&lt;p&gt;A stereo A/B switch is a simple but invaluable device for your home&#160;office.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;If you switch back and forth between headphones and speakers a lot you can build yourself a little stereo A/B switch like one pictured above for just a few bucks. If you&#8217;re not handy with a soldering iron you can buy a really overpriced one on &lt;a href="http://www.amazon.com/Sescom-SES-IPOD-AB-Stereo-MP3-Player/dp/B005TE7GP4/ref=sr_1_2?ie=UTF8&amp;amp;qid=1391780149&amp;amp;sr=8-2&amp;amp;keywords=headphone+ab+switch"&gt;Amazon&lt;/a&gt;. It will save you constantly plugging and unplugging your headphones and, as side-benefit, it also serves as an inline mute switch when you have telepresence echo issues. I can just leave my speakers off and flip over to them when I&#8217;m talking to mute the&#160;echo.&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div&gt;
 &lt;h3&gt;Staying&#160;motivated&lt;/h3&gt;
 &lt;div&gt;
 &lt;img src='https://source.opennews.org/media/cache/0a/35/0a3513a1c6f0b0db8cac8b46d333112e.jpg' /&gt;&lt;p&gt;At work you bring something to remind you of home. At home you need something to remind you of work. To wit, this lovely letterpress of our team motto by &lt;a href="http://twitter.com/alykat"&gt;Alyson Hurt&lt;/a&gt;.&lt;/p&gt; &lt;/div&gt;
 
 &lt;p&gt;You can master organization and communication, but those things won&#8217;t keep you from sometimes feeling horribly disconnected from your team and your mission. Do not despair. This is normal. There are several things you can do to combat the disconnected feeling of working apart from your&#160;teammates.&lt;/p&gt;
&lt;p&gt;The single best advice I got when I went remote was from &lt;a href="https://twitter.com/mattwaite"&gt;Matt Waite&lt;/a&gt;, who said, &#8220;Put on pants,&#8221; by which I&#8217;m pretty sure he meant, &#8220;Act like you&#8217;re going to work.&#8221; Get up, put on clothes you&#8217;d leave the house in, take a look in the mirror, and go to your work space. It is essential that you have a room (or nook) in your house that you use only for work. You need a place to go to at the start of the day and leave at the end. I even put an office nameplate over mine. Do the same things you would if you were going to &lt;em&gt;the&lt;/em&gt; office. This might sound silly, but it will help keep you sane. Think of your home workspace like an exclave of your company&#8217;s offices. Act like you might run into your editor or the &lt;span&gt;CEO&lt;/span&gt; at any moment! It&#8217;ll make you feel&#160;normal.&lt;/p&gt;
&lt;div&gt;
 &lt;img src="https://source.opennews.org/media/img/uploads/article_images/5-office_1.jpg"&gt;&lt;p&gt;Now entering my&#160;office.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;That being said, you also own your office, so you don&#8217;t have to deck it out with cubicle swag. Make yourself a very comfortable space to work in. My recommendations: big speakers, high-quality headphones, a comfortable desk (and an &lt;a href="http://www.amazon.com/Aeron-Chair-Herman-Miller-Adjustable/dp/B003M1C7XW/ref=sr_1_1?ie=UTF8&amp;amp;qid=1391781170&amp;amp;sr=8-1"&gt;Aeron&lt;/a&gt; or &lt;a href="http://www.amazon.com/Steelcase-Leap-Fabric-Chair-Black/dp/B006H1QYBA"&gt;Leap&lt;/a&gt; chair if you don&#8217;t stand), some nice pictures, and maybe even windows. Embrace the fact that you get to work at home. Sometimes my stereo competes with the helicopters that land at the hospital down the street. My coworkers don&#8217;t know the&#160;difference.&lt;/p&gt;
&lt;p&gt;Force yourself to work reasonable hours. This is an easy one to screw up. If you&#8217;re comfortable and you like your job it&#8217;s pretty easy to just keep working until it&#8217;s time for bed. Don&#8217;t do it&#8212;unless you&#8217;re on deadline and then only if you can&#8217;t cut features instead of working into the night. Take breaks, walk outside, drink coffee, etc. You wouldn&#8217;t spend four solid hours at your desk if you worked in the office. You would talk to your coworkers or go for a walk once in a while. Try to maintain that normalcy and it will help the rest to feel&#160;normal.&lt;/p&gt;
 
Pro tip: With a little bit of practice and the right tools, you can make a much better cup of coffee at home than your Starbucks barista can push out the drive-through&#160;window.
 
&lt;p&gt;It&#8217;s my earnest belief that some people will have higher expectations for you because you work remotely. It&#8217;s very easy for them to believe you&#8217;re in your underwear playing Final Fantasy instead of slogging through the documentation for Django. Not all work has obvious output and when they can&#8217;t see you at your desk, it&#8217;s tempting to log those blank hours as time wasted. There is absolutely nothing you can do about this, so I suggest you embrace their high standards. Aim to excel. You already have a tremendous productivity advantage because no one can interrupt you at your own house unless you let them. Eventually you will win people over and it won&#8217;t matter so much anyway, but it may take you a&#160;while.&lt;/p&gt;
&lt;p&gt;And a final word: visit the office. If you&#8217;re in the same foxhole, but you&#8217;re never celebrating together, then it just isn&#8217;t the same. Visit your team as often as is realistic. At &lt;span&gt;NPR&lt;/span&gt; I plan to visit at least once every three months. When you&#8217;re there get outside the office together. It pays to remind one other that nobody is just a face on a&#160;screen.&lt;/p&gt;
 
 &lt;/div&gt;
 &lt;div&gt;
 &lt;h3&gt;A few words for&#160;programmers&lt;/h3&gt;
 
 &lt;p&gt;I&#8217;ve attempted to construct my advice in a way that would be useful to programmers and non-programmers alike. In general the same challenges crop up, but there are a few specific nuggets of advice I can offer to&#160;programmers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Consistency is even more important when you&#8217;re not in constant contact. If you don&#8217;t have a &lt;a href="https://github.com/nprapps/bestpractices"&gt;style guide&lt;/a&gt;, write one. It&#8217;s crucial towards alleviating the frustration that arises from inconsistent programming&#160;practices.&lt;/li&gt;
&lt;li&gt;Documentation: just do it. You really have to. Absolutely nobody is going to remember how to load that database dump you created (or even where it is). Document your processes, preferably by making them dead simple to repeat. Have READMEs. Have a spreadsheet index of your servers. Every minute you spend writing documentation is five minutes saved talking on the&#160;phone.&lt;/li&gt;
&lt;li&gt;You should be pair programming. Doing this remotely can be very tricky. It will never be as good as passing a keyboard around can be, but you should do it anyway. If a screen share in a Hangout is all you can manage then do that, especially if you have junior programmers who will benefit from the collaboration. &lt;a href="http://tmux.sourceforge.net/"&gt;tmux&lt;/a&gt; sessions can also be used to enable pairing in the command line, which is especially useful for &lt;a href="http://www.vim.org/"&gt;vim&lt;/a&gt; users. For something more integrated, we&#8217;ve recently had very good experiences with &lt;a href="http://floobits.com"&gt;Floobits&lt;/a&gt;, though it&#8217;s still relatively new, so our opinions are subject to&#160;change.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is everything I&#8217;ve learned in two-and-a-half years of remote development. It&#8217;s a process I&#8217;m constantly iterating, especially now that I&#8217;m working more with folks outside our team. However, I think at the end of the day any future improvements I make will fall into these problem categories of organization, communication, and motivation. These are the dragons you&#8217;ve got to slay if you&#8217;re going to work far from your team. It &lt;em&gt;is&lt;/em&gt; possible. It can be good. It&#8217;s not a choice you should make lightly, but if you decide to make the leap, you deserve to do it&#160;well.&lt;/p&gt;
 
 &lt;/div&gt;
 
 &lt;div&gt;
 
 &lt;p&gt;
 &lt;img src="https://pbs.twimg.com/profile_images/2778403638/4f499e3b117a65e0eb35e14069a29dfc_normal.png"&gt;
 Christopher Groskopf is a news applications developer and project manager on the &lt;span&gt;NPR&lt;/span&gt; Visuals team. He divides his time between Tyler, &lt;span&gt;TX&lt;/span&gt; and Oakland, &lt;span&gt;CA&lt;/span&gt;. Find him on Twitter: &lt;a href="https://twitter.com/onyxfish"&gt;@onyxfish.&lt;/a&gt;
 &lt;/p&gt;
 &lt;/div&gt; 
 
 Please enable JavaScript to view the comments powered by Disqus.
 &lt;a href="http://disqus.com"&gt;comments powered by &lt;/a&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 07:53:50 -0800</pubDate>
      <link>https://source.opennews.org/en-US/learning/making-remote-work-work/</link>
      <guid>https://source.opennews.org/en-US/learning/making-remote-work-work/</guid>
    </item>
    <item>
      <title></title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7232042'&gt;""&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://akaros.cs.berkeley.edu/files/Plan9License'&gt;http://akaros.cs.berkeley.edu/files/Plan9License&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Thu, 13 Feb 2014 08:31:12 -0800</pubDate>
      <link>http://akaros.cs.berkeley.edu/files/Plan9License</link>
      <guid>http://akaros.cs.berkeley.edu/files/Plan9License</guid>
    </item>
    <item>
      <title>Ken Shirriff's blog: Bitcoin transaction malleability: looking at the bytes</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7232175'&gt;"Ken Shirriff's blog: Bitcoin transaction malleability: looking at the bytes"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.righto.com/2014/02/bitcoin-transaction-malleability.html'&gt;http://www.righto.com/2014/02/bitcoin-transaction-malleability.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
"Malleability" of Bitcoin transactions has recently become a major issue. This article looks at how transactions are modified, at the byte level.
&lt;p&gt;
An attacker has been modifying Bitcoin transactions, causing them to have a different hash.
Recently an attacker has been taking transactions on the Bitcoin peer-to-peer network, modifying them slightly, and rapidly sending them to a miner. The modified transaction often gets mined first, pre-empting the original transaction.
The attacker can only make "trivial" changes to a transaction, so exactly the same Bitcoin transfer happens as was intended - the same amount is moved between the same addresses, so this attack seems entirely pointless. However, each transaction is identified by a cryptographic hash, and even a trivial change to the transaction causes the transaction hash to change. Changing the hash of a transaction can have unexpected effects on the Bitcoin system.
&lt;/p&gt;
&lt;h2&gt;A very quick explanation of transactions&lt;/h2&gt;
&lt;p&gt;
A Bitcoin transaction moves bitcoins from one address to another. A transaction must be signed with the private key corresponding to the address, so only the owner of the bitcoins can move them. (This signing process is surprisingly complex.) The signature is then put in the middle of the transaction. Finally, the entire transaction (including the signature) is cryptographically hashed, and this hash is used to identify the transaction in the Bitcoin system. The important data is protected by the signature and can't be modified by an attacker. But there are few ways the signature itself can be changed, but still remain valid.
&lt;/p&gt;
&lt;p&gt;
(This is oversimplified. For more details, see &lt;a href="http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html"&gt;Bitcoins the hard way&lt;/a&gt;.)
&lt;/p&gt;
&lt;h2&gt;Looking at a modified transaction&lt;/h2&gt;
To find a transaction suffering from malleability, I looked at the &lt;a href="https://blockchain.info/unconfirmed-transactions"&gt;unconfirmed transactions&lt;/a&gt; page. If a transaction gets modified, only one version will get mined successfully (and actually transfer bitcoins), and the other will remain unconfirmed (and have no effect). Among the many conditions enforced in mined blocks, the same bitcoins can't be spent twice, so both transactions will never be mined. This is why having two versions of a transaction doesn't result in two payments.
&lt;p&gt;
I picked a &lt;a href="https://blockchain.info/tx/d36a0fcdf4b3ccfe114e882ef4159094d2012bc8b72dc6389862a7dc43dfa61c"&gt;random unconfirmed transaction&lt;/a&gt; from Feb 11 to examine. (Unfortunately this transaction has been discarded since I wrote this article, breaking my links. But you can look up a different one if you want.) Blockchain.info helpfully includes a banner warning that something is wrong:
&lt;/p&gt;
&lt;div&gt;
 Warning! this transaction is a double spend of &lt;a href="https://blockchain.info/tx-index/112593804"&gt;112593804&lt;/a&gt;. You should be extremely careful when trusting any transactions to/from this sender.
 &lt;/div&gt;
&lt;p&gt;
Looking at the transactions, everything seems fine:
&lt;/p&gt;
&lt;p&gt;
The confirmed transaction takes 0.01 BTC from &lt;code&gt;1JRQExbG6WAhPCWC5W5H7Rn1LannTx1Dix&lt;/code&gt; and transfers 0.0099 BTC to &lt;code&gt;1Hbum99G9Lp7PyQ2nYqDcN3jh5aw878bFt&lt;/code&gt; (the remainder is a mining fee of 0.001 BTC). This transaction has hash &lt;a href="https://blockchain.info/tx/bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f"&gt;bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The unconfirmed transaction takes 0.01 BTC from &lt;code&gt;1JRQExbG6WAhPCWC5W5H7Rn1LannTx1Dix&lt;/code&gt; and transfers 0.0099 BTC to &lt;code&gt;1Hbum99G9Lp7PyQ2nYqDcN3jh5aw878bFt&lt;/code&gt; (the remainder is a mining fee of 0.001 BTC). This transaction has hash &lt;a href="https://blockchain.info/tx/d36a0fcdf4b3ccfe114e882ef4159094d2012bc8b72dc6389862a7dc43dfa61c"&gt;d36a0fcdf4b3ccfe114e882ef4159094d2012bc8b72dc6389862a7dc43dfa61c&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The scripts of both transactions appear identical:
&lt;/p&gt;
&lt;pre&gt;
Input Scripts
30450220539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1022100fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d8701 046c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc402b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44 OK
Output Scripts
OP_DUP OP_HASH160 b61c32ac39c63f919c4ce3a5df77590c5903d975 OP_EQUALVERIFY OP_CHECKSIG 
&lt;/pre&gt;
Both transactions look identical: the bitcoins are moving between the same accounts in both cases, the amounts are equal, and the scripts look identical. So why do they have different hashes? A clue is the unconfirmed transaction is 224 bytes and the confirmed transaction is 228 bytes.
&lt;p&gt;
Looking at the
&lt;a href="http://blockexplorer.com/rawtx/bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f"&gt;raw transactions&lt;/a&gt; also fails to show what is happening:
&lt;/p&gt;
&lt;pre&gt;
{
 "hash":"bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f",
 "ver":1,
 "vin_sz":1,
 "vout_sz":1,
 "lock_time":0,
 "size":228,
 "in":[
 {
 "prev_out":{
 "hash":"3ceafb1d6864091a6c40f0f0fa7d4072d71a909820444ac307dcaa7a2d4b88d4",
 "n":1
 },
 "scriptSig":"30450220539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1022100fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d8701 046c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc402b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44"
 }
 ],
 "out":[
 {
 "value":"0.00990000",
 "scriptPubKey":"OP_DUP OP_HASH160 b61c32ac39c63f919c4ce3a5df77590c5903d975 OP_EQUALVERIFY OP_CHECKSIG"
 }
 ]
}
&lt;/pre&gt;
&lt;p&gt;
Even though the scripts are mostly in hex in this raw display, they have been parsed slightly, which hides what is going on. We need to get the full scripts &lt;a href="https://blockchain.info/rawtx/bba8c3d044828f099ae3bc5f3beaff2643e0202d6c121753b53536a49511c63f?scripts=true"&gt;here&lt;/a&gt; and &lt;a href="https://blockchain.info/rawtx/d36a0fcdf4b3ccfe114e882ef4159094d2012bc8b72dc6389862a7dc43dfa61c?scripts=true"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
The unconfirmed transaction has script:
&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;&lt;span&gt;48&lt;/span&gt;30450220539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1022100fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d8701&lt;span&gt;41&lt;/span&gt;046c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc402b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44&lt;/code&gt;
&lt;/pre&gt;
The confirmed transaction has script:
&lt;pre&gt;
&lt;code&gt;&lt;span&gt;4d4800&lt;/span&gt;30450220539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1022100fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d8701&lt;span&gt;4d4100&lt;/span&gt;046c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc402b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44&lt;/code&gt;
&lt;/pre&gt;
There are a couple differences (highlighted in red). But what do they mean?
&lt;p&gt;
This script is the &lt;i&gt;scriptSig&lt;/i&gt;, the signature of the transaction using the sender's private key. This signature proves the sender owns the bitcoins. However, the &lt;i&gt;scriptSig&lt;/i&gt; isn't just a simple signature, but is actually a program written in Bitcoin's &lt;a href="https://en.bitcoin.it/wiki/Script"&gt;Script&lt;/a&gt; language. This program pushes the signature data onto the execution stack. The program from the unconfirmed script is interpreted as follows:
&lt;/p&gt;
&lt;table&gt;PUSHDATA 4848signature (DER)
 sequence30length45integer02length20X539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1integer02length21Y
 00fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d87SIGHASH_ALL01PUSHDATA 4141public key
 type04X6c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc4Y
 02b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44&lt;/table&gt;
&lt;p&gt;
The program from the confirmed script is interpreted as follows:
&lt;/p&gt;
&lt;table&gt;OP_PUSHDATA2 00484d 48 00signature (DER)
 sequence30length45integer02length20X539901ea7d6840eea8826c1f3d0d1fca7827e491deabcf17889e7a2e5a39f5a1integer02length21Y
 00fe745667e444978c51fdba6981505f0a68619f0289e5ff2352acbd31b3d23d87SIGHASH_ALL01OP_PUSHDATA 00414d 41 00public key
 type04X6c4ea0005563c20336d170e35ae2f168e890da34e63da7fff1cc8f2a54f60dc4Y
 02b47574d6ce5c6c5d66db0845c7dabcb5d90d0d6ca9b703dc4d02f4501b6e44&lt;/table&gt;
&lt;p&gt;
Note the highlighted differences. The original transaction has a byte 0x48, which says to push (hex) 48 bytes of data. The modified transaction has a OP_PUSHDATA2 (0x4d), which says the next two bytes (48 00) are the number of bytes to push. In other words, both transactions do exactly the same thing (push the signature), but the original indicates this with &lt;code&gt;48&lt;/code&gt;, while the modified transaction indicates this with &lt;code&gt;4d 48 00&lt;/code&gt;. (Pushing the public key has a similar modification.) Since both scripts do exactly the same thing, both transactions are equally valid. However, since the data has changed, the transactions have two different hashes.
&lt;/p&gt;
&lt;h2&gt;Why does malleability matter?&lt;/h2&gt;
&lt;a href="https://en.bitcoin.it/wiki/Transaction_Malleability"&gt;Transaction Malleability&lt;/a&gt; has been discussed for years and treated as a minor inconvenience. Both transactions have exactly the same effect, moving bitcoins between the same addresses. Only one transaction will be confirmed by miners, and the other will be discarded, so nobody gets paid twice even though there are two transactions.
&lt;p&gt;
There are, however, three problems that have turned up recently due to malleability.
&lt;/p&gt;
&lt;p&gt;
First, the major Mt.Gox exchange &lt;a href="https://www.mtgox.com/press_release_20140210.html"&gt;stated&lt;/a&gt; they would stop processing bitcoin withdrawals until the Bitcoin network approves and standardizes on a new non-malleable hash. Apparently they were using the hash to track transactions, and would re-send bitcoins if the transaction didn't appear to go through. This is obviously a problem if the transaction did go through, but with a different hash.
&lt;/p&gt;
&lt;p&gt;
Second, some wallet software would use both transactions to compute the balance, which caused it to show the wrong value.
&lt;/p&gt;
&lt;p&gt;
Finally, due to the way Bitcoin handles &lt;i&gt;change&lt;/i&gt;, malleability could cause a second transaction to fail. This requires a bit more explanation.
&lt;/p&gt;
&lt;h2&gt;Failures due to change and malleability&lt;/h2&gt;
The Bitcoin protocol doesn't really move bitcoins from address to address. Instead, it takes bitcoins from a set of &lt;i&gt;inputs&lt;/i&gt;, and sends them to a set of &lt;i&gt;outputs&lt;/i&gt;. Each output is an address (actually a script, but let's ignore that for now). Each input is an output from a previous transaction, and each input must be entirely spent.
&lt;p&gt;
As a result, if you have 3 bitcoins, and you want to spend one of them, the other two bitcoins get returned to you as &lt;i&gt;change&lt;/i&gt;, sent to an address you control. If you then want to spend some of the change, your second transaction references the previous transaction that generates the change, referencing it by the hash of the first transaction. This is where malleability becomes a problem - if the first transaction's hash changed, the second transaction is not valid and the transaction will fail. Note that the change will still go to your proper address, so you can spend it as long as you use the correct (modified) transaction hash, so you don't lose any bitcoins. You just have the inconvenience of having a transaction rejected, and you'll need to redo it with the right hash.
&lt;/p&gt;
&lt;p&gt;
The change problem only happens because some wallet software takes a shortcut, letting you (attempt to) spend the change before the transaction has been confirmed. The reasoning is that since it's your change from your transaction, you should be able to trust yourself. But that breaks down with malleability. 
&lt;/p&gt;
&lt;h2&gt;Malleability has been known for a long time&lt;/h2&gt;
Transaction malleability has been known since 2011. The exact OP_PUSHDATA2 malleability used above was described four months ago &lt;a href="https://github.com/bitcoin/bitcoin/pull/3025"&gt;here&lt;/a&gt;. There are many other types of malleability, which are explained &lt;a href="https://gist.github.com/sipa/8907691"&gt;here&lt;/a&gt;. The script code can be modified in several ways while leaving its operation unchanged. The signature itself can be encoded slightly differently. And interestingly, due to the mathematics of elliptic curves the numeric value of the signature can be negated, yielding a second valid signature.
&lt;h2&gt;Conclusion&lt;/h2&gt;
Hopefully this has helped to make malleability more understandable. If you want to know more details of the Bitcoin protocol, including signing and hashing, see my previous article &lt;a href="http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html"&gt;Bitcoins the hard way&lt;/a&gt;.
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 08:31:13 -0800</pubDate>
      <link>http://www.righto.com/2014/02/bitcoin-transaction-malleability.html</link>
      <guid>http://www.righto.com/2014/02/bitcoin-transaction-malleability.html</guid>
    </item>
    <item>
      <title>Tech Notes: React, JSX, and CoffeeScript</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7232695'&gt;"Tech Notes: React, JSX, and CoffeeScript"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://neugierig.org/software/blog/2014/02/react-jsx-coffeescript.html'&gt;http://neugierig.org/software/blog/2014/02/react-jsx-coffeescript.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;&lt;a href="http://facebook.github.io/react/"&gt;React&lt;/a&gt; is neat. It's a reimagining of how your DOM relates to your
app state that dramatically simplifies code without being an enormous
framework*. It also breaks a rule that I've never cared for, where
your templates are supposed to be separate from your code.&lt;/p&gt;
&lt;p&gt;In React's world, each component (re-)renders its entire virtual DOM
on any state change; React then manages updating the on-page DOM based
on what changed. This means the rendering code only needs to model
the static state of a component, rather than poking around in the DOM
to transition between states.&lt;/p&gt;
&lt;p&gt;To facilitate this rendering, React includes an optional library/tool
called JSX that lets you inline HTML into your render function. The
translation is relatively simple. This code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;render: function() {
 return &amp;lt;p&amp;gt;&amp;lt;a href="foo"&amp;gt;bar&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;becomes, post-translation, the not-keyboard-friendly but not hard to
understand:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;render: function() {
 return React.DOM.p(null, React.DOM.a({href:"foo"}, 'bar'));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In words, the tag becomes a function call, the attributes become an
object passed as the first argument, and the contents of the tag are
further parameters to the function.&lt;/p&gt;
&lt;p&gt;The nice thing about interleaving code and DOM is that you can use all
the normal JavaScript functionality in your template. Here's another
example from the React docs with an embedded &lt;code&gt;Array.map&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;return (
 &amp;lt;ol&amp;gt;
 {this.results.map(function(result) {
 return &amp;lt;li key={result.id}&amp;gt;{result.text}&amp;lt;/li&amp;gt;;
 })}
 &amp;lt;/ol&amp;gt;
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;CoffeeScript instead of JSX&lt;/h3&gt;
&lt;p&gt;If you're using CoffeeScript, your source code isn't JavaScript to
begin with. But turns out that CoffeeScript's flexible syntax makes
it relatively painless to use the underlying API directly.&lt;/p&gt;
&lt;p&gt;Start with shortening the DOM alias and writing more or less the same
code as above. Also note that you don't need to explicitly &lt;code&gt;return&lt;/code&gt;
as the last statement in a function is implictly returned, and that
the function literal syntax for argumentless function is just a bare
&lt;code&gt;-&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R = React.DOM
# ...
render: -&amp;gt;
 R.p(null, R.a({href:'foo'}, 'bar'))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But you can do better. First, CoffeeScript knows to insert the curlies on
an object literal because of the embedded colon.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; R.p(null, R.a(href:'foo', 'bar'))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then you can remove the parens by splitting across lines. When providing
args to a function, a comma+newline+indent continues the argument list.
Much like Python, the visual layout follows the semantic nesting.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; R.p null,
 R.a href:'foo', 'bar'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In fact, beyond the first argument, the trailing commas are optional
when you have newlines. Here's the same thing again with two links
inside the &lt;code&gt;&amp;lt;p&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; R.p null,
 R.a href:'foo', 'bar' # note omitted comma here
 R.a href:'foo2', rel:'nofollow', 'second link'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CoffeeScript also makes every statement into an expression, which is a
familiar feeling coming from functional programming. It means you can
use statement-like keywords like &lt;code&gt;if&lt;/code&gt; and &lt;code&gt;for&lt;/code&gt; on the right hand side
of an equals sign, or even within a block of code like the above.&lt;/p&gt;
&lt;p&gt;Here's a translation of the (7-line) &lt;code&gt;&amp;lt;ol&amp;gt;&lt;/code&gt; example from above.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R.ol null,
 for result in @results
 R.li key:result.id, result.text
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;There is one final feature of CoffeScript that I find myself using,
which is an alternative syntax for object literals. For example,
suppose in the above example the "key" attribute needs to be computed
from some more complicated expression:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R.ol null,
 for result, index in @results
 resultKey = doSomeLookup(result, index)
 R.li key:resultKey, result.text
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The simplification is that, within a curly-braced object literal, entries
&lt;em&gt;without&lt;/em&gt; a colon use the variable name as the key. The above could
be equivalently written:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;R.ol null,
 for result, index in @results
 key = doSomeLookup(result, index)
 R.li {key}, result.text
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is particularly useful when the attributes you want to set have
meaningful names -- &lt;code&gt;key&lt;/code&gt; is pretty vague, but if you construct an
&lt;code&gt;href&lt;/code&gt; and a &lt;code&gt;className&lt;/code&gt; variable it's pretty clear where they are
going to be used. These can be mixed with normal key-value pairs, too,
like:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;href = ...
className = ...
R.li {href, className, rel:'nofollow'}, ...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Putting it all together, here's a larger example, part of an
implementation of an "inline edit" widget. To the user, this widget
is some text with a "change" button to its right, where clicking
on "change" swaps the line of text out for an edit field positioned in
the same place, allowing the user to make a change to the value
directly. (Like how it works in a spreadsheet.) The first branch of
the &lt;code&gt;if&lt;/code&gt; is the widget's initial state; the &lt;code&gt;@edit&lt;/code&gt; function flips on
the &lt;code&gt;@state.editing&lt;/code&gt; flag.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;render: -&amp;gt;
 if not @state.editing
 R.div null,
 @props.text
 ' ' # space between text and button
 R.span className:'link-button mini-button', onClick:@edit, 'change'
 else
 R.div style:{position:'relative'},
 R.input
 style:{position:'absolute', top:-16, left:-7}
 type:'text', ref:'text', defaultValue:@props.text
 onKeyUp:@onKey, onBlur:@finishEdit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To get a feel for these rules, you can just experiment and look at the
generated JavaScript. Or you can go to &lt;a href="http://coffeescript.org"&gt;coffeescript.org&lt;/a&gt; and click
the "Try CoffeeScript" tab, where you can enter nonsense expressions
there just to experiment with the syntax.&lt;/p&gt;
&lt;p&gt;* Though I do wish it was smaller. I wish I could cut all the
support for old IE bits and the event handling abstractions.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 09:34:04 -0800</pubDate>
      <link>http://neugierig.org/software/blog/2014/02/react-jsx-coffeescript.html</link>
      <guid>http://neugierig.org/software/blog/2014/02/react-jsx-coffeescript.html</guid>
    </item>
    <item>
      <title>Why I'm Done with Social Media Buttons - Sam Solomon</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7232738'&gt;"Why I'm Done with Social Media Buttons - Sam Solomon"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://solomon.io/why-im-done-with-social-media-buttons/'&gt;http://solomon.io/why-im-done-with-social-media-buttons/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;As designers, it is our job to question why elements should exist. Sometimes we get so caught up in new ideas about navigation and animations that we forget to go back and&#160;examine more common elements&#8212;like social media buttons.&lt;/p&gt;
&lt;p&gt;They are unsightly relics of the web 2.0 era, yet they continue to find their way into new designs. Why does this happen?&lt;/p&gt;
&lt;p&gt;I&#8217;ve never been fond of them, but for a long time they seemed necessary.&#160;Trading some visual appeal for social network&#160;traffic is a compromise many make. Plus, it is easy to hop on the bandwagon. If Mashable uses them, why shouldn&#8217;t I?&lt;/p&gt;
&lt;p&gt;I followed that premise for a long time, but this is my stop. I&#8217;m hopping off. Those magical social buttons aren&#8217;t worth a damn anymore, and they&#160;won&#8217;t bring you traffic.&lt;/p&gt;
&lt;h2&gt;Anti-Social Media Buttons&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://signaltower.co/"&gt;Signal Tower&lt;/a&gt;&#160;is a podcast&#160;where I interview designers, developers and entrepreneurs. It is a great project. Recently, I posted an interview with&#160;&lt;a href="http://signaltower.co/jennifer-dewalt-180-websites-in-180-days/"&gt;Jennifer Dewalt&lt;/a&gt;, who taught herself to program by building 180 websites in 180 days.&lt;/p&gt;
&lt;p&gt;It was an amazing feat, and not surprisingly the interview is among the most popular on the site. It has been shared more than a hundred times.&lt;/p&gt;
&lt;p&gt;However, there is something interesting about those shares&#8212;not one of them occurred by clicking on a social media button. According to my in-page analytics, the buttons haven&#8217;t been touched in the month since the interview was been published.&lt;/p&gt;
&lt;p&gt;Initially, I thought that it was some sort of bug. Certainly someone clicked them, right? I decided to take a look at older posts. In all cases they had been used a negligible amount.&lt;/p&gt;
&lt;p&gt;I&#8217;m not the only one who has seen lackluster performance out of sharing buttons. My friend &lt;a href="http://www.samuelhulick.com/"&gt;Samuel Hulick&lt;/a&gt;, who runs &lt;a href="http://www.useronboard.com/"&gt;useronboard.com&lt;/a&gt;, actually saw an increase in sharing once the buttons were removed.&lt;/p&gt;
&lt;p&gt;Samuel&#8217;s experience may be an anomaly, but there is definitely a trend here. Either way,&#160;I&#8217;ve decided to remove the buttons from Signal Tower, and will not add them to this site.&lt;/p&gt;
&lt;p&gt;The conversion-minded designers will say, &#8220;Why didn&#8217;t you test the buttons? You should change the color, &#160;move them to the top, or try fixed floating buttons.&#8221; And they are right. There is a good amount to be gained by A/B testing them, but there is another reason I&#8217;m getting rid of them.&lt;/p&gt;
&lt;h2&gt;Sharing, a POOR USER EXPERIENCE&lt;/h2&gt;
&lt;p&gt;I never paid much attention to sharing buttons. I always thought they were a poor user experience.&lt;/p&gt;
&lt;p&gt;I&#8217;m a minimalist. When it comes to web design, I value white space, typography and function. People come to your site for the writing, which is why a focus on these elements will almost always result in a good user experience. Adding non-essential elements to a page reduces signal and creates noise.&lt;/p&gt;
&lt;p&gt;If you are on the internet for the cat pictures, this does not apply.&lt;/p&gt;
&lt;p&gt;Beyond the added noise there are other odd experiences using social buttons. Clicking on a button opens a popup window filled with oddly formatted text, marketing speak, and a ton of other stuff I don&#8217;t want to send out to friends and followers.&#160;All of the above degrades credibility.&lt;/p&gt;
&lt;p&gt;Popups are awkward. Even moreso on phones and tablets, which brings up another point. Every phone and tablet has a browser with built-in sharing, and mobile devices are &lt;a href="http://gs.statcounter.com/#all-comparison-na-monthly-200812-201402"&gt;gaining marketshare&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;WHAT MAJOR WEBSITES DON&#8217;T USE Sharing BUTTONS?&lt;/h2&gt;
&lt;p&gt;The one that immediately comes to mind is &lt;a href="http://ia.net/"&gt;Information Architects&lt;/a&gt;. A design group known for devout minimalism.&#160;Oliver Reichenstein, &#160;IA&#8217;s founder, wrote a scathing article on social media buttons called,&#160;&lt;a href="http://ia.net/blog/sweep-the-sleaze/"&gt;Sweep the Sleaze&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Reichenstein&#160;is right, &#8220;If readers are too lazy to copy and paste the URL, and write a few words about your content, then it is not because you lack these magical buttons.&#8221;&lt;/p&gt;
&lt;p&gt;There are other popular sites that have forgone social buttons.&#160;37signals (now &lt;a href="https://basecamp.com/"&gt;Basecamp&lt;/a&gt;), the company that ushered in the era of SaaS businesses and invented Ruby on Rails, have a blog called &lt;a href="http://signalvnoise.com/"&gt;Signal vs. Noise&lt;/a&gt;. You won&#8217;t find any on their blog.&lt;/p&gt;
&lt;p&gt;Smashing Magazine, one of the world&#8217;s leading design publications has forgone them. As a result of removing the Like Button, they discovered that&#160;&lt;a href="https://twitter.com/smashingmag/status/204955763368660992"&gt;more&#160;readers shared articles on their timeline&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;There are some redeeming values to sharing buttons. A post with buttons that show thousands of shares definitely boosts credibility. It signals that there is quality content, and others are vouching for it. Simply having the buttons on the page also subtly reminds visitors that they should share the content.&lt;/p&gt;
&lt;p&gt;On the other hand, what if nobody has shared your post? There are fewer things more sorry than a post that has a dozen buttons with zeros next to them.&lt;/p&gt;
&lt;p&gt;The evidence against social media buttons is stacking up. The novelty and utility of social media buttons have worn off.&#160;It is time to reconsider how much value they add.&lt;/p&gt;
&lt;p&gt;If people really love your content, they&#8217;ll share it.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 10:30:06 -0800</pubDate>
      <link>http://solomon.io/why-im-done-with-social-media-buttons/</link>
      <guid>http://solomon.io/why-im-done-with-social-media-buttons/</guid>
    </item>
    <item>
      <title>Can&#8217;t We All be Reasonable and Speak English? &#171;  Blog &#8211; Stack Exchange</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7233001'&gt;"Can&#8217;t We All be Reasonable and Speak English? &#171;  Blog &#8211; Stack Exchange"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://blog.stackoverflow.com/2014/02/cant-we-all-be-reasonable-and-speak-english/'&gt;http://blog.stackoverflow.com/2014/02/cant-we-all-be-reasonable-and-speak-english/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt; 
 
 &lt;p&gt;Two weeks ago, we announced the public launch of &lt;a href="http://pt.stackoverflow.com"&gt;Stack Overflow in Portuguese&lt;/a&gt;, our first-ever non-English Stack Overflow community. Which raises one very obvious question:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Have we lost our minds?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Wasn&#8217;t the whole point of Stack Overflow to aggregate as much developer knowledge as possible &lt;em&gt;in one place?&lt;/em&gt; To get all the potential solutions &lt;em&gt;together&lt;/em&gt;, and provide one canonical set of answers?&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://blog.stackoverflow.com/wp-content/uploads/800px-Pieter_Bruegel_the_Elder_-_The_Tower_of_Babel_Vienna_-_Google_Art_Project_-_edited.jpg"&gt;&lt;img src="http://blog.stackoverflow.com/wp-content/uploads/800px-Pieter_Bruegel_the_Elder_-_The_Tower_of_Babel_Vienna_-_Google_Art_Project_-_edited-300x219.jpg"&gt;&lt;/a&gt;&lt;p&gt;We are aware that, &#8220;Let&#8217;s all try speaking speaking different languages!&#8221; hasn&#8217;t always worked out for the best.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Yup. When we set out to &#8220;&lt;a href="http://www.codinghorror.com/blog/2008/04/introducing-stackoverflow-com.html"&gt;collectively increase the sum total of good programming knowledge in the world&lt;/a&gt;,&#8221; a big part of the plan was &lt;em&gt;de-fragmenting&lt;/em&gt; information previously spread across myriad books, sites, and your brains. It&#8217;s why we mark things as duplicates &#8211; we want all the precious gems of knowledge stored in the same cave of wonders.&lt;/p&gt;
&lt;p&gt;So know this: we are at least as worried about fragmentation as you are. And we have a plan:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Eventually, &lt;em&gt;all of you&lt;/em&gt; are going to have to learn Portuguese.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Okay, not really. But, given that one of our core goals was knowledge aggregation, it &lt;em&gt;does&lt;/em&gt; seem just a little bit crazypants to start launching sites in new languages, assuming that one very important fact is true:&lt;/p&gt;
 Assumption: All of the serious developers in the world are highly proficient in English. 
&lt;p&gt;Which&#8230; actually sounds plausible. But it&#8217;s wrong.&lt;/p&gt;
 Not every developer in the world speaks English.&#160;Just reading the comments from our announcement, you&#8217;ll see multiple readers sharing that they or their colleagues (and one dad) couldn&#8217;t participate on SO due to language constraints. But data beat anecdotes. We don&#8217;t have recent numbers for Brazil and Portugal, but we do for China, and they illustrate the same point:
So, if the data tell us that we&#8217;re getting roughly 80% less activity from Asia than we should in the absence of language constraints, why does it feel so obvious that all serious programmers speak English? &#160;This may help:
Quick &#8211; name any famous developer&#160;who doesn&#8217;t write well in English.
I couldn&#8217;t. &#160;I can name over a dozen famous English-speaking coders. But even if you frequent all the hacker sites and conferences, how many devs have you met who aren&#8217;t solid in English? Roughly none, right?
There&#8217;s just one problem. Try this:
Without Googling, name any famous developer from Japan. Or China. Or Russia.
Again, I couldn&#8217;t. Well, I came up with&#160;Shigeru Miyamoto. But he&#8217;s apparently a designer. I couldn&#8217;t&#160;name&#160;even one. Not like I can&#160;name&#160;Carmack or Stallman, or Hopper, or even &#8220;DHH.&#8221; (Does DHH have an actual name? I personally imagine him as a very handsome, talented, fast-driving set of initials. But I digress.)
Is it plausible that there aren&#8217;t&#160;any&#160;devs good enough to be famous from those countries? Nope. Here&#8217;s what&#8217;s happening:
It&#8217;s easy to assume that there aren&#8217;t any devs who can&#8217;t speak English because I never see any. But I never see any because I&#8217;m hanging around places where devs go&#160;to talk to each other in English.
The startling truth is this:
On the internet, If you don&#8217;t speak English, you&#8217;re completely invisible to me.
I also assumed that since developers have to learn English-like syntax, they must speak English. Which is a bit like assuming that because I can order Uni, Hamachi, and Aji by their Japanese names, I could probably toss back some sake with Morimoto and discuss knife techniques in Japanese. Even when programming languages use words like &#8220;if&#8221; or &#8220;function,&#8221; they&#8217;re just terms to memorize, and don&#8217;t always even mean the same thing in English that they do in programming.
It&#8217;s almost impossible to feel like part of a community if you&#8217;re not&#160;highly proficient in the language. Even non-native speakers who are fluent enough to read posts in their second or third languages often aren&#8217;t comfortable enough to write in them.I imagine myself at a professional meetup where&#160;everyone&#160;is speaking French (which I studied through college). How many jokes would I tell? How many would I even&#160;understand? Sure, I can function, and understand all the words, but I don&#8217;t feel like I&#160;belong to the group.
Don&#8217;t get me wrong &#8211; some of our best users aren&#8217;t native English speakers, but they&#8217;re in that rare group who have achieved a far higher mastery of a language than their peers. When I hear,
&#8220;Well, I didn&#8217;t need a site like this &#8211; English is my third language, and I&#8217;m in the top 1% on Stack Overflow!&#8221;
I think:
&#8220;Yes, that makes sense. You are insanely good at two difficult, language-based things. Most people will find both of them to be a lot more challenging than you did.&#8221;
The truth is, by requiring fluency in English, we&#8217;re shutting out of a lot of developers who may know enough English to read it but not enough to feel comfortable participating.
Requiring that all aspiring&#160;devs &#8220;just go learn English&#8221; first&#160;isn&#8217;t who we want to be.
No child should be denied their chance to revolutionize tomorrow&#8217;s input technologies.
Even if I believed that every programmer must eventually master English, it still wouldn&#8217;t make any sense to make them do it&#160;first. I believe that everyone &#8211; everyone &#8211; who can really fall in love with programming should get a chance to. So pre-filtering for the ones willing to learn a foreign freaking language before they first sit down with a code editor to see if it lights some spark in them just feels wrong.Think of the children. The children!! Okay, last quiz, just for the native English speakers:
How old were you when you first realized you could type things on a keyboard and control machines? Great. Now, at that age, were you proficient enough in another language to have learned to code&#160;without any English?
When I tell someone I work at Stack Exchange, my absolute favorite response is:
&#8220;I basically learned to code from posts I found on Stack Overflow&#8221;
We want that for every young programmer. Not just the ones lucky enough to be born somewhere that English gets taught in grammar school.
 &lt;p&gt;&lt;strong&gt;Okay, that all makes &lt;em&gt;some&lt;/em&gt; sense. But why Portuguese?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To be clear, we &lt;em&gt;still&lt;/em&gt; don&#8217;t think there needs to be a Stack Overflow in every language. We do want as much centralization as possible, and we know that devs who &lt;em&gt;have&lt;/em&gt; mastered English will mostly keep going to the English site, since it has the most critical mass. Just like we want them to.&#160;So, you won&#8217;t need to learn new languages to find good answers &#8211; we expect almost every question asked on the Portuguese site to&#160;&lt;b&gt;also&lt;/b&gt;&#160;be asked (and answered) on the English site.&lt;/p&gt;
&lt;p&gt;We&#8217;re really only considering launching sites in languages that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have large, strong communities of high-talent developers, where&lt;/li&gt;
&lt;li&gt;A meaningful percent of them aren&#8217;t comfortable enough to participate in an English-only community&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That probably limits the list of potential candidates to Mandarin, Japanese, Portuguese, Russian, Turkish, and Spanish.&#160;&lt;span&gt;From there, Portuguese was a no-brainer. The developer community in Brazil is awesome, and growing fast. And we wanted to start with a language with a similar alphabet, to minimize the localization work.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;And it&#8217;s worth a shot&lt;/strong&gt;. We&#8217;ve learned that it&#8217;s easier to just watch the future than to try to predict it. So we&#8217;re big on just trying stuff out (assuming it can&#8217;t break our other stuff). And we&#8217;re huge on getting stuff crazy-wrong,&#160;refusing to admit it, and instead doubling down on our wrong-minded idea, while nodding crazily&#160;er&#8230; admitting we made a mistake, and reversing course. So, given the number of user requests, we figured, &#8220;why&#160;&lt;strong&gt;not&lt;/strong&gt;&#160;give it a it a try?&#8221; We&#8217;re committed to supporting one or two languages and seeing how they develop before we push any further.&lt;/p&gt;
&lt;p&gt;And so far, it&#8217;s an &lt;em&gt;incredible&lt;/em&gt; success. Despite an audience limited to portuguese-speaking devs, the site&#8217;s activity in its first week was higher than all but 4 out of 120 sites we&#8217;ve launched to date, including the original trilogy.&lt;/p&gt;
&lt;p&gt;More importantly, people who couldn&#8217;t ask questions are asking them, and getting great answers. When in doubt, we want to err on the side of helping more people. If just one little girl in Brazil sticks with programming because an answer on this site helped her finish her first project, well&#8230; &lt;em&gt;&lt;strong&gt;that&#8217;s not good enough! &lt;/strong&gt;&lt;/em&gt;&lt;strong&gt;&#160;&lt;/strong&gt;I want to help thousands of them. And the boys, too.&lt;/p&gt;
&lt;p&gt;Still, it&#8217;s a good start.&lt;/p&gt;
 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 10:19:04 -0800</pubDate>
      <link>http://blog.stackoverflow.com/2014/02/cant-we-all-be-reasonable-and-speak-english/</link>
      <guid>http://blog.stackoverflow.com/2014/02/cant-we-all-be-reasonable-and-speak-english/</guid>
    </item>
    <item>
      <title>Ron Paul Launches Snowden Clemency Petition - Hit &amp; Run : Reason.com</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7233544'&gt;"Ron Paul Launches Snowden Clemency Petition - Hit &amp; Run : Reason.com"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://reason.com/blog/2014/02/13/ron-paul-launches-snowden-clemency-peti'&gt;http://reason.com/blog/2014/02/13/ron-paul-launches-snowden-clemency-peti&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;&lt;span&gt;&lt;img src="http://cloudfront-media.reason.com/mc/_external/2014_02/credit-gage-skidmorewikimedia-1.jpg?h=187&amp;amp;w=280"&gt;&lt;span&gt;Credit: Gage Skidmore/wikimedia&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today, it &lt;a href="http://thehill.com/blogs/blog-briefing-room/news/198325-ron-paul-launches-clemency-for-snowden-petititon"&gt;
was reported&lt;/a&gt; that former Rep. Ron Paul (R-Texas) &lt;a href="https://campaign.ronpaulchannel.com/snowden/petition/"&gt;launched a
petition&lt;/a&gt; calling for NSA whistle-blower Edward Snowden to be
granted clemency.&lt;/p&gt;
&lt;p&gt;On the page on the Ron Paul Channel&#8217;s website where visitors can
sign the petition, the former congressman says,&lt;/p&gt;
 
Edward Snowden sacrificed his livelihood, citizenship, and
freedom by exposing the disturbing scope of the NSA&#8217;s worldwide
spying program. Thanks to one man&#8217;s courageous actions, Americans
know about the truly egregious ways their government is spying on
them.
 
&lt;p&gt;The news of Paul&#8217;s petition comes on the same day &lt;a href="http://www.upi.com/Top_News/World-News/2014/02/13/European-Parliament-panel-votes-down-asylum-protection-for-Snowden/UPI-48431392301754/?spt=su"&gt;
it was reported&lt;/a&gt; that the European Parliament had voted against
calling for &#160;Snowden to be granted asylum.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The New York&lt;/em&gt; &lt;em&gt;Times&lt;/em&gt; and &lt;em&gt;The Guardian&lt;/em&gt;
&lt;a href="http://news.yahoo.com/new-york-times--guardian--urge-clemency-for-snowden-153422938.html"&gt;
both&lt;/a&gt; urged U.S. officials to grant Snowden clemency last
month.&lt;/p&gt;
&lt;p&gt;According to the Ron Paul Channel, Snowden&#8217;s temporary asylum in
Russia will expire at the end of July.&lt;/p&gt;
&lt;p&gt;Yesterday, Intelligence Squared hosted a debate on the motion
&#8220;Snowden was Justified.&#8221; Speaking for the motion were legal adviser
to Edward Snowden and ACLU attorney Ben Wizner and Pentagon Papers
whistle-blower Daniel Ellsberg. Speaking against the motion were
former CIA Director James Woolsey and former federal prosecutor and
contributing editor to&#160;&lt;em&gt;National Review&lt;/em&gt; Andrew
McCarthy.&#160;&lt;/p&gt;
&lt;p&gt;Wizner said Snowden was justified &#8220;because he provided to
journalists and through them to us information that we had a right
to know and that we had a need to know. The government had not just
concealed this information, it had lied to us about it.&#8221;&lt;/p&gt;
&lt;p&gt;Woolsey claimed that Snowden had released information to
&#8220;Hezbollah, Al Qaeda, Hamas, Pyongyang, Tehran, and so on.&#8221;
Thankfully, Ellsberg pointed out that Snowden released information
to journalists who have since reported on the documents.&lt;/p&gt;
&lt;p&gt;Before the debate began 29 percent were for the motion, 29
percent were against the motion, and 43 percent were undecided.
After the debate, 54 percent were for the motion, 35 percent were
against the motion, and 11 percent were undecided.&lt;/p&gt;
&lt;p&gt;Watch the debate below:&lt;/p&gt;
&lt;p&gt; &#160;&lt;/p&gt; 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 11:29:18 -0800</pubDate>
      <link>http://reason.com/blog/2014/02/13/ron-paul-launches-snowden-clemency-peti</link>
      <guid>http://reason.com/blog/2014/02/13/ron-paul-launches-snowden-clemency-peti</guid>
    </item>
    <item>
      <title>Good Samaritan Backfire &#8212; Medium</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7233730'&gt;"Good Samaritan Backfire &#8212; Medium"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://medium.com/p/9f53ef6a1c10/'&gt;https://medium.com/p/9f53ef6a1c10/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;&lt;strong&gt;Solitary Confinement&#8202;&#8212;&#8202;Safety Cell&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I was led into a corner.&lt;/p&gt;
&lt;p&gt;&#8220;First we have to get you ready,&#8221; one of the deputies said. His arm undid the button of my pants, which at first I thought was a cruel joke, and then he yanked them down to my ankles.&lt;/p&gt;
&lt;p&gt;They pushed me forward against the wall. I stumbled in my handcuffs and pant shackles.&lt;/p&gt;
&lt;p&gt;&#8220;Step out of your pants,&#8221; they ordered. And as soon as I did: &#8220;Step out of your socks!&#8221;&lt;/p&gt;
&lt;p&gt;Naked from the waist down, someone said, &#8220;Take off your shirt.&#8221; It was topologically impossible, given the cuffs. One of the deputies said, &#8220;I&#8217;ll do it.&#8221; I was uncuffed, my shirt was stripped with force, getting caught on my neck, tugging my head backwards, then up, then off.&lt;/p&gt;
&lt;p&gt;The night shift deputies were cruel. They responded to questions in the tone of schoolyard bullies&#8212;tauntingly. They giggled as they slammed the door behind me. &#8220;You&#8217;ll see the doctor alright.&#8221;&lt;/p&gt;
&lt;p&gt;On the floor lay a straight jacket made from the material used to pad furniture when it is being moved, and a second piece of the same fabric that I later used to cover the dirty floor in an attempt to sleep.&lt;/p&gt;
&lt;p&gt;There were no knobs or protrusions in the room, just soft corners. The toilet was a hole in the ground, no toilet paper. The hole dropped down a few feet where it was intersected by a grate of prison bars. The flushing happened automatically, periodically, though I never felt the urge. Even one&#8217;s feces left prison upon evacuation, presumably to leave the subject without anything to play with.&lt;/p&gt;
&lt;p&gt;I say this, because while the room was dirty, it was not as dirty as the next two cells I experienced the following day, which were smeared with feces and peanut butter. Approximately every 6 hours, a pushcart made its way around the prison with regulation peanut butter sandwiches. Only a fraction were consumed. Many were used for wall decoration or splattered against the ceiling.&lt;/p&gt;I couldn&#8217;t bear to eat, so I took my rations home as a souvenir. Aside from the milk, they still seemed edible a month later. This is their strength.&lt;p&gt;&lt;strong&gt;Trapped in a rendition of One Flew Over the Cuckoo&#8217;s Nest&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;While the metal door was too thick for me to be heard if I did not scream, I could hear the muted screams of others across the jail. The din was anything but soothing.&lt;/p&gt;
&lt;p&gt;When I asked for water, I was given enough (a couple Dixie cups&#8217; worth) to barely keep my throat lubricated.&lt;/p&gt;
&lt;p&gt;I was cold. The two pieces of fabric were not enough to spread on the filthy ground and also cover my naked body. I tried to sleep but it proved fruitless. Every 15 minutes, the metal peephole was creaked open, and I was expected to react, presumably to confirm that I was still alive. This was noted on a clipboard hanging beside the door.&lt;/p&gt;
&lt;p&gt;Eventually, I found it most comfortable to stand by the cell door with the coarse fabric draped over my body. I looked out through a narrow slit of Plexiglas and tried to call attention from passers&#8217; by. &#8220;Sir, Ma&#8217;am, could you please tell me&#8230; how long should I expect to be in here?&#8221;&lt;/p&gt;
&lt;p&gt;A streak of being ignored was broken by a couple disheartening responses. &#8220;Usually we put people in there for 24 hours.&#8221;&lt;/p&gt;
&lt;p&gt;Now I really felt like I &lt;em&gt;was &lt;/em&gt;going crazy. Those weren&#8217;t the reassuring answers my inner optimist had hoped for. When I had told the arresting officers that I accepted my lot, this wasn&#8217;t the lot I was referring to. I didn&#8217;t expect a medal for fulfilling my civic duty, but I still felt like I had some fleeting right to something other than this. I banged on the metal door repeatedly until Deputy Terry showed up.&lt;/p&gt;
&lt;p&gt;&#8220;Why am I in here?&#8221;&lt;/p&gt;
&lt;p&gt;&#8220;You are crazy. You are a lunatic,&#8221; he pronounced.&lt;/p&gt;
&lt;p&gt;&#8220;Do you know how I got here?&#8221;&lt;/p&gt;
&lt;p&gt;&#8220;Doesn&#8217;t matter.&#8221;&lt;/p&gt;
&lt;p&gt;&#8220;This place&#8212;being in here&#8212;will &lt;em&gt;make &lt;/em&gt;me crazy,&#8221; I pleaded.&lt;/p&gt;
&lt;p&gt;&#8220;Good. That&#8217;s what you are and where you belong.&#8221; He spiraled his index finger by his muscular temple.&lt;/p&gt;
&lt;p&gt;I tried to respond as he started walking way.&lt;/p&gt;
&lt;p&gt;&#8220;Sir, might you consider for a moment that I am having a sane response to the conditions I&#8217;m being subjected? I was arrested by the very police I called to the scene of a medical emergency less than a block from my house, while heading home for the night.&#8221;&lt;/p&gt;
&lt;p&gt;He stared at me bewildered, and never came near again.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 12:29:44 -0800</pubDate>
      <link>https://medium.com/p/9f53ef6a1c10/</link>
      <guid>https://medium.com/p/9f53ef6a1c10/</guid>
    </item>
    <item>
      <title>Silk Road 2 Hacked, All Bitcoins Stolen &#8211; $2.7 Miliion | Deep Dot Web</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7234010'&gt;"Silk Road 2 Hacked, All Bitcoins Stolen &#8211; $2.7 Miliion | Deep Dot Web"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.deepdotweb.com/2014/02/13/silk-road-2-hacked-bitcoins-stolen-unknown-amount/'&gt;http://www.deepdotweb.com/2014/02/13/silk-road-2-hacked-bitcoins-stolen-unknown-amount/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 
 &lt;span&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;Update 2&lt;/strong&gt;: &lt;span&gt;As the time passes there are more and more suspicions that this was in fact a &lt;strong&gt;SCAM&lt;/strong&gt; by the Silk Road staff &#8211; and not a hack, we will post more details about it once, and if we get the full picture.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: &lt;span&gt;&lt;span&gt;The amount of BTC that was stolen was calculated by&#160;Nicholas Weaver &lt;a href="https://twitter.com/NCWeaver"&gt;&lt;span&gt;@NCWeaver&lt;/span&gt;&lt;/a&gt; &#8211; Computer Security Researcher, to be around:&#160; 4474.266369160003BTC that are with the value of about $2.7 Million.&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It was just announced in a post by Defcon the Silk Road administrator (this post will be updated as soon as we get more info) -&lt;br&gt;&lt;/strong&gt;Yes, what seemed to be an imaginary situation until not long ago, just became true, the silk road2&#160; &#8211; the site who counted to be the security fortress of the deep web just has been hacked with its bitcoin stolen.&#160; as he announced on the sites forums,&#160; we pasted his post here:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Link to the original thread on Silk Road 2 Forums:&#160;&lt;/strong&gt;&lt;/span&gt; http://silkroad5v7dywlc.onion/index.php?topic=25091.msg491029#msg491029&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;=====Start Quote====&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I am sweating as I write this.&lt;/p&gt;
&lt;p&gt;Christmas brought grave news. I cannot adequately express how deeply honored I was by your unconditional support of my staff.&lt;/p&gt;
&lt;p&gt;I do not expect the same reaction to today&#8217;s revelations. This movement is built on integrity, and I feel obligated to be forthright with you.&lt;/p&gt;
&lt;p&gt;I held myself to a high standard as your leader, yet now I must utter words all too familiar to this scarred community:&lt;/p&gt;
&lt;p&gt;We have been hacked.&lt;/p&gt;
&lt;p&gt;Nobody is in danger, no information has been leaked, and server access was never obtained by the attacker.&lt;/p&gt;
&lt;p&gt;Our initial investigations indicate that a vendor exploited a recently discovered vulnerability in the Bitcoin protocol known as &#8220;transaction malleability&#8221; to repeatedly withdraw coins from our system until it was completely empty.&lt;/p&gt;
&lt;p&gt;Despite our hardening and pentesting procedures, this attack vector was outside of penetration testing scope due to being rooted in the Bitcoin protocol itself.&lt;/p&gt;
&lt;p&gt;This attack hit us at the worst possible time. We were planning on re-launching the new auto-finalize and Dispute Center this past weekend, and our projections of order finalization volume indicated that we would need the community&#8217;s full balance in hot storage.&lt;/p&gt;
&lt;p&gt;In retrospect this was incredibly foolish, and I take full responsibility for this decision.&lt;/p&gt;
&lt;p&gt;I have failed you as a leader, and am completely devastated by today&#8217;s discoveries. I should have taken MtGox and Bitstamp&#8217;s lead and disabled withdrawals as soon as the malleability issue was reported. I was slow to respond and too skeptical of the possible issue at hand. It is a crushing blow. I cannot find the words to express how deeply I want this movement to be safe from the very threats I just watched materialize during my watch.&lt;/p&gt;
&lt;p&gt;I&#8217;ve included transaction logs at the bottom of this message. Review the vendor&#8217;s dishonest actions and use whatever means you deem necessary to bring this person to justice. More details will emerge as we continue to investigate.&lt;/p&gt;
&lt;p&gt;Given the right flavor of influence from our community, we can only hope that he will decide to return the coins with integrity as opposed to hiding like a coward.&lt;/p&gt;
&lt;p&gt;It takes the integrity of all of us to push this movement forward. Whoever you are, you still have a chance to act in the interest of helping this community. Keep a percentage, return the rest. Don&#8217;t walk away with your fellow freedom fighters&#8217; coins. DPR2 returned the cold storage. I didn&#8217;t run with the gold. But two people alone cannot move us forward. It takes an entire community committing to integrity &#8211; and though this crushing blow will not stop us, it sure is a testament to how greedy some bastards truly are.&lt;/p&gt;
&lt;p&gt;Being a part of this movement might be the most defining thing you do with your entire life.&lt;/p&gt;
&lt;p&gt;Don&#8217;t trade that for greed, comrades.&lt;/p&gt;
&lt;p&gt;I will fight here by your side, even the greedy bastards amongst us.&lt;/p&gt;
&lt;p&gt;This community has suffered great financial loss over and over again, and I am devastated that it has happened again under my watch.&lt;/p&gt;
&lt;p&gt;Hindsight is already suggesting dozens of ways this could have been prevented, but we must march onward.&lt;/p&gt;
&lt;p&gt;The only way to reverse a community&#8217;s greed is through generosity. Our true character is revealed during trying times.&lt;/p&gt;
&lt;p&gt;If this financial hardship places you at risk of physical harm, contact me directly and I will do my best to help you with my remaining personal funds.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Now what.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Never again store your escrow bitcoins on a server.&lt;/p&gt;
&lt;p&gt;Silk Road will never again be a centralized escrow storage.&lt;/p&gt;
&lt;p&gt;This week has shown the collateral damage we can cause by being a huge target and failing in just one unforeseen area.&lt;/p&gt;
&lt;p&gt;I am now fully convinced that no hosted escrow service is safe.&lt;/p&gt;
&lt;p&gt;If I cannot trust myself to keep a hosted escrow solution safe, I cannot trust anyone.&lt;/p&gt;
&lt;p&gt;Multi-signature transactions are the only way this community will be protected long-term.&lt;/p&gt;
&lt;p&gt;I am aggressively tasking our devs on building out multi-sig support for commonly-used bitcoin clients. Expect a generous bounty if you have the skill to implement this.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;Until then.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1. We will never again allow ourselves to be a single point of failure. We will never again host your Escrow wallets.&lt;/p&gt;
&lt;p&gt;2. Vendor registration is closed while we regroup.&lt;/p&gt;
&lt;p&gt;3. All listings on Silk Road are now No-Escrow (Finalize-Early) for 1-2 months while we implement multi-signature transactions and lobby for mainstream Bitcoin client multi-sig support.&lt;/p&gt;
&lt;p&gt;4. All unshipped orders have been cancelled.&lt;/p&gt;
&lt;p&gt;5. Vendors may link to other marketplaces on a trail basis until we launch multi-sig, then we will re-evaluate based on community input. We do not want to be a centralized point of failure, but we also do not want to lead our buyers into dangerous waters.&lt;/p&gt;
&lt;p&gt;6. From this point forward DO NOT trust markets with centralized escrow. Use multi-signature transactions whenever possible, with trusted third parties as escrow providers.&lt;/p&gt;
&lt;p&gt;Everything will be offline for 24-48 hours to minimize variables as we continue to investigate. The evidence we have below will be expanded based on our findings.&lt;/p&gt;
&lt;p&gt;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&lt;/p&gt;
&lt;p&gt;No marketplace is perfect. Expect any centralized market to fail at some point. This is precisely why we must unite in the decision to decentralize.&lt;/p&gt;
&lt;p&gt;We are relieved that our security procedures protected user identities, and that no servers were compromised. This was not a worst-case scenario: nobody will be getting arrested from this. Financial loss is terrible, but will not put all of us behind bars.&lt;/p&gt;
&lt;p&gt;The details we have on the hacker are below. Stop at nothing to bring this person to your own definition of justice.&lt;/p&gt;
&lt;p&gt;Humbled and furious,&lt;/p&gt;
&lt;p&gt;Defcon&lt;/p&gt;
&lt;p&gt;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&lt;/p&gt;
&lt;p&gt;# Attacker Intel as of 2014-02-13 18:00:00 UTC&lt;/p&gt;
&lt;p&gt;We normally do not doxx anyone, and hold user information sacred. But this is an extreme situation affecting our entire community, and all three users who have exploited this vulnerability are very much at risk until they approach us directly to assist with any information.&lt;/p&gt;
&lt;p&gt;Do not reveal any details of the attack. This will jeopardize your reward. Contact us directly.&lt;/p&gt;
&lt;p&gt;If anyone has purchased or sold to these usernames, expect generous bounties for any information you can contribute which leads to identification.&lt;/p&gt;
&lt;p&gt;# Attacker 1: (Responsible for 95% of theft)&lt;br&gt;
Suspected French, responsible for vast majority of the thefts. Used the following six vendor accounts to order from each other, to find and exploit the vulnerability aggressively.&lt;/p&gt;
&lt;p&gt;## Usernames used:&lt;br&gt;
narco93&lt;br&gt;
ketama&lt;br&gt;
riccola&lt;br&gt;
germancoke&lt;br&gt;
napolicoke&lt;br&gt;
smokinglife&lt;/p&gt;
&lt;p&gt;Transactions listed at bottom of this file. Finding Attacker 1 is top priority.&lt;/p&gt;
&lt;p&gt;# Attacker 2: (Responsible for ~2.5% of theft, using same methods towards end of attack lifecycle, likely knows Attacker 1)&lt;br&gt;
LethalWeapon &#8211; Australia &#8211; &#8220;stumbled upon&#8221; large amount of BTC&lt;/p&gt;
&lt;p&gt;# Attacker 3: (Responsible for ~2.5% of theft, using same methods towards end of attack lifecycle, likely knows Attacker 1)&lt;br&gt;
mrkermit &#8211; Australia&lt;/p&gt;
&lt;p&gt;# Theft Withdrawal Transactions and historical withdrawals by Attacker 1&lt;br&gt;
address,txid_cleaned&lt;br&gt;
{Here some big list of withdrawal addresses with the stolen bitcoins}&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;=====End Quote====&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Aside from the endless marketplaces being hacked every day now, this is the most shocking event we have encountered &#8211; as Silk Road being the largest DarkNet market nowadays was probably holding the largest sum of money of them all &#8211; it is not yet clear how many Bitcoins were stolen exactly, but its almost certain that this is about to become the largest theft in the Deep Web history &#8211; bigger than the &lt;a href="http://www.deepdotweb.com/2013/11/30/sheep-marketplace-scammed-over-40000000-in-the-biggets-darknet-scam-ever/"&gt;Sheep Marketplace Scam &lt;/a&gt; that had amount equal at the time to $40 million in bitcoins stolen by its admins.&lt;/p&gt;
&lt;p&gt;This case only serves as &lt;strong&gt;ANOTHER, Very Painful&lt;/strong&gt; lesson about &#8211; why on-site escrows are bad, and should not be used! only direct transaction or mulsig escrow like the one offered at themarketplace.i2p are the safe way to conduct business on these sites.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Is this the end of the centralized marketplaces?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;We sure hope so!&#160; as we posted here again and again, they are not safe, and will always end up being hacked or having the money stolen by their admins.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;So who were the hackers?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Few hours before the announcement we at DeepDotWeb received a mail saying: &#8220;SilkRoad hacked, 150 BTC stolen, you heard it first from me&#8221; this was sent to us by a reddit user who claimed since yesterday he was going to hack SR and steal the sites money &#8211; we are trying to verify if this amount matches the amounts that were stolen by the &#8220;smaller&#8221; hackers that Defcon reported in his post, the others remain unknown.&lt;/p&gt;
&lt;p&gt;The Silk Road moderators ranged from pleading or threatening the hackers:&lt;/p&gt;
&lt;p&gt;To a complete shock:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.deepdotweb.com/wp-content/uploads/2014/02/tang.png"&gt; &lt;img src="http://www.deepdotweb.com/wp-content/uploads/2014/02/tang.png"&gt;&lt;/a&gt;To an Apology:&lt;/p&gt;
&lt;p&gt;The users reaction was not much different obviously and ranged between shocked / angry / desperate or accusing the sites admins to the thief&#8217;s themselves:&lt;/p&gt;
 IS ANYONE ELSE BUYINGGGG THIS? !!! WE ARE FIXING ESCROW&#160; WE ARE FIXING VENDOR REFUNDS? WE ARE DOING ALL WE CAN
THIS SHEEP !!!! STYLE FUCKING BY OUR TRUSTED SR GUYS ,
ITS FUCKING PLAIN AND SIMPLE ESCROW SYSTEM WAS A SCAM SO EVERY COCKSUCKER WHO DIDNT FINALZE THE COINS STAYED IN THE BANK AND OPPS WE HAVE BEEN HACKED
!!! WE ARE FIXING THE VENNDOR REFUND ? YEAH RIGHT RIGHT ANOTHER PERFECT SCAM, MORE COIN IN THE BANK AND AT THE RIGHT TIME
AGAIN OOPSS WE HAVE BEEN HACKED \
DEFCON GO FUCK YOUR SELF , U GUYS HAVE NOT DOMNE NOTHING ABOUT THE ESCROW SYSTEM , U HAVE DONE NOTHIGN ABOUT VENDOR REFUND , ALL U GUYS DID IS LET THE FUCKING BANK&#160; BUILD UP AND SORRY GUYS WE HAVE BEEN HACKED
EVERY DOG GETS THERE DAY AND I CANT WAIT TILL I SEE ONE OF U FALL 
&lt;p&gt;Some even tried to help in some way.&lt;/p&gt;
&lt;p&gt;For us &#8211; the big question is &#8220;how much&#8221;? , we will keep following up on this and updating this post as we get new information &#8211; for now, you can check out other site &lt;a href="http://www.deepdotweb.com/2013/10/28/updated-llist-of-hidden-marketplaces-tor-i2p/"&gt;on this list&lt;/a&gt;.&lt;/p&gt;
&lt;!-- Quick Adsense WordPress Plugin: http://quicksense.net/ --&gt;
&lt;h3&gt;You might also like:&lt;/h3&gt;
&lt;h3&gt;Share and Enjoy&lt;/h3&gt;
&lt;!-- Start WP Socializer - Social Buttons - Output --&gt;
&lt;!-- End WP Socializer - Social Buttons - Output --&gt;
 
 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 12:29:44 -0800</pubDate>
      <link>http://www.deepdotweb.com/2014/02/13/silk-road-2-hacked-bitcoins-stolen-unknown-amount/</link>
      <guid>http://www.deepdotweb.com/2014/02/13/silk-road-2-hacked-bitcoins-stolen-unknown-amount/</guid>
    </item>
    <item>
      <title>Startup Sales Negotiations 101 - How to Respond to Discount Inquiries</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7234265'&gt;"Startup Sales Negotiations 101 - How to Respond to Discount Inquiries"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://blog.close.io/startup-negotiation-101-how-to-respond-to-discount-inquiries'&gt;http://blog.close.io/startup-negotiation-101-how-to-respond-to-discount-inquiries&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;&lt;!--more--&gt;People will sometimes reach out and ask for a discount on your product &lt;strong&gt;&lt;em&gt;before&lt;/em&gt;&lt;/strong&gt; they took the time to sign up for a trial and use it at all. What do you do when that happens?&#160;&lt;/p&gt;
&lt;p&gt;Instead of debating if you should or shouldn't offer them a discount right away, you need to refocus their energy on what really matters: &lt;strong&gt;your product!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let's explore the 3 core reasons why you never want to negotiate pricing before someone had a chance to trial your product and determine that it's a good fit.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;#1: You're starting the relationship on the wrong foot&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;People who ask you to lower your prices before having invested any time using your product are usually trouble.&lt;/p&gt;
&lt;p&gt;This can often lead to winning a new customer that is going to expect you to give 24/7 premium phone support, prioritize features based on their needs all while trying to pay you pennies on the dollar. If you start the relationship by giving them everything they ask for, don't be surprised if they keep asking for more in an unreasonable fashion. This is ultimately unsustainable and unhealthy for both sides.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;#2: They're buying for the wrong reason&#160;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;At this point they can't tell if your product is a good fit for them since they never used it. Your first priority should always be to help people explore and discover that your product is really solving their problem before negotiating what the final pricing should be.&lt;/p&gt;
&lt;p&gt;Discounting your product upfront might help you close some deals faster but will often lead to these customers ultimately discovering that they should have never bought in the first place. Always be wary of prospects that don't want to do their homework upfront. Nothing sucks more than a new customer that cancels immediately after having created a ton of support and onboarding cost.&#160;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;#3: You're negotiating on price vs. value&#160;&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span&gt;The problem with people trying to negotiate pricing before testing your product is that you are forced to negotiate on price rather than value. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;They didn't have a chance to build up any desire to buy and discover the massive value your product could deliver to them. All of the sudden your product turns into a commodity and your only differentiation is offering them the lowest price possible.&#160;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;#4: You're negotiating without leverage&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;The more time people invest in your product the more "invested" they become and naturally the harder it is for them to "throw away" the time they put into exploring your product and making it part of their daily workflow.&lt;/p&gt;
&lt;p&gt;You always want to postpone the most difficult/complex parts of the sales negotiation till the end of the sales cycle. That way you ensure the right amount of momentum as you move forward in the sales process and avoid too much upfront friction.&#160;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Here is what your response should be when someone asks for a discount without having tried your product:&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;"Thanks for inquiring about pricing options! Why don't you sign up for a trial and give the product a go? If you find out that it's a great fit I'll take care of you and make sure you get a price that makes you happy. Sound fair enough?"&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This works every time. The reply you usually get will be:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;"Great! Just signed up and giving the product a go. Thanks!"&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;What's the result you should expect?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;9 out of 10 times the people that turn out to be a bad fit will self select during a trial and just leave. The prospects that are a good fit will love your product so much that they will not negotiate hard for a discount since they now really understand its value.&#160;&lt;/p&gt;
&lt;p&gt;Even if they do it's fine to give great customers a good price because you know they are buying for all the right reasons and will probably stay with you for a long time.&lt;/p&gt;
&lt;p&gt;We've done this thousands of times and it always works. I hope this startup sales negotiation tactic serves your business as much as it has ours :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; The same tactic doesn't just work for people that are "unreasonable" and potentially a bad fit. Even when uber nice prospects are worrying about pricing upfront we tend to ask them to first discover if the product is even a good fit for their needs. See below a recent twitter exchange as a good example for this:&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 12:59:44 -0800</pubDate>
      <link>http://blog.close.io/startup-negotiation-101-how-to-respond-to-discount-inquiries</link>
      <guid>http://blog.close.io/startup-negotiation-101-how-to-respond-to-discount-inquiries</guid>
    </item>
    <item>
      <title>OCaml: what you gain - Thomas Leonard's blog</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7234855'&gt;"OCaml: what you gain - Thomas Leonard's blog"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://roscidus.com/blog/blog/2014/02/13/ocaml-what-you-gain/'&gt;http://roscidus.com/blog/blog/2014/02/13/ocaml-what-you-gain/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;Way back in June, in &lt;a href='http://roscidus.com/blog/blog/2013/06/20/replacing-python-round-2/'&gt;Replacing Python: second round&lt;/a&gt;, I wrote:&lt;/p&gt;
 
 The big surprise for me in these tests was how little you lose going from Python to OCaml.
 
&lt;p&gt;Of course, I was mainly focused on making sure the things I needed were still available. With the port now complete (&lt;a href="http://thread.gmane.org/gmane.comp.file-systems.zero-install.devel/7310"&gt;0install 2.6 has been released&lt;/a&gt;, and contains no Python code), here&#8217;s a summary of the main things you &lt;em&gt;gain&lt;/em&gt;.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;&lt;strong&gt;Table of Contents&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This post also appeared on &lt;a href="https://news.ycombinator.com/item?id=7234855"&gt;Hacker News&lt;/a&gt; and &lt;a href="http://www.reddit.com/r/programming/comments/1xtohg/ocaml_replacing_python_what_you_gain/"&gt;Reddit&lt;/a&gt;, where there are more comments.&lt;/p&gt;
&lt;p&gt;( This post is part of a series in which I
&lt;a href='http://roscidus.com/blog/blog/2013/06/09/choosing-a-python-replacement-for-0install'&gt;converted 0install from Python to OCaml&lt;/a&gt;, learning OCaml in the process. The full code is at &lt;a href="https://github.com/0install/0install"&gt;GitHub/0install&lt;/a&gt;. )&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A note on bias&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I started these blog posts unemployed (taking a career break), with no particular connection to any of the languages, and motivated to make a good choice since I&#8217;d be using it a lot. I wasn&#8217;t biased towards OCaml; it wasn&#8217;t even on my list of candidates until a complete stranger &lt;a href="http://article.gmane.org/gmane.comp.file-systems.zero-install.devel/6914/match=ocaml"&gt;suggested it on the mailing list&lt;/a&gt;.
But I must now disclose that, since my last blog post, I&#8217;m now getting paid for writing OCaml.&lt;/p&gt;
&lt;h2&gt;Functional programming&lt;/h2&gt;
&lt;p&gt;Some people commented it was good to see more projects moving to functional programming. So, what&#8217;s it like doing functional programming after Python? To be honest, not much has changed. According to OCaml&#8217;s &lt;a href="http://ocaml.org/learn/tutorials/functional_programming.html"&gt;What is functional programming?&lt;/a&gt;, &#8220;In a functional language, functions are first-class citizens&#8221; and &#8220;The fact is that Perl is actually quite a good functional language&#8221;.&lt;/p&gt;
&lt;p&gt;So, if you&#8217;ve ever used Python&#8217;s (built-in) &lt;code&gt;map&lt;/code&gt;, &lt;code&gt;reduce&lt;/code&gt;, &lt;code&gt;filter&lt;/code&gt; or &lt;code&gt;apply&lt;/code&gt; functions, ever written or used a &lt;a href="http://www.python.org/dev/peps/pep-0318/"&gt;decorator&lt;/a&gt; or ever passed a function as an argument to another function, you&#8217;re already doing functional programming as far as OCaml is concerned. By contrast, &#8220;&lt;em&gt;pure&lt;/em&gt; functional programming&#8221; (as in Haskell) would be a major change.&lt;/p&gt;
&lt;p&gt;OCaml does make partially applying functions easier, which is sometimes convenient, and it supports &lt;a href="http://en.wikipedia.org/wiki/Tail_call"&gt;tail recursion&lt;/a&gt;. Tail recursion allows you to write loops in a functional style (without needing &lt;code&gt;break&lt;/code&gt;, &lt;code&gt;continue&lt;/code&gt; or mutable state). That can make it easier to reason about loops, but I couldn&#8217;t find any examples in 0install where this style was clearly better than a plain Python loop.&lt;/p&gt;
&lt;h2&gt;Type-checking&lt;/h2&gt;
&lt;p&gt;I&#8217;ve used statically-typed languages before (I used to program in Java for my day job). That can catch many errors that Python would miss, but OCaml&#8217;s type system is far more useful than Java&#8217;s. Here&#8217;s an example, where we want to display an icon for some program in the GUI:&lt;/p&gt;
&lt;div&gt;1
2
get_icon program
|&amp;gt; widget#set_icon (* Error! *)
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;Error: This expression has type Icon.t -&amp;gt; unit
 but an expression was expected of type Icon.t option -&amp;gt; 'a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oops. The program might not have an icon (icons are optional). We&#8217;ll need to use a default one in that case:&lt;/p&gt;
&lt;div&gt;1
2
3
get_icon program
|&amp;gt; default generic_program_icon
|&amp;gt; widget#set_icon
&lt;/div&gt;
&lt;p&gt;Downloading some data:&lt;/p&gt;
&lt;div&gt;1
2
3
4
match download url with
| `success data -&amp;gt; process data
| `network_failure msg -&amp;gt; show_error_dialog msg
(* Error! *)
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;Warning 8: this pattern-matching is not exhaustive.
Here is an example of a value that is not matched:
`aborted_by_user
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oops. The user might click the &#8220;Cancel&#8221; button - we need to handle that too:&lt;/p&gt;
&lt;div&gt;1
2
3
4
match download url with
| `success data -&amp;gt; process data
| `network_failure msg -&amp;gt; show_error_dialog msg
| `aborted_by_user -&amp;gt; abort ()
&lt;/div&gt;
&lt;p&gt;When registering an extra feed to an interface we want to download it first to check it exists:&lt;/p&gt;
&lt;div&gt;1
2
3
let add_feed iface (feed_url:feed_url) =
 download_feed feed_url; (* Error! *)
 register_feed iface feed_url
&lt;/div&gt;
&lt;pre&gt;&lt;code&gt;Error: This expression has type feed_url
 but an expression was expected of type [&amp;lt; `remote_feed of url ]
 The second variant type does not allow tag(s) `local_feed
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Oops. The user might specify a local file too:&lt;/p&gt;
&lt;div&gt;1
2
3
4
5
let add_feed iface (feed_url:feed_url) =
 begin match feed_url with
 | `remote_feed _ as feed_url -&amp;gt; download_feed feed_url
 | `local_feed path -&amp;gt; check_file_exists path end;
 register_feed iface feed_url
&lt;/div&gt;
&lt;p&gt;Java makes you do all the work for static type checking, but manages to miss many of the benefits.
No matter how much care you take with your Java types, there&#8217;s always a good chance you&#8217;re going to crash with a NullPointerException.
By requiring correct handling of &lt;code&gt;None&lt;/code&gt; (&lt;code&gt;null&lt;/code&gt;) and ensuring pattern matching is exhaustive, OCaml&#8217;s type checking is far more useful. As with Haskell, when a piece of OCaml code compiles successfully, there&#8217;s a very good chance it will work first time.&lt;/p&gt;
&lt;p&gt;And, of course, static checking makes refactoring much easier than in Python. For example, if you remove or rename something, the compiler will always find every place you need to update.&lt;/p&gt;
&lt;h2&gt;Data type definitions&lt;/h2&gt;
&lt;p&gt;OCaml makes it really easy to define new data types as you need them. The types are always easy to see, and you know that OCaml will enforce them (unlike comments in Python, which may be incorrect). Here&#8217;s a record type for the configuration settings for an interface (an optional stability level and a list of extra feeds):&lt;/p&gt;
&lt;div&gt;1
2
3
4
type interface_config = {
 stability_policy : stability_level option;
 extra_feeds : Feed.feed_import list;
}
&lt;/div&gt;
&lt;p&gt;And here&#8217;s a variant (enum / tagged union / sum) type for the result of a download:&lt;/p&gt;
&lt;div&gt;1
2
3
4
type download_result =
 [ `aborted_by_user
 | `network_failure of string
 | `success of filepath ]
&lt;/div&gt;
&lt;h2&gt;Polymorphic variants&lt;/h2&gt;
&lt;p&gt;The &lt;a href="http://ocaml.org/learn/tutorials/labels.html#Morevariantspolymorphicvariants"&gt;OCaml labels tutorial&lt;/a&gt; describes polymorphic variants as a way to use the same name (e.g. &lt;code&gt;Open&lt;/code&gt;) for different things (e.g. opening a door vs opening a lock) and says:&lt;/p&gt;
 
 &#8220;Because of the reduction in type safety, it is recommended that you don&#8217;t use these in your code&#8221;.
 
&lt;p&gt;This is quite misleading (and I was &lt;a href="http://thread.gmane.org/gmane.comp.file-systems.zero-install.devel/6975/focus=6977"&gt;quickly corrected&lt;/a&gt; when I repeated it).
Their real purpose is to support subsets and supersets, which are useful all over the place. Some examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
 &lt;p&gt;The &#8220;0install&#8221; command-line parser accepts a large number of options. The &#8220;0install run&#8221; subcommand accepts a subset of these. That subset can be further subdivided into common options (present in all commands, such as &lt;code&gt;--verbose&lt;/code&gt;), options common to selection commands (e.g. &lt;code&gt;--before=VERSION&lt;/code&gt;) and those specific to &#8220;0install run&#8221; (e.g. &lt;code&gt;--wrapper=COMMAND&lt;/code&gt;).&lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
 &lt;p&gt;The GUI code that handles dialog responses (&lt;code&gt;OK&lt;/code&gt;, &lt;code&gt;Cancel&lt;/code&gt;, etc) must handle the union of all the action button responses it added and the always-present window close icon.&lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
 &lt;p&gt;The download code only handles the subset of feed URLs that represent remote resources.&lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
 &lt;p&gt;Users can only register local and remote feeds to an interface, not distribution-provided virtual feeds.&lt;/p&gt;
 &lt;/li&gt;
 &lt;li&gt;
 &lt;p&gt;Cached feeds contain only remote implementations, local feeds contain local and remote implementations, and distribution feeds contain only distribution implementations. All three types get combined together and passed to the solver.&lt;/p&gt;
 &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&#8217;s an example, showing the &lt;code&gt;run&lt;/code&gt; command dividing its options into sub-groups, with the compiler checking that every option will be handled in all cases:&lt;/p&gt;
&lt;div&gt;1
2
3
4
5
6
7
let select_opts = ref [] in
Support.Argparse.iter_options flags (function
 | #common_option as o -&amp;gt; Common_options.process_common_option options o
 | #select_option | `Refresh as o -&amp;gt; select_opts := o :: !select_opts
 | `Wrapper w -&amp;gt; run_opts.wrapper &amp;lt;- Some w
 | `MainExecutable m -&amp;gt; run_opts.main &amp;lt;- Some m
);
&lt;/div&gt;
&lt;p&gt;Without polymorphic variants, OCaml&#8217;s exhaustive matching requirements mean you&#8217;d have to provide code to handle cases that (you think) can&#8217;t happen. That&#8217;s tedious and your program will crash if you get it wrong. Polymorphic variants mean you can prove to the compiler that only the correct subset needs to be handled at each point in the code. This is fantastic, and I can&#8217;t think of any other major language that does this (though I&#8217;m sure people will suggest some in the comments).&lt;/p&gt;
&lt;h2&gt;Immutability&lt;/h2&gt;
&lt;p&gt;In OCaml, all variables and record fields are immutable by default. This is far saner than Java (where the default is mutable and you must use &lt;code&gt;final&lt;/code&gt; everywhere to override it). Immutable is a better default because:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Typically, you want most things to be immutable (in any language).&lt;/li&gt;
 &lt;li&gt;If you forget to mark something as mutable, the compiler will quickly let you know, whereas forgetting to mark something as immutable would be missed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With mutable structures, you are always worrying about whether one piece of code will mutate a structure that another is relying on. For example, I originally made the XML element type mutable, but I found I was writing comments like this:&lt;/p&gt;
&lt;div&gt;1
2
(** Note: this returns the actual internal XML; don't modify it *)
val as_xml : selections -&amp;gt; element
&lt;/div&gt;
&lt;p&gt;After removing the &lt;code&gt;mutable&lt;/code&gt; annotations from the &lt;code&gt;element&lt;/code&gt; declaration, the compiler showed me each piece of code I needed to modify to make it work again. Then, I was able to remove those notes.&lt;/p&gt;
&lt;p&gt;[ The main difficulty in this conversion was handling XML namespace prefixes. Previously, each element had a reference to its owning document, which held a shared (mutable) pool of prefix bindings. Now, each namespaced item holds its preferred prefix, and the output code builds up a set of bindings before writing out the tree. ]&lt;/p&gt;
&lt;p&gt;There is one case where Python and Java do better than OCaml: OCaml strings are mutable! The convention is to treat them as immutable, though.&lt;/p&gt;
&lt;h2&gt;Abstraction&lt;/h2&gt;
&lt;p&gt;OCaml makes it very easy to hide a module&#8217;s implementation details from its users using &lt;em&gt;abstract types&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I gave one example in the &lt;a href="/blog/blog/2014/01/07/ocaml-the-bugs-so-far/#sorted-treeview-iter-mix-up"&gt;bugs post&lt;/a&gt;, where hiding the fact that a sorted tree is really the same type as an unsorted one prevents bugs due to mixing them up.&lt;/p&gt;
&lt;p&gt;Here&#8217;s another example. In the Python code, we would parse a selections XML document into a &lt;code&gt;Selections&lt;/code&gt; object, like this:&lt;/p&gt;
&lt;div&gt;1
2
3
class Selections(object):
 def __init__(self, root_element):
 ...
&lt;/div&gt;
&lt;p&gt;I found all this parsing and serialising complicated things and so in the OCaml rewrite I decided to use the plain XML element type everywhere.
That did simplify things, but it also removed some safety and clarity from the APIs.
Consider the &lt;code&gt;Selections.create&lt;/code&gt; function (which now does nothing unless the document is in an old format and needs to be upgraded):&lt;/p&gt;
&lt;div&gt;1
2
3
4
let create root =
 ZI.check_tag "selections" root;
 if is_latest_format root then root
 else convert_to_latest root
&lt;/div&gt;
&lt;p&gt;It&#8217;s nice and simple, but it just returns an &lt;code&gt;element&lt;/code&gt;. It would be easy to pass some other XML element to a function that only works on selection documents (or to pass a document that&#8217;s still in the old format).
We can solve this simply by declaring an abstract type for selection documents in the interface file (&lt;code&gt;selections.mli&lt;/code&gt;):&lt;/p&gt;
&lt;div&gt;1
2
type t
val create : element -&amp;gt; t
&lt;/div&gt;
&lt;p&gt;(note: it&#8217;s an OCaml convention for a module&#8217;s main type to be called &lt;code&gt;t&lt;/code&gt;; other modules will refer to this type as &lt;code&gt;Selections.t&lt;/code&gt;)&lt;/p&gt;
&lt;p&gt;I think this gets the best of both worlds. Internally, a selections object is just the XML root element, which is simple and efficient, but code using it can&#8217;t mix up the types. And, of course, we can change the internal type later if needed without breaking anything.&lt;/p&gt;
&lt;p&gt;This isn&#8217;t a particularly novel idea (you can do something similar in C). However, Python and Java would require you to write a wrapper object around the object you want to hide, and Python makes it easy for users of the API to access the internal representation even then. If you&#8217;re writing a library, OCaml (like C) makes it clear when you&#8217;re changing the module&#8217;s interface vs merely changing its implementation.&lt;/p&gt;
&lt;p&gt;( There is another interesting feature, which I haven&#8217;t used yet: you can use the &#8220;private&#8221; modifier to say that users of the module can see the structure of the type but can&#8217;t create their own instances of it. For example, saying &lt;code&gt;type t = private element&lt;/code&gt; would allow users to cast a selections value to an XML element, but not to treat any old XML as a selections value. )&lt;/p&gt;
&lt;p&gt;I did experience one case where abstraction didn&#8217;t work as intended. In the SAT solver, I declared the type of a literal abstractly as &lt;code&gt;type lit&lt;/code&gt; and, internally, I used &lt;code&gt;type lit = int&lt;/code&gt; (an array index). That worked fine. Later, I changed the internal representation from an int to a record. Ideally, that would have no effect on users of the module, but OCaml allows testing abstract types for equality, which resulted in each comparison recursively exploring the whole SAT problem. It can also cause runtime crashes if it encounters a function in this traversal. Haskell&#8217;s type classes avoid this problem by letting you control which types can be compared and how the comparison should be done.&lt;/p&gt;
&lt;h2&gt;Speed&lt;/h2&gt;
&lt;p&gt;Python is well known for being slow, but much of what real programs do is simply calling C libraries.
For example, when calculating a SHA256 digest, C does all the heavy lifting.&lt;/p&gt;
&lt;p&gt;Despite this, I&#8217;ve found OCaml to be fairly consistently 10 times faster in macro benchmarks (measuring a complete run of 0install from start to finish). Also, although I&#8217;ve added a lot of code and dependencies since the initial benchmarks, it still runs almost as quickly.
&lt;a href="/blog/blog/2013/06/20/replacing-python-round-2/#speed"&gt;The 0release benchmark&lt;/a&gt; took 8ms with June&#8217;s minimal version, compared to 10ms with the final version.&lt;/p&gt;
&lt;p&gt;When doing pure calculations (e.g. a tight loop adding integers), OCaml is typically more than 100x faster than Python.&lt;/p&gt;
&lt;p&gt;Even so, OCaml is probably not a great choice for CPU-intensive programs. Like Python, it has a global lock, so you can&#8217;t have multiple threads all using the CPU at once. But if you&#8217;re writing small utilities that need to run quickly, it&#8217;s perfect.&lt;/p&gt;
&lt;h2&gt;No dependency cycles&lt;/h2&gt;
&lt;p&gt;Perhaps I&#8217;m making a virtue of a flaw here, but I like the fact that OCaml doesn&#8217;t allow cyclic dependencies between source files.
I think this leads to cleaner code (back when I was writing Java, I wrote a script to extract all module dependencies and graph them so I could find and eliminate cycles).&lt;/p&gt;
&lt;p&gt;What this means is that in any OCaml code-base, no matter how complex, there&#8217;s always at least one module that doesn&#8217;t depend on any of the others and which you can therefore read first.
Then there&#8217;s a second module that only depends on the first one, etc.
For example, here are the modules that make up 0install&#8217;s GTK plugin (note the lack of cycles):&lt;/p&gt;
&lt;p&gt;Cycles can be a problem when converting existing code to OCaml, though. For example, the Python had a &lt;code&gt;helpers.py&lt;/code&gt; module containing various high-level helper functions (e.g. &lt;code&gt;get_selections_gui&lt;/code&gt; to run the GUI and return the user&#8217;s selections, and &lt;code&gt;ensure_cached&lt;/code&gt; to make sure some selections are cached and download them if not). That doesn&#8217;t work in OCaml, because the helpers module depends on the GUI, but the GUI also depends on the helpers (the GUI sometimes needs to ensure things are cached). The result is that I had to move each helper function to the module it uses, but I don&#8217;t mind because the result is a clearer API.&lt;/p&gt;
&lt;p&gt;Another example is the &lt;code&gt;Config&lt;/code&gt; object. When I started the Python code back in 2005, I was very excited about using the idea of &lt;a href="http://en.wikipedia.org/wiki/Dependency_injection"&gt;dependency injection&lt;/a&gt; for connecting together software modules (this is the basis of how 0install runs programs). Yet, for some reason I can&#8217;t explain, it didn&#8217;t occur to me to use a dependency injection style &lt;em&gt;within&lt;/em&gt; the code. Instead, I made a load of singleton objects. Later, in an attempt to make things more testable, I moved all the singletons to a &lt;code&gt;Config&lt;/code&gt; object and passed that around everywhere. I wasn&#8217;t proud of this design even at the time, but it was the simplest way forward. It looked like this:&lt;/p&gt;
&lt;div&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Config(object):
 @property
 def fetcher(self):
 if not self._fetcher:
 from zeroinstall.injector import fetch
 self._fetcher = fetch.Fetcher(self)
 return self._fetcher
 @property
 def trust_mgr(self):
 if not self._trust_mgr:
 from zeroinstall.injector import trust
 self._trust_mgr = trust.TrustMgr(self)
 return self._trust_mgr
 ...
&lt;/div&gt;
&lt;p&gt;OCaml really didn&#8217;t like this design! &lt;code&gt;config.py&lt;/code&gt; depends on all the other modules because it calls their constructors, while they all depend on it to get their dependencies.&lt;/p&gt;
&lt;p&gt;Note that this design isn&#8217;t very safe: &lt;code&gt;Fetcher&lt;/code&gt;&#8217;s constructor could ask for &lt;code&gt;config.trust_mgr&lt;/code&gt;, and &lt;code&gt;TrustMgr&lt;/code&gt;&#8217;s constructor could ask for &lt;code&gt;config.fetcher&lt;/code&gt;. In Python, we have to remember not to do that, but in OCaml we&#8217;d like the type checker to prove it can&#8217;t happen.&lt;/p&gt;
&lt;p&gt;In most places, I fixed this by passing to each constructor just the objects it actually needs, which is cleaner.&lt;/p&gt;
&lt;p&gt;Another approach, which I used when lots of objects were needed, is that instead of requiring a &lt;code&gt;config&lt;/code&gt; object, a class can take simply &#8220;an object with at least &lt;code&gt;fetcher&lt;/code&gt; and &lt;code&gt;trust_mgr&lt;/code&gt; methods&#8221;.
Then we know statically that it will only call those methods, even though we actually give it the full config object.&lt;/p&gt;
&lt;p&gt;The result of all this is that you can look at e.g. the &lt;code&gt;fetch.mli&lt;/code&gt; interface file and see exactly which other modules it depends on, none of which will depend on it.&lt;/p&gt;
&lt;h2&gt;GUI code&lt;/h2&gt;
&lt;p&gt;Converting the GTK GUI to OCaml (using the &lt;a href="http://lablgtk.forge.ocamlcore.org/"&gt;LablGtk&lt;/a&gt; bindings), I replaced &lt;strong&gt;5166&lt;/strong&gt; lines of Python (&lt;strong&gt;plus 1736&lt;/strong&gt; lines of GtkBuilder XML) with &lt;strong&gt;4017&lt;/strong&gt; lines of OCaml (and no XML). I&#8217;m not sure why, but writing GTK code in OCaml just seems to be much easier than with Python.&lt;/p&gt;
&lt;p&gt;I used GtkBuilder in the Python code in the hope that it would make it easier to modify the layouts, and to improve reliability (since the XML should always be valid, whereas Python code might not be). However, it actually made things harder because Glade (the editor) is constantly trying to force you to upgrade to the latest (incompatible) XML syntax, and I ended up having to run an old OS in a VM any time I wanted to edit things.&lt;/p&gt;
&lt;p&gt;In the OCaml, the static type checking gives us similar confidence that the layout code won&#8217;t crash. Also, with GtkBuilder you name each widget in the XML and then search for these names in the code. If they don&#8217;t match, it will fail at runtime. Having everything in OCaml meant that couldn&#8217;t happen. [ Note: I later discovered that LablGtk doesn&#8217;t support GtkBuilder anyway. ]&lt;/p&gt;
&lt;p&gt;Here&#8217;s an example of some OCaml GTK code and the corresponding Python code. This shows how to build and display a menu (simplified to have just one item):&lt;/p&gt;
&lt;div&gt;OCaml 1
2
3
4
let menu = GMenu.menu () in
let explain = GMenu.menu_item ~packing:menu#add ~label:"Explain this decision" () in
explain#connect#activate ~callback:(fun () -&amp;gt; show_explanation impl) |&amp;gt; ignore;
menu#popup ~button:(B.button bev) ~time:(B.time bev);
&lt;/div&gt;
&lt;div&gt;Python 1
2
3
4
5
6
7
8
9
10
11
global menu # Fix GC problem with PyGObject
menu = gtk.Menu()
item = gtk.MenuItem()
item.set_label('Explain this decision')
item.connect('activate', lambda item: self.show_explanation(impl))
item.show()
menu.append(item)
if sys.version_info[0] &amp;lt; 3:
 menu.popup(None, None, None, bev.button, bev.time)
else:
 menu.popup(None, None, None, None, bev.button, bev.time)
&lt;/div&gt;
&lt;p&gt;Some points to note:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LablGtk allows you to specify many properties at once in the constructor call, whereas in PyGTK we need separate calls for each.&lt;/li&gt;
 &lt;li&gt;The Python API broke between Python 2 and Python 3, so we have to make sure to use the right one. It&#8217;s not sufficient to test the Python code using only one version of Python!&lt;/li&gt;
 &lt;li&gt;The Python bindings have always suffered from garbage collection bugs. If we don&#8217;t store &lt;code&gt;menu&lt;/code&gt; in a global variable, it may garbage collect the menu while the user is still choosing - this makes the menu disappear suddenly from the screen!&lt;/li&gt;
 &lt;li&gt;Actually, I see that Python&#8217;s &lt;code&gt;MenuItem&lt;/code&gt; takes a &lt;code&gt;label&lt;/code&gt; argument, so maybe I could save a line. Or maybe that doesn&#8217;t work on some older version. It&#8217;s not worth the risk of changing it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Update: I used the original layout for the OCaml above as I was comparing line counts, but it&#8217;s a bit wide for this narrow blog and some people are finding it hard to read. Here&#8217;s an expanded version which uses less special syntax:&lt;/p&gt;
&lt;div&gt;1
2
3
4
5
6
7
8
let menu = GMenu.menu () in
let explain = GMenu.menu_item
 ~packing:menu#add
 ~label:"Explain this decision"
 () in
let callback () = show_explanation impl in
let _signal_id = explain#connect#activate ~callback in
menu#popup ~button:(B.button bev) ~time:(B.time bev)
&lt;/div&gt;
&lt;p&gt;Here, &lt;code&gt;~&lt;/code&gt; indicates a named argument and &lt;code&gt;#&lt;/code&gt; is a method call. So &lt;code&gt;menu_item ~packing:menu#add ...&lt;/code&gt; is like &lt;code&gt;menu_item(packing = menu.add, ...)&lt;/code&gt; in Python.&lt;/p&gt;
&lt;p&gt;However, I did still have a few problems with the OCaml GTK bindings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There&#8217;s no support for custom cell renderers. I used three of these in the Python version and had to find alternative UIs for each.&lt;/li&gt;
 &lt;li&gt;Various minor functions aren&#8217;t included for some reason. The ones I wanted but couldn&#8217;t find were &lt;code&gt;Dialog.add_action_widget&lt;/code&gt;, &lt;code&gt;Style.paint_arrow&lt;/code&gt;, &lt;code&gt;MessageDialog.BUTTONS_NONE&lt;/code&gt;, &lt;code&gt;Dialog.set_keep_above&lt;/code&gt;, &lt;code&gt;icon_size_lookup&lt;/code&gt; and &lt;code&gt;Selection_data.get_uris&lt;/code&gt;.&lt;/li&gt;
 &lt;li&gt;You usually don&#8217;t need the result of creating a label or attaching a signal so you need to use &lt;code&gt;ignore&lt;/code&gt;, which can cause silent failures if you forgot an argument (it will ignore the partial function rather than the widget or signal result). Probably I should make &lt;code&gt;ignore_signal&lt;/code&gt; and &lt;code&gt;ignore_widget&lt;/code&gt; utility functions.&lt;/li&gt;
 &lt;li&gt;I had to work around a &lt;a href="/blog/blog/2014/01/07/ocaml-the-bugs-so-far/#crashes-with-gtkiconview"&gt;bug in the IconView support&lt;/a&gt; (reported, but with no response).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;API stability&lt;/h2&gt;
&lt;p&gt;This is a community thing rather than a language issue, but OCaml and OCaml libraries seem to be very good at maintaining backwards compatibility at the source level. 0install supports the old OCaml 3.12 and libraries in Ubuntu 12.04 up to the latest OCaml 4.01 release without any problems. The only use of conditional compilation for compatibility is that we don&#8217;t define the &lt;code&gt;|&amp;gt;&lt;/code&gt; operator on 4.01 because it&#8217;s already a built-in (this avoids a warning).&lt;/p&gt;
&lt;p&gt;On the other hand, binary compatibility is very poor. You can replace the implementation of a module with a newer version as long as the public interface doesn&#8217;t change (good), but any change at all to the interface requires everything that depends on it to be recompiled, and then everything that depends on them, and so on.&lt;/p&gt;
&lt;p&gt;For example, if the &lt;code&gt;List&lt;/code&gt; module adds a new function then the signature of the &lt;code&gt;List&lt;/code&gt; module changes. Now any program using the new version of the &lt;code&gt;List&lt;/code&gt; module is incompatible with every library binary compiled against the old version. Even if nothing is even using the new function! This means that distributing OCaml libraries in binary form is effectively impossible.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;OCaml&#8217;s main strengths are correctness and speed. Its type checking is very good at catching errors, and its &#8220;polymorphic variants&#8221; are a particularly useful feature, which I haven&#8217;t seen in other languages. Separate module interface files, abstract types, cycle-free dependencies, and data structures that are immutable by default help to make clean APIs.&lt;/p&gt;
&lt;p&gt;Surprisingly, writing GTK GUI code in OCaml was easier than in Python. The resulting code was significantly shorter and, I suspect, will prove far more reliable. OCaml&#8217;s type checking is particularly welcome here, as GUI code is often difficult to unit-test.&lt;/p&gt;
&lt;p&gt;The OCaml community is very good at maintaining API stability, allowing the same code to compile on old and new systems and (hopefully) minimising time spent updating it later.&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 14:30:11 -0800</pubDate>
      <link>http://roscidus.com/blog/blog/2014/02/13/ocaml-what-you-gain/</link>
      <guid>http://roscidus.com/blog/blog/2014/02/13/ocaml-what-you-gain/</guid>
    </item>
    <item>
      <title>Keybase.io</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7235634'&gt;"Keybase.io"&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 13 Feb 2014 15:54:50 -0800</pubDate>
      <link>https://keybase.io/</link>
      <guid>https://keybase.io/</guid>
    </item>
    <item>
      <title>The Day We Fought Back by the numbers</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7235656'&gt;"The Day We Fought Back by the numbers"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://thedaywefightback.org/the-results/'&gt;https://thedaywefightback.org/the-results/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Thu, 13 Feb 2014 15:58:50 -0800</pubDate>
      <link>https://thedaywefightback.org/the-results/</link>
      <guid>https://thedaywefightback.org/the-results/</guid>
    </item>
    <item>
      <title>Moon | Typeset In The Future</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7236411'&gt;"Moon | Typeset In The Future"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://typesetinthefuture.com/moon/'&gt;http://typesetinthefuture.com/moon/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 
&lt;p&gt;I&#8217;ll tell you &lt;em&gt;exactly&lt;/em&gt; where we are now. We are in the FUTURE; and we are on the MOON.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://typesetinthefuture.com/2001-a-space-odyssey/"&gt;After studying&#160;&lt;em&gt;2001: A Space Odyssey&lt;/em&gt; in intimate detail&lt;/a&gt;,&#160;Duncan Jones&#8217;s&#160;&lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Moon_(film)"&gt;Moon&lt;/a&gt;&lt;/em&gt;&#160;was the logical choice for my second foray into sci-fi typography. As this opening shot illustrates, &lt;em&gt;Moon&lt;/em&gt; is a bleak, lonely, and above all &lt;em&gt;beautiful&lt;/em&gt; love-letter to classic sci-fi typography and design. It&#8217;s also one of my favorite sci-fi films of all time.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; I forgot to mention it originally, but this article contains some pretty massive spoilers about the plot of &lt;/em&gt;Moon&lt;em&gt;. In my defense, you&#8217;re here to read about typography, and typography is &lt;strong&gt;always&lt;/strong&gt;&#160;essential to the plot.&#160;Nonetheless, if you&#160;haven&#8217;t seen &lt;/em&gt;Moon&lt;em&gt;,&lt;a href="https://itunes.apple.com/us/movie/moon/id331842140"&gt; go and&#160;watch it first&lt;/a&gt;. The future will still be&#160;here when you&#8217;re done.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The searching question above is the opening shot of an infomercial for Lunar Industries. Their&#160;moon-based mining of &lt;a href="http://en.wikipedia.org/wiki/Helium-3"&gt;Helium-3&lt;/a&gt; is providing a plentiful source of energy on Earth. (On the evidence of the advert, they sound like a &lt;em&gt;great&lt;/em&gt; company to work for. I&#8217;m sure they have strong ethical values.)&lt;/p&gt;
&lt;p&gt;Sounds like science fiction, right? I&#8217;m afraid that&#8217;s where you would be &lt;em&gt;wrong&lt;/em&gt;, sir or madam. As of January 2014, &lt;a href="http://www.theverge.com/2014/2/9/5395684/nasa-begins-hunt-for-private-companies-to-mine-the-moon-catalyst"&gt;NASA is accepting applications from companies who want to mine the moon.&lt;/a&gt; This film isn&#8217;t science fiction &#8211; it&#8217;s inevitable science &lt;em&gt;fact&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Fittingly, the infomercial finishes with an animation of the words &#8216;sun / moon / earth / energy / future&#8217;&#8230;&lt;/p&gt;
&lt;p&gt;&#8230;and a transition to the Lunar Industries logo:&lt;/p&gt;
&lt;p&gt;As introductions go, it doesn&#8217;t get more &lt;a href="http://en.wikipedia.org/wiki/Eurostile"&gt;Eurostile Bold Extended&lt;/a&gt; than that.&lt;/p&gt;
&lt;p&gt;And that&#8217;s where I have bad news, I&#8217;m afraid. It&#8217;s &lt;em&gt;not&lt;/em&gt; Eurostile. It&#8217;s not even Eurostile&#8217;s daddy,&#160;&lt;a href="http://en.wikipedia.org/wiki/Microgramma_(typeface)"&gt;Microgramma&lt;/a&gt;. &lt;a href="http://www.gavinrothery.com/they-never-went-to-the-moon/2011/8/21/get-your-logo-on.html"&gt;According to conceptual designer Gavin Rothery&lt;/a&gt;,&#160;it&#8217;s actually &lt;a href="http://www.azfonts.net/load_font/microsbe.html"&gt;Microstyle&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&#8217;re probably wondering how to tell the three apart, right? Don&#8217;t worry &#8211; it&#8217;s trivially easy, as the big number two below will illustrate. Eurostile is in blue; Microgramma is in red; Microstyle is in green:&lt;/p&gt;
&lt;p&gt;I&#8217;m glad we&#8217;ve cleared that up.&#160;(For ease of blog post cross-referencing, I&#8217;m going to put my fingers in my ears and continue to call it Eurostile anyway.)&lt;/p&gt;
&lt;p&gt;Of course, sci-fi typography isn&#8217;t &lt;em&gt;just&lt;/em&gt; about the Eurostile, you know. Eurostile has a long-standing competitor; a rival, if you will. And the yang to Eurostile&#8217;s tenuous yin is none other than our rectilinear friend,&#160;&lt;a href="http://en.wikipedia.org/wiki/Bank_Gothic"&gt;Bank Gothic&lt;/a&gt;. &lt;em&gt;Moon&lt;/em&gt; uses both fonts in quick succession for maximum futuristic effect.&lt;/p&gt;
&lt;p&gt;A clever 3D layout of Bank Gothic Medium is used for much of the film&#8217;s opening credits, superimposed in-and-over each of the positioning scenes:&lt;/p&gt;
&lt;p&gt;One of these scenes introduces us to the film&#8217;s central character. Look! It&#8217;s Sam Bell, running on a treadmill to keep fit during his three-year stay on the moon. But what&#8217;s that on his t-shirt?&lt;/p&gt;
&lt;p&gt;Haha! It&#8217;s a meaningless, throwaway gag about running. Because &#8216;runners don&#8217;t quit&#8217;, do they? Unless this comedy 80s typography has a deeper, hidden meaning&#8230;&lt;/p&gt;
&lt;p&gt;One of my favorite things about &lt;em&gt;Moon&lt;/em&gt; is its constant foreshadowing of the movie&#8217;s central twist. &lt;em&gt;Wake Me When It&#8217;s Quitting Time&lt;/em&gt;&#160;is a pretty damn blatant forward reference to what happens later in the film. (And&#160;I hate to say it, type-fans, but that&#8217;s not &lt;a href="http://en.wikipedia.org/wiki/Helvetica"&gt;Helvetica&lt;/a&gt; on Sam&#8217;s t-shirt. It&#8217;s &lt;a href="http://en.wikipedia.org/wiki/Arial"&gt;Arial&lt;/a&gt;. You can tell from the Q and the G.)&lt;/p&gt;
&lt;p&gt;This opening sequence is also the first time we discover that the moon base is called &#8216;SARANG &#8211; &#49324;&#46993;&#8217;:&lt;/p&gt;
&lt;p&gt;This is essentially a duplication &#8211; the word &#8216;sarang&#8217; is an English rendition of the Korean word &#8216;&lt;a href="http://en.wiktionary.org/wiki/%EC%82%AC%EB%9E%91"&gt;&#49324;&#46993;&lt;/a&gt;&#8217;, which means &#8216;love&#8217; or &#8216;affection&#8217;. (&#8216;Sarang&#8217; is also etymologically and graphically close to &#8216;saram&#8217; or &#8216;&lt;a href="http://en.wiktionary.org/wiki/%EC%82%AC%EB%9E%8C"&gt;&#49324;&#46988;&lt;/a&gt;&#8217;, which, ironically, can mean either &#8216;person&#8217; or &#8216;people&#8217;.) In either case, it&#8217;s an unfortunate choice of name for Sam&#8217;s permanent home on the Moon, many thousands of miles away from his beloved wife and daughter.&lt;/p&gt;
&lt;p&gt;Next up is &lt;em&gt;Moon&lt;/em&gt;&#8216;s title card, an inverted homage to &lt;a href="http://en.wikipedia.org/wiki/Apollo_8"&gt;Apollo 8&lt;/a&gt;&#8216;s famous &lt;a href="http://en.wikipedia.org/wiki/Earthrise"&gt;Earthrise&lt;/a&gt; photograph:&lt;/p&gt;
&lt;p&gt;&#8230;albeit with more Bank Gothic than the original:&lt;/p&gt;
&lt;p&gt;(The gradient fill effect on the MOON logotype is a popular sci-fi trope for adding drama to typography. We&#8217;ll revisit this in future blog posts.)&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Moon&lt;/em&gt; uses an interesting angular typeface for its location-establishing shot:&lt;/p&gt;
&lt;p&gt;This typeface is &lt;a href="http://en.wikipedia.org/wiki/OCR-A_font"&gt;OCR-A&lt;/a&gt;, which was designed in 1968 for use in &lt;a href="http://en.wikipedia.org/wiki/Optical_character_recognition"&gt;optical character recognition&lt;/a&gt; systems. It&#8217;s actually an &lt;a href="http://www.iso.org/iso/catalogue_detail.htm?csnumber=5567"&gt;ISO standard for character recognition&lt;/a&gt;. Moreover, it looks like THE FUTURE, and so it makes a perfect choice for on-screen interstitial positioning shots. (&lt;a href="http://ansuz.sooke.bc.ca/page/about"&gt;Matthew Skala&lt;/a&gt; has very kindly made &lt;a href="http://ansuz.sooke.bc.ca/page/fonts#ocra"&gt;a modern implementation of OCR-A available for free on his web site&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Back inside the base, Sam notices that one of the four HE3 harvesters has a full load ready for collection. The on-screen display is classic Bold Extended sci-fi, with bonus points for yellow-and-white text and barber&#8217;s-pole patterning:&lt;/p&gt;
&lt;p&gt;Also notable in this screenshot is a juxtaposition between the precision of the harvester&#8217;s on-screen display, and Sam&#8217;s hand-written customization of the surrounding fascia. This human customization of a clinical surrounding is something we certainly didn&#8217;t see in &lt;em&gt;2001&lt;/em&gt;, but it&#8217;s a common theme in &lt;em&gt;Moon&lt;/em&gt;. Sam&#8217;s boredom keeps finding creative and subversive outlets within the strict design confines of the moon base environment.&lt;/p&gt;
&lt;p&gt;Sam&#8217;s pressurized suit has three fabric &lt;a href="http://en.wikipedia.org/wiki/Mission_patch"&gt;mission patches&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Although Sam&#8217;s patches follow the Apollo &lt;a href="http://typesetinthefuture.com/postfiles/2001/2001_apollo_7_full.jpg"&gt;mission&lt;/a&gt; &lt;a href="http://typesetinthefuture.com/postfiles/2001/2001_apollo_9_full.jpg"&gt;patch&lt;/a&gt; &lt;a href="http://typesetinthefuture.com/postfiles/2001/2001_apollo_10_full.jpg"&gt;trend&lt;/a&gt; for Bold Extended typography, they are&#160;very different from those of the Apollo era. &lt;a href="http://en.wikipedia.org/wiki/Mission_patch#In_the_United_States"&gt;NASA astronauts always had creative input into the patches for their missions&lt;/a&gt;. In his fantastic autobiography &lt;a href="http://www.amazon.com/dp/B004KAB3ZM"&gt;&lt;em&gt;Carrying The Fire&lt;/em&gt;&lt;/a&gt;, Command Module Pilot &lt;a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)"&gt;Michael Collins&lt;/a&gt; describes &lt;a href="http://genedorr.com/patches/Apollo/Ap11.html"&gt;the design process for the Apollo 11 mission patch&#160;typography&lt;/a&gt;:&lt;/p&gt;
 I also penciled APOLLO around the top of my circular design and ELEVEN around the bottom. Neil didn&#8217;t like the ELEVEN because it wouldn&#8217;t be understandable to foreigners, so after trying XI and 11, we settled on the latter and put APOLLO 11 around the top. 
&lt;p&gt;Sam&#8217;s patches are the exact opposite of those from the Apollo era &#8211; rectangular rather than round; corporate and branded rather than personal and decorative.&lt;/p&gt;
&lt;p&gt;Sam records a message for Lunar Industries central back on Earth. He&#8217;s unable to speak to them live, due to an ongoing problem with the long-range comms:&lt;/p&gt;
&lt;p&gt;The on-screen interface is once again all about the Bold Extended.&#160;&lt;span&gt;One of the buttons to the right of the screen has an interesting label. I wonder what it does?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Sam isn&#8217;t happy about the fact he&#8217;s been on the base for nearly three years. &#8220;I&#8217;m talking to myself on a regular basis&#8221;, he says. (Be careful what you wish for, Sam.)&lt;/p&gt;
&lt;p&gt;Sam&#8217;s attempts to customize and personalize his environment continue in the living quarters. He&#8217;s keeping count of his days on the Moon with a dry-wipe marker on the bathroom wall. By my reckoning, this is 146 days and counting &#8211; not quite the nearly-three-years mentioned in the plot.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt; &lt;a href="https://news.ycombinator.com/item?id=7237044"&gt;Patrick Devine has commented on Hacker News&lt;/a&gt;&#160;that there are actually &lt;strong&gt;156&lt;/strong&gt; smileys, not 146. Turns out I miscounted. Patrick also notes that three years is exactly 156 weeks. Good spot, sir!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It&#8217;s not clear whether the facial emotions represent Sam&#8217;s mental state day by day. Nonetheless, they are a neat parallel to the simple&#160;expressions seen on the&#160;front of GERTY, Sam&#8217;s AI companion in the base:&lt;/p&gt;
&lt;p&gt;GERTY communicates his emotions to Sam via the &lt;em&gt;GERTY Unit Primary Emotional Interface&lt;/em&gt;. He has a stock set of&#160;&lt;a href="http://en.wikipedia.org/wiki/Emoji"&gt;emoji&lt;/a&gt;&#160;faces to draw on, based very closely on the standard emoticons that any Internet user will be familiar with. I&#8217;ll reference a few of them throughout this article, along with their official emoji names.&lt;/p&gt;
&lt;p&gt;Sam has drawn a window and pastoral scene on another metal wall, and surrounded it with family photos&#8230;&lt;/p&gt;
&lt;p&gt;&#8230;and the functional Eurostile of a harvester status screen is similarly customized with family photos and postcards:&lt;/p&gt;
&lt;p&gt;Just readable amongst the photos is a Post-it note detailing Sam&#8217;s cheeky plans for starting the day:&lt;/p&gt;
 07.30: Have a wank
07.32: Clean up mess
07.33: Nice cup of tea and a bickie 
&lt;p&gt;Sam might be American, but the film&#8217;s &lt;a href="http://en.wikipedia.org/wiki/Duncan_Jones"&gt;director&lt;/a&gt; and &lt;a href="http://gavinrothery.com"&gt;designer&lt;/a&gt; are definitely British.&#160;(To explain for Americans: &#8216;bickie&#8217; is British slang for &#8216;biscuit&#8217;;&#160;&#8216;biscuit&#8217; is British slang for &#8216;cookie&#8217;; and you can work out &#8216;wank&#8217; for yourselves.)&lt;/p&gt;
&lt;p&gt;This Post-it is particularly ironic in light of the quotation we see as the camera pans down the wall of photos:&lt;/p&gt;
 &#8216;Abstinence is a good thing, but it should always be practised in moderation.&#8217; &#8211; Anon 
&lt;p&gt;I&#8217;m delighted to report that the card is set in popular sci-fi font&#160;&lt;a href="http://www.linotype.com/1086586/Swiss911-family.html"&gt;Swiss 911 Compressed&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Next up is a gratuitous shot of Sam having a shower. If this isn&#8217;t a &#8216;backside of the moon&#8217; gag, I&#8217;ll be sorely disappointed.&lt;/p&gt;
&lt;p&gt;I&#8217;ve had a closer look, but I can&#8217;t see any typography:&lt;/p&gt;
&lt;p&gt;If there&#8217;s no typography, then I&#8217;m afraid we&#8217;re just not interested.&lt;/p&gt;
&lt;p&gt;After his shower, Sam gets his hair cut by GERTY:&lt;/p&gt;
&lt;p&gt;GERTY is using a futuristic vacuum-based device to suck up Sam&#8217;s hair and cut it to the perfect length. You can just make out a Lunar Industries logo on the device&#8217;s hi-gloss handle:&lt;/p&gt;
&lt;p&gt;Here&#8217;s how the device looks in close-up:&lt;/p&gt;
&lt;p&gt;HANG ON A MINUTE. What&#8217;s that written on the transparent plastic tube?&lt;/p&gt;
&lt;p&gt;Crop. Zoom in. Move left. Zoom in again. &lt;a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/EnhanceButton"&gt;Enhance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That embossed text appears to say:&lt;/p&gt;
 www.haircut.com
2&#8243; EXTENDER 
&lt;p&gt;Is this the Moon production team saying that at some point in the future, &lt;a href="http://www.haircut.com"&gt;haircut.com&lt;/a&gt; will be purchased by a futuristic hair-cutting company who make robotic trimming devices?&lt;/p&gt;
&lt;p&gt;No, dear reader, it is not. Because that future is already here. TODAY.&lt;/p&gt;
&lt;p&gt;It turns out that &lt;a href="http://www.haircut.com"&gt;haircut.com&lt;/a&gt; is the present-day home of RoboCut Inc.:&lt;/p&gt;
&lt;p&gt;&#8230;and that RoboCut Inc. are the makers of the RoboCut DIY:&lt;/p&gt;
&lt;p&gt;That&#8217;s right &#8211; the product you see in &lt;em&gt;Moon&lt;/em&gt; is a product you can buy yourself today, for only &lt;a href="http://www.haircut.com/product_info.php?products_id=29"&gt;$59.99 (including free shipping)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Want to know how the RoboCut works? Here&#8217;s RoboCut founder and inventor, Dr.&#160;Alfred Natrasevschi, to explain:&lt;/p&gt;
&lt;p&gt;Haircut completed, Sam expresses his annoyance that LunarSat (a.k.a. &#8216;long range comms&#8217;) still hasn&#8217;t been fixed. GERTY notes that it&#8217;s fairly low on the company&#8217;s priority list right now.&#160;His passive role in this scene is fascinating. If you watch&#160;&lt;em&gt;Moon&lt;/em&gt; after&#160;&lt;em&gt;2001&lt;/em&gt;, you can&#8217;t help but be suspicious of GERTY, in the same way that Ripley can&#8217;t help but be suspicious of Bishop in &lt;a href="http://en.wikipedia.org/wiki/Aliens_(film)"&gt;&lt;em&gt;Aliens&lt;/em&gt;&lt;/a&gt;&#160;after her experience with Ash in &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Alien_(film)"&gt;Alien&lt;/a&gt;&lt;/em&gt;. GERTY is a calm, relaxing AI voice with a glowing camera lens and corporate logo on the front. Moon certainly isn&#8217;t afraid to play on our expectations. After all, what could possibly go wrong?&lt;/p&gt;
&lt;p&gt;Sam listens to a message from his wife and daughter. He can&#8217;t talk to them live due to the LunarSat mishap, but he&#8217;s delighted to see them nonetheless. Just look at the joy on his face:&lt;/p&gt;
&lt;p&gt;No. &lt;em&gt;Don&#8217;t&lt;/em&gt; look at his face; look at his &lt;em&gt;clipboard&lt;/em&gt;. That&#8217;s where the typographic interestingness is most likely to be found.&lt;/p&gt;
&lt;p&gt;Crop. Zoom in. Rotate ninety degrees. Zoom in again.&#160;&lt;a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/EnhanceButton"&gt;Enhance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hold on a minute &#8211; it looks like this clipboard was signed on the 16th January 2008. But that&#8217;s not THE FUTURE &#8211; indeed, it&#8217;s not even after&#160;&lt;em&gt;Moon&lt;/em&gt; was released!&lt;/p&gt;
&lt;p&gt;Moreover, who&#8217;s the signatory? It looks remarkably like the name of the film&#8217;s&#160;&lt;a href="http://www.imdb.com/name/nm0884255/"&gt;line producer&lt;/a&gt;. (Damn you, high-definition film releases.)&lt;/p&gt;
&lt;p&gt;Later on, Sam watches some TV. Specifically, he watches&#160;&lt;a href="http://en.wikipedia.org/wiki/Bewitched"&gt;Bewitched&lt;/a&gt;&#160;&#8211;&#160;or as it&#8217;s also known in the future, &#8216;SUPERNATURAL COMEDY LADIES&#8217;:&lt;/p&gt;
&lt;p&gt;As he makes a cup of tea, he spots a strange girl sat in his chair:&lt;/p&gt;
&lt;p&gt;While he&#8217;s distracted by the plot, let&#8217;s take a look at two typographically-interesting posters in the background:&lt;/p&gt;
&lt;p&gt;This poster, with its square iconography and cheery SELECTION EVENT &#8211; HEARTY FEEDING &#8211;&#160;PLEASE ENJOY &#8211; ORGANIC SUSTAINANCE MENU, makes you wonder if the Lunar Industries catering team learnt their trade at&#160;&lt;a href="http://theportalwiki.com/wiki/Aperture_Science"&gt;Aperture Science&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Even more interesting is a sign just visible beneath the pre-packed food boxes:&lt;/p&gt;
 Organic Material &#8211; Soylent Storage 
&lt;p&gt;Soylent. That name sounds familiar. Surely this isn&#8217;t the same foodstuff made by the Soylent Corporation in 1973&#8242;s &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Soylent_Green"&gt;Soylent Green&lt;/a&gt;&lt;/em&gt;? Because if it is, that would be remarkably worrying. &lt;a href="http://youtu.be/6zAFA-hamZ0?t=13s"&gt;Soylent Green is People&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;At least we can be confident that &lt;em&gt;this&lt;/em&gt; Soylent isn&#8217;t made from people. After all, where would you get them from? There&#8217;s only one person on this moon base, and that&#8217;s Sam Bell.&lt;/p&gt;
&lt;p&gt;Sam burns his hand in all the kerfuffle. GERTY fixes him up in the infirmary.&#160;Just visible behind Sam&#8217;s head is a screen with the comforting advice to &#8220;TRUST ROBOTIC ASSIST&#8221;:&lt;/p&gt;
&lt;p&gt;ROBOTIC ASSIST is the official name for GERTY 3000, Sam&#8217;s AI companion in the base&#160;(voiced by Kevin Spacey doing his best HAL impression). And why &lt;em&gt;not&lt;/em&gt; TRUST ROBOTIC ASSIST?&#160;I&#8217;m sure &lt;a href="http://www.killerclips.com/clip.php?id=113&amp;amp;qid=1385"&gt;the 3000 series has a perfect operational record&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Sam goes to bed. Beside his bunk is issue 15 of &lt;em&gt;Take Off&lt;/em&gt; Magazine:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Take Off&lt;/em&gt;&#160;was a&#160;132-issue aviation&#160;&lt;a href="http://en.wikipedia.org/wiki/Partwork"&gt;partwork&lt;/a&gt;&#160;published in the 1980s by&#160;&lt;a href="http://www.eaglemoss.com/our_history.aspx"&gt;Eaglemoss&lt;/a&gt;. This issue features V-Bombers and Biz-Jets:&lt;/p&gt;
&lt;p&gt;Sam has a sexy dream about his wife. It does not, however, contain any typography.&lt;/p&gt;
&lt;p&gt;Sam is rudely awoken by his &lt;a href="http://www.presenttime.com/p-2115-ka4134.aspx"&gt;Karlsson Digibell Alarm Clock&lt;/a&gt;, which features a classic LCD font. Sam&#8217;s future version of the clock has a bonus feature compared to the one you can buy in shops today. That&#8217;s right &#8211; Sam&#8217;s version plays &lt;a href="http://en.wikipedia.org/wiki/Chesney_Hawkes"&gt;Chesney Hawkes&lt;/a&gt; songs.&lt;/p&gt;
&lt;p&gt;Specifically, it wakes him up by playing Chesney&#8217;s number one hit&#160;&lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/The_One_and_Only_(song)"&gt;The One And Only&lt;/a&gt;&lt;/em&gt;. &#8220;I am, the one and only&#8221;, croons Mr. Hawkes.&lt;/p&gt;
&lt;p&gt;Yes, you heard me right &#8211; t&lt;em&gt;he filmmakers are foreshadowing upcoming events via the lyrics of a Chesney Hawkes song.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Over food, we see more of Sam&#8217;s Post-it reminders:&lt;/p&gt;
 Water plants!!
11:30 Gaze at earth from window 
&lt;p&gt;&#8230;and a picture of the Earth, with &lt;em&gt;Wish You Were Here&lt;/em&gt; on it. He really does want to go home, you know.&lt;/p&gt;
&lt;p&gt;Sam also has an &lt;a href="http://www.ikea.com"&gt;IKEA&lt;/a&gt; instruction booklet tucked behind his Lunar Industries sheet. The reasons for this are somewhat unclear.&lt;/p&gt;
&lt;p&gt;Sam heads out to retrieve some more HE3 from Matthew, one of the harvesters. He sees a second vision of the mysterious girl, and crashes into the side of Matthew, damaging both himself and his rover. The rover&#8217;s emergency sign once again asks him to TRUST ROBOTIC ASSIST:&lt;/p&gt;
&lt;p&gt;There&#8217;s a clear message coming through from these on-screen text displays: if things go wrong, ROBOTIC ASSIST should be TRUSTed to make things right. Let&#8217;s fade to black with that sensible advice in mind.&lt;/p&gt;
&lt;p&gt;Fade up from black. Why hello, Sam! You&#8217;re looking remarkably fresh-faced for someone who&#8217;s just nearly killed himself in an accident. How&#8217;s the head? Fuzzy? Tell you what, why not let GERTY run some tests to check for brain damage:&lt;/p&gt;
&lt;p&gt;This test is a &lt;a href="http://en.wikipedia.org/wiki/Concentration_(game)"&gt;Concentration&lt;/a&gt;-style&#160;matching pairs game. (Unlike Concentration, these cards all have Lunar Industries logos on the back.)&#160;Some of the card symbols are reminiscent of &lt;a href="http://en.wikipedia.org/wiki/Zapf_Dingbats"&gt;Zapf Dingbats&lt;/a&gt; &#8211; such as the&#160;&lt;a href="http://unicode-table.com/en/271A/"&gt;HEAVY GREEK CROSS&lt;/a&gt;, and a rotated&#160;&lt;a href="http://unicode-table.com/en/2756/"&gt;BLACK DIAMOND MINUS WHITE X&lt;/a&gt;&#160;&#8211; but I do wonder if I&#8217;m reading too much into things, and the design team haven&#8217;t just drawn some pretty symbols in &lt;a href="http://en.wikipedia.org/wiki/Adobe_Illustrator"&gt;Illustrator&lt;/a&gt;. (I had hoped that the asterisk card might be my own personal favorite, the&#160;&lt;a href="http://unicode-table.com/en/274B/"&gt;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK&lt;/a&gt;, but alas it is not to be.)&lt;/p&gt;
&lt;p&gt;&#8220;Let&#8217;s try another test&#8221; says GERTY, like some kind of benevolent &lt;a href="http://en.wikipedia.org/wiki/GLaDOS"&gt;GLaDOS&lt;/a&gt;. The analogy makes me trust him even less.&lt;/p&gt;
&lt;p&gt;Shortly thereafter, we overhear GERTY saying something to Lunar Central about &#8220;the new Sam&#8221;. What&#8217;re you going on&#160;about, GERTY?&lt;/p&gt;
&lt;p&gt;I&#8217;ll tell you exactly what he&#8217;s going on about. This is a &lt;em&gt;brand new Sam&lt;/em&gt;. He&#8217;s a clone of the original Sam Bell, and he&#8217;s just been woken up by GERTY. This might get confusing rather quickly, so let&#8217;s lean on our good friend &#8216;typographic convention&#8217;, and use &lt;a href="http://en.wikipedia.org/wiki/Subscript_and_superscript#Subscripts_that_are_dropped_below_the_baseline"&gt;subscript&lt;/a&gt;&#160;to refer to him henceforth as&#160;Sam2. Trust me, it&#8217;ll make life a damn sight easier once you know where we&#8217;re going with this.&lt;/p&gt;
&lt;p&gt;Sam2 spots that Matthew has stalled. He asks GERTY to unlock the doors so that he can go and fix it. GERTY says &#8220;I&#8217;ll pass on your message&#8221;. (This is Lunar Industries&#160;speak for &#8220;&lt;a href="http://www.youtube.com/watch?v=7qnd-hdmgfk"&gt;I&#8217;m sorry Sam, I&#8217;m afraid I can&#8217;t do that&lt;/a&gt;&#8221;.)&lt;/p&gt;
&lt;p&gt;Sam2 has a dream about his wife. This time, it&#8217;s not sexy at all &#8211; it&#8217;s psychologically &lt;em&gt;and&lt;/em&gt; typographically disturbing. There&#8217;s a scary Sam1 under the bedclothes, and he works for RANUL SEIRTSUDNI, on the &#46993;&#49324;-GNARAS base:&lt;/p&gt;
&lt;p&gt;Lunar Central tells Sam2 to stay put. GERTY apologies for being under strict orders not to let him outside. He&#8217;s acting like some kind of&#8230; &lt;em&gt;benevolent&lt;/em&gt; HAL 9000. This analogy actually endears him to me slightly. Sam2 tricks GERTY into letting him go outside anyway. He finds Sam1&#160;in the rover, and brings him back to the base. GERTY tells him that the person he&#8217;s found is &lt;em&gt;also Sam Bell&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt;&#160;OHMYCRIKEYFACE&lt;/p&gt;
&lt;p&gt;A considerable amount of plot happens. It&#8217;s all fascinating, but if I&#8217;m honest, it&#8217;s rather light on typographic action. I feel I&#8217;d be doing us a disservice to document the whole&#160;lot, but I will report an important bit of GERTY dialog when he&#8217;s&#160;explaining&#160;events to Sam1:&lt;/p&gt;
&lt;p&gt;&#8220;I&#8217;m here to keep you safe, Sam.&#8221;&lt;/p&gt;
&lt;p&gt;That sounds a lot like the &lt;a href="http://en.wikipedia.org/wiki/Three_Laws_of_Robotics"&gt;First Law Of Robotics&lt;/a&gt; to me. If GERTY is programmed to follow the Laws, his robot AI is about to have some interesting choices to make.&lt;/p&gt;
&lt;p&gt;A message comes through from Central to say that the crew of the &lt;em&gt;Eliza&lt;/em&gt; are on their way to &#8216;rescue&#8217; Sam2:&lt;/p&gt;
&lt;p&gt;They look like a friendly bunch, don&#8217;t they? The instructions next to their mugshots say:&lt;/p&gt;
 Lunar Industries rescue crews have your best intentions at heart. Please try not to panic until they arrive. Remain on-station and make sure you obey their instructions no matter how strange they may seem. After all they&#8217;re here to help! 
&lt;p&gt;What could possibly go wrong with a&#160;crew called&#160;&lt;a href="http://www.imdb.com/name/nm2707210/?ref_=ttfc_fc_cr51"&gt;Rothery&lt;/a&gt;, &lt;a href="http://www.imdb.com/name/nm0911738/?ref_=ttfc_fc_cr34"&gt;Ward&lt;/a&gt;&#160;and &lt;a href="http://www.imdb.com/name/nm2134910/?ref_=ttfc_fc_cr16"&gt;Shaw&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Sam2 realizes he must have come from somewhere on the base, and starts hunting around. He and Sam1 have a fight. Sam1 looks in a topical multi-mirror. (Don&#8217;t worry, that&#8217;s definitely Sam1&#160;in both mirrors. After all, it&#8217;s not like there are any &lt;em&gt;more&lt;/em&gt; Sams around, right?)&lt;/p&gt;
&lt;p&gt;GERTY and Sam1 have a Big Chat. When pressed for the truth about his wife, GERTY says &#8220;I can only account for what occurs on the base&#8221;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt; NOTHINGTOSEEHEREFACE&lt;/p&gt;
&lt;p&gt;After some cajoling, GERTY finally tells Sam1 the truth. He&#8217;s a clone, and his memories of his wife and daughter are memory implants.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt; SADTRUTHFACE&lt;/p&gt;
&lt;p&gt;The Sams find some signal-blocking antennas outside the base.&#160;Sam1 goes back to look at his old video logs. GERTY enters a special password on a Windows Keyboard to unlock all of the video diaries:&lt;/p&gt;
&lt;p&gt;Eagle-eyed viewers will notice that the password begins with KLGAN. Unfortunately, the security-conscious Duncan Jones cuts away from the keyboard just before we can hack into his email.&lt;/p&gt;
&lt;p&gt;Sam1 learns that Lunar Industries seem to view the words &#8216;termination&#8217; and &#8216;contract&#8217; in much the same way as the Mafia. Sam2 finds yet more long-range-comms-blocking aerials. He prints out their coordinates on a handy receipt printer:&lt;/p&gt;
&lt;p&gt;I very much doubt &lt;em&gt;those&lt;/em&gt;&#160;are going to become significant later on.&lt;/p&gt;
&lt;p&gt;Now: I&#8217;m sure you&#8217;ve already noticed that these are &lt;a href="http://en.wikipedia.org/wiki/Selenographic_coordinates"&gt;Selenographic coordinates&lt;/a&gt;, as used to refer to locations on the Earth&#8217;s Moon. Specifically, the co-ordinates are:&lt;/p&gt;
 LAT 034&#176;23&#8242;01.2&#8243;S, LONG&#160;124&#176;56&#8242;67.6&#8243;E
LAT 121&#176;09&#8242;56.2&#8243;S, LONG&#160;045&#176;34&#8242;56.4&#8243;E 
&lt;p&gt;We&#8217;ll gloss over the fact that one of these numbers has&#160;sixty-seven seconds in a minute. However, it&#8217;s a little hard to ignore the latitude value of 121&#176;S, given that the &lt;a href="http://en.wikipedia.org/wiki/Latitude"&gt;maximum value that latitude can take&lt;/a&gt; is 90&#176;S at the pole. (Maybe Sam mistyped it due to the &lt;a href="http://blog.nasm.si.edu/highlights-from-the-collection/neil-armstrongs-apollo-11-extravehicular-gloves-and-visor/"&gt;stubby fingers you get on space gloves&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;Back at base, the Sams discover a hidden room. Look at that: it&#8217;s &lt;a href="http://en.wikipedia.org/wiki/Turtles_all_the_way_down"&gt;Sams all the way down&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Trays 0001 through 0006 have already been opened. Sam0005 and Sam0006 (for it is they) decide to open tray 0007:&lt;/p&gt;
&lt;p&gt;It&#8217;s the small details of this scene that I find most disturbing. Every pre-packed Samn has a pre-packed &lt;em&gt;Wake Me When It&#8217;s Quitting Time&lt;/em&gt; t-shirt. The person at Lunar Industries responsible for this whole macabre set-up not only had the temerity to subject Sam Bell to his own personal &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Groundhog_Day_(film)"&gt;Groundhog Day&lt;/a&gt;&lt;/em&gt;; they also had the gall to leave cynical in-jokes for every iteration to endure.&lt;/p&gt;
&lt;p&gt;Once they&#8217;re out of the Tunnel Of Clones, Sam1 asks GERTY why he helped with the password. &#8220;Helping you is what I do&#8221;, says GERTY.&lt;/p&gt;
&lt;p&gt;See, Sam1? I&#160;&lt;em&gt;told&lt;/em&gt;&#160;you you should TRUST ROBOTIC ASSIST &#8211; he&#8217;s &lt;em&gt;definitely&lt;/em&gt; read&#160;&lt;a href="http://en.wikipedia.org/wiki/Three_Laws_of_Robotics"&gt;the Laws&lt;/a&gt;. (Although he may have skim-read the bit about not killing people in a space-coffin.)&lt;/p&gt;
&lt;p&gt;Sam1 drives the rover a very long way from the base, and re-establishes video contact with Earth. He calls his house. Turns out his wife is dead, but his now-15-year-old daughter has a chat with him anyway. She ends by shouting off-screen to her Dad to say that someone is asking about Mom. We hear the distinct voice of a certain Sam Bell in reply. Sam0 is still alive! (Sam1 closes the video call device quickly, and looks sad and pensive.)&lt;/p&gt;
&lt;p&gt;The known-to-be-alive-ness of Sam0 gives an an alternative, cheerier way of looking at the pre-packed t-shirt dilemma&#160;for the less depressingly-morbid of you. Presumably Sam0 is complicit in the fact that thousands of Sams are in cold storage on the Moon. If he&#8217;s complicit in the scheme, could it be that these small personal details &#8211; even that seemingly-sinister t-shirt &#8211; have been chosen with&#160;Sam0&#8216;s&#160;involvement, as homely comforts to soften the terror of Samn&#8216;s reality?&lt;/p&gt;
&lt;p&gt;I don&#8217;t think that&#8217;s the truth of it at all. But if helps you sleep at night, you&#8217;re more than welcome to run with it.&lt;/p&gt;
&lt;p&gt;We&#8217;re back at the base. Sam1 continues to fall apart. Sam2 sees Sam1&#8216;s video call with his daughter, and realizes that he and Sam1 will be killed when the &lt;em&gt;Eliza&lt;/em&gt; crew arrive. He convinces GERTY to wake up a new clone. Let&#8217;s call him Sam3.&lt;/p&gt;
&lt;p&gt;This section of the film gives us a rare close-up of the base&#8217;s OPERATIONAL NOTIFICATIONS board:&lt;/p&gt;
&lt;p&gt;Amongst other things, we discover that Lunar Industries Ltd. is a Registered Company Of The United Kingdom No.&#160;06346944. Delightfully, &lt;a href="http://companycheck.co.uk/company/06346944"&gt;this is indeed the case&lt;/a&gt;. In addition to the scrolling Eurostile, there&#8217;s also a Big Countdown Clock (in a pseudo-LED font), reinforcing the time pressure of &lt;em&gt;Eliza&lt;/em&gt;&#8216;s imminent arrival. (It was conveniently fixed at &lt;em&gt;88:88&lt;/em&gt; before the &lt;em&gt;Eliza&lt;/em&gt; plot point came into effect.) Notable on both font displays is an illustrative dot-matrix resolution substantially lower than the actual resolution of the fonts displayed thereon.&lt;/p&gt;
&lt;p&gt;Sam1, who is by now in a &lt;em&gt;right&lt;/em&gt; state, wakes up to Chesney Hawkes. (See? I &lt;em&gt;told&lt;/em&gt; you it was foreshadowing.) He discovers Sam3 in the infirmary.&lt;/p&gt;
&lt;p&gt;Talking of foreshadowing: on the movie&#8217;s original one-sheet poster, there are three copies of Sam Rockwell&#8217;s name, as shadows behind the main one:&lt;/p&gt;
&lt;p&gt;Strictly speaking, this is an accurate cast list. The film now stars Sam Rockwell0, Sam Rockwell1, Sam Rockwell2, and Sam Rockwell3.&lt;/p&gt;
&lt;p&gt;To put it another way &#8211; &lt;em&gt;the movie&#8217;s poster is four-shadowing the foreshadowing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Maybe I should go and have a lie down for a bit, and come back when the conspiracy theories have subsided. It&#8217;s a shame sci-fi films don&#8217;t have intermissions these days. Let&#8217;s transplant the one from my&#160;&lt;a href="http://typesetinthefuture.com/2001-a-space-odyssey/"&gt;&lt;em&gt;2001: A Space Odyssey&lt;/em&gt;&lt;/a&gt;&#160;post, and go and have a cup of tea while the Sams work out what to do next.&lt;/p&gt;
&lt;p&gt;And we&#8217;re back. After much debate, it is decided that Sam1 will go back into the crashed rover; Sam2 will take the HE3 launcher back to Earth; and Sam3 will stay in the infirmary to be discovered by the crew of &lt;em&gt;Eliza&lt;/em&gt;. He&#8217;s still unconscious, so he doesn&#8217;t know this yet, but it&#8217;s a decision made by a quorum of hims, so he can&#8217;t really complain.&lt;/p&gt;
&lt;p&gt;Once he&#8217;s dropped Sam1&#160;off, &#160;Sam2 loads up the HE3 launcher. GERTY suggests &lt;a href="http://www.youtube.com/watch?v=nn2FB1P_Mn8"&gt;turning him on and off again&lt;/a&gt;&#160;so that he can&#8217;t provide any incriminating evidence to &lt;em&gt;Eliza&lt;/em&gt;. &#8220;I&#8217;m here to keep you safe, Sam. I want to help you.&#8221;&lt;/p&gt;
&lt;p&gt;Sam2 asks GERTY if he&#8217;ll be okay. &#8220;Of course. The new Sam and I will be back to our programming as soon as I&#8217;ve finished rebooting.&#8221;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt; YAYPROGRAMMINGFACE&lt;/p&gt;
&lt;p&gt;Sam2&#160;replies: &#8220;Gerty, we&#8217;re not programmed. We&#8217;re people, you understand?&#8221;&lt;/p&gt;
&lt;p&gt;As GERTY turns round, we see that Sam1 has stuck a KICK ME Post-it on GERTY&#8217;s back side:&lt;/p&gt;
&lt;p&gt;Sam2 turns GERTY off. After a short, poignant pause, he removes the Post-it from his back.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt; REBOOTINGFACE&lt;/p&gt;
&lt;p&gt;Sam2 gets ready to launch back to Earth. At the very last minute, he realizes he can use the harvesters to knacker the signal-blocking aerials, and avoid&#160;Sam3&#160;suffering a similar fate to his own. He grabs the piece of paper with&#160;&lt;a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/ChekhovsGun"&gt;Chekhov&#8217;s&#160;Coordinates&lt;/a&gt;&#160;on it:&lt;/p&gt;
&lt;p&gt;&#8230;and types a long series of numbers into a keyboard with great precision despite wearing spacesuit gloves. The harvester coordinates update. Go Sam2!&lt;/p&gt;
&lt;p&gt;This screen prompts a couple of interesting questions:&lt;/p&gt;
&lt;p&gt;1) What&#8217;s an &#8216;OLD MAN OVERIDE&#8217;?&lt;/p&gt;
&lt;p&gt;2) Is that an infinitely-looping&#160;&lt;a href="http://en.wikipedia.org/wiki/BASIC"&gt;BASIC&lt;/a&gt;&#160;program?&lt;/p&gt;
 20 GOTO 10
10 GOTO 20 
&lt;p&gt;The &lt;em&gt;Eliza&lt;/em&gt; arrives. Sam3 wakes up and asks GERTY what&#8217;s going on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GERTICON:&lt;/strong&gt; DONTASKMEJUSTREBOOTEDFACE&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Eliza&lt;/em&gt; crew members find Sam1 in his rover. Sam2 has a psychedelic trip through space. A harvester crashes into an aerial. Long Range Comms finally start working. And if you look closely, you discover that the contents of the portrait-orientation comms monitor is actually being played from a DVD player plugged into a landscape monitor turned 90 degrees clockwise:&lt;/p&gt;
&lt;p&gt;All of which is a timely reminder that this frankly awesome sci-fi film was made on a budget the size of a postcard. Which just makes its amazing styling and design all the more impressive. Indeed, &lt;em&gt;Moon&lt;/em&gt; is one of my favorite examples of sci-fi storytelling through design &#8211; and, to my mind, a worthy successor to Kubrick&#8217;s masterpiece.&lt;/p&gt;
&lt;p&gt;- &lt;a href="https://twitter.com/daveaddey"&gt;@daveaddey&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Postscript:&lt;/strong&gt;&#160;Apart from the note about Microstyle, and a nod to the DVD players, I deliberately wrote this post without referring to &lt;/em&gt;Moon&lt;em&gt; Conceptual Designer &lt;a href="http://www.gavinrothery.com"&gt;Gavin Rothery&lt;/a&gt;&#8216;s superb &#8216;&lt;a href="http://www.gavinrothery.com/moon-blog-index/"&gt;They Never Went To The Moon&lt;/a&gt;&#8217; blog. I much prefer to write these posts as a response to just what I see on screen &#8211; it&#8217;s more fun that way. You should totally go and read his blog in its entirety, however, as he explains or expands upon much of what I&#8217;ve written above. The blog also includes images of many of the computer screens and stickers from around the base,&#160;along with Gavin&#8217;s original renders for the base design. Good work, sir!&lt;/em&gt;&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 18:30:52 -0800</pubDate>
      <link>http://typesetinthefuture.com/moon/</link>
      <guid>http://typesetinthefuture.com/moon/</guid>
    </item>
    <item>
      <title>Flappy Space Program by corpsmoderne</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7237098'&gt;"Flappy Space Program by corpsmoderne"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://corpsmoderne.itch.io/flappy-space-program'&gt;http://corpsmoderne.itch.io/flappy-space-program&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; </description>
      <pubDate>Thu, 13 Feb 2014 21:30:25 -0800</pubDate>
      <link>http://corpsmoderne.itch.io/flappy-space-program</link>
      <guid>http://corpsmoderne.itch.io/flappy-space-program</guid>
    </item>
    <item>
      <title>The Economics of Star Trek &#8212; Editor's Picks &#8212; Medium</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7237184'&gt;"The Economics of Star Trek &#8212; Editor's Picks &#8212; Medium"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://medium.com/editors-picks/29bab88d50'&gt;https://medium.com/editors-picks/29bab88d50&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;I promise this is about Star Trek. Sort of. Bear with me a moment.&lt;/p&gt;
&lt;p&gt;I&#8217;ve been reading a lot about robots lately. When I read about robots, and the future, I can&#8217;t help but think about it in economic terms. And that inevitably turns my mind to the branch of economics called &lt;a href="http://en.wikipedia.org/wiki/Post-scarcity_economy"&gt;post scarcity economics&lt;/a&gt;. Traditional economics, of course, deals with the efficient allocation of inherently scarce materials. Post scarcity economics deals with the economics of economies that are no longer constrained by scarcity of materials&#8202;&#8212;&#8202;food, energy, shelter, etc.&lt;/p&gt;
&lt;p&gt;The thing that never sits quite right with post scarcity economics, though, at least the very little that I&#8217;ve read, is that it&#8217;s always sort of an all or nothing affair: you either don&#8217;t have enough of &lt;em&gt;anything &lt;/em&gt;or you have enough of &lt;em&gt;everything. &lt;/em&gt;Thinking of this as a mental exercise is kind of fun, I think, but in reality it seems to me that getting from point A&#8202;&#8212;&#8202;a scarcity economy&#8202;&#8212;&#8202;to point B&#8202;&#8212;&#8202;post scarcity&#8202;&#8212;&#8202;is going to be a long, complicated journey as &lt;em&gt;some &lt;/em&gt;things become more abundant in &lt;em&gt;some &lt;/em&gt;places, while other things are still scarce.&lt;/p&gt;
&lt;p&gt;What is needed is some sort of interim-, or proto-post scarcity economics.&lt;/p&gt;
&lt;p&gt;More and more I find myself thinking we are, as a race, constrained by the economic models we have. We have capitalism, of course, the proverbial &lt;a href="http://wais.stanford.edu/Democracy/democracy_DemocracyAndChurchill%28090503%29.html"&gt;worst model except for every other one&lt;/a&gt; that dominates much of our planet right now. It&#8217;s definitely a scarcity-based system. Then we have the centrally planned systems of Communism and Marxism, not particularly effective, as it turns out. We have European-style socialist capitalism, but that&#8217;s still capitalism, and scarcity-based, albeit with a much more robust safety net than we have here in the US. Some Americans seem to think that a robust safety net somehow nullifies the distributed planning of capitalism. I&#8217;ll listen to them again when our schools are decent and our life span starts increasing again magically.&lt;/p&gt;
&lt;p&gt;The key here, to me, is to start thinking about how economics would work when we &lt;em&gt;decouple labor from reward. &lt;/em&gt;Does that make a system inherently communist? I don&#8217;t think it does. People work. They get paid. It is market driven, and not centrally planned. In reality,the market already basically dictates this, for who can claim that a Wall Street banker works more than a teacher? The only thing we really need to do is take this to a logical extreme: &lt;em&gt;that people can still get paid doing zero work. &lt;/em&gt;This fear seems to be at the heart of most people who say that Europe is communist: if we give people so much welfare, some of them might stop working! Quelle Horreur!&lt;/p&gt;
&lt;p&gt;It seems to me that with the rise of machines and robotics, advances in mining technology, energy technology (both fracking and green energy technologies), the obesity epidemic in the US, etc., that there are plenty of reasons to believe that we may be at the beginnings of a post scarcity economy. We have a surplus, no doubt. Of course, we still have legions of people in the world that are starving, and even people still here at home. But we actually have the &lt;em&gt;capacity &lt;/em&gt;to feed them, to feed everyone, even now, even if we don&#8217;t have the &lt;em&gt;will. &lt;/em&gt;It&#8217;s not a matter of scarcity; it&#8217;s a matter of the organization of labor and capital.&lt;/p&gt;
&lt;p&gt;Take a mental journey for a moment with me: what if, one day, technology reaches the point that a small number of humans&#8202;&#8212;&#8202;say, 10 million&#8202;&#8212;&#8202;can produce all of the food, shelter and energy that the race needs. This doesn&#8217;t seem like insanely wishful thinking, given current trends. There&#8217;s no rational reason why the advances in robotics, factories, energy and agriculture could continue unabated for long periods of time. Of course I&#8217;m not saying they &lt;em&gt;will&lt;/em&gt;, but rather, they &lt;em&gt;could.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, then, take that journey. What, then, of labor? In today&#8217;s terms, a &#8216;healthy&#8217; economy now is one at or near full employment. A healthy economy now is one where everyone has a job. But in our mental exercise, those jobs are actually unrelated to a healthy economy, at least from strict economic terms. Everyone&#8217;s fed and housed and tons of people simply don&#8217;t need to work. Right now, we have them working making shit we don&#8217;t need. Is that any better than them not working?&lt;/p&gt;
&lt;p&gt;I give you we&#8217;re in some fringe areas of economics here, but I have always wondered: is there any economic proof that we need full employment to reach full satisfaction of needs? To my knowledge, there isn&#8217;t. There&#8217;s a body of economics that goes into standards of living, and the increased standard of living. And here we get to our shitty world of unabated consumerism,&lt;a href="http://en.wikipedia.org/wiki/Thorstein_Veblen"&gt;Thorstein Veblen&#8217;s&lt;/a&gt; conspicuous consumption and George Battaille&#8217;s &lt;a href="http://en.wikipedia.org/wiki/The_Accursed_Share"&gt;accursed share&lt;/a&gt;&#8202;&#8212;&#8202;the inevitable destiny of all economies to eventually produce more than they need, and, thus, waste it.&lt;/p&gt;
&lt;p&gt;Seems to me that if we could think beyond capitalism and think of a new model, we could break out of this pointless cycle of more and more consumption of shit we don&#8217;t need and model things in another way.&lt;/p&gt;
&lt;p&gt;Yes yes, of course. We all know that. The problem seems to me that the minute we leave capitalism behind, we only look at the past alternatives of communism, marxism and pure socialism and pooh pooh them. Few people seem to be able to look beyond capitalism without regressing to the other failed economic models of the early 20th century, as if they are the only alternate possibilities for man.&lt;/p&gt;
&lt;p&gt;Yet there have been &lt;em&gt;some &lt;/em&gt;other attempts to leave capitalism behind that attempt to also leave the baggage of communism, marxism and socialism behind. The most notable is &lt;a href="http://en.wikipedia.org/wiki/Participatory_economics"&gt;participatory economics&lt;/a&gt;, or parecon. This is a worthwhile attempt, I think, but to me it doesn&#8217;t quite pass the smell test of being sufficiently un-communist, what with its workers councils and lack of any sort of ruling class. All very un-American, and in any case, a bit preoccupied with &#8220;workers&#8221; and &#8220;individual need&#8221; to really work in any post-scarcity economy where the very concept of a laborer is iffy. When you start thinking this way you start getting into the dodgy world of &lt;a href="http://en.wikipedia.org/wiki/Heterodox_economics"&gt;heterodox economics&lt;/a&gt; and, well, that&#8217;s a world of a lot of crackpots. Some good ideas, sure, but a lot of crackpots, and more to the point, it&#8217;s a world devoid of empirical research, which is a serious problem. Economics is really at its worst when it&#8217;s just making up theories. It&#8217;s a lot more noble when there&#8217;s some real data to back it up.&lt;/p&gt;
&lt;p&gt;Parecon does have some awesome concepts, though, by the way. I don&#8217;t hate it completely. I especially like that people&#8217;s say over any issue is proportional to the amount that issue affects them. It also has some states&#8217; rights-ish aura similar to &#8220;laws being made at the level closest to those affected.&#8221; It&#8217;s a worthy school of thought to consider when looking for a pure alternative to capitalism in a vacuum, though probably not very practical in reality for reasons similar to communism (despite not being centrally planned, it still very much hinges on some third party deciding the relative worth of each job&#8202;&#8212;&#8202;a messy business). More to the point, it doesn&#8217;t help us in thinking about our mental picture: a world where a small number of people can produce enough for everyone.&lt;/p&gt;
&lt;p&gt;Then I got to thinking. Screw the dodgy world of heterodox economics. Let&#8217;s go full-on fantastical and look at sci-fi. There IS actually a model out there that deals fairly realistically with a post scarcity economy. Not only that, it actually takes into account the difficulties of migrating from a capitalist society to a post scarcity society incrementally. It&#8217;s not just a theory in a vaccum.&lt;/p&gt;
&lt;p&gt;It&#8217;s called Star Trek.&lt;/p&gt;
&lt;p&gt;Stay with me here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Star Trek and Economics&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Previous Theories&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When looking at the economics of Star Trek, there have been three broad approaches in the past:&lt;/p&gt; Trying to shoehorn Star Trek&#8217;s economics into the model of parecon. This is problematic because of the obviously hierarchical society of Starfleet, with Admirals, captains, commanders, chancellors, governors and whatnot, and the clear existence of a relatively strong Federation president, who is democratically elected. Plus we never once see a labor meeting, and it&#8217;s pretty obvious personal freedom and enrichment are important to society.Calling the Federation Communist, based on comments from Kirk in Star Trek IV on not having any money in the future and Picard&#8217;s speech about the economics of the federation being significantly different than 21st century economics and people pursuing personal enrichment rather than the accumulation of wealth. The problem with this definition is it&#8217;s lazy&#8202;&#8212;&#8202;just because they don&#8217;t pursue the accumulation of wealth, it does not mean the Federation is communist. There is absolutely, obviously, still private property in the Federation: most obviously Joseph Sisko&#8217;s restaurant in New Orleans and Chateau Picard, evidencing that not just small possessions are allowed but that the land itself is still privately owned. One could argue that these aren&#8217;t really Sisko and Picard&#8217;s to own, but they are routinely referred to as &#8220;his&#8221; restaurant and vineyard so we gotta go with Occam&#8217;s Razor here and assume they do, in fact, own them.A sort-of guessing game based on the various mentions of Federation Credits and trying to glean the system from every single mention of money or payments within the series. This is always a pain in the ass, especially given the original series sometimes did things that were pretty out there according to later firmly established canon, and later firmly rejected by Roddenberry himself before his death. Additionally, many of the assumptions about Federation Credits seem iffy: are they really currency? Do they have to be? Are they scrip? Rations? We simply don&#8217;t know. And in any case, trying to define the entire economy of the Federation&#8202;&#8212;&#8202;and perhaps even learning something from it&#8202;&#8212;&#8202;should be more than a matter of resolving obscure trivia references (though of course it&#8217;s fun). &lt;p&gt;None of them seem correct. None of them seem realistic. And yes, let&#8217;s go for realistic here, why not?&lt;/p&gt;
&lt;p&gt;Let&#8217;s take a different approach here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What we know&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&#8217;s start with the facts.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Federation is clearly not a centrally planned economy&lt;/em&gt;, and therefore obviously not communist. Individual freedom of choice is very obvious. Everyone chooses their careers, and there are many mentions of this throughout the series&#8202;&#8212;&#8202;witness every single time someone waxes nostalgic about why they chose to enter Starfleet. Witness Bashir going on about &lt;a href="http://en.memory-alpha.org/wiki/Julian_Bashir"&gt;why he wanted to be a doctor&lt;/a&gt; instead of a tennis player. Witness Wesley &lt;a href="http://en.memory-alpha.org/wiki/Journey%27s_End_%28episode%29"&gt;dropping out&lt;/a&gt; of Starfleet. Witness &lt;a href="http://en.memory-alpha.org/wiki/Vash"&gt;Vash&lt;/a&gt; being an archeologist and &lt;a href="http://en.memory-alpha.org/wiki/Kasidy_Yates-Sisko"&gt;Kasidy Yates&lt;/a&gt; being a cargo ship captain.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Private ownership still exists&#8202;&#8212;&#8202;&lt;/em&gt;the biggest examples, to me, are Sisko&#8217;s restaurant and Chateau Picard, but many other examples abound from all the trinkets everyone owns in their quarters. Crusher&#8217;s &lt;a href="http://en.memory-alpha.org/wiki/Sub_Rosa_%28episode%29"&gt;family owns a (haunted) cottage&lt;/a&gt; on some old-Scottish settlement planet. The Maquis routinely refer to &#8220;our land,&#8221; which they presumably owned, and while an individual tribe may have collectively owned the land through a corporation, like the &lt;a href="http://en.wikipedia.org/wiki/Alaska_Native_Claims_Settlement_Act"&gt;Alaska Native Land Claims Settlement Act&lt;/a&gt;, or through a co-op, they clearly &#8220;owned&#8221; the land, just like anyone else owned land, while the Federation was the superseding government that could give that territory away to another sovereign party, much like the ceding of the Sudetenland or Guam. Any alternative situation (the government owning the land and renting it to the settlers?) is never alluded to and in any case the words stated (&#8220;our land&#8221;) clearly indicate private ownership is still very much part of the cultural zeitgeist. Then we have JJ Abram&#8217;s &lt;a href="http://en.memory-alpha.org/wiki/Star_Trek_%28film%29"&gt;&lt;em&gt;Star Trek&lt;/em&gt;&lt;/a&gt;&lt;em&gt; &lt;/em&gt;and it&#8217;s pretty unlikely that, what? The Federation owned that shack Kirk grew up in, that sweet &lt;a href="http://en.memory-alpha.org/wiki/Corvette"&gt;Corvette&lt;/a&gt; or that &lt;a href="http://en.memory-alpha.org/wiki/Shipyard_Bar"&gt;roadhouse bar&lt;/a&gt;? Those items sure looked privately owned. Some spaceships were &lt;a href="http://en.memory-alpha.org/wiki/Winston%27s_trading_vessel"&gt;privately owned&lt;/a&gt;. Finally, let&#8217;s not forget &lt;em&gt;Star Trek: Generations &lt;/em&gt;when Kirk says in the Nexus &#8220;This is my house. I sold it years ago.&#8221;&lt;/p&gt;
&lt;p&gt;Next: &lt;em&gt;The Federation is not true post scarcity economy&lt;/em&gt;: &lt;a href="http://en.memory-alpha.org/wiki/Tarsus_IV"&gt;famines routinely&lt;/a&gt; &lt;a href="http://en.memory-alpha.org/wiki/Cerberus"&gt;still exist&lt;/a&gt;, transportation lines are vital in moving around goods within the Federation. Transportation is a whole grey area in most post-scarcity economic works, at least the few I&#8217;ve read. The Federation might have enough food, but at any time some planet may well be starving or in need of &lt;a href="http://en.memory-alpha.org/wiki/Rachelis_system"&gt;medicine&lt;/a&gt; that needs to come from somewhere else.&lt;/p&gt;
&lt;p&gt;It seems pretty clear cut that jobs are optional. They explicitly state on many occasions that the Federation is based on a philosophy of &lt;a href="http://en.memory-alpha.org/wiki/Money"&gt;self improvement and cultural enrichment&lt;/a&gt;, and in any case we sure do run into a lot of &#8220;artists&#8221; in the Federation. I particularly love those &lt;a href="http://en.memory-alpha.org/wiki/The_Way_to_Eden_%28episode%29"&gt;hippies in TOS&lt;/a&gt;. The Federation seems a bit like Williamsburg&#8202;&#8212;&#8202;a lot of artists who don&#8217;t need to work. Or maybe more like the UK at the height of its social programs supporting artists. Let a million JK Rowlings bloom. It&#8217;s a bit weird, to me, that we&#8217;ve never seen people who sit around and literally do nothing, but then why would we? And, of course, we&#8217;ve certainly seen more than a few societies that are all chilled out and not doing much (&lt;a href="http://en.memory-alpha.org/wiki/Risa"&gt;Risa&lt;/a&gt;, etc).&lt;/p&gt;
&lt;p&gt;Next: &lt;em&gt;The Federation doesn&#8217;t use money. &lt;/em&gt;This is basically absolute. Kirk says it in Star Trek IV. Picard says it several times. &lt;a href="http://en.memory-alpha.org/wiki/You_Are_Cordially_Invited_%28episode%29"&gt;Quark mocks it to Rom&lt;/a&gt;. &lt;a href="http://en.memory-alpha.org/wiki/Federation_credit"&gt;Roddenberry put it down as a hard and fast rule&lt;/a&gt;. No theory of Star Trek economics can be real while ignoring this fact. It has to be addressed. It is the basis of all confusion and, honestly, interest in figuring it out at all.&lt;/p&gt;
&lt;p&gt;Money still exists, so do banks. &lt;a href="http://en.memory-alpha.org/wiki/Encounter_at_Farpoint_%28episode%29"&gt;Crusher buys fabric at Farpoint&lt;/a&gt;. DS9 makes mention of the&lt;a href="http://en.memory-alpha.org/wiki/Bank_of_Bolias"&gt;Bank of Bolias&lt;/a&gt;, on a Federation planet. &lt;a href="http://en.memory-alpha.org/wiki/In_the_Cards_%28episode%29"&gt;Nog loans Jake latinum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We also know there exists such a thing as the &lt;a href="http://en.memory-alpha.org/wiki/Federation_credit"&gt;Federation Credit&lt;/a&gt;. This presumably causes some confusion since they are routinely referred to like money (Kirk mentions that the Federation has invested 122,200 credits in Spock), and things are purchased for credits (Uhura buys a tribble, Quark occasionally accepts them at his bar).&lt;/p&gt;
&lt;p&gt;This would seem to be a giant contradiction to the lack of existence of money. We&#8217;ll get to that in a bit.&lt;/p&gt;
&lt;p&gt;There is still a ruling class, or classes&#8202;&#8212;&#8202;it is not perfectly-egalitarian in a communist manner. We have admirals and presidents and &lt;a href="http://en.memory-alpha.org/wiki/Kodos"&gt;governors&lt;/a&gt; and &lt;a href="http://en.memory-alpha.org/wiki/Delaplane"&gt;colony leaders&lt;/a&gt;. There are enlisted personnel in Starfleet and officers. Some are elected, some are appointed. Some Federation members were even &lt;a href="http://en.memory-alpha.org/wiki/Betazoid"&gt;hereditary nobilities&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There is still commerce (and even &lt;a href="http://en.memory-alpha.org/wiki/The_Gift_%28episode%29"&gt;Vulcan commerce&lt;/a&gt;), &lt;a href="http://en.memory-alpha.org/wiki/Cyrano_Jones"&gt;trade&lt;/a&gt;, &lt;a href="http://en.memory-alpha.org/wiki/Winston%27s_trading_vessel"&gt;trading vessels&lt;/a&gt;, and, we can assume, &lt;a href="http://en.memory-alpha.org/wiki/Dytallix_Mining_Company"&gt;corporations&lt;/a&gt;, in some form (though this may not be 100% definite&#8202;&#8212;&#8202;Dytallix is mined &lt;em&gt;for &lt;/em&gt;the Federation. It isn&#8217;t 100% clear it is &lt;em&gt;in &lt;/em&gt;the Federation).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Some thought exercises&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&#8217;s do a couple thought exercises.&lt;/p&gt;
&lt;p&gt;First: if you eat a meal at Sisko&#8217;s Creole Kitchen, do you pay? It seems almost definite that you don&#8217;t pay. If you paid, with anything, including Federation Credits, that would be money. You could barter, but it seems if the entire economy was a barter economy, we&#8217;d hear it. No, it seems almost certain that you go to eat at Sisko&#8217;s, you don&#8217;t pay, and Joseph Sisko doesn&#8217;t pay for his supplies, and his suppliers probably don&#8217;t pay for theirs.&lt;/p&gt;
&lt;p&gt;Next: Can everyone have anything? Anything at all? Is the Federation a perfect post scarcity society? The answer seems almost certainly no. If you went to a replicator, or a dealer, or the &lt;a href="http://en.memory-alpha.org/wiki/Utopia_Planitia_Fleet_Yards"&gt;Utopia Planatia Fleet Yards&lt;/a&gt; and asked for 10 million star ships, the answer would be no. More concretely, when the Borg attacked, and during the Dominion War, the Federation suffered from a serious starship shortage.&lt;/p&gt;
&lt;p&gt;Next: Imagine there&#8217;s some level of welfare benefits in every country, including America. That&#8217;s easy. That&#8217;s true. Imagine that, as the economy became more efficient and wealthy, the society could afford to give more money in welfare benefits, and chooses to do so. Next, imagine that this kept happening until society could afford to give the equivalent of something like $10 million US dollars at current value to every man, woman and child. And imagine that, over the time that took to happen, society got its shit together on education, health, and the dignity of labor. Imagine if that self-same society frowned upon the conspicuous display of consumption and there was a large amount of societal pressure, though not laws, on people that evolved them into not being obsessed with wealth. Is any of that so crazy? Is it impossible?&lt;/p&gt;
&lt;p&gt;I think that is basically what&#8217;s going on on Star Trek.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Theory of Star Trek Economics&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I believe the federation is a &lt;em&gt;proto-post scarcity society &lt;/em&gt;evolved from democratic capitalism. It is, essentially, European socialist capitalism vastly expanded to the point where no one has to work unless they want to.&lt;/p&gt;
&lt;p&gt;It is massively productive and efficient, allowing for the effective decoupling of labor and salary for the vast majority (but not all) of economic activity. The amount of welfare benefits available to all citizens is in excess of the needs of the citizens. Therefore, money is irrelevant to the lives of the citizenry, whether it exists or not. Resources are still accounted for and allocated in some manner, presumably by the amount of energy required to produce them (say Joules). And they are indeed credited to and debited from each citizen&#8217;s &#8220;account.&#8221; However, the average citizen doesn&#8217;t even notice it, though the government does, and again, it is not measured in currency units&#8202;&#8212;&#8202;definitely not Federation Credits. There is some level of scarcity&#8202;&#8212;&#8202;the Federation cannot manufacture a million starships, for example. This massive accounting is done by the Federation government in the background (witness the &lt;a href="http://en.memory-alpha.org/wiki/Homefront_%28episode%29"&gt;authority of the Federation President over planetary power supplies&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Because the welfare benefit is so large, and social pressure is so strong against conspicuous consumption, the average citizen never pays any attention to the amounts allocated to them, because it&#8217;s perpetually more than they need. But if they go crazy and try and purchase, say, 10 planets or 100 starships, the system simply says &#8220;no.&#8221;&lt;/p&gt;
&lt;p&gt;Citizens have no financial &lt;em&gt;need &lt;/em&gt;work, as their benefits are more than enough to provide a comfortable life, and there is, clearly, universal health care and education. The Federation has clearly taken the plunge to the other side of people&#8217;s fears about European socialist capitalism: yes, some people might not work. So What? Good for them. We think most still will.&lt;/p&gt;
&lt;p&gt;However, if they so choose they can also get a job. Many people do so for personal enrichment, societal pressure or through a desire to promote social welfare. Are those jobs paid? I would assume that yes, those jobs are &#8220;paid,&#8221; in the sense that your energy allocation is increased in the system, though, again, your allocation is large enough that you wouldn&#8217;t even really notice it. Why do I say this? The big challenge here is how does society get someone to do the menial jobs that cannot be done in an automated manner. Why would anyone? There are really only two options: there is some small, incremental increase in your hypothetical maximum consumption, thus appealing to the subconscious in some primal way, or massive societal pressure has ennobled those jobs in a way that we don&#8217;t these days. I opt for the former since it grounds everything in market economics, albeit on a bordering-on-infinitesimal manner, and that stands to reason, since &lt;em&gt;that&#8217;s how people talk &lt;/em&gt;in Star Trek. They talk about individual fulfillment, buying, selling, etc. No one was ever guilt-tripped into joining Starfleet, save by maybe their family.&lt;/p&gt;
&lt;p&gt;There is almost zero mention of central planning. It&#8217;s a capitalistic society, it&#8217;s benefits are just through the roof. Also, market economics = crowdsourced. That is, it&#8217;s not centrally planned. It&#8217;s democratic. It&#8217;s the only mechanism we know of to allocate resources that &lt;em&gt;isn&#8217;t &lt;/em&gt;centrally planned. The alternative is that all allocations are done algorithmically through a computer and the economy is completely decoupled from market forces, but that&#8217;s still basically central planning, and infinitely more complex than assuming there is still some semblance of market underpinning, much like we stayed on the gold standard for far longer than we needed to and we still have pennies even though we don&#8217;t need them. It&#8217;s a vestige of the past. It&#8217;s the constitutional monarchy.&lt;/p&gt;
&lt;p&gt;Either way, presumably, you take whatever job you want, and your benefits allocations are adjusted accordingly. But by and large you just don&#8217;t care, because the base welfare allocation is more than enough. Some people might care, some people might still care about wealth, such as&lt;a href="http://en.memory-alpha.org/wiki/Carter_Winston"&gt;Carter Winston&lt;/a&gt;. More power to them. They can go try and be &#8220;rich&#8221; in some non-Federation-issued currency. But most people just don&#8217;t care. After all, if you were effectively &#8220;wealthy&#8221; why would you take a job to become wealthy? It pretty much becomes the least likely reason to take a job.&lt;/p&gt;
&lt;p&gt;So, behind the scenes there is a massive internal accounting and calculation going on&#8202;&#8212;&#8202;&lt;em&gt;the economics still happen. &lt;/em&gt;They just aren&#8217;t based on a currency unit, and people don&#8217;t acquire things based upon a currency value. People just acquire things from replicators, from restaurants such as Sisko&#8217;s or coffee shops like &lt;a href="http://en.memory-alpha.org/wiki/Cosimo%27s"&gt;Cosimo&#8217;s&lt;/a&gt;, or, presumably, get larger things from dealerships or (more likely) factories. This could still be called &#8220;buying,&#8221; as a throwback.&lt;/p&gt;
&lt;p&gt;Two points here: first, the accounting is done in energy units, so that there is no need for currency. And why not? Resource allocation is mainly about energy anyhow, doubly so if it&#8217;s only robots building most things. And secondly, if you never had money, never saw it, and it didn&#8217;t physically exist to measure things, you&#8217;d pretty much tell people, &lt;a href="http://en.memory-alpha.org/wiki/Gillian_Taylor"&gt;like a certain 20th century oceanographer&lt;/a&gt;, that you &lt;a href="http://en.memory-alpha.org/wiki/Money"&gt;don&#8217;t have money in the 24th century&lt;/a&gt;, regardless of some automated accounting. This jibes with Federation people knowing what money is&#8202;&#8212;&#8202;because other societies have it&#8202;&#8212;&#8202;but saying they don&#8217;t use it. Because they don&#8217;t.&lt;/p&gt;
&lt;p&gt;However, you could still buy and sell things. You could take a thing from a replicator and go to someone else and &#8220;buy&#8221; something else with it. Why couldn&#8217;t you? It&#8217;s a free society. It&#8217;s essentially barter. Kirk may well have sold his house for a year&#8217;s supply of Romulan ale.&lt;/p&gt;
&lt;p&gt;Or Federation Credits.&lt;/p&gt;
&lt;p&gt;It is tempting to argue here that the massive accounting system uses a unit called the Federation Credit, but i don&#8217;t believe that&#8217;s the case. If it were, the credit would be too much like money because a) accounting is done in it, b) it is issued by a governing body (like a &lt;a href="http://en.wikipedia.org/wiki/Fiat_money"&gt;fiat currency&lt;/a&gt;) and c) it is fungible, i.e. you can already buy things with it and if you could buy things with it AND a and b were true, it would pretty much be a currency. This would fly in the face of Roddenberry&#8217;s absolute diktat that the Federation has no currency.&lt;/p&gt;
&lt;p&gt;I&#8217;m gonna make a bold new theory here. Federation Units are &#8220;Federation&#8221; the same way that American Cheese is American. It is simply descriptive. Currency was invented long before capitalism as a means to disintermediate trades: you wanted my grain, I didn&#8217;t want your cows, I wanted farmer Ted&#8217;s grapes. Rather than make every trade a 3, 4 or 5 way trade, we made a little certificate we all agreed was worth something to us and us only. This need would still occasionally crop up in the Federation, even without money. I believe the Federation Unit is a&lt;a href="http://en.wikipedia.org/wiki/Private_currency"&gt;private currency&lt;/a&gt;, developed by third parties to facilitate complex trades or trades outside the Federation. I believe that the Federation Unit is not actually underwritten or issued by the Federation. I think it is more akin to the &lt;a href="http://en.wikipedia.org/wiki/Calgary_Dollar"&gt;Calgary Dollar&lt;/a&gt; or the &lt;a href="http://en.wikipedia.org/wiki/Chiemgauer"&gt;Chiemgauer&lt;/a&gt;. Or &lt;a href="http://en.wikipedia.org/wiki/Bitcoin"&gt;bitcoin&lt;/a&gt;. This would solve so many problems. It would make it unequivocally true that the Federation doesn&#8217;t use money. It would give people a unit to use as reference when they say things are expensive. It would be a thing citizen&#8217;s could acquire, if they wanted to, through barter originally, then allowing them to use them to purchase things (like Tribbles or Holosuites) from people who elected to take them, since taking them is optional (witness Quark&#8217;s vacillations on whether he accepts them or not). It would make a nice proxy for talking about investment levels, such as when Kirk said how much the Federation had invested in Spock.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Foreign Reserves&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Additionally, I believe that the Federation acts like any current sovereign nation state and holds foreign reserves of currencies of other nations. It&#8217;s assumed that not all foreign trade is done through barter. The federation itself probably holds foreign reserves in foreign currency just as China holds US dollars and England keeps a reserve of Euros. Sisko at one point tells Quark he could have charged rent for the bar, but he chose not to. Presumably that would have been paid in latinum. Presumably the Federation would have just held onto it as foreign reserves. All evidence, in fact, points to the fact that the Federation operates as a nation and uses foreign reserves exactly as we do now. The Chinese government holds US Dollars but you don&#8217;t here a Chinese person say &#8220;we use dollars.&#8221; This is a &lt;em&gt;bit &lt;/em&gt;confusing by the episode in which the Federation &lt;a href="http://en.memory-alpha.org/wiki/The_Price_%28episode%29"&gt;offers 1.5 million Federation Credits for use of the Barzanian wormhole&lt;/a&gt;, but it doesn&#8217;t have to be contradictory. Federation Credits had value to the Barzanians, so the Federation could simply procure them from the issuer with its foreign reserves of other currencies at market rate.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Individual Can Have Money&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;An individual of the Federation can procure latinum by barter for goods, labor or, presumably Federation Credits, if they had them. I assume that there&#8217;s probably some black market value for Federation Credits just like any other currency, sovereign issued or not (you can buy a&lt;a href="http://en.wikipedia.org/wiki/Lewes_Pound"&gt;Lewes Pound&lt;/a&gt; on &lt;a href="http://www.ebay.com/sch/i.html?_odkw=%22stroud+pound%22&amp;amp;_osacat=0&amp;amp;_from=R40&amp;amp;_trksid=p2045573.m570.l1313&amp;amp;_nkw=%22lewes+pound%22&amp;amp;_sacat=0"&gt;eBay right now for $7.98&lt;/a&gt;). Perhaps its more legitimate and the Units are traded on a commodities exchange. It really doesn&#8217;t matter. As a Federation Citizen I can have gold pressed latinum, Federation Credits, &lt;a href="http://en.memory-alpha.org/wiki/Frang"&gt;Frangs&lt;/a&gt;, &lt;a href="http://en.memory-alpha.org/wiki/Darsek"&gt;Darseks&lt;/a&gt;, &lt;a href="http://en.memory-alpha.org/wiki/Isik"&gt;Isiks&lt;/a&gt;, &lt;a href="http://en.memory-alpha.org/wiki/Lek"&gt;Leks&lt;/a&gt;, or &lt;a href="http://en.memory-alpha.org/wiki/Quatloo"&gt;Quatloos&lt;/a&gt; in my wallet. I can have a wallet. I can buy things with &lt;a href="http://en.memory-alpha.org/wiki/Self-sealing_stem_bolt"&gt;Self Sealing Stem Bolts&lt;/a&gt; if I want. But none of that is in conflict with the fact that the Federation has no unit of currency, has no money, and my society is predominantly concerned with societal good and self improvement.&lt;/p&gt;
&lt;p&gt;Then there&#8217;s the matter of Quark&#8217;s bar. What&#8217;s up with that? He never seems to charge anyone for drinks, but is obsessed with money, and you can buy holosuites in latinum or Federation Credits, and you can bet on the Dabo table with Latinum. At first I thought there was a whole complex thing where Quark doesn&#8217;t charge Starfleet personnel because he made the mental calculation it was cheaper to give them drinks for free and keep accepting free rent from Sisko, but then I realized that doesn&#8217;t really work because he charges them for the Holosuites and Dabo tables. Then I realized: Quark&#8217;s is like any other casino. The drinks are free: they are a loss leader against the higher profits of the Dabo Table and Holosuites.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The Proto Post Scarcity Economy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The thing I love most about this theory is that it seems plausible for our future. &lt;a href="http://en.memory-alpha.org/wiki/New_World_Economy"&gt;Tom Paris said that a new world economy takes shape in the 22nd century&lt;/a&gt;. That might be a smidge optimistic but we already have a world economy, in one sense, so the &lt;em&gt;new &lt;/em&gt;one could be something only incrementally different from this one. Money went the way of the dinosaur, he said, and Ft. Knox was turned into a museum. Most of us are already off the gold standard, and it&#8217;s certainly not inconceivable in another 180 years we don&#8217;t use paper money at all, and a single currency has dominated the planet&#8202;&#8212;&#8202;the Dollar is already close&#8202;&#8212;&#8202;and it slowly fades into the background.&lt;/p&gt;
&lt;p&gt;From there, perhaps a cultural shift takes place as we realize that &#8220;everyone in a job&#8221; isn&#8217;t the same as a full economy, and we start to look for models beyond capitalism that aren&#8217;t all communist hoo-ha.&lt;/p&gt;
&lt;p&gt;I sort of love that Star Trek forces us to think about a society that has no money but still operates with individual freedom and without central planning. I love that democracy is still in place. I love that people can still buy and sell things. It&#8217;s &lt;em&gt;real. &lt;/em&gt;It&#8217;s a more realistic vision of post-capitalism than I have seen anywhere else. Scarcity still exists to some extant, but society produces more than enough to satisfy everyone&#8217;s basic needs. The frustrating thing is that &lt;em&gt;we pretty much do that now&lt;/em&gt;, we just don&#8217;t allocate properly. And allocating properly cannot be done via central planning.&lt;/p&gt;
&lt;p&gt;The only real &#8220;out there&#8221; requirement in all of this is a governmental layer higher than the nation, and indeed, higher than the planet. This doesn&#8217;t seem insane, I suppose, if we were to suddenly find ourselves not alone in the universe. And indeed we already have some measure of international government now. Moreover, the Federation clearly adheres to the &#8220;laws made as close to home as possible&#8221; routine, since as far as we can tell the Federation president really only has authority over Starfleet, Foreign Relations and power allocation and accounting. Virtually every other law we encounter in the Federation happens at the individual planet or colony level.&lt;/p&gt;
&lt;p&gt;It&#8217;s interesting to me because these are things we&#8217;re going to have to reckon with, I believe, in my lifetime. If robots do all the dirty work, and the US is hugely rich, does every single person really need a job? Are we going to let all of that money pile up in the 0.1% ruling elite, or can it be distributed to everyone? Does wealth being distributed to the people in an equal manner mean communism absolutely? Of course it doesn&#8217;t. The US isn&#8217;t communist. The UK isn&#8217;t communist. Denmark isn&#8217;t communist. What happens when the surplus is more than enough?&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 13 Feb 2014 22:04:25 -0800</pubDate>
      <link>https://medium.com/editors-picks/29bab88d50</link>
      <guid>https://medium.com/editors-picks/29bab88d50</guid>
    </item>
    <item>
      <title>Servo Layout Engine: Parallelizing the Browser // by Paul Rouget</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7237735'&gt;"Servo Layout Engine: Parallelizing the Browser // by Paul Rouget"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://paulrouget.com/e/servopres/'&gt;http://paulrouget.com/e/servopres/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;

&lt;p&gt;During FOSDEM, Josh Matthews talked about Servo.
 You can find his slides here: &lt;a href="http://www.joshmatthews.net/fosdemservo/"&gt;joshmatthews.net/fosdemservo&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;Video:&lt;/p&gt;
&lt;p&gt;
 
 http://mirrors.dotsrc.org/fosdem/2014/UD2218A/Saturday/Servo_building_a_parallel_web_browser.webm
 &lt;/p&gt;
 10 Feb 2014
 
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 01:59:01 -0800</pubDate>
      <link>http://paulrouget.com/e/servopres/</link>
      <guid>http://paulrouget.com/e/servopres/</guid>
    </item>
    <item>
      <title>A new take on an old industry., Drop the ego and prove "I could make that so much better"</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7238109'&gt;"A new take on an old industry., Drop the ego and prove "I could make that so much better""&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://blog.lawnstarter.com/post/76623724133/drop-the-ego-and-prove-i-could-make-that-so-much'&gt;http://blog.lawnstarter.com/post/76623724133/drop-the-ego-and-prove-i-could-make-that-so-much&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;p&gt;I mow lawns for a living, what do you do?&lt;/p&gt;
&lt;p&gt;Well, if you&#8217;re working on a startup it probably sounds a helluva lot cooler than that. &#160;Whether it was my ego, or insecurity I came very close to never even starting LawnStarter simply due to the industry it was in.&lt;/p&gt;
&lt;p&gt;After dropping out I was ready to work on something that sounded revolutionary. What I didn&#8217;t expect was to stumble upon an industry that needed a full system overhaul.&lt;/p&gt;
&lt;p&gt;In the very beginning of working on LawnStarter &#160;I almost always told myself and other people that this was a segue to make some cash until my &#8220;real&#8221; startup began. I mean, come on, clearly I wasn&#8217;t going to make some lawn care company!&lt;/p&gt;
&lt;p&gt;As weeks turned into months and progress became rather substantial I started to realize the only thing holding us back was my ego. I felt uncomfortable telling friends what we were doing (in my defense they gave me tons of shit), I undersold the opportunity, and worst of all I was honestly a bit embarrassed.&lt;/p&gt;
&lt;p&gt;Looking back, it couldn&#8217;t be clearer that I had fallen into a mindset that is all too familiar in our community.&lt;/p&gt;
&lt;p&gt;&#160;Why the hell not do a startup to try to change the lawn care industry? It&#8217;s a massive industry that could really use some help!&lt;/p&gt;
&lt;p&gt;For some reason, I bought into this premium that our community puts on companies that produce gimmicky technology and raise massive rounds without having any real revenue streams. I got so caught up in this mentality that I was literally embarrassed to be working on a company that was making money in a less than sexy industry. Seems ass-backwards to me, and if I had simply ignored my ego for 10 minutes, I would have recognized how ridiculous I was for being embarrassed.&lt;/p&gt;
&lt;p&gt;Over the past 5 months I&#8217;ve realized just how many opportunities there are to make really shitty industries better. People are willing to pay for a better experience, think &lt;a href="http://homejoy.com"&gt;Homejoy&lt;/a&gt; and &lt;a href="http://moveline.com"&gt;Moveline&lt;/a&gt; (hopefully one day somebody puts &lt;a href="http://lawnstarter.com"&gt;Lawn Starter&lt;/a&gt; in that group). Even with money to be made and awesome companies to be built it seems to me like our egos and insecurities are holding us and progress back in dozens of not so attractive industries. Why not ride the wave of awesome customer experience and try to put your stamp on an industry that hasn&#8217;t changed in decades?&lt;/p&gt;
&lt;p&gt;While everyone is trying to make the next facebook or snapchat - which is cool, I use both of these a lot - you could be trying to reinventing an industry nobody else wants to touch.&lt;/p&gt;
&lt;p&gt;We all have a list of things or industries that &#8220;we could make so much better&#8221;. For me it was lawn care since high school. &#160;I&#8217;m finally putting my money where my mouth was and I look forward to seeing if I was right.&lt;/p&gt;
&lt;p&gt;&#160;Me, I&#8217;ll be&#160;&lt;a href="http://lawnstarter.com/fairfax/"&gt;mowing lawns in Fairfax&lt;/a&gt; and dozens of other places. Where will you be?&lt;/p&gt;
&lt;p&gt;-Steve&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 04:17:48 -0800</pubDate>
      <link>http://blog.lawnstarter.com/post/76623724133/drop-the-ego-and-prove-i-could-make-that-so-much</link>
      <guid>http://blog.lawnstarter.com/post/76623724133/drop-the-ego-and-prove-i-could-make-that-so-much</guid>
    </item>
    <item>
      <title>De La Soul to Make Entire Catalog Available for Free for 25 Hours | Music News | Rolling Stone</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7238287'&gt;"De La Soul to Make Entire Catalog Available for Free for 25 Hours | Music News | Rolling Stone"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.rollingstone.com/music/news/de-la-soul-to-make-entire-catalog-available-for-free-20140213'&gt;http://www.rollingstone.com/music/news/de-la-soul-to-make-entire-catalog-available-for-free-20140213&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;
&lt;div&gt;
 
 
 &lt;div&gt;
 &lt;!-- &lt;a class="thickbox imageLink" title="" href="http://assets-s3.rollingstone.com/assets/images/story/de-la-soul-to-make-entire-catalog-available-for-free-20140213/delasoul-600-1392321774.jpg"&gt; --&gt;
 
 &lt;!-- &lt;/a&gt; --&gt;
 &lt;p&gt;De La Soul&lt;/p&gt;
 
 &lt;p&gt;Robbie Jeffers&lt;/p&gt;
 &lt;/div&gt;
 
 &lt;div&gt;
 
 &lt;p&gt;February 13, 2014 4:35 PM ET&lt;/p&gt;
 &lt;/div&gt;
 
 
 
 
 &lt;p&gt;In honor of next month's 25th anniversary of their debut album &lt;em&gt;3 Feet High and Rising&lt;/em&gt;, &lt;a href="http://www.rollingstone.com/music/artists/de-la-soul"&gt;De La Soul&lt;/a&gt;&#160;are making their entire catalog available for free download for 25 hours on the &lt;a href="http://www.wearedelasoul.com"&gt;group's website&lt;/a&gt;. The download bonanza will begin on Friday, February 14th at 11 a.m. EST until Saturday at noon.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rollingstone.com/music/pictures/10-unseen-photos-from-the-de-la-soul-archives-20140214"&gt;Check out 10 Unseen Photos Included in De La Soul's Album Downloads&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;"It's about allowing our fans who have been looking and trying to get a hold of our music to have access to it," De La Soul member Posdnuos tells &lt;em&gt;Rolling Stone&lt;/em&gt;. "It's been too long where our fans haven't had access to everything. This is our way of showing them how much we love them."&lt;/p&gt;
&lt;p&gt;The same things that made &lt;em&gt;3 Feet High&lt;/em&gt; and other De La albums so influential &#8212;&#160;its creative, if not fully licensed, use of a myriad of samples &#8212;&#160;has also prevented the group's work from appearing on many digital platforms. "It's been a trying journey," admits Posdnuos. "We've been blessed to be in the &lt;a href="http://www.wnyc.org/story/122544-de-la-soul-makes-library-congress-national-registry/"&gt;Library of Congress&lt;/a&gt;, but we can't even have our music on iTunes. We've been working very hard to get that solved." The rapper points to frequent personnel changes at record labels and hazy language in early contracts that have led to long delays in properly clearing the group's catalog.&#160;&lt;/p&gt;
&lt;p&gt;The release of the group's catalog is the first of numerous upcoming projects. In a few weeks, they'll post new songs to their site, with&#160;&lt;em&gt;You're Welcome, &lt;/em&gt;their first album since 2004's&lt;em&gt; The Grind Date,&lt;/em&gt;&#160;expected to be&#160;released before summer. Next month will also see the release of &lt;em&gt;Preemium Soul on the Rocks&lt;/em&gt;, a six-song EP with three beats each from DJ Premier and Pete Rock. The group is also planning a visit to Detroit to work on an unreleased beat from J Dilla, the prolific producer who passed away in 2006. "Dilla was the Tupac of producers," says Posdnuos. "He has so many unreleased things that no one has heard. His family knows how vital and important an ingredient his music was to our work."&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.rollingstone.com/music/lists/500-greatest-albums-of-all-time-20120531/de-la-soul-3-feet-high-and-rising-20120524"&gt;Where does &lt;em&gt;3 Feet High and Rising&lt;/em&gt; rank on&#160;&lt;em&gt;Rolling Stone's&lt;/em&gt;&#160;500 Greatest Albums of All Time?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Asked about the status of &lt;em&gt;You're Welcome&lt;/em&gt;, an album originally scheduled for release last year, Posdnuos says that it's "coming along amazingly," but points to self-criticism in its delay. "We have tons of music, but we're our own worst critics," admits the rapper. "Certain groups have too many 'yes men.' In our group, we have too many 'no men.' When we look back on some of the stuff we have, we're like, 'Yo, we need to just put this out.' The album is still called &lt;em&gt;You're Welcome&lt;/em&gt;, but we also have this whole other album that we're working on that&#8230;Wooo, I wish I could talk about it."&lt;/p&gt;
&lt;p&gt;Twenty-five years into their career, the group is ready, if somewhat cautiously, to adopt the more-is-more release schedule of its younger peers. "We're just getting in the mode of constantly giving people new music," says Posdnuos. "I'll be the first to say that not everyone can do it. You can put out a new mixtape every week, but it can dilute what you're putting out because you haven't had enough time to see what's going on with your life to write something from a different angle. With us, we've sat a long time without releasing an album. It's high time we start releasing a bunch of stuff because it's there."&lt;/p&gt; 
 
 
 &lt;/div&gt;
&lt;p&gt;To read the new issue of &lt;em&gt;Rolling Stone&lt;/em&gt; online, plus the entire RS archive: &lt;a href="http://archive.rollingstone.com/"&gt;Click Here&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 05:32:23 -0800</pubDate>
      <link>http://www.rollingstone.com/music/news/de-la-soul-to-make-entire-catalog-available-for-free-20140213</link>
      <guid>http://www.rollingstone.com/music/news/de-la-soul-to-make-entire-catalog-available-for-free-20140213</guid>
    </item>
    <item>
      <title>Mark Shuttleworth  &#187; Blog Archive   &#187; Losing graciously</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7238322'&gt;"Mark Shuttleworth  &#187; Blog Archive   &#187; Losing graciously"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://www.markshuttleworth.com/archives/1316'&gt;http://www.markshuttleworth.com/archives/1316&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;
&lt;div&gt;
 
 &lt;div&gt;
 
 Friday, February 14th, 2014
 &lt;/div&gt;
 &lt;div&gt;
 &lt;p&gt;With Bdale Garbee&#8217;s casting vote this week, the Debian technical committee finally settled the question of init for both Debian and Ubuntu in favour of systemd.&lt;/p&gt;
&lt;p&gt;I&#8217;d like to thank the committee for their thoughtful debate under pressure in the fishbowl; it set a high bar for analysis and experience-driven decision making since most members of the committee clearly took time to familiarise themselves with both options. I know the many people who work on Upstart appreciated the high praise for its code quality, rigorous testing and clarity of purpose expressed even by members who voted against it; from my perspective, it has been a pleasure to support the efforts of people who want to create truly great free software, and do it properly. Upstart has served Ubuntu extremely well &#8211; it gave us a great competitive advantage at a time when things became very dynamic in the kernel, it&#8217;s been very stable (it is after all the init used in both Ubuntu and RHEL 6 &lt;img src="http://www.markshuttleworth.com/wp-includes/images/smilies/icon_wink.gif"&gt; and has set a high standard for Canonical-lead software quality of which I am proud.&lt;/p&gt;
&lt;p&gt;Nevertheless, the decision is for systemd, and given that Ubuntu is quite centrally a member of the Debian family, that&#8217;s a decision we support. I will ask members of the Ubuntu community to help to implement this decision efficiently, bringing systemd into both Debian and Ubuntu safely and expeditiously. It will no doubt take time to achieve the stability and coverage that we enjoy today and in 14.04 LTS with Upstart, but I will ask the Ubuntu tech board (many of whom do not work for Canonical) to review the position and map out appropriate transition plans. We&#8217;ll certainly complete work to make the new logind work without systemd as pid 1. I expect they will want to bring systemd into Ubuntu as an option for developers as soon as it is reliably available in Debian, and as our default as soon as it offers a credible quality of service to match the existing init.&lt;/p&gt;
&lt;p&gt;Technologies of choice evolve, and our platform evolves both to lead &#160;(today our focus is on the cloud and on mobile, and we are quite clearly leading GNU/Linux on both fronts) and to embrace change imposed elsewhere. Init is contentious because it is required for both developers and system administrators to understand its quirks and capabilities. No wonder this was a difficult debate, the consequences for hundreds of thousands of people are very high. From my perspective the fact that good people were clearly split suggests that either option would work perfectly well.&#160;I trust the new stewards of pid 1 will take that responsibility as seriously as the Upstart team has done, and be as pleasant to work with. And&#8230; onward.&lt;/p&gt;
 
 &lt;p&gt;
 This entry was posted
 on Friday, February 14th, 2014 at 1:01 pm and is filed under &lt;a href="http://www.markshuttleworth.com/archives/category/ubuntu"&gt;ubuntu&lt;/a&gt;.
 You can follow any responses to this entry through the
 &lt;a href="http://www.markshuttleworth.com/archives/1316/feed"&gt;RSS 2.0&lt;/a&gt; feed.
 You can &lt;a href="#respond"&gt;leave a response&lt;/a&gt;, or &lt;a href="http://www.markshuttleworth.com/archives/1316/trackback"&gt;trackback&lt;/a&gt; from your own site.
 &lt;/p&gt;
 &lt;/div&gt;
 &lt;/div&gt;
&lt;p&gt;
Comments are filtered through &lt;a href="http://www.akismet.com/"&gt;Akismet&lt;/a&gt; for spam
detection. Please follow the Ubuntu Code of Conduct - your opinions are
welcome but please keep them polite and constructive.
&lt;/p&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 05:32:23 -0800</pubDate>
      <link>http://www.markshuttleworth.com/archives/1316</link>
      <guid>http://www.markshuttleworth.com/archives/1316</guid>
    </item>
    <item>
      <title>Schneier on Security: The Insecurity of Secret IT Systems</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7238750'&gt;"Schneier on Security: The Insecurity of Secret IT Systems"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html'&gt;https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;td&gt;&#160;&lt;/td&gt;
&lt;td&gt;
&lt;!-- begin page content --&gt;
&lt;div&gt;
&lt;!-- robots content="noindex" --&gt;

&lt;p&gt;A blog covering security and security technology.&lt;/p&gt;
&lt;p&gt;
&lt;a href="https://www.schneier.com/blog/archives/2014/02/gopherset_nsa_e.html"&gt;&#171; GOPHERSET: NSA Exploit of the Day&lt;/a&gt; |
&lt;a href="https://www.schneier.com/blog/"&gt;Main&lt;/a&gt;
| &lt;a href="https://www.schneier.com/blog/archives/2014/02/my_talk_on_the.html"&gt;My Talk on the NSA &#187;&lt;/a&gt;
&lt;/p&gt;
&lt;!-- /robots --&gt;
&lt;p&gt;&lt;strong&gt;February 14, 2014&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;The Insecurity of Secret IT Systems&lt;/h2&gt;
&lt;p&gt;We now know a lot about the security of the Rapiscan 522 B x-ray system used to scan carry-on baggage in airports worldwide. Billy Rios, director of threat intelligence at Qualys, got himself one and analyzed it. And &lt;a href="http://www.wired.com/threatlevel/2014/02/tsa-airport-scanners/"&gt;he&lt;/a&gt; &lt;a href="http://www.darkreading.com/attacks-breaches/tsa-carry-on-baggage-scanners-easy-to-ha/240166058"&gt;presented&lt;/a&gt; his results at the Kaspersky Security Analyst Summit this week.&lt;/p&gt;
&lt;p&gt;It&#8217;s worse than you might have expected:&lt;/p&gt;
 It runs on the outdated Windows 98 operating system, stores user credentials in plain text, and includes a feature called Threat Image Projection used to train screeners by injecting .bmp images of contraband, such as a gun or knife, into a passenger carry-on in order to test the screener's reaction during training sessions. The weak logins could allow a bad guy to project phony images on the X-ray display. 
&lt;p&gt;While this is all surprising, it shouldn&#8217;t be. These are the same sort of problems we saw in proprietary &lt;a href="https://www.usenix.org/legacy/events/evt08/tech/full_papers/aviv/aviv_html/"&gt;electronic&lt;/a&gt; &lt;a href="https://www.usenix.org/legacy/event/evt07/tech/full_papers/feldman/feldman_html/"&gt;voting&lt;/a&gt; &lt;a href="http://www.cs.berkeley.edu/~daw/papers/sarasota07.pdf"&gt;machines&lt;/a&gt;, or computerized &lt;a href="https://spqr.eecs.umich.edu/papers/b1kohFINAL2.pdf"&gt;medical equipment&lt;/a&gt;, or &lt;a href="http://www.autosec.org/pubs/cars-usenixsec2011.pdf"&gt;computers in automobiles&lt;/a&gt;. Basically, whenever an IT system is designed and used in secret &#8211; either actual secret or simply away from public scrutiny &#8211; the results are pretty awful.&lt;/p&gt;
&lt;p&gt;I used to decry secret security systems as "&lt;a href="https://www.schneier.com/crypto-gram-0205.html#1"&gt;security by obscurity&lt;/a&gt;." I now say it more strongly: "obscurity means insecurity."&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.schneier.com/essay-062.html"&gt;Security is a process&lt;/a&gt;. For software, that process is iterative. It involves defenders trying to build a secure system, attackers -- criminals, hackers, and researchers -- defeating the security, and defenders improving their system. This is how all mass-market software improves its security. It&#8217;s the best system we have. And for systems that are kept out of the hands of the public, that process stalls. The result looks like the Rapiscan 522 B x-ray system.&lt;/p&gt;
&lt;p&gt;Smart security engineers open their systems to public scrutiny, because that&#8217;s how they improve. The truly awful engineers will not only hide their bad designs behind secrecy, but try to belittle any negative security results. Get ready for Rapiscan to claim that the researchers had old software, and the new software has fixed all these problems. Or that they&#8217;re only theoretical. Or that the researchers themselves are the problem. We&#8217;ve seen it all before.&lt;/p&gt;
&lt;p&gt;Tags: &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=air%20travel"&gt;air travel&lt;/a&gt;, &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=disclosure"&gt;disclosure&lt;/a&gt;, &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=economics%20of%20security"&gt;economics of security&lt;/a&gt;, &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=obscurity"&gt;obscurity&lt;/a&gt;, &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=secrecy"&gt;secrecy&lt;/a&gt;, &lt;a href="https://www.schneier.com/cgi-bin/mt/mt-search.cgi?tag=security%20engineering"&gt;security engineering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html"&gt;Posted on February 14, 2014 at 6:50 AM&lt;/a&gt;
&#8226; &lt;a href="https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html#comments"&gt;28 Comments&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To receive these entries once a month by e-mail, &lt;a href="https://www.schneier.com/crypto-gram-sub.html"&gt;sign up&lt;/a&gt; for the &lt;a href="https://www.schneier.com/crypto-gram.html"&gt;Crypto-Gram Newsletter&lt;/a&gt;.&lt;/em&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;In Europe they use quantum key cryptography in their voting systems:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.idquantique.com/news-and-events/press-releases.html?id=109"&gt;http://www.idquantique.com/news-and-events/...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Europe, the struggle to create a public realm out of the monarchy's private government extends back to populist movements in the Middle Ages such as the Ranters and Diggers and Bretheren of the Free Spirit; they seem more likely to view their government as something that really belongs to them, with the potential to work for them.&lt;/p&gt;
&lt;p&gt;In the United States, our struggle to create a public government really begins with the 14th Amendment. Between then and the civil rights era is when we obtained universal suffrage. The franchise was highly exclusive in the Revolutionary era -- so much so that "WE, the People" probably only represents the will of 5-7% of the population at the time. Since then, the conservative battle cry has been "smaller government" and "privatization." Notwithstanding that we had private government once before -- when we were owned by the Britain -- we have this myth of obtaining self rule by fighting tyranny, when, in fact, the road to self rule has been a much more complicated struggle. But the myth prevails over history.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;The 522B is ancient - at least 5-10 years old. &lt;a href="http://aerodetection.com/rapiscan-522b/"&gt;http://aerodetection.com/rapiscan-522b/&lt;/a&gt; says the units it has are 8-10 years old.&lt;/p&gt;
&lt;p&gt;I'd be much more interested in the Rapiscan 620DV which appears to be the model used at major airports in Europe.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;I still remember the first time I ran smack into security-by-obscurity. My boss at the time put me in charge of the most secure system we had at work. It was kept behind a heavy locked door and I was admitted only after a strong lecture on how important it was to keep it as secure as possible.&lt;/p&gt;
&lt;p&gt;Even behind a closed door, he felt it necessary to whisper: "and the password is 'secret', which of course we can't tell anybody and they would never guess..."&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;The idea of continual improvement driven by the hostile nature of the operating environment seems very similar to evolution in the natural world. I don't mean analagous to, I mean another form of evolution, survival of the fittest. Obscurity, obfuscation, and political lobbying are all attempts to exclude a product from the security evolutionary process but even at the very highest levels - government printed currency, NSA information - it is impossible to isolate anything from security evolutionary forces.&lt;br&gt;
It is better to embrace this process and to continually iteratively evolve and grow stronger and wiser during the process than to try and hold the driving forces of evolution at bay. The driving threat forces of security evolution themselves evolve, adapt and get stronger over time. You can hold them at bay temporarily through obscurity and obfuscation, but it then become only a matter of for how long? e.g. Sony Playstation 3&lt;br&gt;
The Playstation 3 is an interesting example in that it was finally cracked due to sloppy cryptography implementation ( what was meant to be a random number generator was implemented as a constant ). I say interesting because peer / open review would have exposed the obvious flaw and it would have been fixed. In this case it was the obscurity and obfuscation that ultimately was responsible for the security being broken.&lt;br&gt;&lt;a href="https://www.schneier.com/blog/archives/2011/01/sony_ps3_securi.html"&gt;https://www.schneier.com/blog/archives/2011/01/sony_ps3_securi.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;OK, so if Kaspersky or Symantec or TrendMicro or Norton doesn't hand over all their source code I shouldn't buy the product... right? &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;OK, go ahead and post all your passwords and SSN's and your credit card info. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@beatty Well ... yes, although not just because you don't have source code. Virus scanners typically only search for known exploit code (and perhaps a few variations on it). They're fundamentally reactive and in my view not worth the effort.&lt;/p&gt;
&lt;p&gt;@vincent You jest. The difference between secret paswords and secret algorithms has been explained to death already.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@vincent: not really. That is yours, your privacy for your own usage/protection, but when somebody offer for public usage some kind of security product, it should be available for public scrutiny on potential security threats/weaknesses and invasion of privacy (like recently Samsung on smart TV agreed to provide led indicator when camera is on. I hope that activation is hardware, not software). &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;The meta-problem here is that many (in my experience most) software "engineers" are incompetent and do not qualify as engineers. The result is that the typical software system sucks badly. &lt;/p&gt;
&lt;p&gt;This machine is just a standard example. However though Windows (no matter what version) was suitable as an embedded OS has no business working on software or surrounding systems.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@beatty -- you shouldn't buy their products if you don't trust them. I don't and the systems my family uses haven't had an problems. But they don't hide what they're doing and they have some pretty vigorous competition.&lt;/p&gt;
&lt;p&gt;@vincent -- I hope you don't think there is anything especially "secure" about your SSN. But hiding secret information used to access a system is different than hiding or obscuring information about the the system itself, which is what this post is about.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;No, this just another cherry-picked instance of failed product development that is being used for self-serving purposes. It's easy, isn't it, to swoop in after the fact and point out everything that went wrong. Do you even know what the original threat model was? For all you know this failure was the RESULT of anal security engineers that suffocated product development until the project collapsed. You don't know. You pick up on all this pop news junk and fling it anyway you want. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Oh, it gets better. I keep thinking that if you control the software, you can probably control where the X-Ray beam is at. And observe that TSA agents walk back and forth through the scanner all the time.&lt;/p&gt;
&lt;p&gt;So you keep it ON bouncing back and forth scanning at roughly chest level when not actually scanning the full body. When you see something metallic (say, a TSA badge), you immediately drop the emitter down to crotch level for the next 10 seconds...&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;"For all you know this failure was the RESULT of anal security engineers"&lt;/p&gt;
&lt;p&gt;Win98 and plaintext passwords are not the result of anal security engineers. Unless, of course you mean actual anal security engineers, in which case it is not surprising, as they only know stuff about how to use a variety of rubber corks.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;I somewhat disagree that engineers try to hide their bad designs through obscurity. I don't believe they even think about security. &lt;/p&gt;
&lt;p&gt;There seems to be this idea of "Well, why would anyone attack that?" that is prevalent far too often. It's why we have empty passwords on internet-facing SCADA stuff, hopelessly outdated operating systems that can't be updated on embedded systems, etc. Nobody thinks like attackers. Closed systems are perfectly acceptable to people who don't think they will ever be a target. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;It would be like me inventing my own door lock, and because no one has seen one before, I can assume I'm protected. (Of course this could also be said - Since no one has attempted to break into it yet, I hope I'm protected)&lt;/p&gt;
&lt;p&gt;Rather than the alternative&lt;/p&gt;
&lt;p&gt;Buying a door lock that has been proven in the real world. Paying attention to security bulletins so that if an exploit is found, I can replace it with a fixed version. &lt;/p&gt;
&lt;p&gt;@vincent - Either way, I'm not giving you my key.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@Jason. All you said is valid when you are random target making you more protected than next target in the phishing scheme. Just to bring some relax mood: "Two young ladies were in the jungle and spotted lion. One start running, another asked is she really could run faster than lion. Nope, she reply. Just faster than you..." If you are NOT random target, all depends on the actor's resources available to break your security (psychical or informational): local thugs, organized crime, LEA local or state, LEA federal, foreign agents, etc. &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@vas pup:&lt;/p&gt;
&lt;p&gt;Well, now we're just getting deeper into security concepts. I don't think the threat of a targeted attack is a reason to abandon tried and tested methods. I think it's a reason to bring in additional expertise, add some additional layers of protection. (Instead of just a good door lock, add a surveillance system, alarm system, maybe a stronger door, bars on windows). The security system you use, no matter what you're protecting has a cost that must be weighed against the risk, and to be effective almost certainly will be layered.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;@ Bruce,&lt;/p&gt;
&lt;ul&gt;&lt;i&gt;The truly awful engineers will not only hide their bad designs behind secrecy, but try to belittle any negative security results&lt;/i&gt;&lt;/ul&gt;
&lt;p&gt;That statment is a little unfair, because when it comes to hardware the closer you are to the metal, generaly the more competent you are as an "engineer".&lt;/p&gt;
&lt;p&gt;The problem generaly starts and ends with managment, because,&lt;/p&gt;
&lt;p&gt;1, Like quality, security has to be there fully functional from project day 0.&lt;/p&gt;
&lt;p&gt;2, Security processes, training etc "cost".&lt;/p&gt;
&lt;p&gt;You have to be an "old engineer" to remember the days befor quality processes were considered part and parcel of the job. And unfortunatly the area quality processes are least frequently found is "software engineering". Just take any modern software methodology and find the bits that are actually about "Quality Assurance"...&lt;/p&gt;
&lt;p&gt;The simple answer is all you will find is an illusion or mirage paying lip service to any real quality process. It's also the reason grizzled old vetrans of software coding will tell you that most software development methodologies are at best "make work" and that you will get better results where team members share a common non adveserial goal and thus trust each other.&lt;/p&gt;
&lt;p&gt;And when you look back at the development of QA systems it was the teams who bought into it and trusted the others that the most benifit was seen.&lt;/p&gt;
&lt;p&gt;The reason QA actually got going was two fold,&lt;/p&gt;
&lt;p&gt;1, Managment saw the financial benifit before the factory door.&lt;/p&gt;
&lt;p&gt;2, Those who saw benifit used QA as a part of purchase decision.&lt;/p&gt;
&lt;p&gt;Neither of these conditions is true currently for "security" thus managment treat it as "a non productive inefficiency" and thus "managment mantra" says it should be ruthlessly expunged from the work process "to increase productivity"&lt;/p&gt;
&lt;p&gt;The way to get security into the design process as a norm is by making having it the most profitable path to walk, that way as with QA "managment mantra" will change.&lt;/p&gt;
&lt;p&gt;Untill that time blaiming other people for "keeping their jobs" is a little unfair.&lt;br&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;&lt;br&gt;
I think the article is dead wrong about the threat projection system being a big issue.&lt;/p&gt;
&lt;p&gt;The purpose of this system is to keep the screener alert. In a normal airport, a contraband item like a bomb, gun, etc. might occur at most once a day. Rare contraband like a bomb is probably less than once in a lifetime. Hence it would be natural for a screener to simply 'pass' all luggage, even if they are being diligent. Adding these "false positives" gives the screener something to do, and increases security by "impedence matching" the task at hand to the psychology of the operator.&lt;/p&gt;
&lt;p&gt;It's true that an attacker could have the system inject innocuous items, or perhaps have it inject items at a very high rate. I suspect that either of these new behaviors would be quickly noticed.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Actually, in any airport, contraband like this would occur at most 24hrs/airport-lockdown-time per day.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Looks like I was wrong. The other article gives more details about the system, and it is pretty crappy.&lt;/p&gt;
&lt;p&gt;It's one thing to superimpose false images that are removed after alarming on them. It's another entirely to allow some other person to choose the time when the false image will be shown, and to replace rather than modify the image.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Hacking is illegal. Selling crappy secured soft- / hardware isn't (wearing my black and white glasses now).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;"Upon seeing a weapon on the screen, operators are supposed to push a button to notify supervisors of the find. But if the image is a fake one that was superimposed, a message appears onscreen telling them so and advising them to search the bag anyway to be sure. If a fake image of a clean bag is superimposed on screen instead, the operator would never press the button, and therefore never be instructed to hand-search the bag."&lt;/p&gt;
&lt;p&gt;If the training software assumes that the .bmp images have simulated contraband, one would think that the training software would do something if the operator doesn't press the button when a .bmp is displayed. Or does the attacker who introduces a "clean" .bmp file also modify the software?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Thank you, Bruce... "Obscurity means insecurity" is exactly what I've always meant, when I said "closed source by definition is insecure".... only open source &lt;i&gt;can&lt;/i&gt; be secure (which doesn't guarantee that it is, only that it's at least possible).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;What really worries me is that we haven't really learned a lot. &lt;/p&gt;
&lt;p&gt;The 1983 movie &lt;a href="http://www.imdb.com/title/tt0086567/"&gt;wargames&lt;/a&gt; could happen today. Maybe not in the US (although I doubt that), but there are more countries in the world. The problem with security by obscurity is that you just don't know whether there is a &lt;a href="http://en.wikipedia.org/wiki/Wargames_%28movie%29"&gt;WOPR&lt;/a&gt; that has a backdoor with the login "Joshua".&lt;/p&gt;
&lt;p&gt;How secure are these nucleair platform systems? Just look at the stoxnet virus. Is "the west" capable of protecting itself against this kind of things? I don't think so. (looking at this news item)&lt;/p&gt;
&lt;p&gt;And is the JSF/F-35 capable of dropping a nuke? It also contains 20 mln lines of C++ code.&lt;/p&gt;
&lt;p&gt;I think this is way more worrying than any "terrorist attack".&lt;/p&gt;
&lt;p&gt;I don't know. Maybe it's just BS that I am talking about. I am not a security expert. But I do know that you can't trust computers. Not yesterday, today or tomorrow.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Bruce,&lt;/p&gt;
&lt;p&gt;Saw you at SAS, thanks for speaking!&lt;/p&gt;
&lt;p&gt;Did you notice on the way out that all the machines in the Punta Cana airport were the make and model Billy and Terry evaluated?&lt;/p&gt;
&lt;p&gt;Mike&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;Your comment about engineers (smart vs awful) was unfortunate. Well-established companies such as Diebold produce software with a workforce that is salaried and university-educated. The software produced usually conforms to management's priorities. If QA isn't isn't part of the software process, the software produced will tell the tale. The company with good management and a weak engineering staff is a rare beast. Unicorn rare. If Diebold has crappy software, then Diebold is to blame, not some mythical bumbler.&lt;/p&gt;
&lt;p&gt;To say nothing of the procurement process.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;a&gt;&lt;/a&gt;
&lt;div&gt;
&lt;p&gt;True of Diebold and Rapiscan!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
 
&lt;!-- end page content --&gt;
&lt;!-- robots content="noindex" --&gt;
&lt;p&gt;Schneier.com is a personal website. Opinions expressed are not necessarily those of &lt;a href="https://www.co3sys.com/"&gt;Co3 Systems, Inc.&lt;/a&gt;.
&lt;/p&gt;
&lt;/td&gt;
&lt;td&gt;&#160;&lt;/td&gt;
&lt;td&gt;
&lt;!-- /robots --&gt;
&lt;/td&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 06:50:38 -0800</pubDate>
      <link>https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html</link>
      <guid>https://www.schneier.com/blog/archives/2014/02/the_insecurity_2.html</guid>
    </item>
    <item>
      <title>IP Address Details - ipinfo.io</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7239333'&gt;"IP Address Details - ipinfo.io"&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 14 Feb 2014 08:30:18 -0800</pubDate>
      <link>http://ipinfo.io/</link>
      <guid>http://ipinfo.io/</guid>
    </item>
    <item>
      <title>solo.im - a single founder peer group</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7239385'&gt;"solo.im - a single founder peer group"&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Fri, 14 Feb 2014 08:39:18 -0800</pubDate>
      <link>http://solo.im/</link>
      <guid>http://solo.im/</guid>
    </item>
    <item>
      <title>Stephen Law: How the US Treasury imposes sanctions on me and every other "Stephen Law" on the planet - my letter to OFAC</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7240777'&gt;"Stephen Law: How the US Treasury imposes sanctions on me and every other "Stephen Law" on the planet - my letter to OFAC"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://stephenlaw.blogspot.com/2014/02/how-us-treasury-imposes-sanctions-on-me.html'&gt;http://stephenlaw.blogspot.com/2014/02/how-us-treasury-imposes-sanctions-on-me.html&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
&lt;i&gt;Right, here's another thing I am getting off my chest - email letter to OFAC (edited slightly from version sent).&lt;/i&gt;&lt;p&gt;Dear OFAC&lt;/p&gt;
&lt;p&gt;This correspondence is copied to my UK Member of Parliament The Right Hon. Andrew Smith. Please copy him into your reply.&lt;/p&gt;
&lt;p&gt;My name is "Stephen Law". The name "Stephen Law" appear on OFAC's "specially designated nationals" list:&lt;/p&gt;
&lt;p&gt;Here is the actual OFAC listing for "Stephen Law", alias of "Steven Law"&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ofac.data-list-search.com/Entities/ByName/steven-law"&gt;https://ofac.data-list-search.com/Entities/ByName/steven-law&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This person is Burmese and is suspected by US Treasury of drug trafficking. He is the son of Lo Hsing Han (dubbed by US Treasury as "The Godfather of Heroin") and has a Singaporean wife. His addresses, as listed by you, are all in Burma and Singapore. None are in the UK.&lt;/p&gt;
&lt;p&gt;I have discovered that, as a result of this listing, US Customs block shipments of goods to me here in the UK. Also when people try to wire me money from abroad (not just from the US, but from anywhere), for e.g. occasional travel expenses for academic conference attendance, the payment is interrupted and various checks are made before the funds are released. This became so bad during one period (a series of payments every single one of which triggered a block) that I had to switch to a different bank account. At no point was I told why this was happening (i.e. that you, OFAC, are responsible). The banks concerned believe they must keep this information from me (I was told this by my bank branch). Hence it took me many months to figure out what the source of the problem was: OFAC/US Treasury.&lt;/p&gt;
&lt;p&gt;It appears any "Stephen Law" anywhere in the world will suffer this same treatment, as indeed will anyone who merely happens to have the same name or alias as one of your "specially designated nationals". This has proved frustrating, time-consuming and also costly to me personally. E.g. I have&#160; paid US$77 postage for goods it turns out I can never receive because they are returned by US customs to the US vendor because my name is listed. As a result of the OFAC listing, I cannot now order goods from - or receive gifts from friends and relatives in - the United States.&lt;/p&gt;
&lt;p&gt;Can you inform me: given I am very obviously NOT the Burmese Stephen Law:&lt;/p&gt;
&lt;p&gt;(i) how I can avoid having all goods shipped to me from the US to my UK address being blocked and returned to sender by US customs?&lt;/p&gt;
&lt;p&gt;(ii) how I can avoid my own bank repeatedly asking me who I am (and requesting information including my DOB, which they already possess) before unblocking any payment from abroad?&lt;/p&gt;
&lt;p&gt;My bank knows who I am, and they know I am not the Burmese "Stephen Law" on the specially designated nationals list, but still I have to go through this same rigmarole every single time money is wired to me. How do I avoid this please?&lt;/p&gt;
&lt;p&gt;Yours faithfully&lt;/p&gt;
&lt;p&gt;Stephen Law&lt;/p&gt;
&lt;p&gt;PS Ofac-caused delays to payments to me can run into weeks. On one occasion I ran up overdraft charges as a result of not receiving funds blocked by OFAC.&lt;/p&gt;
&lt;p&gt;PPS I was interviewed by Foreign Policy magazine about all this a short while ago.Also interviewed by News Hour on BBC World Service.
&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 12:26:16 -0800</pubDate>
      <link>http://stephenlaw.blogspot.com/2014/02/how-us-treasury-imposes-sanctions-on-me.html</link>
      <guid>http://stephenlaw.blogspot.com/2014/02/how-us-treasury-imposes-sanctions-on-me.html</guid>
    </item>
    <item>
      <title>Why I Dropped Out Of YC | wikichen</title>
      <description>&lt;p&gt;&lt;b&gt;Comments:&lt;/b&gt; &lt;a href='http://news.ycombinator.com/item?id=7242265'&gt;"Why I Dropped Out Of YC | wikichen"&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;URL:&lt;/b&gt; &lt;a href='http://wikichen.is/writing/why-i-dropped-out-of-yc/'&gt;http://wikichen.is/writing/why-i-dropped-out-of-yc/&lt;/a&gt;&lt;/p&gt; &lt;br/&gt; &lt;div&gt;&lt;div&gt;
 &lt;p&gt;I bought my first Moleskine by sheer coincidence while shopping for craft supplies that a design course had required; I had avoided buying a notebook for the first two years at university by resourcefully (for which some might argue was born out of necessity from the lazy frugality of your average college kid) removing stacks of printer paper from the student center under a well-rehearsed, convincing ruse that I was somehow heroically fixing a &#8220;paper jam&#8221;.&lt;/p&gt;
&lt;p&gt;By my third year I was making enough money from being a resident advisor and scrapping by with a delightful hodgepodge of research jobs that I could finally renounce my thieving ways and afford some decent stationeries, one of which was a proper notebook on which I could keep notes. &lt;em&gt;I&#8217;m going to be taking actual notes in an actual notebook like a Shakespearean boss&lt;/em&gt;, I thought as I browsed the notebook section in the art supplies store. I picked the most conventional looking one from the pile: a large Moleskine Classic Notebook with a hard cover and plain, white pages. I knew not what a Moleskine was then or of its more hipster connotations (I swear) or why it cost an arm and leg for one, but I was pleased to have something I could, at long last, take notes on that&#8217;s not single sheet and A4-sized.&lt;/p&gt;
&lt;p&gt;Naturally, those notes turned out to be nothing but the wild swirling caricatures of a sleep-deprived procrastinator nodding off every few minutes as the professor droned on. But over time that first Moleskine served as an outlet for my creative self, a blank canvas I painted with my thoughts and ideas and dreams. It captured the moments of blinding clarity and paroxysms of fleeting epiphany that so often defined checkpoints of my personal growth. More importantly, the notebook embodied me at my best and dutifully provided a record from which I could reflect and study.&lt;/p&gt;
&lt;p&gt;I filled up that very same Moleskine at the end of last year, around the time when I decided to join the startup as she made the transition to the Bay Area after being accepted into Y Combinator. The fortuitous signs of a full notebook greeting a new opportunity in a new year got the best of my superstitious tendencies, so I ordered a brand-spanking new one off Amazon. In the five or so weeks since Y Combinator commenced in full swing, I haven&#8217;t written anything in the Moleskine. In fact, it&#8217;s still sitting on my shelf, wrapped in its original packaging.&lt;/p&gt;
 &lt;p&gt;Earlier this week we met with our advisor and YC partner Aaron over what seemed to be a divergence in the direction of the company and the underlying disagreement on how to best solve problems. In the hour we talked, what surfaced instead was an irreconcilable working relationship rooted in fundamental differences in personalities and misaligned expectations of roles and responsibilities. There were no hard feelings, just hard lessons learned.&lt;/p&gt;
&lt;p&gt;Maybe I signed up for the wrong thing or for the wrong reason, as well-intentioned as I was from the start. Maybe it was more about Y Combinator, the subject of numerous pages in my Moleskine, and that was wrong. Maybe in the wake of a failed startup I deluded myself into thinking great teams are predicated on great friendships, a truism that no longer holds absolute truth.&lt;/p&gt;
&lt;p&gt;It was also the acceptance that the startup would never be something I could call my own, not just in stake but in equal say, that cemented my decision to walk away. A sense of ownership can be a powerful motivator for a startup; in this case the lack thereof tore it apart. But if you asked me for the one reason why it didn&#8217;t work out, the truth is that it just wasn&#8217;t &lt;em&gt;fun&lt;/em&gt; anymore, and when you&#8217;re grinding away on an early stage venture with no pay, the enjoyment you derive from working with your partners is all you have.&lt;/p&gt;
&lt;p&gt;Egos clashed and convictions shaken, we came to the consesnsus that it&#8217;d be best if I part ways with the startup. To some extent I was relieved, freed from an incompatible environment that brought no party joy, and it hardly mattered that, to those like me who held the institution on a pedestal, this is Y Combinator we&#8217;re talking about. Aaron put it this way, &#8220;Stop thinking about YC. YC is an artificial construct, a forcing function that augments a startup&#8217;s chances to succeed. But if you can&#8217;t work together, then none of it matters. If someone tells me I can do YC but I&#8217;ll have to wear hot pants the whole time, I wouldn&#8217;t do it.&#8221; And I wholeheartedly agree with him: life&#8217;s too short to wear hot pants.&lt;/p&gt;
&lt;p&gt;It&#8217;s been a few days since my departure, and I&#8217;m as uncertain as ever regarding my next steps, largely given that I&#8217;m still digesting what I&#8217;ve learned from this experience, and partly because I&#8217;ve grown jaded and disillusioned with Silicon Valley at large. What&#8217;s certain is that I won&#8217;t be touching startups for a very long time, and I might even stay away from Hacker News for a while. If anything, when the time comes and that startup itch manifests itself again, I&#8217;ve taken to heart that it will be of my own creation, with a team I can entrust equal ownership, and on my own terms, Y Combinator or not.&lt;/p&gt;
&lt;p&gt;Taking the new Moleskine from the shelf and removing it from its plastic wrap, I turned to the first blank page and picked up my pen.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Here we go again.&lt;/em&gt;&lt;/p&gt;
 &lt;/div&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 14 Feb 2014 17:52:28 -0800</pubDate>
      <link>http://wikichen.is/writing/why-i-dropped-out-of-yc/</link>
      <guid>http://wikichen.is/writing/why-i-dropped-out-of-yc/</guid>
    </item>
  </channel>
</rss>
