<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Stargazer, coder, person.</description><title>Adam Lloyd</title><generator>Tumblr (3.0; @alloy-d)</generator><link>http://text.alloy-d.net/</link><item><title>In which I philosophize about Facebook more than I ever wanted to</title><description>&lt;p&gt;I signed up for a Facebook account in 2007, after the NJ Governor’s School in the Sciences. One of my friends there insisted that I do so because Facebook was a great way to keep in touch.&lt;/p&gt;

&lt;p&gt;Last weekend, I posted a status pointing people to my other contact information, disabled posting on my wall and commenting on my posts, and mapped &lt;code&gt;&lt;a href="http://www.facebook.com"&gt;www.facebook.com&lt;/a&gt;&lt;/code&gt; to 127.0.0.&lt;em&gt;something&lt;/em&gt; in &lt;code&gt;/etc/hosts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Facebook &lt;em&gt;is&lt;/em&gt; a great way to keep in touch with people. I’m not arguing with that point (even if I do think it can be taken to an extreme—but that’s probably related to the way &lt;em&gt;I&lt;/em&gt; use Facebook).&lt;/p&gt;

&lt;p&gt;Before I &lt;em&gt;do&lt;/em&gt; try to go anywhere with this, it’s probably necessary to describe how I use Facebook.&lt;/p&gt;

&lt;p&gt;One of the weirdest things about my Facebook usage is that I prune my list of friends. A lot of people see Facebook as a way of keeping track of every person they’ve ever met, &lt;em&gt;ever&lt;/em&gt;. I am not one of those people.&lt;/p&gt;

&lt;p&gt;Facebook provides me a connection (albeit superficial) to people—it allows me easy and fairly reliable communication with them in several formats, and it gives me a window into their lives. There are people whose lives I &lt;em&gt;want&lt;/em&gt; a window into, because I care about them or I think they’re interesting or I think they’re going places, but—I’ll be honest—that’s not &lt;em&gt;every person I ever met in high school&lt;/em&gt;. I’m actually really uninterested in hearing about and seeing all the babies that have been had by people in my graduating class. If nothing else, it’s a lot of noise that keeps me from the things I actually &lt;em&gt;am&lt;/em&gt; interested in.&lt;/p&gt;

&lt;p&gt;The flip-side of this is that by creating a Facebook friendship with someone, I am also giving them a window into &lt;em&gt;my&lt;/em&gt; life.&lt;sup id="fnref:p3324258776-1"&gt;&lt;a href="#fn:p3324258776-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt; An advantage of maintaining a sparse friends list is that I don’t feel extreme pressure to keep this window small. Of course, I don’t pour my soul out in my Facebook statuses&lt;sup id="fnref:p3324258776-2"&gt;&lt;a href="#fn:p3324258776-2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt;, but I do enjoy having what is basically a contextualized Twitter: the people who read my Facebook statuses know me and my situation well enough that they can probably appreciate whatever I’m saying, and I am comfortable being a little more personal with my Facebook friends than I am with the Internet at large.&lt;/p&gt;

&lt;p&gt;That’s where I noticed a problem.&lt;/p&gt;

&lt;p&gt;At some point, my Facebook statuses moved away from being Twitter-esque witty one-liners that make sense to my friends. They became either very concrete and matter-of-fact or very serious, and I noted at the time that I didn’t like the trend. It eventually felt like Facebook was largely just giving me an unwanted outlet for negativity.&lt;sup id="fnref:p3324258776-3"&gt;&lt;a href="#fn:p3324258776-3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Interspersed with the ugly statuses were the occasional references to something interesting or links to something else on the Internet, along with lengthy related arguments or rants.&lt;sup id="fnref:p3324258776-4"&gt;&lt;a href="#fn:p3324258776-4" rel="footnote"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Cutting out Facebook left me with a stream of things to express and no &lt;em&gt;de facto&lt;/em&gt; place to express them—but they didn’t seem lost! Short things worth expressing adapted themselves to my Twitter feed, and longer things (clearly) found their way to my blog. I was actually a bit surprised by this, and it highlighted what I think is &lt;em&gt;actually&lt;/em&gt; a problem with Facebook.&lt;/p&gt;

&lt;p&gt;Facebook has too much functionality.&lt;sup id="fnref:p3324258776-5"&gt;&lt;a href="#fn:p3324258776-5" rel="footnote"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;It provides a person-to-person communication platform, and (as I said in the start of this post) it does that well. It has immediate, short-form (Facebook Chat) and asynchronous, long-form (messages) methods of communication. (There’s also super-short-form communication through the poke, for all those things you can say in one bit.)&lt;/p&gt;

