<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom">
	<title>Seldo.Com Feed</title>
	<link href="http://www.seldo.com/"/>
	<link rel="self" href="http://www.seldo.com/api/getposts/atom"/>
	<updated>2010-09-01T23:00:03-05:00</updated>
	<author>
		<name>Seldo</name>
	</author>
	<id>http://www.seldo.com/api/getposts/atom</id>

			<entry>
			<title><![CDATA[New York's water is (intentionally) full of invisible shrimp]]></title>
			<link href="http://consumerist.com/2010/08/new-yorks-water-filled-with-invisible-shrimp.html"/>
			<id>http://consumerist.com/2010/08/new-yorks-water-filled-with-invisible-shrimp.html</id>
			<updated>2010-09-01T23:00:03-05:00</updated>
			<summary><![CDATA[They eat mosquito larvae, which is nice. But it means every glass of water in NYC is full of shrimp. NOBODY TELL THE VEGANS.]]></summary>
			<content type="html"><![CDATA[They eat mosquito larvae, which is nice. But it means every glass of water in NYC is full of shrimp. NOBODY TELL THE VEGANS.]]></content>
					</entry>
			<entry>
			<title><![CDATA[Instant Inception]]></title>
			<link href="http://instantinception.com/"/>
			<id>http://instantinception.com/</id>
			<updated>2010-09-01T18:15:03-05:00</updated>
			<summary><![CDATA[In the fine tradition of instantrimshot.com and instantcrickets.com]]></summary>
			<content type="html"><![CDATA[In the fine tradition of instantrimshot.com and instantcrickets.com]]></content>
					</entry>
			<entry>
			<title><![CDATA[William Hague, former leader of the UK conservative party, is embroiled in (yet another) gay rumours scandal]]></title>
			<link href="http://www.guardian.co.uk/politics/2010/sep/01/william-hague-statement-media-speculation"/>
			<id>http://www.guardian.co.uk/politics/2010/sep/01/william-hague-statement-media-speculation</id>
			<updated>2010-09-01T16:45:03-05:00</updated>
			<summary><![CDATA[Photographed around town with his 25-year-old and apparently unqualified advisor, who has subsequently resigned.]]></summary>
			<content type="html"><![CDATA[Photographed around town with his 25-year-old and apparently unqualified advisor, who has subsequently resigned.]]></content>
					</entry>
			<entry>
			<title><![CDATA[Anonymous Pro is a font designed specifically for programming]]></title>
			<link href="http://www.ms-studio.com/FontSales/anonymouspro.html"/>
			<id>http://www.ms-studio.com/FontSales/anonymouspro.html</id>
			<updated>2010-08-31T23:00:02-05:00</updated>
			<summary><![CDATA[I might give this a shot tomorrow.]]></summary>
			<content type="html"><![CDATA[I might give this a shot tomorrow.]]></content>
					</entry>
			<entry>
			<title><![CDATA[An excellent montage of dancing in movies]]></title>
			<link href="http://www.youtube.com/watch?v=ZYL3j27sSH8&amp;feature=player_embedded"/>
			<id>http://www.youtube.com/watch?v=ZYL3j27sSH8&amp;feature=player_embedded</id>
			<updated>2010-08-31T19:15:04-05:00</updated>
			<summary><![CDATA[This makes me want to go dancing RIGHT NOW.]]></summary>
			<content type="html"><![CDATA[This makes me want to go dancing RIGHT NOW.]]></content>
					</entry>
			<entry>
			<title><![CDATA[A James Dean biopic is all about Jimmy being secretly gay]]></title>
			<link href="http://www.queerty.com/the-james-dean-is-gay-biopic-youve-been-waiting-for-20100830/"/>
			<id>http://www.queerty.com/the-james-dean-is-gay-biopic-youve-been-waiting-for-20100830/</id>
			<updated>2010-08-30T14:00:02-05:00</updated>
			<summary><![CDATA[Will I watch a James Dean lookalike hang out with pretty boys? You bet your ass I will.]]></summary>
			<content type="html"><![CDATA[Will I watch a James Dean lookalike hang out with pretty boys? You bet your ass I will.]]></content>
					</entry>
			<entry>
			<title><![CDATA[People born after 1981 have lower privacy standards, say the CEO of location-based service Loopt]]></title>
			<link href="http://thehill.com/blogs/hillicon-valley/technology/116371-people-born-after-1981-have-lower-privacy-standards-loopt-ceo-says"/>
			<id>http://thehill.com/blogs/hillicon-valley/technology/116371-people-born-after-1981-have-lower-privacy-standards-loopt-ceo-says</id>
			<updated>2010-08-30T12:30:02-05:00</updated>
			<summary><![CDATA[What if you&#039;re born in exactly 1981?]]></summary>
			<content type="html"><![CDATA[What if you&#039;re born in exactly 1981?]]></content>
					</entry>
			<entry>
			<title><![CDATA[Arrington is completely wrong about women in technology]]></title>
			<link href="http://www.seldo.com/weblog/2010/08/29/arrington_is_completely_wrong_about_women_in_technology"/>
			<id>http://www.seldo.com/weblog/2010/08/29/arrington_is_completely_wrong_about_women_in_technology</id>
			<updated>2010-08-29T15:11:06-05:00</updated>
			<summary><![CDATA[Michael Arrington's post on TechCrunch today about who to blame for the lack of women in tech was even more offensively wrong than I was expecting from the title, and that's really saying something. It goes off the rails right in the first paragraph:


Success in Silicon Valley, most would agree, is more merit driven than almost any other place in the world. It doesn’t matter how old you are, what sex you are, what politics you support or what color you are. If your idea rocks and you can execute, you can change the world and/or get really, stinking rich.


Wrong, wrong, wrong and wrong. It matters enormously how old you are -- either too young to be taken seriously as an entrepreneur, or too old to be taken seriously talking about new tech. Your color is ridiculously important, because the people with money, who are almost exclusively men and mostly white, are more comfortable talking to other white men, and your nationality even more so, because of visa restrictions. Even your politics are important,...]]></summary>
			<content type="html"><![CDATA[<p>Michael Arrington's post on TechCrunch today about <a href="http://techcrunch.com/2010/08/28/women-in-tech-stop-blaming-me/" title="Too Few Women In Tech? Stop Blaming The Men.">who to blame for the lack of women in tech</a> was even more offensively wrong than I was expecting from the title, and that's really saying something. It goes off the rails right in the first paragraph:

<blockquote>
Success in Silicon Valley, most would agree, is more merit driven than almost any other place in the world. It doesn’t matter how old you are, what sex you are, what politics you support or what color you are. If your idea rocks and you can execute, you can change the world and/or get really, stinking rich.
</blockquote>

<p>Wrong, wrong, wrong and wrong. It matters enormously <a href="http://news.ycombinator.com/item?id=469603">how</a> <a href="http://news.ycombinator.com/item?id=1052476">old</a> you are -- either too young to be taken seriously as an entrepreneur, or too old to be taken seriously talking about new tech. Your color is ridiculously important, because the people with money, who are almost exclusively men and mostly white, are more comfortable talking to other white men, and your nationality even more so, because of visa restrictions. Even your politics are important, because Silicon Valley is hugely liberal, and those who aren't democrats are libertarians.

<p>And above all your gender matters. Because the ugly truth is that <b>the men of Silicon Valley do not take women in tech seriously by default</b>. I see it every day. If a woman walks into the office, people ask if she's in HR or marketing or legal or product, or frankly anything other than engineering. And distressingly, most of the time they're right, because there aren't many women in tech. And as everyone knows and keeps saying, that's a vicious circle: the expectation that women don't get into tech is what keeps them out of it.

<p>Here's how it happens: if a woman engineer starts talking, men will wait until she says something notably clever before they start taking her seriously. Men on the other hand are taken seriously by default, and only get dismissed if they say something notably dumb. That, multiplied by thousands of conversations every day, is all it takes to enforce huge cultural bias against women in Silicon Valley and tech at large. I know this is true because, even though I try very hard not to, I've done this myself.

<p>So if you're a man in tech, and you want to fix this problem, it's simple. Start with yourself, and your expectations. The next time a woman walks into your office, make no assumptions about her job title. Don't ask if she's somebody's girlfriend. The next time a woman -- at the workplace, at a party, wherever -- make a point about technology, make sure you're not making any assumptions about her level of expertise that you wouldn't make if she were male. That's the change I'm trying to make in myself, and it's surprisingly hard to do, because snap judgements are so easy to make, especially when they are habitual. I even had to edit this post a little when I realized I'd written it with the assumption that my audience would be male. It's insidious.

<p>Arrington's post concludes with some weasel language in which he does not explicitly state, but instead paraphrases somebody else saying, that women are fundamentally, culturally unsuited to starting companies because they are "nurturing" and "not risk-taking" enough. He even trots out that bullshit about Mars and Venus. And I'm sure there's a lot of people out there who, secretly, think he might have a point.

<p>But he's wrong. The reason there are so few women in tech is because of the men. As a man, I'm trying to do my part to undo that, and if you're a man I suggest you do the same.]]></content>
							<category term="culture" scheme="http://www.seldo.com/tags/culture" label="culture"/>
							<category term="sexism" scheme="http://www.seldo.com/tags/sexism" label="sexism"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="technology" scheme="http://www.seldo.com/tags/technology" label="technology"/>
					</entry>
			<entry>
			<title><![CDATA[I actually think this Bootylicious cover video by PhatGayKiD says a whole bunch of good things]]></title>
			<link href="http://www.youtube.com/watch?v=rpxWFN0BL7M&amp;feature=player_embedded#!"/>
			<id>http://www.youtube.com/watch?v=rpxWFN0BL7M&amp;feature=player_embedded#!</id>
			<updated>2010-08-28T16:45:02-05:00</updated>
			<summary><![CDATA[These kids are a mish-mash of race, gender and body types and they are all totally owning it. That&#039;s neat.]]></summary>
			<content type="html"><![CDATA[These kids are a mish-mash of race, gender and body types and they are all totally owning it. That&#039;s neat.]]></content>
					</entry>
			<entry>
			<title><![CDATA[77% of San Francisco's waste does not go to landfill, the most of any American city]]></title>
			<link href="http://www.sfgate.com/cgi-bin/blogs/cityinsider/detail?entry_id=71060&amp;tsp=1"/>
			<id>http://www.sfgate.com/cgi-bin/blogs/cityinsider/detail?entry_id=71060&amp;tsp=1</id>
			<updated>2010-08-27T20:00:02-05:00</updated>
			<summary><![CDATA[I would never have guessed the number was that high, or even above 50%.]]></summary>
			<content type="html"><![CDATA[I would never have guessed the number was that high, or even above 50%.]]></content>
					</entry>
			<entry>
			<title><![CDATA[Trailers - Skyline]]></title>
			<link href="http://trailers.apple.com/trailers/universal/skyline/"/>
			<id>http://trailers.apple.com/trailers/universal/skyline/</id>
			<updated>2010-08-27T02:00:02-05:00</updated>
			<summary><![CDATA[Space invasion movie ahoy! This has the look of an Independence Day style funride. Bring it.]]></summary>
			<content type="html"><![CDATA[Space invasion movie ahoy! This has the look of an Independence Day style funride. Bring it.]]></content>
					</entry>
			<entry>
			<title><![CDATA[In defence of SQL]]></title>
			<link href="http://www.seldo.com/weblog/2010/07/12/in_defence_of_sql"/>
			<id>http://www.seldo.com/weblog/2010/07/12/in_defence_of_sql</id>
			<updated>2010-07-13T12:17:01-05:00</updated>
			<summary><![CDATA[If this title does not interest you, here are some alternative, linkbait titles:

Why ORM is the Dumbest Idea Ever
Why NoSQL is a Terrible Idea
OMADS: the future of data storage
Why SQL Will Eventually Conquer The World


A little history

SQL was invented in the 1970s at the same time that "large-scale" (read: millions of rows) data stores came into existence. It triumphed over other query languages not because it was particularly great (though it was easier to read), but because it was standard. Everybody building a data store could write to the SQL standard without having to re-train all their clients and customers. It reduced friction all round. It was a huge success.

SQL is awkward

There's no escaping that SQL, as we use it day to day, is not pretty.

Keep in mind that what SQL is really designed to express is relational algebra, a type of logic essentially invented by the ridiculously clever E.F. Codd (along with nearly all the other theoretical underpinnings of relational databases). If you're not...]]></summary>
			<content type="html"><![CDATA[<p>If this title does not interest you, here are some alternative, linkbait titles:
<ul>
<li>Why ORM is the Dumbest Idea Ever
<li>Why NoSQL is a Terrible Idea
<li>OMADS: the future of data storage
<li>Why SQL Will Eventually Conquer The World
</ul>

<h2>A little history</h2>

<p>SQL was <a href="http://en.wikipedia.org/wiki/SQL#History">invented in the 1970s</a> at the same time that "large-scale" (read: millions of rows) data stores came into existence. It triumphed over other query languages not because it was particularly great (though it was <a href="http://ccollins.wordpress.com/2007/05/20/history-of-sql/">easier to read</a>), but because it was standard. Everybody building a data store could write to the SQL standard without having to re-train all their clients and customers. It reduced friction all round. It was a huge success.

<h2>SQL is awkward</h2>

<p>There's no escaping that SQL, as we use it day to day, is not pretty.

<p>Keep in mind that what SQL is really designed to express is <a href="http://en.wikipedia.org/wiki/Relational_algebra">relational algebra</a>, a type of logic essentially invented by the ridiculously clever <a href="http://en.wikipedia.org/wiki/Edgar_F._Codd">E.F. Codd</a> (along with nearly all the other theoretical underpinnings of relational databases). If you're not familiar with it, I find it helps to think about relational algebra as <a href="http://en.wikipedia.org/wiki/Venn_diagram">Venn diagrams</a>: it's about sets intersecting with, unioning with, subtracting from, joining with each other. Find all the fruits in set A, with prices in set B, farmed by the farmer in set C. That kind of thing.

<p>What it's <i>not</i> really for is collating, aggregating, and most especially filtering of data sets. The reason count(*) is so awkward is because that's not really what the language was designed to do. GROUP BY and ORDER BY clauses look tacked-on because they are (HAVING is an even more grievous hack, UNIQUE is a disaster, and let's not get started on LIMIT). Of course, in regular use of a data set, you nearly always want to do these things, which is why SQL provides them. SQL, loyal workhorse that it is, is nothing if not willing. But it might not be terribly quick.

<p>So you're right. SQL -- the kind you write every day -- is ugly and awkward. In fact, it looks like hell on legs. And it's often pretty slow. And that's all because you're asking it to do something it, the language, is not really designed to do (whether the <i>engine</i> is designed to do it is another question). But it works, and in forty years since its invention we have come up with very little in the way of improvements and nothing close to powerful enough to be a replacement.

<h2>What about ORM?</h2>

<p>I want to be very, very clear about this: ORM is a stupid idea.

<p>The birth of ORM lies in the fact that SQL is ugly and intimidating (because relational algebra is pretty hard, and very different to most other types of programming). Our programs already have an object-oriented model, and we already know one programming language -- why learn a second language, and a second model? Let's just throw an abstraction layer on top of this baby and forget there's even an RDBMS down there.

<p>This is obviously silly. You've stored your data in a way that doesn't match your primary use-case, accessible via a language that you are not willing to learn. Your solution is to keep the store and the language and just wrap them in abstraction? Maybe you'd do that if your data were in a legacy system and you needed to write a new front-end, but people slap ORM on <i>new</i> projects. Why the hell would you do that?

<p>ORM is slower than just using SQL, because abstraction layers always are. But unlike other abstraction layers, which make up for their performance hit with faster development, ORM layers add almost nothing. In fact, often, if you need to do anything more complicated then a SELECT, you end up writing fragments of SQL or pseudo-SQL languages in order to tell the underlying RDBMS what you're trying to really do.

<h2>OMADS: data stores that match the application</h2>

<p>ORM is dumb, and people noticed. So clever programmers looked at this ridiculous edifice and realized the real problem: the data store and the use-case were mismatched. So they threw away ORM, SQL, and RDBMS, and wrote lovely new key-value stores, or object stores, or document stores, or searchable indexes, or any of a half-dozen other data structures that more closely matched what they were trying to do. And because these data stores all turned up at a time when nearly all data stores were SQL-interfaced RDBMS, they got the name "NoSQL", even though the actual problem was the Relational model, not SQL itself. And because "Obviously More Appropriate Data Stores", or OMADS, is not catchy enough I guess.<a href="#omads">*</a>

<p>So I love NoSQL stores. <a href="http://awe.sm">My startup</a> would literally be unable to function without <a href="http://memcached.org/">memcache</a>. I think <a href="http://cassandra.apache.org/">Cassandra</a> is nifty even if Twitter found it <a href="http://engineering.twitter.com/2010/07/cassandra-at-twitter-today.html">not worth the trouble of switching from MySQL</a>. I think <a href="http://code.google.com/p/redis/">Redis</a> is cool if a little buggy. <a href="http://www.mongodb.org/">MongoDB</a> is awesome, and I'm probably going to be building a production system based on it quite soon. <a href="http://hadoop.apache.org/common/docs/current/hdfs_design.html">HDFS</a> I use in production every day, and it still blows my tiny little mind. Really, the only think I dislike about them is the label "NoSQL", which as many people have already pointed out doesn't really say anything about what they <b>are</b>, just what they are not. And also because it makes people unfamiliar with the details of the situation think there's something Wrong, Bad or Old Fashioned about SQL. And programmers hate using anything that is any of those things.

<h2>What is the relational data model good for anyway?</h2>

<p>So if your data store should always match your application, what application is it that RDBMS are perfect for? The answer is: all, and none.

<p>We take this for granted these days, but the relational model is pretty magical. Set up a model of your entities, pour data into it, and get answers. How many teachers at the university earn over $100k but teach less than 20 students? How many customers who bought our newest product had never bought anything before? What were sales like on Tuesdays over the last 30 months? You don't have to know in advance what your questions will be; you don't have to write any special code to examine all the rows, or work out the most efficient strategy for combining the results: you just need to know how the data relate each other, and then you can ask ad-hoc questions and <i>the database knows the answer</i>. I remember the first time I really grokked that concept, and it filled me with nerdy joy.

<p>If you pick the wrong data structure for your store when you're first writing your application, you can end up -- as happened to a team at my last job -- running crazy, days-long depth-first searches across distributed document stores in order to perform elementary operations like getting a total count of objects. So if you don't know all the questions you might need to ask about your data, the safest thing to do is put them in an RDBMS. And when you first start a project, you almost never know all the questions you're going to need to ask. So my advice: always use an RDBMS. Just don't <i>only</i> use an RDBMS.

<h2>Optimize, but be prepared for ad-hoc queries</h2>

<p>Is your data really just a giant hash lookup? Then a key-value store is what you want. Do you primarily access your related data via a single key? Then a document store is for you. Do you need full-text searching? Then, dear god, use a <a href="http://lucene.apache.org/solr/">text-indexing engine</a>, not an RDBMS. Do you need to answer questions about your data that you can't predict in advance? Then make sure your data also ends up in an RDBMS. Maybe not in real-time, maybe summarized rather than in raw form, but somehow. Then when your co-founder asks "how many Xs happened in Y?" your answer won't be "uh, let me spend half a day writing code to find that out". Just throw down some SQL, and it'll give you an answer -- it'll take 5 minutes to return a single number, but that's a lot faster than half a day.

<p>Because that's what SQL is for.

<h2>Post-SQL</h2>

<p>If you scroll back to the top you'll see the description of the circumstances that gave birth to SQL: a whole bunch of new data stores came into existence at once, and the lack of a common language created friction and fragmentation. The same thing is happening again with the NoSQL crowd. If you decide to write your app using Cassandra, you better be sure it's what you want, because if you change stores you have to change <i>all</i> your code. It's the ultimate lock-in, and it's not the plan of an evil monopolist corporation, it's just an unfortunate side-effect.

<p>Pretty soon, the same sort of clever people who noticed that ORM was a ridiculous hack will notice an opening for an actually useful abstraction layer: a single common API that can access all the NoSQL stores. Maybe it will be <a href="http://incubator.apache.org/thrift/">Thrift</a> or <a href="http://avro.apache.org/">Avro</a>, but I'm not sure. I'd say the chance is about 50-50 that it will be SQL again.

<h2>SQL triumphant</h2>

<p>And why not? Awkward it may be, but SQL is a lot more succint and readable than multiple lines of API calls or <a href="http://github.com/nathanmarz/cascalog">crazy, math-like relational algebra languages</a>. And there's nothing intrinsically slow about the language itself. If you could run "SELECT * FROM table WHERE ..." on Cassandra, it would be no slower than specifying the same conditions via API calls. In fact, when trying to explain how to use its API, <a href="http://www.mongodb.org/display/DOCS/Tutorial#Tutorial-SpecifyingWhattheQueryReturns">the MongoDB documentation lists the equivalent SQL queries</a>. That's a pretty clear vote for the usability of SQL.

<p>Computer programmers really like new, cool things. So when something like SQL hangs around for nearly 40 years, it either means nobody really cares about it -- I think we're clear that's not the case -- or that there's really nothing else that can do the job quite as well.

<p>So go forth, use your OMADS, keep an RDBMS in your back pocket, and stop being so mean to poor old SQL.

<hr>

<p class="footnote"><a name="omads">*</a> On the off-chance that anybody starts calling these things OMADS, remember: you heard it here first.</p>

<p class="footnote"><b>Updated 2010-07-13</b> to fix link to E.F. Codd; thank you Sordina!</p>]]></content>
							<category term="cassandra" scheme="http://www.seldo.com/tags/cassandra" label="cassandra"/>
							<category term="data" scheme="http://www.seldo.com/tags/data" label="data"/>
							<category term="databases" scheme="http://www.seldo.com/tags/databases" label="databases"/>
							<category term="memcache" scheme="http://www.seldo.com/tags/memcache" label="memcache"/>
							<category term="mongodb" scheme="http://www.seldo.com/tags/mongodb" label="mongodb"/>
							<category term="nosql" scheme="http://www.seldo.com/tags/nosql" label="nosql"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="sql" scheme="http://www.seldo.com/tags/sql" label="sql"/>
					</entry>
			<entry>
			<title><![CDATA[A letter from a mother]]></title>
			<link href="http://www.seldo.com/weblog/2010/07/11/a_letter_from_a_mother"/>
			<id>http://www.seldo.com/weblog/2010/07/11/a_letter_from_a_mother</id>
			<updated>2010-07-11T21:41:53-05:00</updated>
			<summary><![CDATA[I've already posted this letter from the mother of a gay son to her local newspaper in Vermont to delicious, but it's worth putting in as many places as possible. It's really brilliantly written. The phrase in particular that I wish every anti-gay religionist in America was required to read before opening their mouths ever again:


If you want to tout your own morality, you'd best come up with something more substantive than your heterosexuality. You did nothing to earn it; it was given to you.


I want this on a t-shirt. And a billboard. And written in the sky.]]></summary>
			<content type="html"><![CDATA[<p>I've already posted this <a href="http://www.andrewtobias.com/newcolumns/000504.html">letter from the mother of a gay son to her local newspaper in Vermont</a> to delicious, but it's worth putting in as many places as possible. It's really brilliantly written. The phrase in particular that I wish every anti-gay religionist in America was required to read before opening their mouths ever again:

<blockquote>
If you want to tout your own morality, you'd best come up with something more substantive than your heterosexuality. You did nothing to earn it; it was given to you.
</blockquote>

<p>I want this on a t-shirt. And a billboard. And written in the sky.]]></content>
							<category term="gay" scheme="http://www.seldo.com/tags/gay" label="gay"/>
							<category term="morality" scheme="http://www.seldo.com/tags/morality" label="morality"/>
							<category term="queer" scheme="http://www.seldo.com/tags/queer" label="queer"/>
							<category term="religion" scheme="http://www.seldo.com/tags/religion" label="religion"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
					</entry>
			<entry>
			<title><![CDATA[BP's oil spill in the Gulf of Mexico is a political failure]]></title>
			<link href="http://www.seldo.com/weblog/2010/05/30/bps_oil_spill_in_the_gulf_of_mexico_is_a_political_failure"/>
			<id>http://www.seldo.com/weblog/2010/05/30/bps_oil_spill_in_the_gulf_of_mexico_is_a_political_failure</id>
			<updated>2010-05-30T02:52:54-05:00</updated>
			<summary><![CDATA[The ongoing oil spill from BP's well in the Gulf of Mexico is a tragedy. A human one -- 11 lives were lost in the initial explosion -- and an environmental one; the heartbreaking pictures (via) are already emerging, and there will be more.

There's a lot of public anger over the spill, mostly directed at BP itself, brilliantly captured by the BP Global PR Twitter feed. And there's a lot to blame them for. As the New York Times reports, BP officials knew weeks in advance that there were problems with the rig and had deliberately scaled back the rigorousness of the federally-mandated testing they were doing on the rig -- a very unusual practice; usually the tests get more and more strenuous. They knew something was up.

The Wall Street Journal (free article) has a lot more detail: they chose an inherently risky well design, skipped a lot of standard safety checks, ignored best practices, and were in an almighty hurry to get things finished. Furthermore, they might even have avoided loss of life: there's...]]></summary>
			<content type="html"><![CDATA[<p>The ongoing oil spill from BP's well in the Gulf of Mexico is a tragedy. A human one -- 11 lives were lost in the initial explosion -- and an environmental one; the <a href="http://inapcache.boston.com/universal/site_graphics/blogs/bigpicture/oil_05_24/o38_23540017.jpg">heartbreaking pictures</a> (<a href="http://www.boston.com/bigpicture/2010/05/oil_reaches_louisiana_shores.html">via</a>) are already emerging, and there will be more.

<p>There's a lot of public anger over the spill, mostly directed at BP itself, brilliantly captured by the <a href="http://twitter.com/BPGlobalPR">BP Global PR Twitter feed</a>. And there's a lot to blame them for. As the <a href="http://www.nytimes.com/2010/05/30/us/30rig.html">New York Times reports</a>, BP officials knew weeks in advance that there were problems with the rig and had deliberately scaled back the rigorousness of the federally-mandated testing they were doing on the rig -- a very unusual practice; usually the tests get more and more strenuous. They knew something was up.

<p>The <a href="http://online.wsj.com/article/SB10001424052748704026204575266560930780190.html">Wall Street Journal</a> (free article) has a lot more detail: they chose an inherently risky well design, skipped a lot of standard safety checks, ignored best practices, and were in an almighty hurry to get things finished. Furthermore, they might even have avoided loss of life: there's unsubstantiated rumours on the internet that <a href="http://www.theoildrum.com/node/6464#comment-623420">a subcontractor on Deepwater Horizon ordered all their personnel off the rig 6 hours prior to the explosion</a> because they believed it to be unsafe. If BP had listened to them, they could have evacuated. It's a scandal.

<p>But as I started saying in <a href="http://news.ycombinator.com/item?id=1389647">this thread on Hacker News</a>, it's not really BP we should be angry at. It's not their scandal. BP, Transocean, even Halliburton, were all just doing what was in their best interests. Relief wells such as the one they are hurriedly drilling are enormously expensive, and skipping them makes the cost of drilling the many unsuccessful wells necessary to get a profitable well going much less. Even the enormous costs of cleanup of this leak will probably not outweigh all the money they saved over years of risky practices.

<p>The real problem here is political. The only way to get the oil companies to take the externalities of drilling into account is to force them to do so; economic self-interest is in favour of destroying the environment. The Minerals Management Service, the regulator in charge, was obviously corrupt and completely in the thrall of the oil companies.

<p>So when the leak is plugged, and the decades-long task<a href="#valdez">*</a> of oil cleanup is underway, remember to direct your anger prudently and productively at the politicians in charge, the ones capable of pushing legislation forward that will create a stronger and more independent regulator. Yelling at BP and taking their money is emotionally satisfying, but will not fix the real problem. Destroying the environment must become more than merely expensive; it must be criminalized. Oil executives will think twice about approving risky drilling practices if they know they will personally go to jail if it fails.

<hr>

<p class="footnote"><a name="valdez">*</a> Cleanup of the Exxon Valdez spill, which happened in 1989, is <a href="http://greenanswers.com/blog/161681/exxon-valdez-today">still ongoing</a>.]]></content>
							<category term="economics" scheme="http://www.seldo.com/tags/economics" label="economics"/>
							<category term="energy" scheme="http://www.seldo.com/tags/energy" label="energy"/>
							<category term="environment" scheme="http://www.seldo.com/tags/environment" label="environment"/>
							<category term="oil" scheme="http://www.seldo.com/tags/oil" label="oil"/>
							<category term="politics" scheme="http://www.seldo.com/tags/politics" label="politics"/>
							<category term="regulation" scheme="http://www.seldo.com/tags/regulation" label="regulation"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
					</entry>
			<entry>
			<title><![CDATA[Towards a real distributed social network protocol]]></title>
			<link href="http://www.seldo.com/weblog/2010/04/26/towards_a_real_distributed_social_network_protocol"/>
			<id>http://www.seldo.com/weblog/2010/04/26/towards_a_real_distributed_social_network_protocol</id>
			<updated>2010-04-26T11:39:20-05:00</updated>
			<summary><![CDATA[Last week Facebook announced its Open Graph Protocol. It sounds exciting, but is unfortunately a completely misleading name, being neither open, nor a graph, nor a protocol. Instead it is a Facebook Social Data API, but since they already had one of those and it was broken you can see why they felt the need to re-brand. Elsewhere on the web Google and others are working on the OpenSocial APIs, which are at least accurately named. But they are just a standard way of accessing everybody's isolated walled gardens. Neither effort do anything to achieve the inter-operation of social networks that I imagine when I hear the names.

What would an open graph protocol really look like?

The reason the web works is because it is independent, decentralized, and simple. There is no prescribed ideal for the way web pages should fit together. Indexing is independent of representation, and indexing is open to anyone. The web is a graph, a real graph, where no node is more important and any path is possible, and the protocol...]]></summary>
			<content type="html"><![CDATA[<p>Last week Facebook announced its <a href="http://developers.facebook.com/docs/opengraph">Open Graph Protocol</a>. It sounds exciting, but is unfortunately a completely misleading name, being neither open, nor a graph, nor a protocol. Instead it is a Facebook Social Data API, but since they already had one of those and it was broken you can see why they felt the need to re-brand. Elsewhere on the web Google and others are working on the <a href="http://code.google.com/apis/opensocial/">OpenSocial APIs</a>, which are at least accurately named. But they are just a standard way of accessing everybody's isolated walled gardens. Neither effort do anything to achieve the inter-operation of social networks that I imagine when I hear the names.

<h2>What would an open graph protocol really look like?</h2>

<p>The reason the web works is because it is independent, decentralized, and simple. There is no prescribed ideal for the way web pages should fit together. Indexing is independent of representation, and indexing is open to anyone. The web is a graph, a real graph, where no node is more important and any path is possible, and the protocol is a true protocol, defining only the most basic forms of interaction and leaving semantics to the application layer.

<p>So at first glance, it seems a social graph protocol would need the same properties:
<ul>
<li>a permanent, independent representation of entities
<li>vertices available and explorable by any individual or robot
<li>no hidden links or metadata
<li>no assumptions as to the shape of the graph
</ul>

<p>For the first part, I think a lot of people assume that a true social graph would unify identity. The WWW<a href="#www">*</a> is itself; it represents only itself and it contains all of its own information. But the social web isn't like that; the online representation of a person is a proxy. And I think for reasons of privacy, security, and practicality, a total representation of our social graph would be undesirable. Such a graph would consist of everyone you've ever met, and for completeness would have to indicate how strong your connection was to them. That in itself is information we keep socially very private. In addition, we keep our social and professional lives to some degree separated. Our friends are not interested in our business contacts and vice versa.

<h2>A graph of graphs</h2>

<p>A true, complete, open social graph is socially undesirable; it's not what we want. So what <i>do</i> we want? The answer is already emerging: we like our social graphs partitioned by intention: professional networks (LinkedIn), personal networks (Facebook), "social" networks (in the sense of "socializing" -- people we like to talk to or hear from) like Twitter, romantic networks (an infinity of dating sites). Then there are less well-established, niche networks built around personal history (alumni networks, mailing lists) or interests (forums and online groups).

<p>For individuals who exist in multiple of these circles, we already accept duplication readily. Many recent attempts have been made to find ways keep all your social networks in sync and related. This is not a particularly complex technical problem (though scaling it would be nontrivial), and yet no-one has succeeded. I think this is not because we've not worked out how to do it. It's because nobody wants it -- nobody except nerds who like graph data, and marketers who dream of the giant rewards to be reaped from owning that data.

<p>This changes things for the designer of the proverbial Open Graph. The shape of the graph we are expecting changes, as do the nature of the nodes. The nodes become facets of personality rather than single true representations of people, and the vertices become somewhat simpler: type of connection, and probably directionality, but without the degree of strength that would be so tricky to judge relatively in a unified graph -- is your business partner closer to you than your girlfriend? It's an impossible -- and largely pointless -- question. The graph ceases to be a single unified graph and instead becomes hundreds of graphs, occasionally connected but in ad-hoc and inconsistent. This is already sounding much more like reality -- and much more like the web as we know it.

<h2>No more honeypots</h2>

<p>Furthermore, the openness is still a problem. Professional networks are closely-guarded secrets. Personal networks if open can be exploited for identity theft and social engineering. Privacy is paramount. We trusted Facebook with it and they <a href="http://mashable.com/2010/04/21/open-graph-privacy/">pulled the rug out from under us, to monetize better</a>. We trusted Google with it and they <a href="http://mashable.com/2010/04/21/open-graph-privacy/">broke it by accident with Buzz</a>. We <a href="http://en.wikipedia.org/wiki/Windows_Live_ID">never, ever trusted Microsoft</a> with it. A central commercial repository for all our data is clearly the wrong way, and even a cental repository for each facet -- one for professional, one for personal, one for romantic -- seems flawed. What's the webby way to do this?

<p>If we don't trust a single company with our data, if any single repository would be too much of an attraction, then we need instead dozens, hundreds of repositories: we need domains and servers, just as we have web sites and web servers, or email addresses and email servers. Each server will hold our social connections -- not a single true representation, but whatever facet of our personality we wish to represent via that identity. In fact, using an ID like name@domain.com -- similar to email addresses -- would not be a bad start.

<p>To free us from the giant honeypots of isolated, centralized social networks, what we need is the protocol that would allow these systems to communicate -- in the same way that we each have an email address on a different server, but all email addresses can contact each other, we need distributed identity that can communicate via a protocol. In the early days of the Internet, services like AOL, Prodigy and Compuserve overcame the lack of a unified protocol by building rich walled gardens. In the evolution of the social web, it is time to make that same leap. Social Network A must be able to talk to Social Network B as a peer.

<h2>The basics of a true open graph protocol</h2>

<p>What are the actions this protocol must allow? The same things networks right now allow:
<ul>
<li>rich identity representation
<li>network activity updates
<li>private one-to-few messaging
<li>in-network searching
<li>ad-hoc group communication
<li>events (essentially just specialized metadata attached to private or group messaging)
</ul>

<p>I learned a lot about <a href="http://activitystrea.ms/">ActivityStreams</a> at their StreamCamp event last week, and it is an interesting solution to the second problem I listed: standardized, federated, and open, it doesn't care what network an update comes from, it just aggregates them and passes them along. It's the right direction. But we need something grander.

<p>Imagine a set of servers. You can create an account on any server and invent an identity, or even several different identities. Duplication is expected and even encouraged. Now create connections between entities. They can be within the domain, or they can be between domains. For a unidirectional link, only the originating server knows the connection; for a bidirectional server, both do. If the originating and destination server are the same domain, it stores both. It doesn't matter; external and internal connections are equal citizens, wrapped around some central standardized metadata that is extensible at will: richer networks can share more, simple networks are not required to do so.

<h2>Handling OGP requirements</h2>

<h3>Rich identity</h3>

<p>Each domain holds a single unique key: username@domain, possibly with a short, more human-readable label (very short, to avoid spam -- see later). Around that they can wrap as much metadata as they like. Secondary standards will emerge to define larger sets of metadata with suggested keys, which networks can adopt from each other in order to more richly represent entities on external networks. But the protocol itself says nothing.

<p>The protocol should also make no assumptions about the nature of an entity. Some entities will be people, but others might be companies, or groups, or even events -- the difference lying merely in the metadata that might be attached to the entity rather than a fundamental protocol-level difference.

<h3>Network activity updates</h3>

<p>These can be handled via a pub/sub mechanism like <a href="http://code.google.com/p/pubsubhubbub/">PuSH</a>. When an entity performs an action it distributes that action to any subscribers. They can further syndicate within their own network according to their domain-specific rules. ActivityStreams are the way forward here.

<h3>Private messaging</h3>

<p>At the protocol level, the creation of a connection allows messaging to flow backwards from the subscribed party to the originating server; a pair of connections therefore allows bidirectional messaging. The connection is created simply by exchanging keys: when A connects with B it offers a key, signed with the identity of B and a timestamp. If B accepts the connection, it can thereafter use that key as authentication to send messages. A can revoke the key according to its own logic at any time, and re-issue a new key with a new stamp. B is expected but not required to cease communication attempts after its key is rejected. This solves a fundamental problem of email, which is that possession of an address is sufficient for communication; instead, possession of an address is merely sufficient to <i>request</i> communication.

<p>Obviously the mechanism by which the connection is created is the weak link: there must be a very small, extremely proscribed set of allowed metadata in the connection request. There could also be an optional "connection password": if the request contains the password (which might be transmitted independently via IM, word of mouth, or attached to a business card) then the metadata accepted as part of the request might be expanded. 

<p>Spam is much easier to handle in this model. Communication attempts from entities with no connection would be ignored -- no more AI-level intelligence required to determine whether a message was solicited or not. There would still be connection spam, but the protocol would allow only one or two connection requests -- subsequent attempts would be ignored by default, and blacklisting an entire domain would be simple, possibly even automatic after a sufficient number of ignored requests. Some nets might even maintain a whitelist of trusted social networks, and only allow unlisted networks to send requests at all if they contained the "connection password". Simple heuristics would allow automatic blacklisting of a domain that generated hundreds of rejected or ignored requests.

<h3>In-network searching</h3>

<p>A thornier problem, but an interesting solution presents itself: a search within your social network would become, by default, a distributed operation. A search request would be broadcast to all the domains to which you have connections, asynchronously, and they would be permitted a time window in which to respond. The search request would be in an open format related to the identity metadata: domains receiving a search request they do not understand or do not allow would be permitted to ignore the request, either silently or sending a specific HTTP response to allow the searching server to efficiently skip that request in future.

<p>Thus indexing becomes a simpler problem. Instead of a single global index owned by any one company, each domain is its own index. Simply by being a smaller network, the problem becomes simpler -- the global social database is, in effect, sharded across hundreds of domains; the searching is distributed ("mapped") to hundreds of domains, and the originating server needs only to perform an aggregation operation (a "reduction").

<p>Depending on the rules of the domains, some searches might be forwarded, to allow for 2nd and 3rd-degree searches. This would allow for an even more powerful distributed search; a multi-stage map/reduce as each network rolls up its own results for the next. The network latency issues here are considerable; some degree of caching should probably be permitted on the originating server side. The degree to which searching is effective is entirely dependent on both the user and the domain. Professional networks might allow two degrees of search; dating networks<a href="#networktypes">**</a> might allow four or five; strictly personal ones might ignore searches entirely.

<h3>Ad-hoc group communication</h3>

<p>Another pub/sub mechanism. A group would be just another entity: one user would create group.identity@example.com, and other users would provide that entity with a key to join the group, and revoke it when they left.

<h3>Events and Invitations</h3>

<p>An extension to the metadata of either a private or personal message, containing the identity of a new entity. An RSVP simply becomes a connection request; you subscribe to the event just like you subscribe to a group, and leave it by revoking the key.

<h2>Next steps</h2>

<p>This is the seed of this idea, dreamed up while flying back from Chicago. Clearly there are holes, edge-cases, and more. But this is the right shape of the idea, and it's pretty exciting, I think. Do let me know what you think.

<p>Some areas that need work:
<ul>
<li>Peer identities: if bob@yahoo.com and bob@hotmail.com are the same, just disconnected for historical reasons, a connection type should exist to indicate that they are the same.
<li>Search: I'm painting in really broad strokes here. Presumably peer-to-peer file-sharing networks already have this problem solved to some degree.
<li>Oh hell, all of it.
</ul>

<hr>

<p class="footnote"><a name="www">*</a> I'm using WWW here not to be old-fashioned, but to distinguish between the web of pages (the true WWW) and the secondary web of entities, people and objects that some of those pages represent.

<p class="footnote"><a name="networktypes">**</a> Note that the protocol doesn't know if a network is social, professional, or romantic -- that's defined ad-hoc by the entities that make up the graph. By using professional.identity@example1.com and making connections to professional.identity@example2.com, you are creating a de-facto professional network. If you start making connections to your romantic identity at the same time, that's up to you -- or possibly to the rules defined by your domain.]]></content>
							<category term="buzz" scheme="http://www.seldo.com/tags/buzz" label="buzz"/>
							<category term="emergentweb" scheme="http://www.seldo.com/tags/emergentweb" label="emergentweb"/>
							<category term="facebook" scheme="http://www.seldo.com/tags/facebook" label="facebook"/>
							<category term="graph" scheme="http://www.seldo.com/tags/graph" label="graph"/>
							<category term="network" scheme="http://www.seldo.com/tags/network" label="network"/>
							<category term="open" scheme="http://www.seldo.com/tags/open" label="open"/>
							<category term="protocol" scheme="http://www.seldo.com/tags/protocol" label="protocol"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="social" scheme="http://www.seldo.com/tags/social" label="social"/>
					</entry>
			<entry>
			<title><![CDATA[Apple's ban on intermediate platforms, and what this means for web apps]]></title>
			<link href="http://www.seldo.com/weblog/2010/04/11/apples_ban_on_intermediate_platforms_and_what_this_means_for_web_apps"/>
			<id>http://www.seldo.com/weblog/2010/04/11/apples_ban_on_intermediate_platforms_and_what_this_means_for_web_apps</id>
			<updated>2010-04-11T18:30:13-05:00</updated>
			<summary><![CDATA[Dear web developers hoping to build apps for the iPhone: we're fucked. But Apple is shooting itself in the foot.

Some background

There's a big fuss right now because as part of the iPhone OS 4.0 release, Apple has explicitly banned the use of intermediate platforms to create iPhone apps (and hence presumably iPad apps, since they run the same operating system).

Their motivations for doing so are the subject of debate. The supremely well-informed Jon Gruber of Daring Fireball thinks Apple is doing it to lock in iPhone as the de facto standard for mobile development, in the same way that Microsoft managed to get a lock on the PC market despite the many flaws of Windows -- by attracting critical mass of developers, and hence apps, and hence users, and hence developers, in a virtuous, monopoly-creating feedback loop.

This interpretation has been tacitly acknowledged by Steve Jobs himself. However, Jobs placed the emphasis on another aspect of the post, saying

intermediate layers between the platform and the...]]></summary>
			<content type="html"><![CDATA[<p>Dear web developers hoping to build apps for the iPhone: we're fucked. But Apple is shooting itself in the foot.

<h2>Some background</h2>

<p>There's a big fuss right now because as part of the iPhone OS 4.0 release, Apple has <a href="http://brainstormtech.blogs.fortune.cnn.com/2010/04/11/has-steve-jobs-gone-mad/">explicitly banned the use of intermediate platforms</a> to create iPhone apps (and hence presumably iPad apps, since they run the same operating system).

<p>Their motivations for doing so are the subject of debate. The supremely well-informed Jon Gruber of Daring Fireball thinks Apple is doing it <a href="http://daringfireball.net/2010/04/why_apple_changed_section_331">to lock in iPhone as the de facto standard</a> for mobile development, in the same way that Microsoft managed to get a lock on the PC market despite the many flaws of Windows -- by attracting critical mass of developers, and hence apps, and hence users, and hence developers, in a virtuous, monopoly-creating feedback loop.

<p>This interpretation has been tacitly acknowledged by <a href="http://www.taoeffect.com/blog/2010/04/steve-jobs-response-on-section-3-3-1/">Steve Jobs himself</a>. However, Jobs placed the emphasis on another aspect of the post, saying
<blockquote>
intermediate layers between the platform and the developer ultimately produces sub-standard apps and hinders the progress of the platform.
</blockquote>

<p>This spins it as a user-friendly decision rather than a ruthless business one, but there's no reason it can't be both, and one imagines it being both would be just fine with Mr. Jobs.

<p>Whether or not Apple is correctly positioned to dominate mobile apps a la Microsoft is a subject for another post. But right now, I think the idea that intermediate platforms are unwelcome on the iPhone raises an important question for web-native developers, such as myself.

<h2>Does the web count as an intermediate platform?</h2>

<p>When iPhone first launched, Apple announced that <a href="http://www.apple.com/pr/library/2007/06/11iphone.html">apps will be web apps</a>. They were supposed to be first-class citizens and in fact were the only way of producing apps for the phone. There is even still a <a href="http://www.apple.com/webapps/whatarewebapps.html">web apps directory</a>, a neglected, poor man's App Store for web apps.

<p>Since then the real SDK was introduced. It's unclear whether it was planned all along, or if it was a strategy adopted after Apple saw the enthusiasm and creativity going into jailbreaking, which allowed developers to run custom apps on iPhone before that was officially allowed. Meanwhile, the APIs web developers were promised for iPhone never materialized: location is now available, but a hundred others are not, and with the release of iPhone OS 4.0 that list has grown.

<p>And now the official word is that intermediate platforms are not welcome to make apps for iPhone. I can't think of a more obvious and widespread intermediate platform than the browser environment, and whether you believe the motivation is a better user experience or a hard-nosed attempt to monopolize mobile development, web apps lose.

<p>Because there's no denying it: web apps provide worse user experiences than native apps on the iPhone right now. They don't <i>have</i> to -- Apple could expose all the APIs via the web, and add extensions and libraries to Safari that would allow the beautiful, fine-grained UI controls currently available to native apps. In fact, they <a href="http://www.nxfx.com/blog/iphone-development/apples-pastry-kit-iphone-javascript-toolkit/">already built one, called PastryKit</a>. Its non-release, despite being high quality and inclusion-ready, is another indicator that Apple is deliberately ignoring web apps as a platform for the iPhone.

<p>Our one hope as web developers for developing on iPhone with full APIs was being able to build web apps that would get compiled down to native code (or, on clever platforms like <a href="http://www.appcelerator.com/">Appcelerator Titanium</a>, run as WebKit instances inside a customized, lightweight native app). With this change of the rules, the future of platforms like these looks very uncertain, and the door has been slammed in our faces.

<p>The illustrious <a href="http://www.quirksmode.org">ppk</a> thinks <a href="http://www.quirksmode.org/blog/archives/2009/11/native_iphone_a.html">all iPhone apps should be web apps</a>. I think the chances are slim, and getting slimmer all the time.

<h2>It's a damn shame. And the wrong call.</h2>

<p>Everyone knows the largest development platform in the world isn't Windows, or Mac, or desktop or mobile: it's the web, the only platform that runs on all of those, plus nearly everywhere else. Ignoring the giant and ever-growing contingent of web-native developers -- people who grew up writing apps for the web, have never written apps for anything else, and see little reason to start -- is to ignore the tide of history.

<p>The unstoppable march of technology has taught me that what ten years ago seemed like a ludicrously inefficient idea soon becomes standard practice. Running an entire IDE as a Java app, for instance, or installing each major component of my development environment in its own separate virtual machine. Computational efficiency is repeatedly sacrificed for speed of development, because computers are cheap and getting faster all the time, while developers remain expensive and oh-so-slow.

<p>So it doesn't matter if, right now, native mobile apps are faster. That advantage is momentary. It <i>does</i> matter that the experience is better, but that just means there's an opening in the market for a platform that really does treat web apps like first-class citizens. Android or, perhaps, Palm, if they get acquired by somebody more capable of building out a platform.

<p>At no point will web apps be <i>faster</i> than native apps. And the experience might never be quite as good. But one day it will be "good enough". The desktop hit that tipping point more than five years ago -- what's the last really exciting new desktop app you installed? In my case it was Chrome, and that was because it was a better browser. To pretend that won't ever happen on mobile devices is silly.

<p>Once it happens, the web will win again. Attempts to lock web apps to your platform with useful but proprietary extensions will fail, as Microsoft failed with ActiveX. Developers will put up with building simpler apps because they run everywhere, really everywhere. Developers go where the users are, and the users, no matter who made their hardware or wrote their software, are always on the web.

<p>The web will win, eventually. But in the meantime, find somebody who knows Objective-C.]]></content>
							<category term="apple" scheme="http://www.seldo.com/tags/apple" label="apple"/>
							<category term="development" scheme="http://www.seldo.com/tags/development" label="development"/>
							<category term="iphone" scheme="http://www.seldo.com/tags/iphone" label="iphone"/>
							<category term="programming" scheme="http://www.seldo.com/tags/programming" label="programming"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="web" scheme="http://www.seldo.com/tags/web" label="web"/>
					</entry>
			<entry>
			<title><![CDATA[Re-Expressed]]></title>
			<link href="http://www.seldo.com/weblog/2010/04/06/reexpressed"/>
			<id>http://www.seldo.com/weblog/2010/04/06/reexpressed</id>
			<updated>2010-04-06T14:39:19-05:00</updated>
			<summary><![CDATA[A few weeks ago the Trinidad Express, one of Trinidad and Tobago's major national newspapers, redesigned its website. The result is an unreadable mess of tiny fonts and hundreds of blinking, flashing ads. Literally unable to read it myself, I quickly hacked-up a script that reformatted the front page. Some friends liked it, so I expanded it a bit.

So now, after a few weeks of tweaking, I give you Re-Expressed: the Trinidad Express, made readable. I hope you find it useful.]]></summary>
			<content type="html"><![CDATA[<p>A few weeks ago the <a href="http://www.trinidadexpress.com">Trinidad Express</a>, one of Trinidad and Tobago's major national newspapers, redesigned its website. The result is an unreadable mess of tiny fonts and hundreds of blinking, flashing ads. Literally unable to read it myself, I quickly hacked-up a script that reformatted the front page. Some friends liked it, so I expanded it a bit.

<p>So now, after a few weeks of tweaking, I give you <a href="http://www.reexpressed.com/">Re-Expressed</a>: the Trinidad Express, made readable. I hope you find it useful.]]></content>
							<category term="express" scheme="http://www.seldo.com/tags/express" label="express"/>
							<category term="newspaper" scheme="http://www.seldo.com/tags/newspaper" label="newspaper"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="trinidad" scheme="http://www.seldo.com/tags/trinidad" label="trinidad"/>
					</entry>
			<entry>
			<title><![CDATA[3 years, 3 days]]></title>
			<link href="http://www.seldo.com/weblog/2010/03/22/3_years_3_days"/>
			<id>http://www.seldo.com/weblog/2010/03/22/3_years_3_days</id>
			<updated>2010-03-22T00:27:34-05:00</updated>
			<summary><![CDATA[It was March 18th, 2007 when Barack Obama visited Oakland and I went to see him speak in person for the first time. It was there I first heard him promise universal healthcare by the end of his first term in office. "And I want to be accountable for this," he said. Of his speech that day, I said:


Above all, it was a message of optimism: yes, the system is broken, but it can be fixed, by us, right now. And this funny, sincere, incredibly, hypnotically charismatic man seems like just the right guy to do it


Today, the trust he inspired has been validated, and the promise he made has been -- as far as I am concerned -- kept. Sure, the coverage is not quite universal. And lots of things won't kick in until 2014, after the end of his first term. But that's politics. It's a business of compromise, and incremental advance. But he promised the biggest change to healthcare in a generation, and here it is.

Good going, Barry.]]></summary>
			<content type="html"><![CDATA[<p>It was March 18th, 2007 when Barack Obama visited Oakland and I <a href="/weblog/2007/03/18/inspirational">went to see him speak in person</a> for the first time. It was there I first heard him promise universal healthcare by the end of his first term in office. "And I want to be accountable for this," he said. Of his speech that day, I said:

<blockquote>
Above all, it was a message of optimism: yes, the system is broken, but it can be fixed, by us, right now. And this funny, sincere, incredibly, hypnotically charismatic man seems like just the right guy to do it
</blockquote>

<p>Today, the trust he inspired has been validated, and the promise he made has been -- as far as I am concerned -- <a href="http://tpmdc.talkingpointsmemo.com/2010/03/dems-pass-historic-health-care-bill.php">kept</a>. Sure, the coverage is not quite universal. And lots of things won't kick in until 2014, after the end of his first term. But that's politics. It's a business of compromise, and incremental advance. But he promised the biggest change to healthcare in a generation, and here it is.

<p>Good going, Barry.]]></content>
							<category term="barackobama" scheme="http://www.seldo.com/tags/barackobama" label="barackobama"/>
							<category term="healthcare" scheme="http://www.seldo.com/tags/healthcare" label="healthcare"/>
							<category term="politics" scheme="http://www.seldo.com/tags/politics" label="politics"/>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="usa" scheme="http://www.seldo.com/tags/usa" label="usa"/>
					</entry>
			<entry>
			<title><![CDATA[Seldo.Com is 10]]></title>
			<link href="http://www.seldo.com/weblog/2010/03/15/seldocom_is_10"/>
			<id>http://www.seldo.com/weblog/2010/03/15/seldocom_is_10</id>
			<updated>2010-03-15T14:04:41-05:00</updated>
			<summary><![CDATA[I registered this domain ten years ago today, sitting in the chair by the window in my brother's apartment in Clapham South -- I had just moved to the UK from Trinidad, and hadn't found my own apartment yet.

The 10th anniversary of this blog is a little further away -- the site was mostly static until March 2001. This morning I grabbed a quick set of screenshots of some of the oldest designs of the site; they are pretty funky.]]></summary>
			<content type="html"><![CDATA[<p>I registered this domain ten years ago today, sitting in the chair by the window in my brother's apartment in Clapham South -- I had just moved to the UK from Trinidad, and hadn't found my own apartment yet.

<p>The 10th anniversary of this blog is a little further away -- the site was mostly static until <a href="http://seldo.com/weblog/2001/03/27/ive_set_up_my_own_blog_hopefully_this_will_help_keep_my_content_current_and_avoid_the">March 2001</a>. This morning I grabbed a <a href="http://www.flickr.com/photos/seldo/sets/72157623626684458/">quick set of screenshots</a> of some of the oldest designs of the site; they are pretty funky.]]></content>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
					</entry>
			<entry>
			<title><![CDATA[On leaving Yahoo!]]></title>
			<link href="http://www.seldo.com/weblog/2010/02/19/on_leaving_yahoo"/>
			<id>http://www.seldo.com/weblog/2010/02/19/on_leaving_yahoo</id>
			<updated>2010-02-19T13:58:37-06:00</updated>
			<summary><![CDATA[Today is my last day at Yahoo!. It's been four years -- more than twice as long as I've held any other job.

I remember very clearly, when I was fifteen and had had Internet access for only a few weeks, building my first web page and thinking "wow! This is fun! I wish I could get a job doing this!" Then I tried to think of big, web companies I'd really want to work for, and the first one was Yahoo!. "But they've already built their website", I thought to myself, "They don't need another web developer. Plus, I don't know Perl."

So nine years later, when Yahoo! contacted me and offered me a job in the London office, it was a dream come true. I sent excited emails to friends and family, I printed out a huge "I WORK FOR YAHOO" banner above my desk at home (in a stolen copy of the Yahoo! font). I know it sounds terribly cheesy, but I really did.

Joining Yahoo! was amazing. We're so *big*! We have our own fork of Apache, our own version of PHP, dozens and dozens of our own specialized products and plugins (I...]]></summary>
			<content type="html"><![CDATA[<p>Today is my last day at Yahoo!. It's been four years -- more than twice as long as I've held any other job.

<p>I remember very clearly, when I was fifteen and had had Internet access for only a few weeks, building my first web page and thinking "wow! This is fun! I wish I could get a job doing this!" Then I tried to think of big, web companies I'd really want to work for, and the first one was Yahoo!. "But they've already built their website", I thought to myself, "They don't need another web developer. Plus, I don't know Perl."

<p>So nine years later, when Yahoo! contacted me and offered me a job in the London office, it was a dream come true. I sent excited emails to friends and family, I printed out a huge "I WORK FOR YAHOO" banner above my desk at home (in a stolen copy of the Yahoo! font). I know it sounds terribly cheesy, but I really did.

<p>Joining Yahoo! was amazing. We're so *big*! We have our own fork of Apache, our own version of PHP, dozens and dozens of our own specialized products and plugins (I love yinst!). In my very first week, I was already making changes to websites seen by millions of people (the FIFA world cup site). And the resources we can draw on! The devel-frontend list taught me volumes about CSS and Javascript, as did internal training for YUI.

<p>For a young web developer, there is absolutely no better place to work than here. I got to build not just big sites but great sites, working with people who are absolutely at the top of their game in every department -- design, engineering, ops, and QA. Plus there are hack days -- I love hack days! You get to build the coolest thing you can think of, as fast as you can, and show it off to hundreds of appreciative engineers. There's very few places in the world where you can do that.

<p>Yahoo! has made me a better web developer, a better engineer, and a better teammate. I have learned so much from this company, and for that I am deeply, truly grateful. Being a Yahoo has been a big part of my life -- and I know, from seeing it in others, that you never really stop being a Yahoo, even when you're working somewhere else.

<p>So then, why am I leaving? Because I have grown as much as I can. In my first year I grew as a web developer, in JS and CSS. In my second I grew as an engineer, architecting a whole website from scratch. In my third I grew as a database developer -- I became "the database guy" to some of you, which I still think is funny. I'm a web guy! But in this last year I have mostly grown frustrated. I'm not saying I have nothing more to learn, but I need to go somewhere else to learn it.]]></content>
							<category term="site:seldo.com" scheme="http://www.seldo.com/tags/site:seldo.com" label="site:seldo.com"/>
							<category term="snowballfactory" scheme="http://www.seldo.com/tags/snowballfactory" label="snowballfactory"/>
							<category term="yahoo" scheme="http://www.seldo.com/tags/yahoo" label="yahoo"/>
					</entry>
	</feed>