&lt;p&gt;It also provides a publishing platform of sorts. I already mentioned that it works like a contextualized Twitter; Facebook Notes also give you a medium for long-form writing, and then there are photos and videos etc. This resembles subscriber-based systems like Twitter and blogs, except that here, subscription is necessarily mutual.&lt;sup id="fnref:p3324258776-6"&gt;&lt;a href="#fn:p3324258776-6" rel="footnote"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;To me, these two feature sets (to say nothing of the zillion &lt;em&gt;other&lt;/em&gt; things Facebook does, though games are another good example) create a conflict. The set of people I would like the ability to communicate with—this actually &lt;em&gt;could&lt;/em&gt; include my entire high school—is much larger than the set of people I want to subscribe to my statuses and notes and photos, and that set of people might even be larger than the set of people to whom &lt;em&gt;I&lt;/em&gt; want to subscribe.&lt;/p&gt;

&lt;p&gt;In fact, I would be perfectly happy ditching Facebook entirely and doing whatever broadcasting I want to do elsewhere, except that that necessarily means that I give up my ability to &lt;em&gt;communicate&lt;/em&gt; with a bunch of people I actually do want to communicate with.&lt;/p&gt;

&lt;p&gt;I am not sure what the solution is. I certainly intend to use external tools dedicated to broadcasting for doing broadcasting. There is no replacement for my “contextualized Twitter”, but Twitter and Tumblr exist specifically to solve problems in expression that I’ve been trying to solve with Facebook, and my feeds from both of those platforms can be exported to Facebook so that anyone who cares doesn’t miss them.&lt;/p&gt;

&lt;p&gt;But even if I outsource my publishing and use Facebook only for communication, I am still stuck with all the things I don’t want from Facebook. My “outlet for negativity” issue is obviously a personal problem, but the deluge of information I don’t want (even &lt;em&gt;with&lt;/em&gt; my pruned friends list) is not something that can entirely be avoided.&lt;/p&gt;

&lt;hr&gt;&lt;p&gt;Having &lt;em&gt;complained&lt;/em&gt; about Facebook more than enough, I want to acknowledge a few things.&lt;/p&gt;

&lt;p&gt;One, I don’t think that Facebook is inherently evil or out to cause problems. Its feature sets do present conflicts, but I imagine that it would not be a large enough platform for these conflicts to &lt;em&gt;matter&lt;/em&gt; if it did not provide the broad array of functionality that it does.&lt;/p&gt;

&lt;p&gt;Two, I think it is much to Facebook’s credit that it also provides useful intersections of these feature sets. Going from the examples I gave of person-to-person communication and publishing, we get wall posts and tagging in statuses. Both of these are communications directed at people, but they’re also broadcast like regular posts.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p3324258776-1"&gt;
&lt;p&gt;Tangent: I had a computer science professor once who totally did not understand that Facebook friendships are not one-sided. As a result, we had to implement a Facebook “clone” in terms of her subscriber-model nonsense. There are a lot of words I could use to describe that; here, I’ll choose “humorous”. &lt;a href="#fnref:p3324258776-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p3324258776-2"&gt;
&lt;p&gt;Actually, I avoid doing so. If something has more than a little emotional charge, I rarely post it on Facebook, and in the event that I do, it’s usually hidden behind at least one layer of abstraction that would prevent it from being interpreted by anyone to whom it would be meaningful. &lt;a href="#fnref:p3324258776-2" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p3324258776-3"&gt;
&lt;p&gt;This timeline of Facebook usage is accompanied by a timeline of personal social issues. At any point where things don’t make sense on their own, you can mentally rewrite it to “&lt;em&gt;Some upsetting personal thing was bugging me, and&lt;/em&gt; (whatever).” &lt;a href="#fnref:p3324258776-3" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p3324258776-4"&gt;
&lt;p&gt;For some reason, I haven’t learned that you can’t spark serious discussion on Facebook, no matter how awesome your friends are. &lt;a href="#fnref:p3324258776-4" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p3324258776-5"&gt;
&lt;p&gt;I’ll admit that I try to shove the Gospel of Simplicity in plenty of places it doesn’t belong, but I honestly hadn’t seen any obvious relation to Facebook before now. &lt;a href="#fnref:p3324258776-5" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p3324258776-6"&gt;
&lt;p&gt;I also dislike that you are theoretically forced to consume as much information as you produce, multiplied by the number of friends you have. This is another reason I distanced myself from Facebook, but for my specific complaint you can apply footnote #3. &lt;a href="#fnref:p3324258776-6" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://text.alloy-d.net/post/3324258776</link><guid>http://text.alloy-d.net/post/3324258776</guid><pubDate>Wed, 16 Feb 2011 03:24:20 -0500</pubDate></item><item><title>Fun fact: Nox wasn’t designed to look beautiful on its own. It was designed to be a simple...</title><description>&lt;p&gt;Fun fact: &lt;a href="http://noxtheme.tumblr.com/"&gt;Nox&lt;/a&gt; wasn’t &lt;a href="http://text.alloy-d.net/post/734255575/meet-nox"&gt;designed&lt;/a&gt; to look beautiful on its own. It was designed to be a simple textual theme that I could eventually throw something quiet and pretty behind to make it all look amazing. (I have several such somethings sketched out in a notebook, in fact.)&lt;/p&gt;

&lt;p&gt;Half a year later, I throw &lt;a href="http://text.alloy-d.net/post/2726874305/so-glad-ive-discovered-how-much-fun-canvas"&gt;some silly &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; doodle&lt;/a&gt; behind it, and I discover that I pretty much met that design goal.&lt;sup id="fnref:p2727805364-1"&gt;&lt;a href="#fn:p2727805364-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p2727805364-1"&gt;
&lt;p&gt;And that being the case, I will now proceed to annoy everyone who visits my blog in Chrome or Safari. &lt;a href="#fnref:p2727805364-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://text.alloy-d.net/post/2727805364</link><guid>http://text.alloy-d.net/post/2727805364</guid><pubDate>Thu, 13 Jan 2011 06:21:00 -0500</pubDate></item><item><title>So glad I’ve discovered how much fun &lt;canvas&gt;...</title><description>&lt;img src="http://28.media.tumblr.com/tumblr_leyd5zs3gB1qzx1x6o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;So glad I’ve discovered how much fun &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; doodles are. Now I can make really simple things that still &lt;em&gt;only work in Chrome&lt;/em&gt;. :-(&lt;/p&gt;</description><link>http://text.alloy-d.net/post/2726874305</link><guid>http://text.alloy-d.net/post/2726874305</guid><pubDate>Thu, 13 Jan 2011 03:34:46 -0500</pubDate></item><item><title>A birthday present</title><description>&lt;a href="http://winterbreak.alloy-d.net/birthday-gift-for-one-of-the-awesomest-people-in-the-world"&gt;A birthday present&lt;/a&gt;: &lt;p&gt;From &lt;a href="http://winterbreak.alloy-d.net/post/2700500348/a-birthday-present" class="tumblr_blog"&gt;my blog about this winter break&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;This was &lt;a href="http://winterbreak.alloy-d.net/post/2503447066/javascript-and-canvas-the-white-ones"&gt;that little side project&lt;/a&gt; I was so excited about, completed and delivered to its recipient via the very convenient link-to-somewhere-on-the-Internet method this morning.&lt;/p&gt;

&lt;p&gt;Visually, it’s a combination of &lt;a href="http://games.adultswim.com/robot-unicorn-attack-twitchy-online-game.html"&gt;Robot Unicorn Attack&lt;/a&gt; and &lt;a href="http://www.kongregate.com/games/arawkins/dolphin-olympics-2"&gt;Dolphin Olympics 2&lt;/a&gt;. Technically, it’s a big animated &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; doodle that I had quite a bit of fun making. The repository on &lt;a href="http://github.com/alloy-d/canvas51"&gt;GitHub&lt;/a&gt; serves as a pretty interesting record of my progression toward JavaScript virtuosity.&lt;/p&gt;

&lt;p&gt;(And of course, since it’s a big animated &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; doodle, don’t bother looking at it in anything other than Chrome or Safari. It &lt;em&gt;runs&lt;/em&gt; in Firefox and Opera, but it ain’t pretty.)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Personally, I’m really happy with the way it came out (with the exception of the unconvincing dashing “unicorn” and the oddly silent fireworks). It’s especially cool since it’s the second &lt;code&gt;&lt;canvas&gt;&lt;/code&gt; doodle I’ve ever made (and the first was a static image that was cute conceptually but pretty awful technically).&lt;/p&gt;

&lt;p&gt;I can’t overstate the fun I had in making it, but instead of rambling about that, I’ll just list a few choice moments in development, referenced by commit message in chronological order:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/commit/342ee87771e247bfb6d3c62220b6162bbd1a8970"&gt;“HOLD ON, I CAN DO THIS WITH FOUR FEWER CANVASES AND 6000% LESS STUPIDITY.”&lt;/a&gt;&lt;sup id="fnref:p2700892177-1"&gt;&lt;a href="#fn:p2700892177-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/commit/755257bcd0e0bd89a7a224e6fbc07285a5ec366e"&gt;“OMIGOSH THAT IS SOOO COOL”&lt;/a&gt;&lt;sup id="fnref:p2700892177-2"&gt;&lt;a href="#fn:p2700892177-2" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/compare/4e8ba35757dbc0d801c9...03079efe26a902b5837c"&gt;“Oh? OH?!” / “YEAH! HE GOT IT! WHOO! /eyeroll”&lt;/a&gt;&lt;sup id="fnref:p2700892177-3"&gt;&lt;a href="#fn:p2700892177-3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/commit/a1228a7b00fb79f4953d1cebc1a64c5a13ab7fa4"&gt;“DOLPHINS IN PARTY HATS!”&lt;/a&gt;&lt;sup id="fnref:p2700892177-4"&gt;&lt;a href="#fn:p2700892177-4" rel="footnote"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/commit/c6bbab8cf2bca011100d695d170c4d0cf2ae9149"&gt;“Nothing to do with the project, but too hilarious for words.”&lt;/a&gt;&lt;sup id="fnref:p2700892177-5"&gt;&lt;a href="#fn:p2700892177-5" rel="footnote"&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/alloy-d/canvas51/commit/f3e1651abe8252f0b0905889114ddc4a1e466a8c"&gt;“FAT SEIZURE-INDUCING PARTY DOLPHINS. I made a mistake somewhere…”&lt;/a&gt;&lt;sup id="fnref:p2700892177-6"&gt;&lt;a href="#fn:p2700892177-6" rel="footnote"&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p2700892177-1"&gt;
&lt;p&gt;This was particularly cool because it was a turning point after which most of the project was rewritten to accommodate lessons I’d learned so far. &lt;a href="#fnref:p2700892177-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p2700892177-2"&gt;
&lt;p&gt;In which stuff starts to happen and looks cool. &lt;a href="#fnref:p2700892177-2" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p2700892177-3"&gt;
&lt;p&gt;In which I finally realize that JavaScript being a functional language means that JavaScript is a functional language. &lt;a href="#fnref:p2700892177-3" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p2700892177-4"&gt;
&lt;p&gt;My favorite self-authored commit message ever. &lt;a href="#fnref:p2700892177-4" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p2700892177-5"&gt;
&lt;p&gt;In which the screen is consumed by one giant dolphin rising from the ocean. &lt;a href="#fnref:p2700892177-5" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p2700892177-6"&gt;
&lt;p&gt;In which I reference &lt;code&gt;this.context&lt;/code&gt; in a nested function, where &lt;code&gt;this&lt;/code&gt; is &lt;code&gt;null&lt;/code&gt; and so I get the &lt;em&gt;global&lt;/em&gt; &lt;code&gt;context&lt;/code&gt; variable instead. (Also, my second favorite self-authored commit message ever.) &lt;a href="#fnref:p2700892177-6" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://text.alloy-d.net/post/2700892177</link><guid>http://text.alloy-d.net/post/2700892177</guid><pubDate>Tue, 11 Jan 2011 14:24:30 -0500</pubDate></item><item><title>So let’s say you have a photo blog. Thoughts on this?...</title><description>&lt;img src="http://26.media.tumblr.com/tumblr_lesqt6BOZ21qzx1x6o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;So let’s say you have a photo blog. Thoughts on &lt;a href="http://35million.tumblr.com"&gt;this&lt;/a&gt;? (&lt;em&gt;Disclaimers: it’s basically featureless, really really slow, and probably buggy. Oh, and it basically only works in WebKit.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edit&lt;/strong&gt;: Ha. Haha. My thoughts? There’s no reason at all for this to use &lt;code&gt;&lt;canvas&gt;&lt;/code&gt;.&lt;/p&gt;</description><link>http://text.alloy-d.net/post/2681616785</link><guid>http://text.alloy-d.net/post/2681616785</guid><pubDate>Mon, 10 Jan 2011 02:43:00 -0500</pubDate><category>I thought Firefox 4 was supposed to *not* suck...</category><category>not curious enough about Opera to install it</category></item><item><title>"Programming a computer is simply the official, professional method of telling the machine exactly..."</title><description>“Programming a computer is simply the official, professional method of telling the machine exactly what it can do with itself. If you can imagine it on the screen, you can make it happen.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Dan Gookin&lt;/em&gt;</description><link>http://text.alloy-d.net/post/2674192151</link><guid>http://text.alloy-d.net/post/2674192151</guid><pubDate>Sun, 09 Jan 2011 17:32:17 -0500</pubDate></item><item><title>HTML5 Canvas Cheat Sheet</title><description>&lt;a href="http://blog.nihilogic.dk/2009/02/html5-canvas-cheat-sheet.html"&gt;HTML5 Canvas Cheat Sheet&lt;/a&gt;: &lt;p&gt;Handy!&lt;/p&gt;</description><link>http://text.alloy-d.net/post/2463527660</link><guid>http://text.alloy-d.net/post/2463527660</guid><pubDate>Sat, 25 Dec 2010 21:08:22 -0500</pubDate></item><item><title>"While a computer is very complex, it is not nearly as complex as the various comings and goings and..."</title><description>“While a computer is very complex, it is not nearly as complex as the various comings and goings and interrelationships of the human zoo; but, unlike formal or informal study of the social sciences, hacking gave you not only an understanding of the system, but an addictive control as well…”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Steven Levy’s &lt;em&gt;&lt;a href="http://www.amazon.com/Hackers-Heroes-Computer-Revolution-Anniversary/dp/1449388396/ref=sr_1_2?ie=UTF8&amp;qid=1293229913&amp;sr=8-2"&gt;Hackers&lt;/a&gt;&lt;/em&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/2450806525</link><guid>http://text.alloy-d.net/post/2450806525</guid><pubDate>Fri, 24 Dec 2010 17:33:00 -0500</pubDate></item><item><title>Something interesting showed up.</title><description>&lt;img src="http://27.media.tumblr.com/tumblr_ldpahlgolT1qzx1x6o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Something interesting showed up.&lt;/p&gt;</description><link>http://text.alloy-d.net/post/2380298130</link><guid>http://text.alloy-d.net/post/2380298130</guid><pubDate>Sun, 19 Dec 2010 19:24:56 -0500</pubDate><category>Never mind that I had to use my ThinkPad to upload this...</category></item><item><title>"Writing, in other words, is just coding by a different name. It’s like constructing a program..."</title><description>“Writing, in other words, is just coding by a different name. It’s like constructing a program that runs in the universal human operating system of narrative, because, as Joan Didion once said, we tell ourselves stories in order to live.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://chronicle.com/article/Decoding-the-Value-of-Computer/125266/"&gt;Decoding the Value of Computer Science&lt;/a&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/1573462868</link><guid>http://text.alloy-d.net/post/1573462868</guid><pubDate>Sun, 14 Nov 2010 12:44:20 -0500</pubDate></item><item><title>"From a bit to a few hundred megabytes, from a microsecond to a half an hour of computing confronts..."</title><description>“From a bit to a few hundred megabytes, from a microsecond to a half an hour of computing confronts us with completely baffling ratio of 10⁹! The programmer is in the unique position that his is the only discipline and profession in which such a gigantic ratio, which totally baffles our imagination, has to be bridged by a single technology. He has to be able to think in terms of conceptual hierarchies that are much deeper than a single mind ever needed to face before.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;a href="http://userweb.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1036.html"&gt;E.W. Dijkstra&lt;/a&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/1088643933</link><guid>http://text.alloy-d.net/post/1088643933</guid><pubDate>Wed, 08 Sep 2010 19:24:44 -0400</pubDate></item><item><title>"Going outside your comfort zone has many benefits. One of the best is knowing that you can hold your..."</title><description>“Going outside your comfort zone has many benefits. One of the best is knowing that you can hold your own in a conversation with people who disagree with you. But the real value is being intellectually honest with yourself, through relentless curiosity and self-challenge. That’s what learning is all about. You can’t understand the world, or even a small part of it, if you don’t stretch your mind.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Dan Gillmor, &lt;a href="http://www.google.com/url?q=http%3A%2F%2Fcyber.law.harvard.edu%2Fsites%2Fcyber.law.harvard.edu%2Ffiles%2FPrinciples%2520for%2520a%2520New%2520Media%2520Literacy_MR.pdf&amp;sa=D&amp;sntz=1&amp;usg=AFrqEzda3HbEzLxqPGAHF5VjLaQbPtXqhQ"&gt;“Principles for a New Media Literacy”&lt;/a&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/1087649506</link><guid>http://text.alloy-d.net/post/1087649506</guid><pubDate>Wed, 08 Sep 2010 15:19:58 -0400</pubDate></item><item><title>"I found it consoling after all these years to learn that writers are up against nothing less than..."</title><description>“&lt;p&gt;I found it consoling after all these years to learn that writers are up against nothing less than the fundamental anarchy of the universe; entropy, prince of disorder, is sprinkling noise on everything we write.  Ambiguity is noise.  Redundancy is noise.  Misuse of words is noise.  Vagueness is noise.  Jargon is noise.  Pomposity is noise.  Clutter is noise: all those unnecessary adjectives (“ongoing progress”), all those unnecessary adverbs (“successfully avoided”), all those unnecessary prepositions draped onto verbs (“order up”), all those unnecessary phrases (“in a very real sense”).&lt;/p&gt;

&lt;p&gt;Information is your sacred product, and noise is its pollutant.  Guard the message with your life.&lt;/p&gt;”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;William Zinsser, &lt;em&gt;Writing to Learn&lt;/em&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/962902855</link><guid>http://text.alloy-d.net/post/962902855</guid><pubDate>Mon, 16 Aug 2010 10:46:57 -0400</pubDate></item><item><title>P != NP, according to a new proof published by Vinay Deolalikar</title><description>&lt;a href="http://www.scribd.com/doc/35539144/pnp12pt"&gt;P != NP, according to a new proof published by Vinay Deolalikar&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://deltamualpha.tumblr.com/"&gt;deltamualpha&lt;/a&gt;, &lt;a href="http://fuckyeahcomputerscience.tumblr.com/post/931554678/p-np-according-to-a-new-proof-published-by-vinay"&gt;fuckyeahcomputerscience&lt;/a&gt;)&lt;/p&gt;</description><link>http://text.alloy-d.net/post/931892540</link><guid>http://text.alloy-d.net/post/931892540</guid><pubDate>Tue, 10 Aug 2010 09:22:28 -0400</pubDate><category>computer science</category></item><item><title>"[T]he point isn’t that you should go out and brand yourself a Minimalist. The point is to take the..."</title><description>“[T]he point isn’t that you should go out and brand yourself a Minimalist. The point is to take the ideas that work for you and make the world a better, simpler place.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Alex Payne, &lt;a href="http://www.slideshare.net/al3x/strange-loop-2009-keynote-minimalism-in-computing"&gt;“Minimalism in Computing”&lt;/a&gt; (&lt;a href="http://thestrangeloop.com/"&gt;Strange Loop&lt;/a&gt; 2009 Keynote)&lt;/em&gt;</description><link>http://text.alloy-d.net/post/855879530</link><guid>http://text.alloy-d.net/post/855879530</guid><pubDate>Sun, 25 Jul 2010 03:20:00 -0400</pubDate></item><item><title>This morning, I was eating breakfast at Egg and planning out my day. I made a list of what I had to...</title><description>&lt;blockquote&gt;&lt;p&gt;This morning, I was eating breakfast at &lt;a href="http://www.pigandegg.com/"&gt;Egg&lt;/a&gt; and planning out my day. I made a list of what I had to do. Neither to-do lists nor calendars work for me, so usually my day is a disorganized mess, and I don’t get important stuff done.&lt;/p&gt;
&lt;p&gt;The idea instantly popped in my head: &lt;i&gt;one task at a time&lt;/i&gt;. I don’t know why I didn’t think of it sooner, because this problem has been bugging me for months, if not years!&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Whoa!  I had no idea &lt;a href="http://www.nowdothis.com/"&gt;this&lt;/a&gt; existed.  It’s good, because I feel much less obligated to make a useful web service &lt;ins&gt;(clarification: persistent, multi-user, hosted)&lt;/ins&gt; out of &lt;a href="http://text.alloy-d.net/post/803403034/now-go"&gt;now.go&lt;/a&gt;.  Also, it solved the context problem &lt;a href="http://nowdothis.tumblr.com/post/47521107/now-there-are-tabs"&gt;(using @context and tabs)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It has a somewhat different philosophy, but it’s probably a more practical implementation of the same idea.  Cool.&lt;/p&gt;</description><link>http://text.alloy-d.net/post/854861338</link><guid>http://text.alloy-d.net/post/854861338</guid><pubDate>Sat, 24 Jul 2010 22:50:00 -0400</pubDate></item><item><title>"Merely adding features does not make it easier for users to do things — it just makes the..."</title><description>“Merely adding features does not make it easier for users to do things — it just makes the manual thicker.  The right solution in the right place is always more effective than haphazard hacking.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;Rob Pike and Brian W. Kernighan, &lt;a href="http://harmful.cat-v.org/cat-v/"&gt;“Program design in the UNIX environment”&lt;/a&gt;&lt;/em&gt;</description><link>http://text.alloy-d.net/post/846550273</link><guid>http://text.alloy-d.net/post/846550273</guid><pubDate>Thu, 22 Jul 2010 17:02:21 -0400</pubDate></item><item><title>An MIU-system theorem generator in Go</title><description>&lt;p&gt;Early in &lt;em&gt;Gödel, Escher, Bach&lt;/em&gt;, Douglas Hofstadter presents a formal
system of four rules for manipulating strings of the letters &lt;code&gt;M&lt;/code&gt;, &lt;code&gt;I&lt;/code&gt;,
and &lt;code&gt;U&lt;/code&gt;.  The reader is given the “axiom” &lt;code&gt;MI&lt;/code&gt; and challenged to produce
&lt;code&gt;MU&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hofstadter notes that “it would certainly be possible—in fact it would
be very easy—to program a computer to generate theorem after theorem of
the MIU-system” — and that was over 30 years ago.  The following, then,
is not interesting for what it &lt;em&gt;is&lt;/em&gt;, but its implementation intrigues me
enough that I think it’s worth writing about.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;func generate(in &lt;-chan string, out chan&lt;- string) {
    var s string
    for {
        s = &lt;-in
        for _, f := range rules {
            go f(s, out)
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This function gives the flavor of the program.  It’s pretty simple: it
loops infinitely, reading a string from its input channel and applying
each rule to it in a new goroutine.  It passes its output channel to the
goroutines, so it doesn’t need to worry about what happens in them.
The result: strings sent on the &lt;code&gt;in&lt;/code&gt; channel, and all legal mutations
are created concurrently and placed on the &lt;code&gt;out&lt;/code&gt; channel.&lt;/p&gt;

&lt;p&gt;Channels are one of the most interesting things about Go, and if you’ve
looked into it at all, you’ve probably come across a slogan: “do not
communicate by sharing memory; instead, share memory by communicating.”
Channels are how this is done: one end sends things (where “thing” is
exactly as general as it sounds — it’s even perfectly legal to have
channels of channels), and one end receives them.  Think Unix pipes.&lt;/p&gt;

&lt;p&gt;Goroutines are interesting, as well.  Their name is meant to distinguish
them from processes and threads, but I don’t see much harm in thinking
of them of as separate threads of execution within the program that are
multiplexed onto real operating system threads.&lt;sup id="fnref:p836887063-2"&gt;&lt;a href="#fn:p836887063-2" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;var rules map[int]func(string, chan&lt;- string) = 
        map[int]func(string, chan&lt;- string){
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This (disturbingly verbose) line declares &lt;code&gt;rules&lt;/code&gt; to be a map&lt;sup id="fnref:p836887063-1"&gt;&lt;a href="#fn:p836887063-1" rel="footnote"&gt;2&lt;/a&gt;&lt;/sup&gt; from
integers to functions taking one string argument and one output channel
— just what you’d expect from the call in &lt;code&gt;generate()&lt;/code&gt; — and begins
the declaration of literal of that type.&lt;sup id="fnref:p836887063-3"&gt;&lt;a href="#fn:p836887063-3" rel="footnote"&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Rule I: If you possess a string whose last letter is I,
// you can add on a U at the end.
1: func (s string, out chan&lt;- string) {
        if s[len(s)-1] == 'I' {
            out &lt;- s + "U"
        }
    },
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Simple.  The one possible mutation by this rule is sent on the output
channel, if legal.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Rule II: Suppose you have Mx.
// Then you may add Mxx to your collection.
2: func (s string, out chan&lt;- string) {
        if s[0] == 'M' {
            x := s[1:len(s)]
            out &lt;- s + x
        }
    },
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Of relevance not to this program but to the point Hofstadter introduced
this puzzle to make: I left out the &lt;code&gt;if s[0] == 'M'&lt;/code&gt; at first, without
noticing.  Despite having the rule written out right above the function,
I apparently thought the check entirely superfluous since you can never
actually get rid of the initial &lt;code&gt;M&lt;/code&gt; in the given setup.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Rule III: If III occur in one of the strings in your
// collection, you may make a new string with U in place of III.
3: func (s string, out chan&lt;- string) {
        var head, tail string
        tail = s

        i := strings.Index(tail, "III")
        for ; i &gt;= 0 ; i = strings.Index(tail, "III") {
            out &lt;- head + tail[0:i] + "U" + tail[i+3:]
            head = head + tail[0:i+1]
            tail = tail[i+1:]
        }
    },
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;strings.Index()&lt;/code&gt; returns the index of the first occurrence in a string
of a given substring, or -1 if the substring does not occur, so the
string is sliced up into &lt;code&gt;head&lt;/code&gt; and &lt;code&gt;tail&lt;/code&gt;.  Each occurrence of &lt;code&gt;III&lt;/code&gt;
in &lt;code&gt;tail&lt;/code&gt; is replaced with &lt;code&gt;U&lt;/code&gt; in a string sent on the output channel,
and then everything through the first character of that instance of
&lt;code&gt;III&lt;/code&gt; is moved from &lt;code&gt;tail&lt;/code&gt; to &lt;code&gt;head&lt;/code&gt; for the next iteration of the
loop.&lt;sup id="fnref:p836887063-4"&gt;&lt;a href="#fn:p836887063-4" rel="footnote"&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;// Rule IV: If UU occurs inside one of your strings,
// you can drop it.
4: func (s string, out chan&lt;- string) {
        var head, tail string
        tail = s

        i := strings.Index(tail, "UU")
        for ; i &gt;= 0 ; i = strings.Index(tail, "UU") {
            out &lt;- head + tail[0:i] + tail[i+2:]
            head = head + tail[0:i+1]
            tail = tail[i+1:]
        }
    },
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The last rule uses the same construct as rule III.&lt;/p&gt;

&lt;p&gt;And for getting everything going:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;func main() {
    theorems := make(chan string, 1024)
    input := make(chan string)

    go generate(input, theorems)
    fmt.Println("MI (axiom)")
    input &lt;- "MI"

    var thm string
    for {
        thm = &lt;-theorems
        fmt.Println(thm)
        if thm == "MU" { os.Exit(0) }
        input &lt;- thm
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;main()&lt;/code&gt; makes the channels used, starts the goroutine for &lt;code&gt;generate()&lt;/code&gt;,
and then reads and outputs the generated strings before sending them
back on the input channel.&lt;/p&gt;

&lt;p&gt;Full file, along with an “overkill” version that tracks the derivation
of theorems (and eats memory &lt;em&gt;even faster&lt;/em&gt;) &lt;a href="http://gist.github.com/480919"&gt;here&lt;/a&gt;. (And don’t be
fooled by that &lt;code&gt;os.Exit(0)&lt;/code&gt; there — the odds are infinite in favor of
the program eating all its memory before generating &lt;code&gt;MU&lt;/code&gt;.  Resource
limiting is your friend.)&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p836887063-2"&gt;
&lt;p&gt;If I recall correctly, Erlang’s virtual machine does something
similar. &lt;a href="#fnref:p836887063-2" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p836887063-1"&gt;
&lt;p&gt;There’s very little reason for this to be a map and not an array,
other than that I wanted the indices to match up to the rule numbers. &lt;a href="#fnref:p836887063-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p836887063-3"&gt;
&lt;p&gt;Tangentially, I love anonymous functions, so finding a good use
for them was awesome. &lt;a href="#fnref:p836887063-3" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:p836887063-4"&gt;
&lt;p&gt;I feel like I shouldn’t need to explain it, but I fixed so many
stupid bugs in this construct that I figure it may not be as obvious as
it seems. &lt;a href="#fnref:p836887063-4" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://text.alloy-d.net/post/836887063</link><guid>http://text.alloy-d.net/post/836887063</guid><pubDate>Tue, 20 Jul 2010 12:30:00 -0400</pubDate><category>go</category><category>cool</category></item><item><title>http://github.com/alloy-d/goauth</title><description>&lt;a href="http://github.com/alloy-d/goauth"&gt;http://github.com/alloy-d/goauth&lt;/a&gt;: &lt;p&gt;Step one in a Twitter project.&lt;/p&gt;

&lt;p&gt;This is exciting: not long ago, the lack of a library for something like OAuth in the language I wanted to write something in&lt;sup id="fnref:p826791261-1"&gt;&lt;a href="#fn:p826791261-1" rel="footnote"&gt;1&lt;/a&gt;&lt;/sup&gt; would have been a stopper.&lt;/p&gt;

&lt;p&gt;More importantly, much knowledge was gained.  I also found out that OAuth reminds me of less-cool &lt;a href="http://en.wikipedia.org/wiki/Kerberos_(protocol)"&gt;Kerberos&lt;/a&gt;, that Twitter’s documentation is not always as helpful as you’d like (sorry!), and that URL(-esque)-encoding things is obnoxious.&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p826791261-1"&gt;
&lt;p&gt;…chosen because the &lt;em&gt;other&lt;/em&gt; major library I intend to use is &lt;em&gt;much&lt;/em&gt; more intimidating, and the one for Go looks friendlier than any other I’ve seen. &lt;a href="#fnref:p826791261-1" rev="footnote"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://text.alloy-d.net/post/826791261</link><guid>http://text.alloy-d.net/post/826791261</guid><pubDate>Sun, 18 Jul 2010 02:41:19 -0400</pubDate><category>code</category><category>go</category></item><item><title>font-family: "Baskerville", "Palatino"

The fix, reapplied.  I...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_l5iqg9U50M1qzx1x6o1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;code&gt;font-family: "Baskerville", "Palatino"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The fix, reapplied.  I guess it’s okay.&lt;/p&gt;</description><link>http://text.alloy-d.net/post/808303393</link><guid>http://text.alloy-d.net/post/808303393</guid><pubDate>Tue, 13 Jul 2010 18:57:00 -0400</pubDate><category>themes</category></item></channel></rss>

