<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>blog.izs.me</title>
	<subtitle>Writing and Stuff from Isaac Z. Schlueter</subtitle>
	
	<link href="https://blog.izs.me/feed/feed.xml" rel="self"/>
	<link href="https://blog.izs.me/"/>
	<updated>2026-08-27T15:01:29Z</updated>
	<id>https://blog.izs.me/</id>
	<author>
		<name>Isaac Z. Schlueter</name>
		<email></email>
	</author>
	
	<entry>
		<title>The 5-Point Request</title>
		<link href="https://blog.izs.me/2026/08/5-point-request/"/>
		<updated>2026-08-27T15:01:29Z</updated>
		<id>https://blog.izs.me/2026/08/5-point-request/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;I originally wrote this as part of the npm, Inc. handbook, a set
of documents defining how we ran the company. I often want to
refer to it, but it apparently exists nowhere else online, so I&#39;m
publishing it here.&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h1 id=&quot;the-5-point-request&quot; tabindex=&quot;-1&quot;&gt;The 5-Point Request &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#the-5-point-request&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;There are 5 elements to a project or request.  Without these 5
elements, the chance of successfully meeting the request is much
lower.&lt;/p&gt;
&lt;h2 id=&quot;1.-criteria-(positive-definition-of-success)&quot; tabindex=&quot;-1&quot;&gt;1. Criteria (Positive Definition of Success) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#1.-criteria-(positive-definition-of-success)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first point of the request is to define, in positive terms if
possible, how we&#39;ll know if the request has been met.&lt;/p&gt;
&lt;p&gt;Driving towards &amp;quot;how will we know?&amp;quot; can uncover discrepancies in
our understanding of the goal, and clarify the intent for those
doing the work.&lt;/p&gt;
&lt;h2 id=&quot;2.-owner&quot; tabindex=&quot;-1&quot;&gt;2. Owner &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#2.-owner&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The owner may not be the one doing every part of making the
request happen, but they are the one who takes responsibility for
making sure it happens.&lt;/p&gt;
&lt;p&gt;An owner is not multiple people.  An owner is a single human
being. This prevents bystander-effect paralysis.&lt;/p&gt;
&lt;h2 id=&quot;3.-timeline&quot; tabindex=&quot;-1&quot;&gt;3. Timeline &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#3.-timeline&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When should we expect to see some progress toward the meeting of
this request?&lt;/p&gt;
&lt;p&gt;This timeline should be something realistic, that the owner
believes is attainable and where the requisite resources are
available.  There is no sense in setting unrealistic timelines.
As stakeholders, it&#39;s our job to accept reality for what it is.
If a satisfactory timeline can&#39;t be found, then we have to make
other plans, and the sooner we can get on that, the better.&lt;/p&gt;
&lt;h2 id=&quot;4.-budget&quot; tabindex=&quot;-1&quot;&gt;4. Budget &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#4.-budget&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What amount of which limited resource are we putting towards this
request?&lt;/p&gt;
&lt;p&gt;This could be time, money, space, or some other resource.  But we
need to clarify that the resource &lt;em&gt;is&lt;/em&gt; limited, so allocating it
here may mean de-allocating it somewhere else.&lt;/p&gt;
&lt;p&gt;If something can&#39;t be done in the budget we have available, and
it&#39;s not important enough to de-scope something else, then it&#39;s
not something we&#39;re going to do.  Put it back on the &amp;quot;someday
maybe&amp;quot; wishlist.&lt;/p&gt;
&lt;h2 id=&quot;5.-verb-(next-action)&quot; tabindex=&quot;-1&quot;&gt;5. Verb (Next Action) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#5.-verb-(next-action)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What is the next &lt;em&gt;observable, physical&lt;/em&gt; action that has to
happen in order for this project to move forward?  This should be
a very specific verb that a human being does in the real world,
the more concrete the better.&lt;/p&gt;
&lt;p&gt;&amp;quot;Come up with a plan for foo&amp;quot; is not great.  &amp;quot;Schedule a meeting
with foo team to discuss foo&amp;quot; or &amp;quot;write down list of requirements
for foo&amp;quot; are physical and observable. You can see them being
done, see that they have been done, using your human eyeballs.&lt;/p&gt;
&lt;p&gt;Note that item #5 can spiral out fractally into another, smaller
request, with its own 5 points!  Repeat until triviality.&lt;/p&gt;
&lt;p&gt;If you need to spend an hour thinking about something and then
make a decision, then you&#39;ve now identified a positive definition
of success (write down the decision), an owner (the person
deciding), the timeline (when does this hour of thinking-time
happen), the budget (1 hour of time blocked out on the calendar),
and the next action (spend an hour thinking).&lt;/p&gt;
&lt;h2 id=&quot;using-the-5-point-request&quot; tabindex=&quot;-1&quot;&gt;Using the 5-point request &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/08/5-point-request/#using-the-5-point-request&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is excessive structure for most simple requests, and when
things get low-level enough, the action eventually becomes so
trivial as to not require this.  However, for big projects
involving many different individuals and teams, it&#39;s useful to
make sure all 5 points are met.&lt;/p&gt;
&lt;p&gt;The moderator of a meeting should always be on the lookout for a
request being made.  If it seems like a course of action is the
plan of record, then the moderator should write down the points
that have been established, ask for clarity on the ones that are
not, and verify that all parties are in agreement before moving
on.&lt;/p&gt;
&lt;p&gt;Especially, they should make sure that the owner is comfortable
putting this on their plate.&lt;/p&gt;
&lt;p&gt;Any upcoming check-ins or scheduled actions should be added to
the approprate calendars before moving on, and the 5 points
should be recorded.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Steak Recipe</title>
		<link href="https://blog.izs.me/2026/06/steak-recipe/"/>
		<updated>2026-06-27T18:15:35Z</updated>
		<id>https://blog.izs.me/2026/06/steak-recipe/</id>
		<content type="html">&lt;p&gt;This is my recipe for steak. Enjoy.&lt;/p&gt;
&lt;h2 id=&quot;time&quot; tabindex=&quot;-1&quot;&gt;Time &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#time&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A few days of prep where the steak sits in the fridge.&lt;/p&gt;
&lt;p&gt;Then a few hours where it sits on the counter.&lt;/p&gt;
&lt;p&gt;Then like 5-10 minutes of actual cooking.&lt;/p&gt;
&lt;h2 id=&quot;ingredients&quot; tabindex=&quot;-1&quot;&gt;Ingredients &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#ingredients&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A very thick extremely marbled ribeye. This technique can be
adapted to other highly-marbled/medium-toughness cuts of
meat, such as certain porkchops, but if it&#39;s not very marbled
(like filet mignon), high-toughness (like flank steak or chuck)
then it will be a Bad Time. The thing to look for is lots of
&lt;em&gt;small&lt;/em&gt; veins of fat throughout the meat, not a small number of
&lt;em&gt;big&lt;/em&gt; blobs of fat in individual places.&lt;/li&gt;
&lt;li&gt;Lots of salt (big chonk kosh salt is good, but smol gran table
salt also works)&lt;/li&gt;
&lt;li&gt;Butter. (If you wanna be fancy, you can use some herbed butter,
or chop up mushrooms and make a mushroom butter, or caramelize
some onions into a butter-onion spread and use that. But plain
old butter is extremely good.)&lt;/li&gt;
&lt;li&gt;If using oil for any reason, should be a high-clarity/high-heat
oil with a high smoke point, such as grape seed, avocado oil,
or canola oil.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don&#39;t have perfect marbling, you can sometimes sort of
fake it by stabbing holes in the steak with a fork, and rubbing
it with oil or butter before the air dry phase.&lt;/p&gt;
&lt;h2 id=&quot;tools&quot; tabindex=&quot;-1&quot;&gt;Tools &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#tools&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Paper towels&lt;/li&gt;
&lt;li&gt;A warmed plate ready when it&#39;s time to take off the heat&lt;/li&gt;
&lt;li&gt;Aluminum foil (optional, but if you need to do other things
between plating and eating, not optional)&lt;/li&gt;
&lt;li&gt;A good pan (ie, not cast iron)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The ideal pan is high conductivity (vertically and laterally).
Contrary to popular belief, cast iron is &lt;em&gt;not&lt;/em&gt; best for searing,
in fact, it&#39;s one of the worst, because its lateral heat
conductivity is absolute shit. Delusional cast iron stans will
insist that it &amp;quot;holds a lot of heat&amp;quot; and that&#39;s why it takes a
long time to preheat; in fact, it&#39;s just very hard to get plain
old iron atoms excited (compared with basically &lt;em&gt;any&lt;/em&gt; other metal
frying pans are made of, including extremely cheap flimsy
stainless steel) and iron is so conductive that it loses heat
almost immediately. So you get like 15 seconds of intense
searing, and then it&#39;s lukewarm.&lt;/p&gt;
&lt;p&gt;The best pan is either a thin carbon steel pan, or an aluminum
core stainless steel or anodized pan. (Or if you want to spend
$1200 on a frying pan, silver, which in several studies is
actually the ideal steak-searing metal.) The &lt;a href=&quot;https://hestanculinary.com/collections/nanobond/products/nanobond-clad-skillet-fry-pan?variant=43130351714347&quot;&gt;Hestan NanoBond
pan&lt;/a&gt;
is very nice, if you&#39;re comfortable with stainless steel; it&#39;s
basically an aluminum core stainless pan, but with a perfect
ceramicized titanium coating that creates a mirror-like finish
that is nearly scratch-proof and indestructible.&lt;/p&gt;
&lt;p&gt;Induction heating is a good choice, because it heats the pan very
evenly and very quickly.&lt;/p&gt;
&lt;h2 id=&quot;dry&quot; tabindex=&quot;-1&quot;&gt;Dry &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#dry&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Don&#39;t need to do this if it&#39;s a &amp;quot;dry aged&amp;quot; steak. But in that
case, you&#39;re basically paying double for the privilege of not
having to air it out yourself. (Technically &amp;quot;dry aged&amp;quot; is aged
for much longer, like 45 to 90 days, suspended in air, until it
develops a fully rotten hard outer crust, which is then cut off,
and it &lt;em&gt;does&lt;/em&gt; taste amazing, but like, worth the price? Imo, no.)&lt;/p&gt;
&lt;p&gt;Loosely wrap the steak in paper towel and leave it in the
refrigerator on a plate for at least 1 day per pound of meat, no
more than 3 days per pound. So, if it&#39;s a 1lb cut, that means
leave it loosely wrapped in paper towel in the fridge for 1-3
days.&lt;/p&gt;
&lt;p&gt;When the outside is just slightly leathery, but still red, that&#39;s
perfect. It should smell just slightly gamey/cheesy, but not
&amp;quot;off&amp;quot;.&lt;/p&gt;
&lt;h2 id=&quot;salt&quot; tabindex=&quot;-1&quot;&gt;Salt &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#salt&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Start this about 1-2 hours before cooking.&lt;/p&gt;
&lt;p&gt;Salt it like the sidewalk in winter.&lt;/p&gt;
&lt;p&gt;Seriously, cover it in an absolutely idiotic amount of salt, then
flip it over, and do the same on the other side.&lt;/p&gt;
&lt;p&gt;Leave it covered in a literal pile of salt on the counter for a
few hours. This dries it out further, turns some of the free
glutamates into MSG, absorbs a bit of salt into the fluids still
in the meat, and lets it come up to room temp.&lt;/p&gt;
&lt;h2 id=&quot;rinse&quot; tabindex=&quot;-1&quot;&gt;Rinse &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#rinse&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The salt around the steak will get kind of damp as it dehydrates
the steak.&lt;/p&gt;
&lt;p&gt;Rinse all of this off, then pat it dry with paper towel. Don&#39;t
worry, meat is not a sponge, it won&#39;t re-absorb the water back
in, it&#39;ll just get a little damp. That&#39;s what the patting dry is
for.&lt;/p&gt;
&lt;h2 id=&quot;sear&quot; tabindex=&quot;-1&quot;&gt;Sear &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#sear&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Get the pan &lt;em&gt;very&lt;/em&gt; hot.&lt;/p&gt;
&lt;p&gt;If the steak has a thick rim of fat around the outside, I like to
hold it upright to sear the shit out of that edge first. This
creates a bit of a crust around that edge, and also has the
effect of greasing up the pan slightly to sear the faces of the
steak. You&#39;ll know it&#39;s done when it looks a little like bacon,
and a significant amount of grease will be released. (This is
also a good way to test the heat of the pan, because pressing the
edge of the steak to the pan should be LOUD.)&lt;/p&gt;
&lt;p&gt;If there&#39;s no thick fat-rim, and you&#39;re using stainless, a drop
of oil will help the steak release more easily and get a better
sear. Anodized aluminum/titanium or well-seasoned carbon steel
(or cast iron, if it is &lt;em&gt;literally&lt;/em&gt; the only option, it is really
the wrong tool for steak, but it is naturally non-stick when well
seasoned) doesn&#39;t need it. You can also sometimes get a better
sear by massaging a drop or two of oil into the steak itself,
especially if the marbling isn&#39;t top notch.&lt;/p&gt;
&lt;p&gt;Sear the first side for about 30 seconds to 1 minute. If you&#39;ve
gotten the pan hot enough, it should be loud and smokey, and the
face should get a little bit of a brown crust.&lt;/p&gt;
&lt;p&gt;Flip the steak, cut the heat, and sear the second side for about
30 seconds to 1 minute. This will sear the second side, and use
up a lot of the remaining heat, so that the pan comes down to
&amp;quot;won&#39;t immediately burn butter&amp;quot; temperature.&lt;/p&gt;
&lt;h2 id=&quot;finish&quot; tabindex=&quot;-1&quot;&gt;Finish &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#finish&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Flip the steak again, add a huge pat of butter on top of it. For
the remaining time, spoon melted butter over it, and flip the
steak occasionally so the sides cook evenly.&lt;/p&gt;
&lt;p&gt;At this point, it&#39;s down to how done you want it. For a
black-and-blue rare, you&#39;re done as soon as the butter is fully
melted. For well-done, go until it&#39;s about the squishiness of the
meat between your thumb and index finger, maybe 4 minutes per
side or so. Personally, I go for medium-rare, and believe this is
correct, because it&#39;s the cooked level which is the optimal
amount of &amp;quot;melting the fat into the muscle tissue without making
it tough and grainy&amp;quot;, and that is about 2 minutes per side if
it&#39;s a thick cut.&lt;/p&gt;
&lt;h2 id=&quot;plate&quot; tabindex=&quot;-1&quot;&gt;Plate &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2026/06/steak-recipe/#plate&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Do not cut into it to see how done it is. Just pay attention. If
you overcook it, then do a little less next time. Undercook, do a
little more next time. Eat your mistakes, it&#39;s how you learn.&lt;/p&gt;
&lt;p&gt;Have a warmed plate ready. (Either pour some hot water on it, or
microwave it for a little while with a bit of water on it.) Hot
steak on a cold plate is not ideal.&lt;/p&gt;
&lt;p&gt;You can let it rest under a piece of aluminum foil for a bit, but
tbh, I think this step is largely overrated. But, a good thing to
do is to throw some vegetables or par-cooked potatoes in the
butter-and-tallow-filled pan, so make sure the steak has a foil
blanket so it doesn&#39;t get cold while you do that.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>I am not my Autism. Am I? Well drat...</title>
		<link href="https://blog.izs.me/2026/01/i-am-not-my-autism-am-i-well-drat/"/>
		<updated>2026-01-28T19:48:55Z</updated>
		<id>https://blog.izs.me/2026/01/i-am-not-my-autism-am-i-well-drat/</id>
		<content type="html">&lt;p&gt;From
&lt;a href=&quot;https://www.reddit.com/r/AutisticAdults/comments/1qp76u7/i_am_not_my_autism_am_i_well_drat/&quot;&gt;r/AutisticAdults&lt;/a&gt;,
my reply got too long and reddit&#39;s server kept not wanting to let
me post it, so I&#39;m writing it here.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wrestling with some thoughts, and wanting to hear some
opinions.&lt;/p&gt;
&lt;p&gt;I put a banana inside myself this morning, nothing dirty, I
just ate it. The reason I phrased it weirdly is that I realized
I&#39;ve been making a mistake in my thought process involving that
banana and many other things. I assumed, falsely, that my skin
encompasses all that I consider to be me, and that vice versa
everything within my skin can be considered me. But that banana
is clearly not me, yet it exists within my skin. I don&#39;t talk
like a banana, I don&#39;t walk like a banana, and a lot of that
banana will leave me shortly. So now I realize that there are
things inside me that aren&#39;t me.&lt;/p&gt;
&lt;p&gt;So I&#39;ve done a bit of stripping, nothing dirty, I just tried to
remove everything that isn&#39;t me from my idea of what is me.
Asking questions like: am I my bones, am I my blood, am I my
vaguely triangular jawline? There&#39;s a lot of evidence, in my
opinion, for those not being me. These things have done a great
job of convincing me they&#39;re me. Yet evidently, they&#39;re not.
It&#39;s all just the machine I use to interact with the world.&lt;/p&gt;
&lt;p&gt;Then I asked; am I my brain? Well, my brain is having all these
thoughts and feelings. Some of them I identify with. Some of
them, not so much. So I can assume that at least part of my
brain isn&#39;t me. So have my thoughts and feelings convinced me
they&#39;re me this whole time? I think so. I think I&#39;m just
witnessing a process, alarms going off in the form of emotions,
options for the next action or protocol being considered. And
then who decides whether those actions get carried out, or
whether those protocols become part of my standard programming?
Well, that&#39;s me. I decide. Even if I don&#39;t realize I get to
make that decision, even if I decide not to decide. I&#39;m still
in charge, or could choose to be once I realize it.&lt;/p&gt;
&lt;p&gt;That brought me to the question I haven&#39;t figured out quite
yet: Am I my autism? My first reaction, off the cuff, is no. If
I follow the train of thought above here autism might just be a
quirk in the machine that I&#39;m controlling. It&#39;s got those
wheels that keep wobbling, ignition that keeps sparking, and a
klaxon that comes out with all kinds of inappropriate garbage.
But all of that implies autism is something you could or would
need to fix, and I feel a lot of resistance to that idea. I
have experienced it as a terrible burden at times, but also
this incredible gift within the right context.&lt;/p&gt;
&lt;p&gt;If I am not my autism, then why do I identify with it so
strongly? If I am my autism, then why is there a part of me
that wants to poop it out like the banana? Any thoughts,
feelings, additional theories on this subject would be greatly
appreciated.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I love this. Major topic of speculation, nothing dirty, I just
like looking into my own mind.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;and a lot of that banana will leave me shortly&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Just getting the shit talk out of the way early, this is a common
misconception. Poop is mostly water (about 75% by volume) and the
majority of the dry weight is a mix of living and dead bacteria,
only a tiny amount of undigested food. The food you eat is almost
entirely turned into energy, turned into more you, and used to
feed the bacteria living snuggled up in the lower part of the wet
center of the meat torus. Those bacteria smell real bad, and mix
with the undigestible bits of the banana (mostly fiber), to make
the foul smelling paste we call poop. It&#39;s actually still got
quite a lot of calories in it, and the bacteria in it keeps on
feasting after it leaves you. The main reason we think it&#39;s
stinky is because it&#39;s real bad for us to get it in other parts
of our meat machines, so evolution tuned us to try to avoid and
dispose of it. (E. coli and Stroptococcus bacteria anywhere else,
very dangerous.)&lt;/p&gt;
&lt;p&gt;But to the point of the post here, I am going to say a lot of
words about this, because I think about it often, and have been
pondering it rigorously, for many decades now.&lt;/p&gt;
&lt;p&gt;Let&#39;s say you write a program, it&#39;s an algorithm that does some
computation. The program is running on a computer. Is the
computer the program? Of course not. You could conceivably copy
the program to another identical computer, and it&#39;d be the same
program, but on a different computer.&lt;/p&gt;
&lt;p&gt;Ok, so is the program the specific bits that make up the program
at any given time? You&#39;d maybe be tempted to say yes, but what if
the program is such that it can modify itself? Even then we could
say, sure, the program is the bits, but the program changes.&lt;/p&gt;
&lt;p&gt;But what if we then wrote the exact same program, that functioned
in exactly the same way, responding with the same outputs to the
same inputs, etc, but wrote it in a different programming
language. Would it be the same program? Maybe it&#39;d be a different
version of the program, but remember, the program changes over
time anyway, so is this really any more different than the &amp;quot;same&amp;quot;
program one moment to the next? This rewritten version changes
itself in the exact same ways, behaves identically, so it feels
right to say it&#39;s the &amp;quot;same&amp;quot; program, even though it has
different specific bits.&lt;/p&gt;
&lt;p&gt;So maybe the program isn&#39;t the computer &lt;em&gt;or&lt;/em&gt; the bits, but the
behavior, the pattern?&lt;/p&gt;
&lt;p&gt;And what if it can only run on a single machine that exists, a
bespoke computer built by hand, circuit by circuit, to run this
one program. Then is the program the computer? Are they the same
thing? If the computer can only run this one program, and the
program can only run on this one computer, it feels almost
arbitrary to say where one stops and the other begins.&lt;/p&gt;
&lt;p&gt;What then if we rewrote that bespoke single-use computer and
program for a completely different computer, as different as
possible, in fact; one that behaves exactly the same way, but on
this other computer every &lt;code&gt;1&lt;/code&gt; is replaced with a &lt;code&gt;0&lt;/code&gt; and every
&lt;code&gt;0&lt;/code&gt; with a &lt;code&gt;1&lt;/code&gt;, in every instruction and every circuit. The
program bits literally could not be more different, every single
bit is flipped! But it feels like this is even &lt;em&gt;more&lt;/em&gt; faithfully
the &amp;quot;same program&amp;quot; than the one before that was re-implemented in
a different language.&lt;/p&gt;
&lt;p&gt;Is a &amp;quot;program&amp;quot; even a real thing? And, obviously, this is all a
metaphor to back into the question: Is a &amp;quot;person&amp;quot; even a real
thing? What &lt;em&gt;is&lt;/em&gt; it?&lt;/p&gt;
&lt;p&gt;Also, what is a &amp;quot;family&amp;quot;? &amp;quot;Capitalism&amp;quot;? &amp;quot;Gender&amp;quot;? All these
things are just convenient analytical tools with no universal
concrete basis in reality.&lt;/p&gt;
&lt;p&gt;Of course, when you get down to it, and pursue physics to the
edge, you&#39;ll find you can ask the same exact sort of question
about the &amp;quot;hard&amp;quot; things. What &lt;em&gt;is&lt;/em&gt; an electron, really? Is it a
real &amp;quot;thing&amp;quot;? Is it just a pattern of concentrated energy that
exhibits a sort of probabilistic location, mass, and charge in a
way that&#39;s mathematically convenient to model as a &amp;quot;thing&amp;quot;? What
even is &amp;quot;thingness&amp;quot;, and what would it mean for an electron to be
or not be that, or have or lack that property of &amp;quot;thingness&amp;quot;?&lt;/p&gt;
&lt;p&gt;There&#39;s an ongoing (for the last 50 years or so, at least) open
field of discussion in epistemology and philosophy of science
about how to view the &amp;quot;weird&amp;quot; mathematical objects of modern
physics, which accurately and reliably predict observations, and
which we can thus very confidently &lt;em&gt;describe&lt;/em&gt; to a high degree of
accuracy, but which cannot be (must not be!) &amp;quot;real&amp;quot; in the sense
that &amp;quot;my dog&lt;sup id=&quot;i-am-fn-1-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2026/01/i-am-not-my-autism-am-i-well-drat/#i-am-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&amp;quot; or &amp;quot;this cup of coffee&amp;quot; is &amp;quot;real&amp;quot;.&lt;/p&gt;
&lt;p&gt;But what does it mean for &lt;em&gt;those&lt;/em&gt; things to be &amp;quot;real&amp;quot;? Isn&#39;t
&amp;quot;this cup of coffee&amp;quot; itself just a conceptual model that reliably
and accurately predicts observations I end up experiencing, which
are presumably in some way causally triggered by various
impingements upon my senses by....... whatever the fuck is
actually &amp;quot;real&amp;quot;? But if nothing is &amp;quot;really &lt;em&gt;really&lt;/em&gt; real!&amp;quot; like
&lt;a href=&quot;https://mechanism.ucsd.edu/bill/teaching/philsci/fine.realism.pdf&quot;&gt;Arthur Fine&#39;s concept of &amp;quot;foot-stamping
REAL&amp;quot;&lt;/a&gt;,
then how can we say &lt;em&gt;anything&lt;/em&gt; about &lt;em&gt;anything&lt;/em&gt;??&lt;/p&gt;
&lt;p&gt;So, I always come down on the side of more or less naive realism
(ie, there is a real world, we&#39;re in it, and we can describe it
with ever-increasing but imperfect fidelity by doing science) and
non-dualism (what happens in the brain happens in the brain, we
live in reality and are real things). Anything else feels like
cheating or solipsism, and is thus fake loser shit.&lt;/p&gt;
&lt;p&gt;That means, if we&#39;re gonna say &lt;em&gt;anything&lt;/em&gt; is &amp;quot;real&amp;quot;, including
me, it&#39;s gotta be: a given conceptual representation (whether
&amp;quot;coffee cup&amp;quot;, &amp;quot;me&amp;quot;, or &amp;quot;electron&amp;quot;) is &amp;quot;real&amp;quot; insofar as it
reliably and accurately predicts observations, better than random
chance.&lt;/p&gt;
&lt;p&gt;&amp;quot;I&#39;m&amp;quot; real, because the concept of the self predicts behavior
better than random chance. &amp;quot;I&#39;m&amp;quot; also a conceptual invention that
the narrative machine in isaacs&#39; head has concocted. These two
things are not in conflict with one another; in fact they &lt;em&gt;imply&lt;/em&gt;
one another. I&#39;m real because I exist, and the &amp;quot;I&amp;quot; that &amp;quot;exists&amp;quot;
is a model predicting observable behavior.&lt;/p&gt;
&lt;p&gt;Consider the pattern &lt;code&gt;1 1 2 3 5 8 13 21 ...&lt;/code&gt;. You&#39;d probably
recognize this as the fibonacci sequence. But is it &amp;quot;really&amp;quot;? Is
the fibonacci sequence &amp;quot;real&amp;quot;? What if I told you the next number
was &lt;code&gt;4231&lt;/code&gt;? Then you might say &amp;quot;oh, I &lt;em&gt;thought&lt;/em&gt; it was the
fibonacci sequence, but it&#39;s not &lt;em&gt;really&lt;/em&gt;, it&#39;s something else.&amp;quot;
The pattern is &amp;quot;real&amp;quot; if it accurately describes and predicts
observations. If not, then it isn&#39;t.&lt;/p&gt;
&lt;p&gt;&amp;quot;You&amp;quot; are not your body, &amp;quot;you&amp;quot; are what your body &lt;em&gt;does&lt;/em&gt;. That&#39;s
real. That&#39;s a pattern that can be described conceptually and
very faithfully predicts observations. Autism is likely a big
part of that behavior. Is it a &amp;quot;part of you&amp;quot;, or is it &amp;quot;you&amp;quot;?
What&#39;s the difference?&lt;/p&gt;
&lt;p&gt;If we went into the computer and changed the program so that it&#39;s
no longer accurately described/predicted by the conceptual
construct of &amp;quot;autism&amp;quot;, then is it a different program? Sure. But
this is a self-modifying program that changes from moment to
moment anyway. That&#39;d be a pretty big discontinuity, way more
than sleeping and waking up, so maybe it&#39;d be accurate to say
it&#39;s a &amp;quot;different program (person) entirely&amp;quot; from that point
forward.&lt;/p&gt;
&lt;p&gt;Anyway, that&#39;s probably already way too much for reddit. Have a
nice day, enjoy your meat tube (that can get a little dirty, it&#39;s
ok).&lt;/p&gt;
&lt;hr /&gt;
&lt;small&gt;
&lt;p&gt;&lt;a name=&quot;i-am-fn-1&quot; id=&quot;i-am-fn-1&quot;&gt;[1]&lt;/a&gt;: Plot twist, I don&#39;t
have a dog, so it&#39;s &lt;em&gt;not&lt;/em&gt; real. &lt;a href=&quot;https://blog.izs.me/2026/01/i-am-not-my-autism-am-i-well-drat/#i-am-fn-1-back&quot;&gt;back&lt;/a&gt;&lt;/p&gt;
&lt;/small&gt;
</content>
	</entry>
	
	<entry>
		<title>Conflict Between Neurotypes</title>
		<link href="https://blog.izs.me/2025/11/ogc-4-conflict/"/>
		<updated>2025-11-24T16:52:13Z</updated>
		<id>https://blog.izs.me/2025/11/ogc-4-conflict/</id>
		<content type="html">&lt;div class=&quot;series&quot;&gt;
&lt;p&gt;Part of a series on the Occult Grammar of Communication&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-1-what-is-occult-grammar&quot;&gt;Part 1: What is Occult Grammar?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;Part 2: Allistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;Part 3: Autistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: Conflict Between Neurotypes&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.autism.org.uk/advice-and-guidance/professional-practice/double-empathy&quot;&gt;Double Empathy
Problem&lt;/a&gt;
describes the way that two people of different neurotypes are
likely to misunderstand one another. It highlights the observable
truth that autistic people do not, in fact, &amp;quot;lack empathy&amp;quot;, but
rather they &lt;em&gt;lack empathy for allistic people they cannot
understand&lt;/em&gt;, and that allistic people exhibit the &lt;em&gt;same&lt;/em&gt; lack of
empathy for autistic people.&lt;/p&gt;
&lt;p&gt;Studies have shown that this breakdown is in fact &lt;em&gt;not&lt;/em&gt; typically
due to autistic cognitive shortcomings, but rather a lack of
reciprocity that &lt;em&gt;all&lt;/em&gt; humans exhibit towards those who are
unlike them. The critical difference, and the reason why it
appears to allistic people that autists have a social deficit, is
that autists are simply a minority.&lt;/p&gt;
&lt;p&gt;Variances in occult communication grammars play a major factor in
this lack of reciprocity.&lt;/p&gt;
&lt;p&gt;Let&#39;s go through the identified rules of
&lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;allistic&lt;/a&gt; versus
&lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;autistic&lt;/a&gt; communication, and see where they
lead our conversations astray.&lt;/p&gt;
&lt;p&gt;Remember, neither is better or worse than the other. Autistic
communication is &lt;em&gt;my&lt;/em&gt; style, so of course I find it more natural.
And allistic communication is more &lt;em&gt;common&lt;/em&gt;, simply because the
vast majority of people are not autistic.&lt;/p&gt;
&lt;p&gt;But &lt;em&gt;all&lt;/em&gt; human communication is a series of moves in a language
game defined by the players. It is interesting to examine and
study the games, but we should not delude ourselves into
believing that there is any objectively &amp;quot;correct&amp;quot; way to
communicate, apart from what works for the communicators.&lt;/p&gt;
&lt;h2 id=&quot;comparing-the-rulesets&quot; tabindex=&quot;-1&quot;&gt;Comparing the Rulesets &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#comparing-the-rulesets&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Motivation&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autistic: Motivations are explicit.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Allistic: No unmotivated utterances.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Status and Care&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autistic: Correct knowledge is everyone&#39;s responsibility.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Allistic: All motivations regard social status.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Grammar and Assembly&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autistic: Grammar is relevant.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Allistic: No negations.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Meaning&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autistic: Symbols carry their assigned meaning.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Allistic: Speaking a name invokes its vibes.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;motivations&quot; tabindex=&quot;-1&quot;&gt;Motivations &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#motivations&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In allistic communication, every utterance is presumed to be
indicative of a motivation &lt;em&gt;apart from that contained by the
speech act itself&lt;/em&gt;. In autistic communication, the motivation of
any speech act is assumed to be explicitly visible in the
utterance itself.&lt;/p&gt;
&lt;p&gt;This leads to conflict both because allistic people infer
motivations that do not exist (or become troubled and confused
when they fail to find such motivations), &lt;em&gt;and also&lt;/em&gt; because
autists both fail to infer motivations that allistics intend to
communicate, and inadvertently communicate motivations that are
inaccurate.&lt;/p&gt;
&lt;p&gt;As an autistic person, one of the most perplexing conflicts is
when someone asks a reasonable question, which you answer
plainly, and they get upset, saying &amp;quot;Do you &lt;em&gt;really&lt;/em&gt; think that&#39;s
what I wanted to know?&amp;quot; as if you&#39;ve called them stupid.&lt;/p&gt;
&lt;p&gt;A close second is when I want to request or convey some piece of
information, and my allistic conversation partner seemingly
cannot avoid engaging in completely unrelated things. &amp;quot;What time
are we leaving?&amp;quot; invites the answer &amp;quot;If you need to get there
sooner, we can go earlier&amp;quot;, which was &lt;em&gt;not the question!&lt;/em&gt; The
more I try to clarify that I just want the information, they more
they assure me that any time I want to leave is fine, if I&#39;m in
such a hurry, we can leave right now, jeez!&lt;/p&gt;
&lt;p&gt;The exasperated display (jeez!) is a reaction to a perceived
status attack. By asking when we&#39;re leaving, I&#39;m &lt;em&gt;calling
attention to the time of departure&lt;/em&gt;, which is taken as an
indication that I want to leave soon. By rejecting the assurance
that my desire will be respected, I&#39;m rejecting a social bid for
alliance.&lt;/p&gt;
&lt;p&gt;Because allistic communicators are typically all engaged in
largely the same manner with the social status hierarchy of a
given situation, they are all likely to make the same assumptions
about the social motivations of any given utterance, provided
that they are part of the same social group hierarchy.&lt;/p&gt;
&lt;p&gt;However, if your baselevel assumption is that we use words that
mean things, to send the message that we intend, then a question
like &lt;a href=&quot;https://www.tiktok.com/t/ZP8AcCbtp/&quot;&gt;&amp;quot;is there a difference between the drinks in the living
room, and the drinks in the
refrigerator&amp;quot;&lt;/a&gt; is completely
baffling. Even if I am mindful to consider pragmatics, it&#39;s just
an impossibly convoluted riddle unless we start from the
assumption that &lt;em&gt;everything&lt;/em&gt; is regarding status, deference, and
hierarchy.&lt;/p&gt;
&lt;h2 id=&quot;status-and-care&quot; tabindex=&quot;-1&quot;&gt;Status and Care &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#status-and-care&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Allistic communication is a nearly constant exchange of status,
to show that the speaker is or isn&#39;t a threat to the other&#39;s
status, to suss out who is higher status than the other and thus
must be deferred to, to establish the many varied layers of group
affiliations and rivalries between parties, and so on.&lt;/p&gt;
&lt;p&gt;On the other hand, autistic people tend to be far less concerned
with social status than allistic people. We are largely
&lt;em&gt;oblivious&lt;/em&gt; to it.&lt;/p&gt;
&lt;p&gt;Sometimes this works to our benefit! After all, &amp;quot;unaware of
social status&amp;quot; can be a great way to signal confidence and
security within allistic circles, which can come across as
a person who is powerful and safe.&lt;/p&gt;
&lt;p&gt;However, far &lt;em&gt;more&lt;/em&gt; often, this backfires, as rules of deference
are dependent on social hierarchy context.&lt;/p&gt;
&lt;p&gt;When an autist speaks up to correct a mistake, it is often taken
as an attack. We are upsetting the social order by engaging in
&amp;quot;one-upsmanship&amp;quot; or &amp;quot;well, actualyism&amp;quot;. These are often fair
cricitisms; there are cases were getting the high level picture
in place is more important than everyone agreeing on all the
details.&lt;/p&gt;
&lt;p&gt;This is the origin of the &amp;quot;You just always have to be right!&amp;quot;
complaint that so many autists hear repeatedly throughout our
lives.&lt;/p&gt;
&lt;p&gt;From the autistic point of view, I need us &lt;em&gt;all&lt;/em&gt; to always be
right, isn&#39;t that the point? Do you want us to be &lt;em&gt;wrong&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;But from the allistic point of view, the social status of being
&amp;quot;the one who is right&amp;quot; is far more relevant than the truth value
of any particular statement, and insisting on correcting mistakes
strikes them as a grab at unearned status, rather than the
status-neutral act of care and consideration.&lt;/p&gt;
&lt;h2 id=&quot;assigned-meaning-grammar-and-assembly&quot; tabindex=&quot;-1&quot;&gt;Assigned Meaning, Grammar, and Assembly &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#assigned-meaning-grammar-and-assembly&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In autistic communication, symbols carry the meaning that they
are assigned, either for use within a specific context (for
example, jargon or technical terms) or more broadly, using a
conventional definition. These meanings can be negated, flipped
around, or assembled, according to fairly well defined
grammatical rules that make up the language.&lt;/p&gt;
&lt;p&gt;Allistic communication is much more top-down. A word may pick up
a specific connotation or strong emotional valence, and will
&amp;quot;invoke&amp;quot; that emotional context when it is used, &lt;em&gt;regardless of
any negation or reassignment&lt;/em&gt; that might be applied!&lt;/p&gt;
&lt;p&gt;For example, imagine if you worked at an office job, and a
colleague came to you saying that they were frustrated by the way
that the team was filing documents. In the course of trying to
gain clarity about their request, you say &amp;quot;So, just to make sure
I understand your complaint--&amp;quot;&lt;/p&gt;
&lt;p&gt;At which point, they cut you off, slightly raising their voice
and becoming visibly irate, and say &amp;quot;I&#39;m not &lt;strong&gt;COMPLAINING&lt;/strong&gt;, I&#39;m
just saying we need to do it &lt;strong&gt;DIFFERENTLY&lt;/strong&gt;!&amp;quot;&lt;/p&gt;
&lt;p&gt;This is, of course, extremely confusing. By definition, a
&amp;quot;complaint&amp;quot; is literally just a statement of a thing that one
would prefer to be other than what it is.&lt;/p&gt;
&lt;p&gt;What might be going on?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;They are coming to you with a need. This puts them in a
vulnerable position, because their social status needs to be
high enough to be granted this request, and can take a hit if
it is not.&lt;/li&gt;
&lt;li&gt;You are trying to remain calm and listen respectfully. However,
because you&#39;re not immediately validating their threatened
status, it seems like you are positioning yourself as an
authority of &lt;em&gt;higher&lt;/em&gt; status, likely to deliver a social
injury.&lt;/li&gt;
&lt;li&gt;You use the word &amp;quot;complaint&amp;quot;, which has the &lt;em&gt;emotional
connotation&lt;/em&gt; of a petulant, childish, &amp;quot;entitled&amp;quot; person, who
does not deserve whatever it is they are asking for.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And so, they lose it, and lash out in fear at the perceived
social attack.&lt;/p&gt;
&lt;h2 id=&quot;top-down-bottom-up&quot; tabindex=&quot;-1&quot;&gt;Top Down, Bottom Up &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#top-down-bottom-up&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This post could be an entire book, if I attempted to catalog
every communication challenge that autistic people face with
agonizing regularity. As I&#39;m too lazy for that task, I&#39;ll leave
it as an exercise for the reader to apply this model to their
future conversations, in the hopes that it can be illuminating.&lt;/p&gt;
&lt;p&gt;What emerges from the comparison of these rules and a few common
miscommunication patterns, is reflective of &lt;a href=&quot;https://en.wikipedia.org/wiki/Bottom-up_and_top-down_approaches&quot;&gt;top-down versus
bottom-up
approaches&lt;/a&gt;.
For the autistic communicator, communication follows a more or
less predictable bottom-up script:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mentally identify an observation, a piece of information
that needs to be shared, a playful reference that&#39;s relevant
to the situation, whatever. Something that we would benefit by
communicating.&lt;/li&gt;
&lt;li&gt;Assemble an utterance in your language, out of words that
combine to mean that thing you&#39;re trying to communicate it.&lt;/li&gt;
&lt;li&gt;Say the thing.&lt;/li&gt;
&lt;li&gt;The listener interprets the word, and now knows the thing,
gets the joke, is aware of the observation, whatever.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, allistic communication moves in a more top-down
wholistic manner:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Awareness of social status, and a desire to take some action
regarding that status. (Establish a rapport, trounce a rival,
assist an ally, evade a threat, etc.)&lt;/li&gt;
&lt;li&gt;Identify key concepts vaguely in the area of the intended
message.&lt;/li&gt;
&lt;li&gt;Make small communication moves, checking in on the response
of the recipient to ensure the intended emotional target is
reached, and adjusting as needed.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is not quite accurate to say that one is more or less
&amp;quot;precise&amp;quot; than the other, but autistic communication starts from
the individual &amp;quot;atoms&amp;quot; of utterances, and assembles them
linguistically, whereas allistic communication tends to start
from the emotional intent, and makes small moves to continually
adjust in that direction.&lt;/p&gt;
&lt;p&gt;That is, autistic communication is based on a &lt;em&gt;bottom-up&lt;/em&gt; model
of assembling meaningful tokens into utterances to precisely
express communicative intent about a shared reality, whereas
allistic communication is a &lt;em&gt;top-down&lt;/em&gt; model of assuming that
everyone&#39;s main fixation is social status and using topic
keywords to collaboratively gesture towards a shared social
equilibrium.&lt;/p&gt;
&lt;h2 id=&quot;differences-in-collaboration&quot; tabindex=&quot;-1&quot;&gt;Differences in Collaboration &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#differences-in-collaboration&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This top-down/bottom-up divergence also sheds light on the
differences in collaborative meaning-making and discovery between
allistic and autistic communicators.&lt;/p&gt;
&lt;p&gt;Many allists &amp;quot;think out loud&amp;quot;, in conversation with another
participant. In a top-down fashion, they might throw out a
general &amp;quot;direction&amp;quot; concept, as an invitation for their
communication partner to help them refine it towards clarity.
That is, doing the same sort of &amp;quot;cast, then iterate&amp;quot; approach,
but collaboratively.&lt;/p&gt;
&lt;p&gt;Autists tend to be more bottom-up in our thinking, and this
reflects in our communication as &amp;quot;speaking in paragraphs&amp;quot;. That
is, by the time the thought is ready for sharing, it&#39;s a
construction with interlocking parts. We do want feedback! But
feedback on a part of the building without seeing the whole, is
unlikely to be useful.&lt;/p&gt;
&lt;p&gt;So, there is an allistic person seeking feedback, and becoming
frustrated by not getting engagement, while the autistic person
is attempting to respectfully listen until they understand the
message. In allistic terms this looks like a refusal to
participate, &amp;quot;waiting to respond&amp;quot;, which can be hostile and
threatening, as it does not acknowledge or reinforce the social
dynamic and connection. All the moreso because when they &lt;em&gt;do&lt;/em&gt;
respond, it&#39;s often to point out errors (correctness is
everyone&#39;s responsibility), rather than just getting the
intention.&lt;/p&gt;
&lt;p&gt;Then when the autistic person speaks, they can get frustrated to
meltdown by repeated interruptions that keep taking them off the
topic at hand, which in allistic terms, appears to be an
aggressive &amp;quot;holding the floor&amp;quot; approach to speaking.&lt;/p&gt;
&lt;p&gt;Both parties are attempting to collaborate in the way that they
know how, but these differences in approaches to meaning and
understanding can often present significant obstacles without
deliberate structured communication techniques.&lt;/p&gt;
&lt;h2 id=&quot;calls-to-action&quot; tabindex=&quot;-1&quot;&gt;Calls to Action &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#calls-to-action&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This series attempts to identify and examine a model of how
inter-neurotype communication fails, viewed through a lens of
cultural subjectivity. I have endeavored to not assign blame or
imply that either linguistic reasoning approach is better or
worse than the other.&lt;/p&gt;
&lt;p&gt;The question of &lt;em&gt;responsibility&lt;/em&gt; for correcting communication
gaps, however, is more interesting. All too often, it falls on
the disadvantaged group to do the work of addressing the
challenges they face, especially if that disadvantaged group is a
minority in society. Those in a position of privilege do not feel
the pain of the oppression they benefit from, and thus any
request for accommodations can feel like oppression.&lt;/p&gt;
&lt;p&gt;It is reasonable for autistic people to use this model to gain a
deeper understanding of the communication challenges we face,
including the ways in which allistic people will &lt;em&gt;always&lt;/em&gt; fail to
understand us. It is often a matter of survival for us to be able
to manipulate their emotions and understand their self-delusions
in order to simply be allowed to exist in the world. Sadly, they
will usually not be willing or able to see this themselves.&lt;/p&gt;
&lt;p&gt;While I do not believe we can expect to be met halfway, using the
language of allistic communication to express our needs as
autistic communicators can be quite effective. Hopefully the
information in this series is useful, if only as a way to
understand the confusing messages of a world where we are
perpetual foreigners.&lt;/p&gt;
&lt;p&gt;From &lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;part 2 in this series&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;However, we equally are within our rights to demand that &lt;em&gt;our&lt;/em&gt;
communication styles are respected as well. We are more able to
do that if we advocate for ourselves in terms that our audience
will readily understand. Even as we may not accept the
&lt;em&gt;rightness&lt;/em&gt; of one neurotype being dominant, we must accept the
&lt;em&gt;actual fact&lt;/em&gt; that it is, if we are to survive and thrive in
the real world.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So this raises the obvious question, how can one demand this, in
the language of the allistic majority?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Establish a shared goal of collaboration.&lt;/li&gt;
&lt;li&gt;Position ourself as the one in need, who is making a request.
This boosts the social status of the allistic participant by
allowing them to see themselves as the empowered party who
deigns to stoop to our level.&lt;/li&gt;
&lt;li&gt;Speak in strictly positive requests and observations. Instead
of telling them what to avoid, tell them what to &lt;em&gt;do&lt;/em&gt;, and why
it&#39;s helpful. Besides simply being less cognitive load by
making positive requests, it also avoids the pitfalls of
appearing critical.&lt;/li&gt;
&lt;li&gt;Avoid words with connotations implying disability, entitlement,
or other &amp;quot;justifications&amp;quot; of your needs. Instead, focus on
gratitude and &lt;em&gt;positive&lt;/em&gt; impacts of the accommodations being
requested.&lt;/li&gt;
&lt;li&gt;Identify the subject from a top-down direction, refining
precision and checking in &lt;em&gt;more frequently than seems
necessary&lt;/em&gt; regarding emotional valence and understanding.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is, of course, quite a lot of work, and it is emotional
labor that frequently goes unrecognized. It is thus responsible
to only engage in this degree of &amp;quot;neurotype translation&amp;quot; for the
relationships and conversations that are most important, where
&lt;a href=&quot;https://www.autism.org.uk/advice-and-guidance/topics/behaviour/masking&quot;&gt;masking&lt;/a&gt;
carries the highest mental health costs.&lt;/p&gt;
&lt;p&gt;For other scenarios, it can at least be useful to help understand
what&#39;s going on, even if there&#39;s little we can reasonably do to
fix the situation.&lt;/p&gt;
&lt;h2 id=&quot;further-discussion-and-investigation&quot; tabindex=&quot;-1&quot;&gt;Further Discussion and Investigation &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#further-discussion-and-investigation&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I would love to hear from you if you find this model useful, or
if you have anything to add to it.&lt;/p&gt;
&lt;p&gt;Use the links at the top of this page, or hit me up on Discord,
where I&#39;m known as &lt;code&gt;isaacs__&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;thanks&quot; tabindex=&quot;-1&quot;&gt;Thanks &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-4-conflict/#thanks&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am extremely grateful to everyone who read early drafts of
these posts and provided feedback. Communication is a team sport,
and we get better together.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Autistic Communication</title>
		<link href="https://blog.izs.me/2025/11/ogc-3-autistic/"/>
		<updated>2025-11-17T16:50:44Z</updated>
		<id>https://blog.izs.me/2025/11/ogc-3-autistic/</id>
		<content type="html">&lt;div class=&quot;series&quot;&gt;
&lt;p&gt;Part of a series on the Occult Grammar of Communication&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-1-what-is-occult-grammar&quot;&gt;Part 1: What is Occult Grammar?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;Part 2: Allistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: Autistic Communication&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;Part 4: Conflict Between Neurotypes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;In &lt;a href=&quot;https://blog.izs.me/p/ogc-1-what-is-occult-grammar&quot;&gt;Part 1&lt;/a&gt;, I discussed the
nature of occult grammars, and how they invisibly affect
communication both in composition and interpretation of
communication acts, as well as determining which things count
&lt;em&gt;as&lt;/em&gt; communication acts.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;Part 2&lt;/a&gt;, I discussed four fundamental
rules of allistic occult grammar, approaching the subject based
on observation as an outsider to allistic communication, who
nevertheless must live within a predominantly allistic society.&lt;/p&gt;
&lt;p&gt;In this part, I will attempt to do the same for autistic occult
grammar. Please accept my apology for the following tedious
disclaimers.&lt;/p&gt;
&lt;h2 id=&quot;tedious-disclaimers&quot; tabindex=&quot;-1&quot;&gt;Tedious Disclaimers &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#tedious-disclaimers&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As someone who is autistic, I am perhaps &lt;em&gt;least&lt;/em&gt; able to identify
the grammar that is implicit and hidden in autistic
communication. Nonetheless, these seem like a good start.
Feedback on this subject is welcome, via any of the contact links
at the top of this page.&lt;/p&gt;
&lt;p&gt;The approach here is to examine the allistic occult grammar
rules, and back into them via more or less symmetrical phrasings
that highlight the reasons why those rules might strike an
autistic person as strange.&lt;/p&gt;
&lt;p&gt;Just to reiterate, these might seem obviously true to autistic
people (or obviously false to allists!), perhaps even like
something that doesn&#39;t need to be stated explicitly. &lt;em&gt;That is
precisely the point!&lt;/em&gt; Occult grammars appear to us as just &amp;quot;the
way things are, the only way they can be&amp;quot;, rather than a rule
that has to be stated explicitly.&lt;/p&gt;
&lt;p&gt;Again, no positive or negative judgement is intended in any of
these descriptions. It may be that my own personal bias comes
across, though I have endeavored to be as fair as possible. If it
seems like one or the other set is getting more generous
treatment, consider that it might simply be more natural to your
neurotype.&lt;/p&gt;
&lt;p&gt;Lastly, remember that autism is not a monolith, and neither is
autistic culture. As the saying goes, &amp;quot;If you&#39;ve meet one
autistic person, you&#39;ve met them.&amp;quot; Since I am working from the
disadvantage of closeness, as if a fish attempted to describe
water, it&#39;s very possible that these occult grammar rules are
further occluded by other cultural biases.&lt;/p&gt;
&lt;p&gt;But enough disclaiming!&lt;/p&gt;
&lt;h2 id=&quot;the-occult-grammar-rules&quot; tabindex=&quot;-1&quot;&gt;The Occult Grammar Rules &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#the-occult-grammar-rules&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Motivations are explicit.&lt;/li&gt;
&lt;li&gt;Correct knowledge is everyone&#39;s responsibility.&lt;/li&gt;
&lt;li&gt;Grammar is relevant.&lt;/li&gt;
&lt;li&gt;Symbols carry their assigned meaning.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;1.-motivations-are-explicit.&quot; tabindex=&quot;-1&quot;&gt;1. Motivations are explicit. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#1.-motivations-are-explicit.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The primary motivation of any utterances is explicit in the
utterance itself. If someone says &amp;quot;When are we leaving for the
party?&amp;quot; it&#39;s because &lt;em&gt;they want to know when we are leaving for
the party&lt;/em&gt;, not because they have a desire to leave sooner or
later than otherwise would&#39;ve happened if they hadn&#39;t asked.&lt;/p&gt;
&lt;p&gt;This certainly does not preclude jokes, sarcasm, and other forms
of linguistic play! In fact, many autists are hyperlexic and
&lt;em&gt;nearly constantly&lt;/em&gt; engage various forms of wordplay, and delight
in oblique references and layered meanings. However, a pun or a
joke &lt;em&gt;is just what it is&lt;/em&gt;. The utterance &lt;em&gt;in itself&lt;/em&gt; is not
typically a tool to effect some other kind of communication
outcome &lt;em&gt;beyond&lt;/em&gt; the play that the autist is engaged in.&lt;/p&gt;
&lt;h2 id=&quot;2.-correct-knowledge-is-everyone&#39;s-responsibility.&quot; tabindex=&quot;-1&quot;&gt;2. Correct knowledge is everyone&#39;s responsibility. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#2.-correct-knowledge-is-everyone&#39;s-responsibility.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It is everyone&#39;s shared responsibility to work together to
notice, identify, and correct any mistakes. If it seems that one
party has information that the other lacks, then the kind and
polite thing to do is to share that information.&lt;/p&gt;
&lt;p&gt;While some social status may be conferred by being the sort of
person who readily shares information, that is not the
motivation. It is simply the duty of information-havers to share
the information that they have. No harm is done by sharing
information. Correction is an act of &lt;em&gt;care&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;This can at times become a distraction from communication
pragmatics. However, it is important in autistic communication to
ensure that the correct words are being used to communicate the
intended information, so that an even more distracting
miscommunication can be avoided.&lt;/p&gt;
&lt;h2 id=&quot;3.-grammar-is-relevant.&quot; tabindex=&quot;-1&quot;&gt;3. Grammar is relevant. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#3.-grammar-is-relevant.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The sentence &amp;quot;I am not going to set the car on fire&amp;quot; is not a
threat. In fact, it is the &lt;em&gt;opposite&lt;/em&gt; of a threat.&lt;/p&gt;
&lt;p&gt;In addition to meaning being carried by &amp;quot;topic&amp;quot; words, like &amp;quot;car&amp;quot;
and &amp;quot;fire&amp;quot;, the &lt;em&gt;other&lt;/em&gt; words in a sentence are just as important
to interpreting the overall message, such as &amp;quot;not&amp;quot;.&lt;/p&gt;
&lt;p&gt;Not only do negations exist, they are always relevant, and fully
negate or reverse the emotional valence of a statement. As
&lt;a href=&quot;https://en.wikipedia.org/wiki/Bottom-up_and_top-down_approaches&quot;&gt;bottom-up
thinkers&lt;/a&gt;,
we construct meaning based on the constituent parts of an
utterance and the rules of their assembly; we do not start from
vague high-level impressions and make assumptions about the
parts.&lt;/p&gt;
&lt;h2 id=&quot;4.-symbols-carry-their-assigned-meaning.&quot; tabindex=&quot;-1&quot;&gt;4. Symbols carry their assigned meaning. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#4.-symbols-carry-their-assigned-meaning.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All utterances are seen as moves in a largely arbitrary language
game, where symbols (words, gestures, etc.) carry the meaning
that they are assigned by the players in the game.&lt;/p&gt;
&lt;p&gt;In many contexts, it is possible to redefine words, and this is
often done as needed, especially when the conventional meaning of
a word may be vague or imprecise. Autists will often pause a
discussion to indicate something like &amp;quot;Ok, by &lt;em&gt;this&lt;/em&gt; I mean,
&lt;em&gt;such and such&lt;/em&gt;, but if I&#39;m referring to &lt;em&gt;that&lt;/em&gt;, I&#39;ll use this
other term instead.&amp;quot; From that point on, whatever &lt;em&gt;conventional&lt;/em&gt;
definition the word might&#39;ve meant, it acquires a more precise
meaning local to the current conversation.&lt;/p&gt;
&lt;p&gt;While some topics may carry &lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/&quot;&gt;near- or
far-mode&lt;/a&gt; connotations,
these will likely be different for each autistic speaker. As
it&#39;s impossible to predict, it is reasonable for each
participant to manage their reactions on their own.&lt;/p&gt;
&lt;h2 id=&quot;literal-thinking-pedantic-vocabulary-and-infodumping&quot; tabindex=&quot;-1&quot;&gt;Literal Thinking, Pedantic Vocabulary, and Infodumping &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#literal-thinking-pedantic-vocabulary-and-infodumping&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If being correct is our shared responsibility as communicators,
and if the grammar and tokens of a language act can be reliably
assembled to convey a specific statement as unambiguously as
possible, and we can usually pause and clarify or refine
definitions as needed, then it&#39;s clear how the stereotypical
&amp;quot;autistic&amp;quot; mode of communication arises.&lt;/p&gt;
&lt;p&gt;It&#39;s &lt;em&gt;good, actually,&lt;/em&gt; to interrupt a speaker to point out that
they misspoke, or clarify specifically which sense of a word they
mean. Just as it is good to &lt;em&gt;be interrupted&lt;/em&gt; for this reason! It
shows interest, which is an essential part of ensuring that
information can be reliably and efficiently shared.&lt;/p&gt;
&lt;p&gt;The autistic pattern of expounding at length on a topic of
personal interest, aka
&lt;a href=&quot;https://en.wikipedia.org/wiki/Infodumping&quot;&gt;infodumping&lt;/a&gt;, also
arises from these occult grammar rules. If an autistic person
knows a lot about a subject, then they have a social obligation
to share that information.&lt;/p&gt;
&lt;p&gt;In many autistic spaces online and in meatspace, these
communication norms can emerge organically and result in very
productive and pleasant interactions between autistic people (and
allists who have learned to participate in the autistic mode of
communication).&lt;/p&gt;
&lt;p&gt;However, when viewed through the lens of &lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;&lt;em&gt;allistic&lt;/em&gt;
communication norms&lt;/a&gt;, these conversations can
appear to be a relentless assault of posturing, dominance,
combative interruption, nitpicking of minutiae, and a stubborn
refusal to provide even the most basic human care for one
another.&lt;/p&gt;
&lt;h2 id=&quot;coming-next&quot; tabindex=&quot;-1&quot;&gt;Coming Next &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-3-autistic/#coming-next&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the &lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;final part of this series&lt;/a&gt;, I will
discuss how the &lt;a href=&quot;https://www.autism.org.uk/advice-and-guidance/professional-practice/double-empathy&quot;&gt;Double Empathy
Problem&lt;/a&gt;
arises from these differences in culture, and ways that these
occult rules of message creation and interpretation can be
overtly leveraged for better communication outcomes.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Allistic Communication</title>
		<link href="https://blog.izs.me/2025/11/ogc-2-allistic/"/>
		<updated>2025-11-11T20:53:03Z</updated>
		<id>https://blog.izs.me/2025/11/ogc-2-allistic/</id>
		<content type="html">&lt;div class=&quot;series&quot;&gt;
&lt;p&gt;Part of a series on the Occult Grammar of Communication&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-1-what-is-occult-grammar&quot;&gt;Part 1: What is Occult Grammar?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 2: Allistic Communication&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;Part 3: Autistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;Part 4: Conflict Between Neurotypes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;As discussed in &lt;a href=&quot;https://blog.izs.me/p/ogc-1-what-is-occult-grammar&quot;&gt;part 1&lt;/a&gt;, an
&amp;quot;Occult Grammar&amp;quot; is a set of rules that govern the &lt;a href=&quot;https://en.wikipedia.org/wiki/Language_game_philosophy&quot;&gt;language
game&lt;/a&gt;,
yet which remain hidden to participants in that communication.&lt;/p&gt;
&lt;p&gt;Thus, occult grammar isn&#39;t a set of rules that need enforcement;
each person just feels them implicitly. They are the &lt;em&gt;hidden&lt;/em&gt;
implicit natural laws that make the language game what it is.&lt;/p&gt;
&lt;h2 id=&quot;allistic-vs-autistic-communication&quot; tabindex=&quot;-1&quot;&gt;Allistic vs Autistic Communication &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#allistic-vs-autistic-communication&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As an autistic person, it often feels like communication between
allistic people relies on a set of rules that everyone seems to
Just Know, but no one can explain or articulate, let alone
justify. Nonetheless, our language acts are interpreted according
to this grammar, often resulting in
&lt;a href=&quot;https://www.autism.org.uk/advice-and-guidance/professional-practice/double-empathy&quot;&gt;miscommunication&lt;/a&gt;
that is frustrating for all parties.&lt;/p&gt;
&lt;p&gt;In discussion with therapists and &lt;a href=&quot;https://www.reddit.com/r/evilautism/comments/1la1s1n/4_rules_of_allistic_communication/&quot;&gt;other autistic
thinkers&lt;/a&gt;,
what follows is a concise list of the most relevant occult
grammar rules that govern allistic communication.&lt;/p&gt;
&lt;p&gt;Note that, much like &lt;a href=&quot;https://sketchplanations.com/ablaut-reduplication&quot;&gt;ablaut
reduplication&lt;/a&gt;
or &lt;a href=&quot;https://sketchplanations.com/ordering-adjectives&quot;&gt;adjective
order&lt;/a&gt;, people
who follow these rules typically &lt;em&gt;aren&#39;t&lt;/em&gt; fully conscious of
them. Certainly there are exceptions, and situations where an
allistic person might be exhibiting more or less neuroticism in
how these rules are applied, depending on their current levels of
social threat, rapport, security, and so on.&lt;/p&gt;
&lt;p&gt;Also, as the dominant majority neurotype in every human society
and even most niche communities, allistic communication norms
tend to be &lt;em&gt;the&lt;/em&gt; communication norms. Autists are generally
expected to conform to them, and there is a strong incentive to
habituate to them as much as possible. As a result, whether
through socialization or self-training, many autists do come to
internalize some or all of these rules.&lt;/p&gt;
&lt;p&gt;However, as they are largely invisible to those who find them
easy to instinctively follow, it can be challenging to learn what
these rules even are!&lt;/p&gt;
&lt;h2 id=&quot;the-occult-grammar-rules&quot; tabindex=&quot;-1&quot;&gt;The Occult Grammar Rules &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#the-occult-grammar-rules&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;No unmotivated utterances.&lt;/li&gt;
&lt;li&gt;All motivations regard social status.&lt;/li&gt;
&lt;li&gt;No negations.&lt;/li&gt;
&lt;li&gt;Speaking a name invokes its vibes.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;1.-no-unmotivated-utterances.&quot; tabindex=&quot;-1&quot;&gt;1. No unmotivated utterances. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#1.-no-unmotivated-utterances.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every communication act, whether actual spoken words, or
movements of your body, even how one &lt;em&gt;breathes&lt;/em&gt;, is presumed to
be indicative of a specific &lt;em&gt;motivation&lt;/em&gt;. All speech acts are
attempts to not just convey information but &lt;em&gt;accomplish a goal&lt;/em&gt;
beyond the semantic content of the communication itself.&lt;/p&gt;
&lt;p&gt;Of course, &amp;quot;convey information&amp;quot; is technically a &amp;quot;goal&amp;quot;, but this
rule implies &lt;em&gt;additional&lt;/em&gt; motivation beyond what is explicitly a
part of the utterance itself. I use &amp;quot;motivated&amp;quot; here in the sense
of &amp;quot;&lt;a href=&quot;https://en.wikipedia.org/wiki/Motivated_reasoning&quot;&gt;motivated
reasoning&lt;/a&gt;&amp;quot;, a
motivation &lt;em&gt;apart from&lt;/em&gt; the content of the utterance itself.&lt;/p&gt;
&lt;p&gt;When the motivation of an utterance is not clear to them, allists
tend to become distracted, anxious, and suspicious, as they
struggle to interpret hidden meaning. If you simply want to share
information with the hopes that they might enjoy knowing it, or
which might assist them in some task they are doing, many will
interpret this as condescending and rude.&lt;/p&gt;
&lt;h2 id=&quot;2.-all-motivations-regard-social-status.&quot; tabindex=&quot;-1&quot;&gt;2. All motivations regard social status. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#2.-all-motivations-regard-social-status.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;All motivations behind utterances are presumed to be related to
&lt;em&gt;social status&lt;/em&gt;. As in, the ultimate goal is to increase one&#39;s
social leverage, to gain power and influence over others, evade a
status threat from a higher status member of the group, establish
alliances and boundaries as part of this social game, and so on.&lt;/p&gt;
&lt;p&gt;Any proximate motivations that are &lt;em&gt;not&lt;/em&gt; regarding social status,
are in service of hidden goals that do serve social status.&lt;/p&gt;
&lt;p&gt;This does not imply malice! Many motivations that regard social
status are designed to increase &lt;em&gt;another&#39;s&lt;/em&gt; social status, so as
to put them at ease, build rapport, and establish mutual benefit.
However, if someone is appearing to obscure or hide their status
related motivations (the only logical conclusion if a motivation
cannot be determined; see Rule 1), then there&#39;s a good chance
they are trying to get away with something nefarious, and others
will likely react with suspicion.&lt;/p&gt;
&lt;p&gt;Thus, it&#39;s best to establish and state a clear and reasonably
self-interested social-status-related motivation up front, so
that the allists you communicate with can relax and understand
how to manage you.&lt;/p&gt;
&lt;p&gt;For example, you could start a conversation with something like
&amp;quot;I am interested in improving our relationship so that you can
help me in my career, so I would appreciate the opportunity to
buy you lunch.&amp;quot; If you simply offer to pay without providing such
a motivation, it may be seen as manipulative; yet if the
&amp;quot;manipulation&amp;quot; is made clear, so that the participant knows what
they are consenting to, then it&#39;s much more comfortable for them.&lt;/p&gt;
&lt;h2 id=&quot;3.-no-negations.&quot; tabindex=&quot;-1&quot;&gt;3. No negations. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#3.-no-negations.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you say &amp;quot;I&#39;m not angry at you&amp;quot;, an allistic recipient will
likely receive something like &amp;quot;I&#39;m anger about you!&amp;quot; and get
concerned about your anger at them.&lt;/p&gt;
&lt;p&gt;It&#39;s not that they&#39;re lying or being intentionally
hypersensitive; the negation &lt;em&gt;simply does not exist&lt;/em&gt; in most
allistic communication. They do not hear it. When speaking with
allistics, be sure to always use statements phrased in a
logically positive manner. Avoid words like &amp;quot;not&amp;quot;, &amp;quot;never&amp;quot;, and
so on.&lt;/p&gt;
&lt;p&gt;Of course, if an allistic person asks you &amp;quot;Are you going to the
party?&amp;quot; and you say &amp;quot;no&amp;quot;, it&#39;s not as if they simply won&#39;t hear
what you said. They &lt;em&gt;are&lt;/em&gt; obviously capable of registering
negation as such. But when mixed into the context of a more
complicated thought, the negation vanishes, and what&#39;s left is
the &lt;em&gt;emotional valence&lt;/em&gt; of the rest of the sentence.&lt;/p&gt;
&lt;p&gt;One interesting impact of this is the exuberant double-negative
that some languages feature, to express a &lt;em&gt;positive&lt;/em&gt; statement in
a coy manner. For example, &amp;quot;I&#39;m not &lt;em&gt;not&lt;/em&gt; into it!&amp;quot; to imply that
you are in fact into something, but wish to self-deprecatingly
call attention to possible social cost of admitting as much. In
following rules 1 and 2, this also signals a self-effacing offer
of social status to the recipient of the message, and provides a
bid for them to validate your feelings, which establishes a
social status alliance.&lt;/p&gt;
&lt;h2 id=&quot;4.-speaking-a-name-invokes-its-vibes.&quot; tabindex=&quot;-1&quot;&gt;4. Speaking a name invokes its vibes. &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#4.-speaking-a-name-invokes-its-vibes.&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We sometimes refer to this as &amp;quot;naming h₂ŕ̥tḱos&amp;quot;, referencing the
fact that many languages in the Proto-Indo-European family lost
the original word for &amp;quot;bear&amp;quot;, likely a linguistic taboo based on
the belief that saying the name of a thing would summon it. (For
example, &amp;quot;bear&amp;quot; derives from a Proto-Germanic word for &amp;quot;brown&amp;quot;.)&lt;/p&gt;
&lt;p&gt;Along with Rule 3, this means that saying something like &amp;quot;I did
not get in a car accident&amp;quot; might cause someone to become very
alarmed and concerned, as if they witnessed a car accident. As
all utterances are motivated, and all motivations regard social
status, this may leave the allist believing that you are
attempting to garner sympathy in order to have power over them.&lt;/p&gt;
&lt;p&gt;Thus, it&#39;s important to be mindful of the emotional &amp;quot;vibes&amp;quot; of
the words you use.&lt;/p&gt;
&lt;p&gt;As allistic people tend to have &lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/&quot;&gt;remarkably similar senses
of what is near-mode vs
far-mode&lt;/a&gt;, this is rarely a
problem for them. However, autists run the risk of inadvertently
triggering near- or far-mode without realizing it, throwing off
their audience&#39;s processing ability.&lt;/p&gt;
&lt;h2 id=&quot;no-privileged-neurotypes!-(except-neurotypicality-typically-is)&quot; tabindex=&quot;-1&quot;&gt;No Privileged Neurotypes! (except neurotypicality typically is) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#no-privileged-neurotypes!-(except-neurotypicality-typically-is)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is a tendency in discussions of allistic communication for
autistic people to react with indignation and surprise at
learning what seems like arcane, convoluted, and illogical rules
of social status. &amp;quot;Why can&#39;t they just &lt;em&gt;say what they mean!?&lt;/em&gt;&amp;quot; the
autist cries.&lt;/p&gt;
&lt;p&gt;But, &lt;em&gt;they are saying what they mean&lt;/em&gt;. The meaning of words is
determined not by a dictionary, but by the pragmatics of
participants in the communication act. That there are &lt;em&gt;different&lt;/em&gt;
styles of communication, governed by different rules of grammar,
is simply reflective of the diversity of the human experience.
None of these are inherently better or worse than another, even
though some might be more suited to certain situations or
environments than others, just as we might find with different
languages or modalities.&lt;/p&gt;
&lt;p&gt;We autists can &lt;em&gt;and should&lt;/em&gt; learn these occult grammar rules, and
apply them in the communication we do with allistic people. We
should be the change we wish to see in the world, and be generous
in the communication support needs of others.&lt;/p&gt;
&lt;p&gt;However, we equally are within our rights to demand that &lt;em&gt;our&lt;/em&gt;
communication styles are respected as well. We are more able to
do that if we advocate for ourselves in terms that our audience
will readily understand. Even as we may not accept the
&lt;em&gt;rightness&lt;/em&gt; of one neurotype being dominant, we must accept the
&lt;em&gt;actual fact&lt;/em&gt; that it is, if we are to survive and thrive in the
real world.&lt;/p&gt;
&lt;h2 id=&quot;coming-next&quot; tabindex=&quot;-1&quot;&gt;Coming Next &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-2-allistic/#coming-next&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the next posts in this series, I will discuss the occult
&lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;grammar rules that govern &lt;em&gt;autistic&lt;/em&gt;
communication&lt;/a&gt;, and some of the &lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;conflicts that
arise from the translation challenges&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What Is Occult Grammar?</title>
		<link href="https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/"/>
		<updated>2025-11-04T20:53:03Z</updated>
		<id>https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/</id>
		<content type="html">&lt;!-- note: ping https://www.reddit.com/user/arcanotte --&gt;
&lt;div class=&quot;series&quot;&gt;
&lt;p&gt;Part of a series on the Occult Grammar of Communication&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: What is Occult Grammar?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;Part 2: Allistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;Part 3: Autistic Communication&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;Part 4: Conflict Between Neurotypes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;All communication, in order to &lt;em&gt;be&lt;/em&gt; communication, is governed by
rules that determine the ways in which &lt;em&gt;utterances&lt;/em&gt; (that is, any
and all speech acts and their constituent parts, whether verbal
or non-verbal) are assembled by the speaker and listener into
&lt;em&gt;meaning&lt;/em&gt;. These rules define the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Implicature&quot;&gt;implicature&lt;/a&gt; carried
by a given speech act, as well as its &amp;quot;literal&amp;quot; meaning.&lt;/p&gt;
&lt;p&gt;In this series, I use the term &amp;quot;grammar&amp;quot; to mean those rules that
speakers and listeners use to formulate and interpret speech
acts, body language, actions, and all other &amp;quot;moves&amp;quot; in the
&lt;a href=&quot;https://en.wikipedia.org/wiki/Language_game_philosophy&quot;&gt;language
game&lt;/a&gt;, in
ways that may be to varying degrees &lt;em&gt;overt&lt;/em&gt; or &lt;em&gt;occult&lt;/em&gt; to those
participating in the communication. Using this framework, I will
discuss various ways that the divergence between grammars can
create conversational obstacles between speakers of allistic and
autistic neurotypes, and approaches for overcoming said
obstacles.&lt;/p&gt;
&lt;h2 id=&quot;occult-vs-overt-grammar&quot; tabindex=&quot;-1&quot;&gt;Occult vs Overt Grammar &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-vs-overt-grammar&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rules of grammar may be, to varying degrees, &lt;em&gt;overt&lt;/em&gt;, that is,
known and recognized by the language participants, or &lt;em&gt;occult&lt;/em&gt;,
hidden from their view. Grammar rules can be made overt by
careful observation, but quite often, those fluent in a language
find it disconcerting to notice that they&#39;ve been following a
rule for many years in countless conversations without ever
recognizing its existence.&lt;/p&gt;
&lt;p&gt;When a child first learns to speak, all grammar is occult to
them. Over time, they come to understand that utterances are
composed of discrete components. Some of these identify actions,
others identify things, still others describe shape or color or
direction, and so on. From their interactions with others, they
form an implicit understanding of these rules long before they go
to school and learn words like &amp;quot;verb&amp;quot; and &amp;quot;noun&amp;quot;.&lt;/p&gt;
&lt;p&gt;Some rules, like the assembly of simple parts of speech, are
straightforward to discover and make overt. Others are less so.&lt;/p&gt;
&lt;p&gt;For example, native English speakers somehow know that &amp;quot;good
little dog&amp;quot; sounds more correct than &amp;quot;little good dog&amp;quot;, because
&lt;a href=&quot;https://sketchplanations.com/ordering-adjectives&quot;&gt;size comes &lt;em&gt;after&lt;/em&gt;
opinion&lt;/a&gt;. But,
&amp;quot;big bad wolf&amp;quot; is correct, despite violating this rule, because
adjective order is superseded by &lt;a href=&quot;https://sketchplanations.com/ablaut-reduplication&quot;&gt;ablaut
reduplication&lt;/a&gt;.
When forming utterances, we follow these complicated overlapping
rules without even knowing them consciously.&lt;/p&gt;
&lt;p&gt;Consider also, &amp;quot;a hot little flame&amp;quot; implies that a singular &amp;quot;hot
flame&amp;quot; is small in size. However, &amp;quot;a little hot flame&amp;quot; carries the
connotation that the &amp;quot;hot flame&amp;quot; is a &lt;em&gt;stuff&lt;/em&gt;, which we have a
small &lt;em&gt;quantity&lt;/em&gt; of. This is because the characteristic &amp;quot;hot&amp;quot;
must come &lt;em&gt;before&lt;/em&gt; the description of size of a single object,
but &lt;em&gt;after&lt;/em&gt; quantity of some mass noun.&lt;/p&gt;
&lt;p&gt;In this example, we observe how occult grammar rules also
determine how we &lt;em&gt;interpret&lt;/em&gt; language, switching &amp;quot;flame&amp;quot; from a
countable to a mass noun. That is, the sense of &amp;quot;little&amp;quot; being
either about size or about amount, is determined by the occult
grammar rule of adjective order.&lt;sup id=&quot;occult-grammar-p1-1-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If you ask a speaker to explain these rules, most people will
struggle. We know the rule implicitly, and can follow it
flawlessly, but we don&#39;t know &lt;em&gt;how&lt;/em&gt; we know it. And yet, the
rules inexorably determine how we interpret moves in the language
game. We cannot help it.&lt;/p&gt;
&lt;p&gt;&amp;quot;Occult grammar&amp;quot; refers to the hidden rules of communication that
native speakers of a language use without conscious awareness.
The rules are &amp;quot;occult&amp;quot; in the sense that they are hidden from
view, &lt;em&gt;especially&lt;/em&gt; from the view of those who clearly understand
the grammar well enough to use it flawlessly.&lt;/p&gt;
&lt;p&gt;These rules are simply &lt;em&gt;how the language works&lt;/em&gt;. It&#39;s not
necessary to enforce them, because fluency in the language
&lt;em&gt;means&lt;/em&gt; following them. They are natural laws of interpretation
and expression, rather than social rules of decorum. As such,
they do not need enforcement; they just exist to be discovered
through observation.&lt;/p&gt;
&lt;h2 id=&quot;more-than-words&quot; tabindex=&quot;-1&quot;&gt;More Than Words &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#more-than-words&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this series, I am referring to human communication in the
broadest possible sense, and thus &amp;quot;grammar&amp;quot; concerns more than
merely the assembly of words; that is, I use the term &amp;quot;utterance&amp;quot;
in the sense of &amp;quot;a move in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Language_game_philosophy&quot;&gt;language
game&lt;/a&gt;&amp;quot;
rather than strictly a spoken or written series of words.&lt;/p&gt;
&lt;p&gt;Of course, much of human communication &lt;em&gt;is&lt;/em&gt; carried by the
creation and interpretation of words. But the principles here
should equally be applied to things such as a sigh, a wave, a
cough, entering or exiting a room, giving a gift, sending an
invitation, turning to face towards or away from someone,
tightening the muscles of the lips or eyelids, making or breaking
eye contact, and so on. These things can be considered
&amp;quot;linguistic&amp;quot;, despite not being strictly &amp;quot;verbal&amp;quot;, at least when
humans do them.&lt;sup id=&quot;occult-grammar-p1-2-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Perhaps the most fundamental rule of grammar in almost any human
communication is the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cooperative_principle&quot;&gt;cooperative
principle&lt;/a&gt;,
which is the framework underlying theories of language such as
&lt;a href=&quot;https://en.wikipedia.org/wiki/Relevance_theory&quot;&gt;relevance
theory&lt;/a&gt; and
&lt;a href=&quot;https://en.wikipedia.org/wiki/Cooperative_principle#Grice&#39;s_maxims&quot;&gt;Grice&#39;s
Maxims&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;However, even if we accept that all language ought to follow the
cooperative principle, and provide some relevant information
sufficient to justify the listener attending to it, the question
remains of &lt;em&gt;what&lt;/em&gt; sorts of things we ought to consider
&amp;quot;relevant&amp;quot;, what objective we are cooperating &lt;em&gt;towards&lt;/em&gt;. Similar
to how ablaut reduplication supersedes adjective order (&amp;quot;good
little dog&amp;quot; but &amp;quot;big bad wolf&amp;quot;), there are cases where occult
grammar rules may supersede or alter our understanding of the
less buried rules of cooperative relevance.&lt;/p&gt;
&lt;p&gt;Humans are social beings, and as a result, communication forms a
significant part of our cognition. Grammar is the underlying
framework of communication, despite often being largely hidden
from conscious awareness. Thus, rather than assume that all
communicators implement the same rules of grammar, it is more
fruitful to examine them in action.&lt;/p&gt;
&lt;h2 id=&quot;occult-grammar-and-culture&quot; tabindex=&quot;-1&quot;&gt;Occult Grammar and Culture &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-and-culture&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While some aspects of human communication are no doubt
universal, language is both essential to culture and extremely
dependent upon it. Even between cultures that ostensibly speak
the &amp;quot;same&amp;quot; language, there may be extreme differences in the ways
that certain speech acts are interpreted. Often, this is a result
of cultural ideas about the importance, costs, and benefits of
various sorts of interaction.&lt;/p&gt;
&lt;p&gt;Consider for example the clash between &lt;a href=&quot;https://ask.metafilter.com/55153/Whats-the-middle-ground-between-FU-and-Welcome#830421&quot;&gt;ask cultures and guess
cultures&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Within an &amp;quot;ask&amp;quot; culture, denying a request is seen as essentially
a zero-cost interaction. Ask cultures place a high value on
freedom, independence, and clarity, also known as &lt;a href=&quot;https://en.wikipedia.org/wiki/Politeness_theory&quot;&gt;&amp;quot;negative
face&amp;quot;&lt;/a&gt;. While
gifts may be given, it&#39;s understood that a gift might miss the
mark. Thus, gifts confer little to no obligation on the part of
the receiver. You ask for what you want, you might get a &amp;quot;no&amp;quot;,
and that&#39;s fine. If someone hasn&#39;t asked, it&#39;s safe to assume
they don&#39;t want something (or at least, haven&#39;t thought of it,
and might either accept or turn it down if offered). If someone
asks for something you don&#39;t want to give, you can say &amp;quot;no&amp;quot; and
neither has lost any social capital.&lt;/p&gt;
&lt;p&gt;Within a &amp;quot;guess&amp;quot; culture, on the other hand, &amp;quot;positive face&amp;quot; is
given higher importance, and denying a request is seen as a
personal rejection. Therefore, it&#39;s very important to try to
&lt;em&gt;avoid&lt;/em&gt; situations that might result in someone having to turn
down a request, as they are unlikely to do so, even if meeting
the request breeds resentment. Guess cultures place a high
priority on social cohesion. A guess culture adherent would only
explicitly ask for something if their numerous hints had gone
unnoticed, or perhaps if it was a dire emergency, because asking
puts the recipient in the awkward position of perhaps having to
turn down the request, which could cause conflict.&lt;/p&gt;
&lt;p&gt;Even though both parties might be native English speakers, a
person from an ask culture person and another from a guess
culture will approach social interactions with a different occult
grammar of communication. The ask culture native will seem pushy
and demanding, whereas the guess culture native will seem
passive-aggressive and inscrutable. When they attempt to explain
themselves to one another, the confusion will only tend to
deepen, because though they are using the same words, their
contexts may be completely incompatible.&lt;/p&gt;
&lt;h2 id=&quot;neurotypal-communication-grammars&quot; tabindex=&quot;-1&quot;&gt;Neurotypal Communication Grammars &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#neurotypal-communication-grammars&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Grammars form the &amp;quot;operating system&amp;quot; of our communicative
machinery. They determine the assumptions and implicit context
that are used to form and interpret every speech act. In fact,
they even help establish what &lt;em&gt;is&lt;/em&gt; a &amp;quot;speech act&amp;quot; and what is
just some other kind of thing. For example, is that person waving
at me? Or are they just stretching their arm or doing some kind
of dance? (And are they dancing for me? About me? &lt;em&gt;At&lt;/em&gt; me?&lt;sup id=&quot;occult-grammar-p1-3-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;)&lt;/p&gt;
&lt;p&gt;People whose neurotypes diverge from societal neuronormativity
can have radically different relationships with language, due to
having different occult grammar rules.&lt;/p&gt;
&lt;p&gt;Being autistic in an allistic society often feels like a strange
sort of culture shock; I&#39;m from here, I speak this language, and
yet whenever I speak to the people around me, we seem to talk
past one another and leave in confusion.&lt;/p&gt;
&lt;p&gt;This &lt;a href=&quot;https://www.autism.org.uk/advice-and-guidance/professional-practice/double-empathy&quot;&gt;double empathy
problem&lt;/a&gt;
arises largely from differences in the occult grammar rules used
by allistic and autistic people in their communication. By
studying and consciously considering these rules, even as they
seem strange and foreign to us, we can improve our communication.
Even more beneficially, by identifying the differences, autistic
people can more effectively advocate for the benefits of our
natural communication style.&lt;/p&gt;
&lt;p&gt;It seems likely to me, though I of course have no direct
knowledge, that other divergent neurotypes may also have
different occult grammars of their own, especially those such as
Cluster A and B Personality Disorders, which involve
social/emotional divergence from the societal norm.&lt;/p&gt;
&lt;p&gt;However, the divergence between autistic and allistic norms are
so significant that they appear to comprise a significant
majority of the &amp;quot;social deficits&amp;quot; associated with ASD. We simply
do not interpret or formulate utterances according to the same
rules as the allistic majority. And when asked, the allistic
people in our life genuinely cannot explain what those rules even
are. Both sides are left waving their hands in exasperation at
the other&#39;s obstinate inscrutability.&lt;/p&gt;
&lt;p&gt;It is clear upon investigation that the divergence between
allistic occult grammar and autistic occult grammar are at least
as significant as any other cultural divide, and should be
treated with the same level of cultural sensitivity.&lt;/p&gt;
&lt;h2 id=&quot;coming-next&quot; tabindex=&quot;-1&quot;&gt;Coming Next &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#coming-next&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This framework has remarkable explanatory power which can be
leveraged powerfully in service of mutual empathy, understanding,
and collaboration.&lt;/p&gt;
&lt;p&gt;In the next posts in this series, I will discuss some of the
specific rules of the occult grammars of
&lt;a href=&quot;https://blog.izs.me/p/ogc-2-allistic&quot;&gt;allistic&lt;/a&gt; and &lt;a href=&quot;https://blog.izs.me/p/ogc-3-autistic&quot;&gt;autistic&lt;/a&gt;
communication, and the &lt;a href=&quot;https://blog.izs.me/p/ogc-4-conflict&quot;&gt;conflicts that arise from their
differences&lt;/a&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;small&gt;
&lt;h2 id=&quot;footnotes&quot; tabindex=&quot;-1&quot;&gt;Footnotes &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#footnotes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span id=&quot;occult-grammar-p1-1&quot;&gt;1: Truly, adjective order in
English is so deeply weird and occult as to be downright spooky.
I&#39;m not sure that anyone has really cataloged all of the edge
cases and dialectal variants, or if such a project is even
possible, but I somehow just know when it&#39;s wrong, as surely as
if there was a hair in my eye. &lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-1-back&quot;&gt;back&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;occult-grammar-p1-2&quot;&gt;2: A reasonable objection here is
that such things may often be more properly characterized as body
language or some other sort of non-linguistic communication, of
the sort that many nonhuman animals do, despite not having
&amp;quot;language&amp;quot; or &amp;quot;grammar&amp;quot; per se. However, when discussing the
behavior of &lt;em&gt;humans&lt;/em&gt;, which &lt;em&gt;are&lt;/em&gt; extremely language-using, such
gestures take on culturally-specific connotations, and exhibit
both discreteness and displacement, key indicators that separate
language from other non-linguistic forms of communication. &lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-2-back&quot;&gt;back&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;occult-grammar-p1-3&quot;&gt;3: If you don&#39;t think it&#39;s
possible to dance &amp;quot;at&amp;quot; someone, &lt;a href=&quot;https://www.youtube.com/watch?v=20myPs_-E1I&quot;&gt;qv this incredible
exchange&lt;/a&gt;. &lt;a href=&quot;https://blog.izs.me/2025/11/ogc-1-what-is-occult-grammar/#occult-grammar-p1-3-back&quot;&gt;back&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/small&gt;
</content>
	</entry>
	
	<entry>
		<title>The Church of Gravitationism</title>
		<link href="https://blog.izs.me/2025/10/church-of-gravitationism/"/>
		<updated>2025-10-05T18:36:09Z</updated>
		<id>https://blog.izs.me/2025/10/church-of-gravitationism/</id>
		<content type="html">&lt;h4 id=&quot;and-so-to-start-with...&quot; tabindex=&quot;-1&quot;&gt;&lt;em&gt;And so to start with...&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#and-so-to-start-with...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;As the meaningless universe expands from the hot beginning of
all things towards the cold infinite nothing, there are Four
Aspects of the Mind of God, and Four Divine Forces spring forth
from them.&lt;/p&gt;
&lt;p&gt;The Four Aspects are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Charge,&lt;/li&gt;
&lt;li&gt;Length,&lt;/li&gt;
&lt;li&gt;Time,&lt;/li&gt;
&lt;li&gt;and Mass.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Four Forces are:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Strong,&lt;/li&gt;
&lt;li&gt;Weak,&lt;/li&gt;
&lt;li&gt;Electromagnetism,&lt;/li&gt;
&lt;li&gt;and Gravity.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is this last that Gravitationists worship, &lt;strong&gt;Our Lady
Gravity&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;She is the most ineffable, yet most visible at our scale. At
macro scales much larger than ours, She rules unopposed. She is
simultaneously strong and gentle, yet nevertheless as ruthless as
any God could be, uncaring towards petty human concerns, capable
of bending space and time to Her divinely ordered whim, or
casually crushing us beneath the rocks of misfortune.&lt;/p&gt;
&lt;p&gt;The other three forces are stronger, in absolute terms. But
Strong and Weak are not inverse square laws, and they operate
only on subatomic scales, on the order of femtometers, dictating
how the nucleus of an atom holds together, or decays. Outside of
this tiny domain, they have no detectable power.&lt;/p&gt;
&lt;p&gt;Our Lord Electromagnetism is a being of mystery and powerful
magic. He keeps the mostly empty atoms from falling in on one
another, and moves in fae spirals via spooky action at a
distance. He can draw together, but also push apart. While His
reach is theoretically infinite in distance, His tendency to
self-eradicate limits the scope of His reach. He is the source of
much of our most useful magics. In fact, today it&#39;s hard to
imagine what life would be like without the miracles we obtain by
harnessing His blessings. His magic gives us life.&lt;/p&gt;
&lt;p&gt;Our Lady Gravity is quite different from all of these. Her effect
is much gentler; it can be temporarily overcome merely by the
legs of a child who jumps into the air. But, that effect is
always strictly in one direction. She never pushes; She &lt;em&gt;only&lt;/em&gt;
pulls. And Her reach is infinite. She binds the entire universe
together in the gossamer filaments of Her mysterious will.&lt;/p&gt;
&lt;p&gt;She is responsible for the shape and motion of the largest
objects in our universe: planets, stars, moons, galaxies,
nebulae, galactic clusters, and so on. Her power is invoked by
the mere existence of mass, and it bends and twists time and
length. When enough of Her attention is concentrated, She punches
a hole in the fabric of reality, creating event horizons that
fully swap time and space, replacing a location with a moment,
tearing the quantum foam in a simmering flurry of antimatter
radiation.&lt;/p&gt;
&lt;h2 id=&quot;worship&quot; tabindex=&quot;-1&quot;&gt;Worship &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#worship&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In addition to various holidays described below, we honor Our
Lady through regular communion in the form of resistance
training. In this way, we witness Her divine might upon our
fleshy bodies.&lt;/p&gt;
&lt;p&gt;Having pushed heavy objects to higher energy states repeatedly,
we then recover in Her firm embrace, allowing ourselves to sink
deeply into rest.&lt;/p&gt;
&lt;p&gt;That is, we engage in a hypertrophic strength focused resistance
training regimens, possibly involving weights or just the weight
of our own bodies, featuring adequate rest and recovery between
progressively overloaded muscular stimulus.&lt;/p&gt;
&lt;p&gt;Gravitationists thus always endeavor to get stronger and denser,
as an act of religious devotion. Like Our Lady, we exert our
power to increase the concentration of mass under our control.
This improves mental and emotional health, and thus the ability
to reflect on our place within the universe, and to accept the
precarity of our smallness with open eyes and focused minds.&lt;/p&gt;
&lt;h2 id=&quot;holy-days-and-seasons&quot; tabindex=&quot;-1&quot;&gt;Holy Days and Seasons &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#holy-days-and-seasons&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We recognize and pay tribute to Our Lady Gravity in the
recognition of the eight seasons, each marked by a holy day and a
moment of orbital significance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Winter (and &lt;a href=&quot;https://blog.izs.me/2009/08/holidays/&quot;&gt;Xmas&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;ruby&gt;Imbolc &lt;rt&gt;&lt;b&gt;&#39;ɪm&lt;/b&gt;bɑlk&lt;/rt&gt;&lt;/ruby&gt;&lt;/li&gt;
&lt;li&gt;Spring&lt;/li&gt;
&lt;li&gt;Beltane (and &lt;a href=&quot;https://blog.izs.me/2009/08/holidays/&quot;&gt;4/20&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Summer (and &lt;a href=&quot;https://blog.izs.me/2009/08/holidays/&quot;&gt;Birthday&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;ruby&gt;Lughnasadh &lt;rt&gt;&lt;b&gt;&#39;luː&lt;/b&gt;nəsə&lt;/rt&gt;&lt;/ruby&gt;&lt;/li&gt;
&lt;li&gt;Autumn&lt;/li&gt;
&lt;li&gt;&lt;ruby&gt;Samhain &lt;rt&gt;&lt;b&gt;&#39;sa&lt;/b&gt;ʊwən&lt;/rt&gt;&lt;/ruby&gt; (and
&lt;a href=&quot;https://blog.izs.me/2009/08/holidays/&quot;&gt;Thanksgiving&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each solstice, equinox, and cross-quarter day involves a
different set of practices and meditations to bring our awareness
to the fact that we are animals on a rock riding on the straight
paths through Our Lady&#39;s elliptically curved spacetime.&lt;/p&gt;
&lt;p&gt;If you would like a calendar with the specific moments of each of
these events, &lt;a href=&quot;https://izs.me/solar-events.ics&quot;&gt;you can subscribe to this
one&lt;/a&gt; in your calendar app of
choice.&lt;/p&gt;
&lt;p&gt;Note that the cross quarter days are not simply halfway between
the relative solstice and equinox, because Our Lady Gravity
swings us in &lt;a href=&quot;https://en.wikipedia.org/wiki/Barycenter_%28astronomy%29&quot;&gt;ellipses around
barycenters&lt;/a&gt;,
not mere circles around some arbitrary point. Even the sun
&lt;a href=&quot;https://en.wikipedia.org/wiki/Heliocentric_orbit&quot;&gt;orbits the center of the solar
system&lt;/a&gt;. There
is no fixed privileged point in the universe!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: the season descriptions here are related to the Northern
Temperate sect of Gravitationism, its original founding division.
In the Southern Temperate offshoot sect, they are inverted, and
the seasons in the Tropic and Polar sects are very different
indeed. These are all valid, and adherents of Gravitationism are
encouraged to reflect on the seasons as they occur in whatever
locations they feel the most connection to.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;winter&quot; tabindex=&quot;-1&quot;&gt;Winter &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#winter&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;a purple 5-pointed star, point up&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; float: right; height:
100px; width: 100px&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M49.9005,9.7475L59.9285,40.5035L92.2805,40.3315L66.1255,59.3725L76.2885,90.0855L50.0965,71.0955L24.0275,90.2525L33.9925,59.4755L7.71951,40.6015L40.0685,40.5665L49.9005,9.7475L49.9005,9.7475Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0.5 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;Daylight is at a minimum. Rate of change of daylight is zero. A
new year is born!&lt;/p&gt;
&lt;p&gt;Xmas, the holiday of &lt;a href=&quot;https://blog.izs.me/2009/08/holidays/&quot;&gt;Social Reflection&lt;/a&gt;,
occurs near the start of this season, a few weeks before
perihelion.&lt;/p&gt;
&lt;p&gt;Consume calories, hold your loved ones tight. Meditate on the
connections that keep us warm.&lt;/p&gt;
&lt;p&gt;The night is dark and full of terrors, but as the perihelion
occurs shortly after the Winter solstice, this season is
thankfully the shortest.&lt;/p&gt;
&lt;h3 id=&quot;imbolc&quot; tabindex=&quot;-1&quot;&gt;Imbolc &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#imbolc&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;svg alt=&quot;a magenta hexagon&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; float:right; height: 100px; width: 100px;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M49.8595,6.11101L87.941,27.935L88.08,71.823L50.1385,93.889L12.06,72.065L11.92,28.178L49.8595,6.11101L49.8595,6.11101ZM49.9135,23.228L26.7706,36.689L26.8556,63.46L50.0845,76.773L73.2284,63.312L73.1434,36.541L49.9135,23.228L49.9135,23.228Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 1 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;p&gt;Daylight is increasing, and the rate of daylight increase is also
increasing. The rate of daylight increase is inversely
proportional to the current amount of daylight, making this time
feel like the bite of winter has given up, but the gloom still
lingers on.&lt;/p&gt;
&lt;p&gt;Appreciate the slow return to life. The Hero awakens, and the
world shakes off the stiff wet frost of night.&lt;/p&gt;
&lt;h3 id=&quot;spring&quot; tabindex=&quot;-1&quot;&gt;Spring &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#spring&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;a 4-petaled red flower&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; height: 100px; width:
100px; float: right;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M43.7673,56.2635C18.5055,64.3565 5.86006,62.3045 5.83006,50.1075C5.80107,37.9095 18.4375,35.7975 43.7373,43.7695C35.6447,18.5045 37.6966,5.8585 49.893,5.8285C62.0905,5.79949 64.2024,18.4365 56.2307,43.7395C81.4935,35.6465 94.14,37.6985 94.17,49.8955C94.1989,62.0935 81.5626,64.2055 56.2607,56.2335C64.3533,81.4965 62.3014,94.1425 50.104,94.1715C37.9076,94.2015 35.7957,81.5645 43.7673,56.2635L43.7673,56.2635L43.7673,56.2635Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(display-p3 1 0 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;The equinox, when daylight is at its equal point. But far from
being serenely &amp;quot;balanced&amp;quot;, it is a time of swift change, as the
rate of change of daylight hits a maximum, and begins to slow.&lt;/p&gt;
&lt;p&gt;4/20 occurs near the end of this season, about a week before
Beltane. Relish in delights of the flesh on the solitary
consumptive holiday. Stuff your head with all the beauty nature
can offer.&lt;/p&gt;
&lt;h3 id=&quot;beltane&quot; tabindex=&quot;-1&quot;&gt;Beltane &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#beltane&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;a 6-pointed orange pinwheel&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;width: 100px; float: right; height: 100px;
enable-background:new 0 0 100 100;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M48.937,51.8504L71.981,11.7156L68.385,12.7395L65.067,13.912L62.022,15.2118L59.236,16.6113L56.703,18.0912L54.41,19.6304L52.349,21.2114L50.503,22.8194L48.867,24.4384L47.425,26.0564L45.077,29.2424L43.37,32.3024L42.208,35.1824L41.506,37.8424L41.186,40.2574L41.172,42.4164L41.583,45.1684L42.352,47.3574L43.671,49.4854L45.437,51.0824L47.599,51.9114L48.937,51.8504L48.937,51.8504ZM51.07,51.8454L27.836,11.8211L26.923,15.4471L26.281,18.9064L25.881,22.1944L25.701,25.3064L25.717,28.2414L25.902,30.9944L26.241,33.5724L26.712,35.9724L27.295,38.2004L27.976,40.2574L29.561,43.8834L31.358,46.8934L33.271,49.3394L35.225,51.2754L37.154,52.7614L39.017,53.8534L41.607,54.8714L43.888,55.3014L46.389,55.2224L48.655,54.4914L50.454,53.0354L51.07,51.8454L51.07,51.8454ZM52.132,49.9954L5.854,50.1064L8.53702,52.7084L11.212,54.9954L13.86,56.9834L16.466,58.6964L19.014,60.1514L21.494,61.3654L23.893,62.3614L26.207,63.1544L28.427,63.7634L30.55,64.2014L34.482,64.6424L37.987,64.5914L41.064,64.1574L43.717,63.4344L45.97,62.5054L47.846,61.4364L50.022,59.7034L51.534,57.9444L52.717,55.7384L53.217,53.4104L52.855,51.1224L52.132,49.9954L52.132,49.9954ZM51.061,48.1514L28.019,88.2844L31.614,87.2604L34.93,86.0874L37.977,84.7904L40.764,83.3884L43.296,81.9104L45.588,80.3694L47.651,78.7884L49.494,77.1824L51.133,75.5634L52.575,73.9454L54.92,70.7594L56.63,67.6974L57.792,64.8194L58.493,62.1574L58.814,59.7424L58.828,57.5834L58.414,54.8314L57.647,52.6424L56.328,50.5174L54.563,48.9194L52.4,48.0884L51.061,48.1514L51.061,48.1514ZM48.928,48.1564L72.164,88.1784L73.076,84.5524L73.719,81.0934L74.116,77.8064L74.296,74.6934L74.283,71.7604L74.095,69.0054L73.756,66.4274L73.288,64.0274L72.704,61.8014L72.023,59.7424L70.438,56.1184L68.642,53.1064L66.729,50.6604L64.775,48.7244L62.843,47.2384L60.98,46.1464L58.391,45.1284L56.112,44.6984L53.61,44.7774L51.344,45.5084L49.544,46.9674L48.928,48.1564L48.928,48.1564ZM47.866,50.0064L94.146,49.8954L91.461,47.2914L88.787,45.0064L86.137,43.0164L83.533,41.3034L80.985,39.8514L78.506,38.6344L76.106,37.6404L73.792,36.8454L71.57,36.2394L69.449,35.7984L65.517,35.3594L62.011,35.4104L58.936,35.8424L56.282,36.5654L54.03,37.4964L52.153,38.5634L49.975,40.2964L48.465,42.0574L47.283,44.2614L46.78,46.5894L47.144,48.8774L47.866,50.0064L47.866,50.0064Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 1 0.5 0)&quot; stroke-linejoin=&quot;miter&quot; style=&quot;mix-blend-mode: source-over; paint-order: stroke fill markers&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;Daylight is still increasing, but at a reduced pace, as we settle
in towards the bright warm part of the year. The rate of change
of daylight is proportional to the current daylight amount,
making this time feel &amp;quot;more summer than summer&amp;quot;, as we head
towards the solstice with increasing anticipation.&lt;/p&gt;
&lt;p&gt;A time of growth and waiting. We tend our projects and shephard
them along towards harvest.&lt;/p&gt;
&lt;h3 id=&quot;summer&quot; tabindex=&quot;-1&quot;&gt;Summer &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#summer&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;a yellow 7-pointed star, point down&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; float: right; height:
100px; width: 100px;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M50.087,92.1887L41.382,65.821L15.37,75.5374L30.556,52.2919L6.742,38.0137L34.386,35.395L30.7,7.87265L49.985,27.8518L69.204,7.81125L65.606,35.3453L93.258,37.8759L69.489,52.2298L84.749,75.4268L58.708,65.7934L50.087,92.1887L50.087,92.1887Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 1 1 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;Daylight at maximum, and for a brief moment, neither increasing
nor decreasing, as the rate of change flips from positive to
negative.&lt;/p&gt;
&lt;p&gt;This is the warmest and brightest time, the days are long and
feel unending. But the year is half over, and the rest will
become progressively darker.&lt;/p&gt;
&lt;p&gt;Birthday occurs a few weeks into this season, close to aphelion,
a time for solitary reflection. What have we sown this year? What
will we reap? In ample light of the sun, we take stock of our
selves and our plans.&lt;/p&gt;
&lt;p&gt;As aphelion occurs during this season, it is the longest. Truly
Our Lady smiles upon us!&lt;/p&gt;
&lt;h3 id=&quot;lughnasadh&quot; tabindex=&quot;-1&quot;&gt;Lughnasadh &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#lughnasadh&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;6-petaled green flower&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100
100;height:100px;width:100px;float:right&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M70.2243,38.3029C86.1223,38.2039 94.0753,42.0909 94.0813,49.9639C94.0873,57.8379 86.1413,61.7389 70.2433,61.6649C78.2783,75.3839 78.8873,84.2149 72.0703,88.1579C65.2543,92.1009 57.9033,87.1689 50.0193,73.3629C42.1563,87.1809 34.8133,92.1249 27.9903,88.1929C21.1673,84.2609 21.7633,75.4289 29.7773,61.6969C13.8778,61.7959 5.92501,57.9089 5.91871,50.0339C5.91241,42.1609 13.8591,38.2609 29.7583,38.3349C21.7223,24.6159 21.1133,15.7849 27.9293,11.8422C34.7463,7.89948 42.0973,12.8312 49.9823,26.6369C57.8443,12.8187 65.1873,7.87528 72.0093,11.8071C78.8323,15.739 78.2373,24.5709 70.2243,38.3029L70.2243,38.3029L70.2243,38.3029Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 0.5 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;Traditionally, this is the start of the time of harvest. The bulk
of the growing season is past, and the days are still long, but
getting shorter and shorter at an increasing rate.&lt;/p&gt;
&lt;p&gt;The rate of change of daylight hours is inversely proportional to
the amount of daylight, making this cross quarter day feel almost
at odds with itself. A warm season that turns a corner and hints
at its own end. The &amp;quot;Sunday&amp;quot; of the year, as the long days drag
on.&lt;/p&gt;
&lt;h3 id=&quot;autumn&quot; tabindex=&quot;-1&quot;&gt;Autumn &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#autumn&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; height:100px; width: 100px; float: right;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M94.0775,49.964L63.4136,63.392L50.0363,94.078L36.6081,63.414L5.92251,50.034L36.5868,36.608L49.9661,5.92199L63.3922,36.587L94.0775,49.964L94.0775,49.964Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 1 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;p&gt;The second equinox, this one in the other direction, heading
towards cold dark. The day is balanced with night, but changing
as fast as possible in the direction of shorter days and lower
temperatures.&lt;/p&gt;
&lt;p&gt;Traditionally, this reflects the end of the harvest season, time
to pack up what we were able to gather, preserve whatever we can,
and consume whatever we can&#39;t.&lt;/p&gt;
&lt;h3 id=&quot;samhain&quot; tabindex=&quot;-1&quot;&gt;Samhain &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#samhain&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;svg alt=&quot;blue 6-pointed starburst&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,100,100&quot; style=&quot;enable-background:new 0 0 100 100; height: 100px; width:
100px; float: right&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M50,49.999L36.322,8.351L63.414,8.26399L50,49.999L79.2319,17.328L92.851,40.749L50,49.999L92.9089,58.979L79.4389,82.484L50,49.999L63.6799,91.65L36.588,91.736L50,49.999L20.7709,82.671L7.14915,59.252L50,49.999L7.09106,41.022L20.5629,17.515L50,49.999L50,49.999Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;&lt;/p&gt;
&lt;p&gt;The dark night approaches. A few weeks after this cross-quarter
day, we celebrate Thanksgiving, the traditional fattening-up
as the long winter nights come.&lt;/p&gt;
&lt;p&gt;The days are getting shorter, and the shortness of the days is
proportional to the rate at which they are shortening, creating a
sense that this time is &amp;quot;more winter than winter&amp;quot;, as we move
towards the dark solstice at the birth of the next year.&lt;/p&gt;
&lt;p&gt;Fae magic is strongest at this time. Be aware!&lt;/p&gt;
&lt;p&gt;And that brings us back to Winter, and the year starts over
again.&lt;/p&gt;
&lt;h2 id=&quot;seasonal-calendar&quot; tabindex=&quot;-1&quot;&gt;Seasonal Calendar &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#seasonal-calendar&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://izs.me/seasonal-calendar&quot;&gt;This&lt;/a&gt; is a calendar of sorts.&lt;/p&gt;
&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,600,600&quot; style=&quot;enable-background:new 0 0 600 600;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M300.281,299.933L176.287,424.72C143.192,391.835 124.515,347.149 124.367,300.493L300.281,299.933Z&quot; fill=&quot;color(rec2020 0 1 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M530.603,306.196C505.34,314.289 492.694,312.237 492.664,300.04C492.635,287.842 505.272,285.73 530.573,293.702C522.48,268.437 524.532,255.791 536.729,255.761C548.927,255.732 551.039,268.369 543.067,293.672C568.331,285.579 580.978,287.631 581.008,299.828C581.037,312.026 568.4,314.138 543.097,306.166C551.19,331.429 549.138,344.075 536.94,344.104C524.743,344.134 522.631,331.497 530.603,306.196L530.603,306.196Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(display-p3 1 0 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M107.483,299.819L76.8191,313.247L63.4418,343.933L50.0136,313.269L19.328,299.889L49.9923,286.463L63.3716,255.777L76.7977,286.442L107.483,299.819Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 1 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M152.376,120.188C168.274,120.089 176.227,123.976 176.233,131.849C176.239,139.723 168.293,143.624 152.395,143.55C160.43,157.269 161.039,166.1 154.222,170.043C147.406,173.986 140.055,169.054 132.171,155.248C124.308,169.066 116.965,174.01 110.142,170.078C103.319,166.146 103.915,157.314 111.929,143.582C96.0295,143.681 88.0767,139.794 88.0704,131.919C88.0641,124.046 96.0108,120.146 111.91,120.22C103.874,106.501 103.265,97.67 110.081,93.7273C116.898,89.7846 124.249,94.7163 132.134,108.522C139.996,94.7038 147.339,89.7604 154.161,93.6922C160.984,97.6241 160.389,106.456 152.376,120.188L152.376,120.188Z&quot; style=&quot;transform: rotate(-15deg); transform-box: fill-box; transform-origin: center;&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 0.5 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.055,492.528L310.083,523.284L342.435,523.112L316.28,542.153L326.443,572.866L300.251,553.876L274.182,573.033L284.147,542.256L257.874,523.382L290.223,523.347L300.055,492.528Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0.5 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.933L425.068,423.928C392.182,457.022 347.496,475.698 300.841,475.847L300.281,299.933Z&quot; fill=&quot;color(rec2020 0.5 0 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.933L300.841,475.847C254.186,475.995 209.383,457.604 176.287,424.72L300.281,299.933Z&quot; fill=&quot;color(rec2020 0 0 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.352,107.739L291.647,81.3713L265.635,91.0876L280.821,67.8421L257.007,53.5639L284.651,50.9452L280.965,23.4229L300.25,43.4021L319.469,23.3615L315.871,50.8955L343.523,53.4261L319.754,67.7801L335.014,90.9771L308.973,81.3437L300.352,107.739Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 1 1 0)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M469.177,423.927L507.257,445.751L507.396,489.639L469.456,511.705L431.379,489.881L431.239,445.994L469.177,423.927ZM469.231,441.044L446.089,454.505L446.174,481.276L469.402,494.589L492.545,481.128L492.46,454.357L469.231,441.044Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; style=&quot;transform: rotate(15deg); transform-box: fill-box; transform-origin: center;&quot; fill=&quot;color(rec2020 1 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M132.151,467.815L118.473,426.167L145.565,426.08L132.151,467.815L161.383,435.144L175.002,458.565L132.151,467.815L175.06,476.795L161.59,500.3L132.151,467.815L145.831,509.466L118.739,509.552L132.151,467.815L102.922,500.487L89.3002,477.068L132.151,467.815L89.2421,458.838L102.714,435.331L132.151,467.815Z&quot; style=&quot;transform: rotate(-15deg); transform-box: fill-box; transform-origin: center;&quot; stroke=&quot;#000000&quot; stroke-width=&quot;1&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 0 0 1)&quot; stroke-linejoin=&quot;miter&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.933L476.194,299.373C476.343,346.028 457.952,390.832 425.068,423.928L300.281,299.933Z&quot; fill=&quot;color(rec2020 1 0 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.933L175.495,175.94C208.38,142.844 253.065,124.168 299.72,124.019L300.281,299.933Z&quot; fill=&quot;color(rec2020 1 1 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M468.255,133.735L491.299,93.6002L487.703,94.6241L484.385,95.7966L481.34,97.0964L478.554,98.4959L476.021,99.9758L473.728,101.515L471.667,103.096L469.821,104.704L468.185,106.323L466.743,107.941L464.395,111.127L462.688,114.187L461.526,117.067L460.824,119.727L460.504,122.142L460.49,124.301L460.901,127.053L461.67,129.242L462.989,131.37L464.755,132.967L466.917,133.796L468.255,133.735ZM470.388,133.73L447.154,93.7057L446.241,97.3317L445.599,100.791L445.199,104.079L445.019,107.191L445.035,110.126L445.22,112.879L445.559,115.457L446.03,117.857L446.613,120.085L447.294,122.142L448.879,125.768L450.676,128.778L452.589,131.224L454.543,133.16L456.472,134.646L458.335,135.738L460.925,136.756L463.206,137.186L465.707,137.107L467.973,136.376L469.772,134.92L470.388,133.73ZM471.45,131.88L425.172,131.991L427.855,134.593L430.53,136.88L433.178,138.868L435.784,140.581L438.332,142.036L440.812,143.25L443.211,144.246L445.525,145.039L447.745,145.648L449.868,146.086L453.8,146.527L457.305,146.476L460.382,146.042L463.035,145.319L465.288,144.39L467.164,143.321L469.34,141.588L470.852,139.829L472.035,137.623L472.535,135.295L472.173,133.007L471.45,131.88ZM470.379,130.036L447.337,170.169L450.932,169.145L454.248,167.972L457.295,166.675L460.082,165.273L462.614,163.795L464.906,162.254L466.969,160.673L468.812,159.067L470.451,157.448L471.893,155.83L474.238,152.644L475.948,149.582L477.11,146.704L477.811,144.042L478.132,141.627L478.146,139.468L477.732,136.716L476.965,134.527L475.646,132.402L473.881,130.804L471.718,129.973L470.379,130.036ZM468.246,130.041L491.482,170.063L492.394,166.437L493.037,162.978L493.434,159.691L493.614,156.578L493.601,153.645L493.413,150.89L493.074,148.312L492.606,145.912L492.022,143.686L491.341,141.627L489.756,138.003L487.96,134.991L486.047,132.545L484.093,130.609L482.161,129.123L480.298,128.031L477.709,127.013L475.43,126.583L472.928,126.662L470.662,127.393L468.862,128.852L468.246,130.041ZM467.184,131.891L513.464,131.78L510.779,129.176L508.105,126.891L505.455,124.901L502.851,123.188L500.303,121.736L497.824,120.519L495.424,119.525L493.11,118.73L490.888,118.124L488.767,117.683L484.835,117.244L481.329,117.295L478.254,117.727L475.6,118.45L473.348,119.381L471.471,120.448L469.293,122.181L467.783,123.942L466.601,126.146L466.098,128.474L466.462,130.762L467.184,131.891Z&quot; stroke=&quot;#000000&quot; stroke-width=&quot;2&quot; stroke-linecap=&quot;round&quot; fill=&quot;color(rec2020 1 0.5 0)&quot; stroke-linejoin=&quot;miter&quot; style=&quot;transform: rotate(15deg); transform-box: fill-box; transform-origin: center; mix-blend-mode: source-over; paint-order: stroke fill markers&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.933L299.72,124.019C346.376,123.87 391.18,142.262 424.275,175.147L300.281,299.933Z&quot; fill=&quot;color(rec2020 1 0.5 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.041,300.459L424.036,175.673C457.13,208.558 475.807,253.243 475.955,299.898L300.041,300.459Z&quot; fill=&quot;color(display-p3 1 0 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M300.281,299.857L124.367,300.417C124.218,253.762 142.609,208.959 175.495,175.863L300.281,299.857Z&quot; fill=&quot;color(rec2020 0 0.5 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M299.432,122.001C397.739,121.688 477.686,201.127 477.999,299.432C478.312,397.739 398.873,477.686 300.566,477.999C202.261,478.312 122.314,398.873 122.001,300.566C121.688,202.261 201.127,122.314 299.432,122.001L299.432,122.001ZM299.444,125.561C203.105,125.868 125.254,204.216 125.561,300.555C125.868,396.895 204.216,474.746 300.555,474.439C396.895,474.132 474.746,395.784 474.439,299.444C474.132,203.105 395.784,125.254 299.444,125.561L299.444,125.561Z&quot; fill=&quot;#000000&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M299,123.5L301,123.5L301,476.5L299,476.5L299,123.5Z&quot; fill=&quot;#000000&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M175,176.205L176.168,175L425,423.795L423.832,425L175,176.205Z&quot; fill=&quot;#000000&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M476.499,299L476.5,300.714L123.501,301L123.5,299.286L476.499,299Z&quot; fill=&quot;#000000&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M423.8,175L425,176.174L176.2,425L175,423.826L423.8,175Z&quot; fill=&quot;#000000&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;p&gt;Placement along the vertical axis reflects the length of the day,
and placement along the horizontal axis reflects the rate at
which the length of the day is changing. As the year progresses,
we move counter-clockwise around the calendar, starting with
Winter at the bottom.&lt;/p&gt;
&lt;h2 id=&quot;you-can-join!&quot; tabindex=&quot;-1&quot;&gt;You can join! &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#you-can-join!&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There&#39;s nothing crazy you have to do! It costs no money, and
requires no major life changes or ideology. This religion is
simply a practice of mindfulness: an appreciation of the vast and
mysterious world in which we live, with a dash of creative
personification. It is, in many ways, the original human
observance.&lt;/p&gt;
&lt;p&gt;Reflect on the coolness of various orbital moments throughout the
year. Notice what is happening with the seasons where you are.&lt;/p&gt;
&lt;p&gt;Feel Gravity directly, by separating heavy things from the Earth
on a regular basis. Add the &lt;a href=&quot;https://izs.me/solar-events.ics&quot;&gt;solar events to your
calendar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&#39;ll get stronger, and more in touch with the nature all around
you. Petty human grievances seem smaller. And at the end of your
existence, know that the mass of your temporary body will return
to Her eternal embrace.&lt;/p&gt;
&lt;h3 id=&quot;questions&quot; tabindex=&quot;-1&quot;&gt;Questions &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#questions&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&quot;is-this-a-joke&quot; tabindex=&quot;-1&quot;&gt;Is this a joke? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#is-this-a-joke&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;No. I mean, yes, but only insofar as everything is.&lt;/p&gt;
&lt;p&gt;Take it seriously, but do not take the taking seriously
seriously.&lt;/p&gt;
&lt;h4 id=&quot;is-this-a-fictional-world-building-fantasy-type-thing&quot; tabindex=&quot;-1&quot;&gt;Is this a fictional world-building fantasy type thing? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#is-this-a-fictional-world-building-fantasy-type-thing&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;No, this is a real religion practiced by real people in the real
world. I am one such person.&lt;/p&gt;
&lt;h4 id=&quot;is-this-atheism-polytheism-nihilism-or...&quot; tabindex=&quot;-1&quot;&gt;Is this atheism, polytheism, nihilism, or...? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#is-this-atheism-polytheism-nihilism-or...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Yes.&lt;/p&gt;
&lt;h4 id=&quot;is-this-a-sex-cult&quot; tabindex=&quot;-1&quot;&gt;Is this a sex cult? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#is-this-a-sex-cult&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://bsky.app/profile/isaacs.bsky.social/post/3lxftcylsqd2z&quot;&gt;Depends who&#39;s
asking.&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;what-are-the-moral-tenants-of-this-religion&quot; tabindex=&quot;-1&quot;&gt;What are the moral &lt;a href=&quot;https://en.wikipedia.org/wiki/David_Tennant&quot;&gt;tenants&lt;/a&gt; of this religion? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#what-are-the-moral-tenants-of-this-religion&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;I think you mean
&lt;a href=&quot;https://www.merriam-webster.com/grammar/tenant-vs-tenet-difference-usage&quot;&gt;tenets&lt;/a&gt;.&lt;/p&gt;
&lt;h4 id=&quot;ok-what-are-the-moral-tenets-of-this-religion&quot; tabindex=&quot;-1&quot;&gt;Ok, what are the moral &lt;em&gt;tenets&lt;/em&gt; of this religion? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#ok-what-are-the-moral-tenets-of-this-religion&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;These will become apparent to you as you practice. Or they won&#39;t.
I don&#39;t know, I&#39;m not the boss of you.&lt;/p&gt;
&lt;h4 id=&quot;so-you-just-like-work-out-and-chill-and-be-autistic-about-seasons&quot; tabindex=&quot;-1&quot;&gt;So you just like, work out and chill and be autistic about seasons? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/church-of-gravitationism/#so-you-just-like-work-out-and-chill-and-be-autistic-about-seasons&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Now you&#39;re getting it!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Autism Spectrum Pride Flag</title>
		<link href="https://blog.izs.me/2025/10/spectrum-pride-flag/"/>
		<updated>2025-10-03T22:36:03Z</updated>
		<id>https://blog.izs.me/2025/10/spectrum-pride-flag/</id>
		<content type="html">&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; viewBox=&quot;0,0,1400,700&quot; style=&quot;enable-background:new 0 0 1400 700;&quot; version=&quot;1.1&quot;&gt;
&lt;defs&gt;&lt;/defs&gt;
&lt;g id=&quot;layer0&quot;&gt;
&lt;path d=&quot;M0,0L1400,0L1400,100L0,100L0,0Z&quot; fill=&quot;color(display-p3 1 0 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,100L1400,100L1400,200L0,200L0,100L0,100Z&quot; fill=&quot;color(rec2020 1 0.5 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,200L1400,200L1400,300L0,300L0,200L0,200Z&quot; fill=&quot;color(rec2020 1 1 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,300L1400,300L1400,400L0,400L0,300L0,300Z&quot; fill=&quot;color(rec2020 0 0.5 0)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,400L1400,400L1400,500L0,500L0,400L0,400Z&quot; fill=&quot;color(rec2020 0 1 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,500L1400,500L1400,600L0,600L0,500L0,500Z&quot; fill=&quot;color(rec2020 0 0 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M0,600L1400,600L1400,700L0,700L0,600L0,600Z&quot; fill=&quot;color(rec2020 0.5 0 1)&quot;&gt;&lt;/path&gt;
&lt;path d=&quot;M342.566,644.814C342.806,645.054 349.803,644.983 357.793,644.533C416.826,641.212 475.772,614.683 541.12,562C557.735,548.607 593.917,515.443 604.242,504.147C606.329,501.864 611.695,496.163 616.172,491.473C620.649,486.783 626.572,480.402 629.325,477.305C632.078,474.208 634.688,471.297 635.136,470.827C636.456,469.439 649.265,454.843 652.317,451.25C653.861,449.43 655.942,447.009 656.943,445.864C657.946,444.718 661.726,440.223 665.336,435.882C668.947,431.541 671.959,428.114 672.355,428.114C673.038,428.114 676.823,431.993 679.857,435.668C681.365,437.493 693.729,451.239 701.704,459.956C811.183,579.622 897.414,633.61 995.155,643.741C1005.84,644.848 1039.37,644.854 1051.05,643.75C1149.5,634.443 1237.83,583.638 1288.33,507.275C1291.56,502.401 1294.34,498.311 1294.58,498.1C1294.83,497.888 1295.58,496.456 1296.13,495.079C1296.7,493.703 1297.1,492.793 1297.44,492.793C1297.78,492.793 1298.78,491.365 1299.26,489.91C1299.75,488.455 1300.2,487.365 1300.5,487.232C1301.32,486.876 1312.48,463.769 1313.54,460.206C1313.86,459.148 1314.54,457.696 1315.12,456.861C1315.7,456.025 1316.24,454.618 1316.25,453.971C1316.25,453.323 1317.07,451.213 1318.11,449.095C1319.15,446.978 1320.05,444.481 1320.07,443.726C1320.07,442.972 1320.6,441.195 1321.28,439.622C1322.74,436.17 1325.1,427.875 1326.69,420.527C1327.33,417.562 1328.16,414.516 1328.55,413.669C1329.29,412.07 1332.45,392.313 1334.1,378.916C1336.12,362.548 1335.03,310.522 1332.42,298.338C1332.01,296.432 1331.15,291.428 1330.5,287.193C1329.16,278.46 1326.73,266.127 1326.02,264.4C1325.76,263.765 1325.19,261.404 1324.74,259.074C1323.78,254.217 1320.9,244.639 1317.56,235.157C1316.28,231.558 1314.76,227.227 1314.17,225.533C1313.57,223.839 1312.57,221.378 1311.96,220.108C1311.36,218.837 1309.79,215.271 1308.48,212.164C1307.16,209.057 1305.24,204.906 1304.2,202.974C1303.18,201.042 1302.38,199.156 1302.38,198.584C1302.38,198.011 1301.73,197.196 1301.36,197.196C1301,197.196 1300.43,195.86 1299.7,193.955C1298.98,192.049 1297.76,190.266 1297.4,190.266C1297.04,190.266 1296.84,189.735 1296.57,188.783C1296.28,187.829 1295.23,185.749 1294.29,184.267C1285.77,170.931 1277.82,159.503 1274.52,155.824C1273.86,155.087 1272.81,153.749 1272.15,152.811C1268.4,147.45 1250.91,129.368 1243.04,122.705C1240.7,120.736 1238.25,118.615 1237.55,117.98C1236.86,117.344 1235.17,115.941 1233.82,114.882C1232.46,113.823 1230.95,112.61 1230.43,112.176C1208.36,93.632 1165.22,73.0381 1130.36,64.4103C1060.55,47.1343 1000.91,53.6052 938.446,85.2307C923.755,92.6665 915.632,97.4873 898.099,109.17C886.349,116.999 886.018,117.227 883.631,119.088C882.522,119.951 880.867,121.162 879.92,121.797C874.322,125.549 851.03,144.18 843.661,150.804C842.175,152.136 838.71,155.228 835.961,157.675C811.738,179.214 782.309,209.06 760.087,234.629C757.546,237.553 754.787,240.646 753.94,241.52C753.093,242.394 748.908,247.288 744.661,252.371C736.707,261.893 734.928,264.011 732.479,266.874C731.694,267.791 730.268,269.495 729.204,270.751L727.445,273.333L725.856,271.05C723.026,267.711 714.708,258.186 712.477,255.811C711.418,254.684 708.307,251.225 705.554,248.116C679.253,218.406 634.867,174.372 610.949,154.26C609.12,152.722 607.044,150.95 606.327,150.315C605.609,149.68 603.283,147.763 601.17,146.069C599.058,144.375 596.952,142.654 596.474,142.23C592.899,139.065 573.147,124.21 567.258,120.257C566.312,119.622 563.329,117.63 560.631,115.831C557.933,114.032 555.206,112.211 554.571,111.783C553.936,111.355 551.501,109.804 549.172,108.343C546.843,106.883 544.628,105.427 544.205,105.074C542.177,103.387 518.249,90.4504 508.329,85.6812C429.113,47.603 340.879,45.086 255.498,78.4738C239.966,84.547 207.936,100.663 202.659,105.054C202.235,105.406 198.978,107.554 195.379,109.858C191.779,112.162 188.308,114.497 187.713,115.011C187.119,115.524 184.898,117.13 182.739,118.607C168.61,128.28 144.486,150.744 131.449,166.368C128.87,169.46 126.411,172.405 125.986,172.913C124.854,174.265 121.216,179.053 119.441,181.529C118.594,182.709 117.198,184.572 116.328,185.684C115.459,186.795 113.618,189.464 112.261,191.582C110.904,193.699 109.444,195.941 109.006,196.576C107.276,199.09 104.414,204.081 103.25,206.611C102.576,208.078 101.863,209.319 101.515,209.545C101.166,209.772 99.4202,212.869 97.7855,216.257C96.1516,219.645 94.7202,222.365 94.3907,222.506C94.0611,222.647 93.5814,223.458 93.5814,223.919C93.5814,224.686 90.2805,232.038 87.8874,236.653C87.3384,237.711 86.4229,240.017 85.8808,241.711C85.338,243.405 84.5018,245.408 83.9782,246.255C83.4546,247.102 82.5637,249.718 82.0502,251.941C81.7935,253.053 81.5089,254.021 81.2363,254.753C80.9636,255.486 81.0407,255.715 80.8838,255.715C80.7269,255.715 80.1471,256.446 79.8663,257.248C79.5856,258.05 79.2656,259.197 78.9966,260.414C78.4585,262.85 77.7684,265.094 77.3791,265.576C76.9897,266.059 76.085,269.153 75.4542,272.27C74.8233,275.387 74.0082,278.553 73.6113,279.4C72.1148,282.593 67.1169,310.187 65.7829,322.656C64.3979,335.602 64.6006,374.826 66.1338,390.457C67.3437,402.793 70.0803,421.862 70.9464,424.042C71.1999,424.679 72.0459,428.263 72.8475,432.074C74.9096,441.881 76.6312,448.637 77.8593,451.764C78.4415,453.246 79.2834,455.974 79.7477,457.879C80.2119,459.785 81.0865,462.445 81.6653,463.716C82.244,464.986 83.1104,467.613 83.6155,469.624C84.1214,471.636 85.1439,473.543 85.4781,473.543C85.8123,473.543 86.1942,475.015 86.737,477.133C87.2791,479.25 88.3024,481.243 88.5996,481.243C88.8976,481.243 89.0439,481.934 89.3357,483.099C89.6276,484.263 90.9026,487.358 92.1385,489.892C93.3751,492.427 94.3514,494.787 94.3514,495.323C94.3514,495.858 95.0205,496.643 95.4155,496.643C95.8105,496.643 96.0469,497.179 96.3449,498.133C96.6421,499.085 99.354,504.262 102.335,509.556C134.087,565.94 184.593,607.703 246.567,628.819C273.854,638.116 309.465,644.477 334.227,644.479C338.709,644.479 342.327,644.574 342.566,644.814L342.566,644.814ZM341.323,594.767C270.494,594.164 203.133,560.34 162.664,505.05C158.902,499.911 155.46,495.271 155.031,494.759C154.603,494.247 154.333,493.913 154.333,493.745C154.333,493.576 152.547,490.242 150.421,486.547C148.295,482.852 146.097,478.725 145.514,477.329C144.931,475.933 143.934,474.394 143.467,474.106C143,473.817 142.783,473.228 142.783,472.437C142.783,471.645 142.239,470.298 141.695,469.738C140.754,468.772 138.685,463.788 136.007,456.143C135.339,454.237 134.408,452.332 134.098,452.12C133.788,451.907 133.091,449.681 132.379,446.929C131.667,444.178 130.732,441.446 130.384,441.023C130.035,440.6 129.416,438.159 128.918,435.406C128.42,432.653 127.642,429.883 127.279,429.444C126.916,429.005 126.12,425.204 125.419,420.794C124.717,416.384 123.814,411.888 123.434,410.887C122.372,408.095 120.454,380.955 120.454,368.826C120.454,347.934 122.655,329.09 127.398,309.405C128.655,304.185 129.694,299.146 129.694,298.307C129.694,297.887 129.718,297.736 129.842,297.536C129.967,297.336 129.662,297.382 129.851,297.499C130.039,297.615 130.763,297.256 130.985,296.811C131.207,296.366 131.45,295.602 131.598,294.811C131.894,293.226 132.731,290.621 133.486,288.927C134.241,287.233 135.117,284.468 135.401,282.88C135.685,281.292 135.853,280.277 136.19,280.277C136.527,280.277 137.764,277.953 138.533,275.412C139.303,272.871 139.847,271.038 140.148,271.038C140.45,271.038 141.467,269.226 142,267.32C142.534,265.414 142.91,264.108 143.245,264.108C143.58,264.108 144.757,262.138 145.461,260.021C146.164,257.903 146.729,256.408 147.118,256.408C147.508,256.408 148.173,255.689 148.173,255.233C148.173,254.776 150.218,250.876 152.773,246.356C168.704,218.168 194.508,190.149 220.397,172.928C223.997,170.533 227.311,168.285 227.734,167.951C230.541,165.738 248.015,156.674 251.881,155.424C253.363,154.945 255.068,154.193 255.537,153.822C257.759,152.069 272.936,147.415 285.729,144.542C313.868,138.222 359.275,143.914 389.289,157.517C391.524,158.531 393.654,159.39 393.846,159.39C395.472,159.39 426.26,175.661 429.033,177.981C429.457,178.336 431.748,179.837 434.077,181.283C436.406,182.729 438.635,184.166 439.065,184.502C439.496,184.837 441.933,186.512 444.456,188.206C446.979,189.9 449.538,191.716 450.184,192.273C450.83,192.83 454.67,195.756 458.693,198.756C465.601,203.909 481.033,216.52 485.072,220.313C486.09,221.268 490.011,224.822 493.78,228.203C506.033,239.194 538.225,271.805 551.965,287.143C552.938,288.231 556.546,292.217 559.981,296C563.416,299.783 569.077,306.164 572.567,310.187C576.057,314.211 581.926,320.968 585.607,325.203C589.288,329.438 597.124,338.616 603.024,345.604C608.923,352.591 619.217,364.683 625.897,372.472C632.577,380.261 637.96,386.622 637.96,386.883C637.96,387.431 622.562,406.267 618.415,410.827C617.568,411.757 615.157,414.612 613.071,417.153C610.986,419.694 607.877,423.35 606.151,425.29C604.425,427.23 601.278,430.805 599.161,433.231C524.453,518.815 451.979,572.829 389.512,589.437C372.522,593.954 363.457,594.956 341.323,594.767L341.323,594.767ZM1089.12,558.151C1049.72,559.774 1001.73,543.628 959.582,514.593C946.562,505.621 923.97,488.118 918.334,482.63C917.433,481.752 915.886,480.362 914.915,479.565C904.436,470.938 872.505,439.552 856.489,422.129C851.631,416.843 847.296,412.136 846.857,411.67C844.347,408.977 834.629,398.053 826.714,389.022C818.29,379.409 811.407,371.372 775.004,328.606C767.451,319.734 762.153,313.23 762.448,312.715C763.081,311.607 788.577,280.671 791.549,277.399C792.742,276.09 795.799,272.629 798.34,269.716C802.921,264.456 805.385,261.712 817.967,247.854C832.142,232.241 865.652,199.489 880.282,186.951C883.446,184.24 886.634,181.499 887.358,180.864C888.082,180.229 889.76,178.855 891.115,177.797C892.463,176.738 893.98,175.507 894.457,175.078C896.967,172.827 914.638,159.292 918.034,157.022C918.981,156.386 920.683,155.14 921.791,154.27C922.893,153.4 925.503,151.599 927.62,150.242C929.738,148.885 931.994,147.432 932.633,147.014C943.12,140.116 958.05,131.396 960.837,130.543C961.792,130.251 962.816,129.358 962.816,128.963C962.816,128.568 962.824,128.591 963.255,128.591C963.686,128.591 967.783,126.824 972.171,124.707C976.56,122.59 980.264,120.891 980.58,120.891C980.903,120.891 982.736,120.204 984.476,119.404C1004.54,110.17 1033.82,104.322 1056.87,104.942C1097.7,106.039 1136.19,116.243 1168.77,134.611C1170.74,135.722 1173.51,137.283 1174.93,138.08C1177.36,139.446 1187.34,145.918 1189.01,147.209C1189.44,147.536 1191.52,149.099 1193.64,150.677C1195.76,152.255 1197.85,153.875 1198.33,154.298C1198.81,154.722 1200.9,156.448 1202.97,158.123C1211.9,165.364 1231.63,186.336 1237.07,194.35C1248.86,211.758 1258.57,228.701 1258.57,231.989C1258.57,232.524 1259.21,233.308 1259.58,233.308C1259.94,233.308 1260.53,235.058 1261.29,237.493C1262.05,239.928 1263.03,242.271 1263.33,242.483C1264.09,243.03 1268.58,256.407 1268.58,258.111C1268.58,258.89 1269.13,260.655 1269.75,261.839C1270.36,263.023 1271.21,266.04 1271.66,268.668C1272.11,271.296 1272.86,274.233 1273.27,275.08C1273.69,275.927 1274.71,281.024 1275.56,286.53C1276.41,292.035 1277.45,298.283 1277.84,300.4C1279.13,307.25 1279.65,340.974 1278.66,353.229C1276.99,373.803 1270.65,403.369 1265.4,414.971C1264.63,416.693 1263.96,418.613 1263.96,419.063C1263.96,419.789 1262.18,424.074 1259.01,431.091C1255.15,439.672 1248.16,453.094 1245.22,457.608C1230.75,479.757 1223.66,488.639 1209,503.004C1179.52,531.908 1142.61,551.426 1107.41,556.72C1101.61,557.591 1100.39,557.687 1089.12,558.151L1089.12,558.151Z&quot; fill=&quot;#010101&quot;&gt;&lt;/path&gt;
&lt;/g&gt;
&lt;/svg&gt;
&lt;p&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/&quot;&gt;This&lt;/a&gt; is an autism spectrum
pride flag that I designed and am offering to the community for
anyone to use in any way they desire. If you use it somewhere
online, credit and/or a link back to this post would be lovely,
if that makes sense, but is not required. That is, it&#39;s released
under a &lt;a href=&quot;https://creativecommons.org/public-domain/cc0/&quot;&gt;CC0
license&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&#39;m getting it tattooed on my shoulder in a few weeks.&lt;/p&gt;
&lt;p&gt;I&#39;ve made the image available as an SVG, in HTML and CSS, as well
as in PNG formats for the original 2x1 ratio, 19x6, 3x2, 4x1,
square, and golden ratio. The font on the ∞ symbol is &lt;a href=&quot;https://fonts.google.com/specimen/Old+Standard+TT&quot;&gt;Old
Standard
Regular&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride.svg&quot;&gt;spectrum-pride.svg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride.png&quot;&gt;spectrum-pride.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride-16x9.png&quot;&gt;spectrum-pride-16x9.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride-3x2.png&quot;&gt;spectrum-pride-3x2.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride-4x1.png&quot;&gt;spectrum-pride-4x1.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride-golden.png&quot;&gt;spectrum-pride-golden.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride-square.png&quot;&gt;spectrum-pride-square.png&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/spectrum-pride.html&quot;&gt;spectrum-pride.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/OldStandard-Regular.otf&quot;&gt;OldStandard-Regular.otf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://izs.me/spectrum-pride/LICENSE.html&quot;&gt;LICENSE.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;why-yet-another-autism-pride-flag&quot; tabindex=&quot;-1&quot;&gt;Why Yet Another Autism Pride Flag? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/10/spectrum-pride-flag/#why-yet-another-autism-pride-flag&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Yes, there are some other autism/neuroqueer pride flags. They&#39;re
fine, and if you like them, I support them and you and your use
of them.&lt;/p&gt;
&lt;p&gt;However, as I have Colors Autism, I didn&#39;t feel a connection to
the &amp;quot;rainbow infinity on gold&amp;quot; or &amp;quot;muted spectrum&amp;quot; or especially
&amp;quot;green means autism&amp;quot; designs. To be honest, I&#39;m surprised that
this simple design hasn&#39;t already been made and passed around,
though maybe I just missed it in my search, since it required
roughly zero creativity. So it&#39;s possible I&#39;m ripping someone
else off, in which case, my apologies, and any links to prior art
are welcome.&lt;/p&gt;
&lt;p&gt;This is different from others in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The spectrum is an actual spectrum, with the 7 colors most
commonly differentiated by humans with trichromatic vision: red
&lt;code&gt;#FF0000&lt;/code&gt;, orange &lt;code&gt;#FF8800&lt;/code&gt;, yellow &lt;code&gt;#FFFF00&lt;/code&gt;, green &lt;code&gt;#008800&lt;/code&gt;,
cyan &lt;code&gt;#00FFFF&lt;/code&gt;, blue &lt;code&gt;#0000FF&lt;/code&gt;, violet &lt;code&gt;#8800FF&lt;/code&gt;, overlaid with
the ∞ symbol in black &lt;code&gt;#000000&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The colors do not each have secret unstated cultural meanings;
ie, &amp;quot;red&amp;quot; is not for &amp;quot;love&amp;quot;, etc. They together form a
spectrum, that is the point. No single color can represent our
diversity (not even Gold, though admittedly, the &lt;code&gt;Au&lt;/code&gt; pun is
very cute). Like our speech and manner, these colors are just
what they appear to be.&lt;/li&gt;
&lt;li&gt;The 7 pointed star is the Faery Star, and 7 is a number
associated with the fae and otherkin. Changelings and other fae
folklore are a culture&#39;s way of grappling with neurodiversity,
especially autism. Hence, 7 colors. Also that&#39;s a prime number,
which is rad.&lt;/li&gt;
&lt;li&gt;Autism is a natural facet of the human experience, and so the
flag presents the spectrum with red on top, as rainbows appear
in nature, not twisted around into a different shape, because
we deserve to take up space and not conform.&lt;/li&gt;
&lt;li&gt;The colors are not muted or pastel. They are full intensity,
like the painfully/beautifully luminous and oversaturated
autistic experience itself.&lt;/li&gt;
&lt;li&gt;It&#39;s gay af.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comments welcome, but if you just don&#39;t like it or it doesn&#39;t
resonate with you, I encourage you to make your own different
thing :)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Remembering Mikeal Rogers</title>
		<link href="https://blog.izs.me/2025/06/mikeal-rogers/"/>
		<updated>2025-06-11T18:43:29Z</updated>
		<id>https://blog.izs.me/2025/06/mikeal-rogers/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/mikeal&quot;&gt;Mikeal Rogers&lt;/a&gt; died on the morning of
Monday, 2025-06-09, after enduring 7 months of treatment for
aggressive colorectal cancer.&lt;/p&gt;
&lt;p&gt;I&#39;m so inescapably sad.&lt;/p&gt;
&lt;p&gt;Last year, Mikeal set up &lt;a href=&quot;https://github.com/mikeal/cancer-diaries&quot;&gt;a git
repository&lt;/a&gt; and had
asked people to share memories, ways in which they&#39;ve been
impacted positively.&lt;/p&gt;
&lt;p&gt;This is &lt;a href=&quot;https://github.com/mikeal/cancer-diaries/blob/main/best-memories/2024-11-24-just-everything-for-the-last-15-years.md&quot;&gt;what I
wrote&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2 id=&quot;just-everything-over-the-last-15-years&quot; tabindex=&quot;-1&quot;&gt;Just Everything Over The Last 15 Years &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2025/06/mikeal-rogers/#just-everything-over-the-last-15-years&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fuck.&lt;/p&gt;
&lt;p&gt;Where even to begin. I suppose I&#39;ll begin at the beginning, at
least the beginning of us. I went to a server-side JavaScript
meetup in 2009, when Node was just a newcomer in the SSJS
space, one of many upstart projects.&lt;/p&gt;
&lt;p&gt;I was giving a talk on JSGI, and how it might be a standard
that server-side JavaScript platforms could coalesce around.
But really, I was already of the opinion that Node was really
The Thing.&lt;/p&gt;
&lt;p&gt;Some guy I&#39;d never met heckled me, saying we should skip all
that JSGI portability noise and just work on Node exclusively.
He wasn&#39;t wrong, in fact that was the point I sort of secretly
was trying to guide the community towards, so it put me in a
weird position of agreeing with my harasser.&lt;/p&gt;
&lt;p&gt;Afterwards, he said, &amp;quot;Yeah, you&#39;re isaacs. I know you from the
node irc. I&#39;m Mikeal, spelled funny.&amp;quot; That&#39;s when I learned how
to pronounce your name.&lt;/p&gt;
&lt;p&gt;Some time later, you invited me to Oakland for lunch at the
&lt;a href=&quot;http://couch.io/&quot;&gt;Couch.IO&lt;/a&gt; offices. I had taken a sabbatical to work on npm, and
was trying to figure out how best to create a registry for it.
You threw together a proof of concept that is still (despite
all of our better judgement) the de facto standard for the
interface defining how JavaScript packages are published and
consumed.&lt;/p&gt;
&lt;p&gt;That visit is what convinced me that I ought to move from
Mountain View to Oakland, the city that has become my first
permanent adult home. I haven&#39;t left since.&lt;/p&gt;
&lt;p&gt;In all this time, from those very first interactions, up until
now, you&#39;ve been one of my best and favorite friends. A
recounting of all of the best memories would just be a history
of each stage of life over the last 15 years. We&#39;ve biked all
over this town drinking coffee and writing code. We&#39;ve shared
meals, we&#39;ve discussed life and philosophy and spirituality
over whiskey and then when we got older, soberly while our kids
played. We&#39;ve changed the tech world together, multiple times.
We&#39;ve been to conferences together and traveled the world. We
made sourdough bread a meme within JavaScript, long before it
became associated with covid lockdowns.&lt;/p&gt;
&lt;p&gt;I love deeply, but I don&#39;t make friends easily. Chalk it up to
the autism, I guess. I&#39;ve always had unshakable respect for
you. You are one of the only people whose opinion I&#39;ve always
cared about, one of the brilliant few who I&#39;ve looked up to and
wanted to impress.&lt;/p&gt;
&lt;p&gt;On November 9, we went to the park so our kids could play
together.&lt;/p&gt;
&lt;p&gt;When I asked if it was ok if I invited Emily, you said sure,
but you asked me to come early. You said &amp;quot;I just need to have a
conversation with someone who isn&#39;t my family.&amp;quot;&lt;/p&gt;
&lt;p&gt;I completely understood. And also, I must admit, I was
flattered beyond words to have been the person you reached out
to. I am always utterly blown away at how much you seem to
value me, in your way of just casually treating it as obvious
that I&#39;m important to you.&lt;/p&gt;
&lt;p&gt;You told me about some difficulties you&#39;d been having. I said
I&#39;d ask if my therapist was taking on new clients, because I
thought he&#39;d be a good fit.&lt;/p&gt;
&lt;p&gt;Emily arrived, and she brought Max, who did some toddler
parallel play with Kai. Juniper and Kora ran around inventing
games together, as kids their age do. You ordered a pizza from
Round Table, and I went and picked it up.&lt;/p&gt;
&lt;p&gt;You left early because you weren&#39;t feeling well. Later you
said, &amp;quot;I don&#39;t think that pizza agreed with me.&amp;quot;&lt;/p&gt;
&lt;p&gt;I don&#39;t think it was the pizza at all. I think it was the
cancer.&lt;/p&gt;
&lt;p&gt;We made plans to get breakfast on Thursday the next week. On
Tuesday, you texted me, &amp;quot;I’m not gonna make it, I’ve got cancer
that has spread to multiple organs.&amp;quot;&lt;/p&gt;
&lt;p&gt;(I clarified that &amp;quot;not gonna make it&amp;quot; was referring to our
breakfast plans, not like, life. But also... hm.)&lt;/p&gt;
&lt;p&gt;I&#39;m trying real hard to stick to the assignment here, make this
about memories instead of grief or my own feelings. But for
fucks&#39; sake, how is that even possible? I will miss you more
than anyone can imagine. You are my closest friend, and losing
you feels so deeply unfair. I know I&#39;m nowhere near the front
of that line, not that it&#39;s a competition, but like, Kora&#39;s
losing a dad, Anna a husband, etc.&lt;/p&gt;
&lt;p&gt;But that doesn&#39;t change anything. A greater loss never made
another loss lesser. To the extent that anyone has known you,
they love you, and you and I have known each other well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mikeal and I texted back and forth a bit during his treatment.
Mostly, me sending him things, because summoning the energy to
compose a reply was so hard for him by the end.&lt;/p&gt;
&lt;p&gt;He said several times that he was looking forward to getting a
meal together again, a nod to those plans abruptly canceled. Just
once the chemo isn&#39;t quite so intense. Once he can catch his
breath. Soon.&lt;/p&gt;
&lt;p&gt;But it turns out &amp;quot;not gonna make it&amp;quot; was simply the whole truth.
None of us make it, in the end. Death is simultaneously too grand
and cosmic to begin to contemplate, and too petty and pedestrian
to bother commenting on.&lt;/p&gt;
&lt;p&gt;&amp;quot;Just everything over the last 15 years&amp;quot; is exactly what I shared
with Mikeal, as our lives developed and priorities shifted. He
and Anna were the first visitors to Marisa&#39;s and my first
apartment in Oakland. We went to each other&#39;s weddings. Our
conversations stretched over the years and 5 continents. Our kids
grew together and played together. We made time to visit in
between everything else going on, talking each other&#39;s ears off
about whatever special interest had our attention at the moment.
From the day we met, it was obvious we&#39;d be friends.&lt;/p&gt;
&lt;p&gt;I visited Mikeal on Sunday afternoon, the day before he passed.&lt;/p&gt;
&lt;p&gt;He couldn&#39;t talk, and was very visibly affected by an
appropriately large amount of pain medication. I told him what an
impact he&#39;d made on my life, and how important our friendship had
been to me, that I would not have been able to do as much in my
life if not for his influence. He nodded and gasped a bit,
attempting to say something perhaps. I hope he understood. But of
course no one can know, and it wouldn&#39;t matter now anyway.&lt;/p&gt;
&lt;p&gt;There&#39;s just nothing for this loss. It sucks so much.&lt;/p&gt;
&lt;img alt=&quot;Mikeal Rogers on stage at NodeConf&quot; title=&quot;Mikeal Rogers on stage at NodeConf&quot; src=&quot;https://blog.izs.me/2025/06/mikeal-rogers/mikeal-rogers-nodeconf.png&quot; style=&quot;width:100%&quot; /&gt;
&lt;img alt=&quot;Mikeal Rogers in the Node Documentary&quot; title=&quot;Mikeal Rogers in the Node Documentary&quot; src=&quot;https://blog.izs.me/2025/06/mikeal-rogers/mikeal-rogers-documentary.png&quot; style=&quot;width:100%&quot; /&gt;
</content>
	</entry>
	
	<entry>
		<title>Regarding Autism Self Diagnosis</title>
		<link href="https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/"/>
		<updated>2024-12-20T01:44:15Z</updated>
		<id>https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/</id>
		<content type="html">&lt;p&gt;How to get an autism diagnosis &lt;sup&gt;&lt;a id=&quot;re-self-dx-1&quot; name=&quot;re-self-dx-1&quot; href=&quot;https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/#re-self-dx-fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Be me.&lt;/li&gt;
&lt;li&gt;Get misdiagnosed as ADHD at age 10.&lt;/li&gt;
&lt;li&gt;Get prescribed Ritalin, lose all semblance of sleep order and
circadian rhythm.&lt;/li&gt;
&lt;li&gt;Revolt and stop taking the drugs at age 14.&lt;/li&gt;
&lt;li&gt;Learn about autism at age 27. &amp;quot;Wait, isn&#39;t that just like,
normal, though?&amp;quot;&lt;/li&gt;
&lt;li&gt;Learn that everyone isn&#39;t normal like me. Most people are
different!&lt;/li&gt;
&lt;li&gt;Study autism for 10 years. Become somewhat convinced that it
might apply. Would explain the multitude of sensory issues,
social/emotional difficulties, overwhelm, burnout, meltdowns.&lt;/li&gt;
&lt;li&gt;Discuss with therapist, he agrees.&lt;/li&gt;
&lt;li&gt;Continue studying for 5 more years. Still not 100% sure, but
seems likely.&lt;/li&gt;
&lt;li&gt;Learn that &lt;abbr title=&quot;hypermobile Ehlers Danlos
Syndrome&quot;&gt;hEDS&lt;/abbr&gt; and autism are highly comorbid, explains
the hypermobility, soft stretchy skin, and &lt;abbr title=&quot;Positional Orthostatic Tachycardia Syndrome&quot;&gt;POTS&lt;/abbr&gt;.&lt;/li&gt;
&lt;li&gt;Learn that GI and skin issues are highly comorbid with autism,
explains the psoriasis and the butt stuff.&lt;/li&gt;
&lt;li&gt;Almost sure now.&lt;/li&gt;
&lt;li&gt;Learn that Low Dose Naltrexone can reduce the intensity of
sensory hypersensitivity due to ASD.&lt;/li&gt;
&lt;li&gt;Write an email to my doctor: &lt;em&gt;&amp;quot;As you know, I&#39;m autistic. I have
learned of these studies showing that LDN can help reduce the
intensity of sensory hypersensitivity.&amp;quot;&lt;/em&gt; Doc says, &lt;em&gt;&amp;quot;Sure it&#39;s
safe, but talk to psych anyway.&amp;quot;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Psych meets with me for 30 minutes and asks several questions
pulled from the DSM-5 criteria for BPD, bipolar, ADHD, ASD, few
other things.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/regarding-autism-self-diagnosis.png&quot; alt=&quot;screenshot of
Kaiser Permanente website, showing &#39;Autism Spectrum Disorder&#39;
under &#39;Health Conditions&#39;&quot; width=&quot;588&quot;  height=&quot;486&quot; /&gt;&lt;/p&gt;
&lt;h3 id=&quot;15-years-of-independent-research-to-get-&amp;quot;self-diagnosed&amp;quot;-and-one-(1)-30-minute-conversation-to-get-&amp;quot;officially&amp;quot;-diagnosed.-that&#39;s-right-it&#39;s-doctor-approved-now-so-y&#39;all-elitist-anti-self-dx-asshats-can-eat-an-entire-bag-of-dicks!&quot; tabindex=&quot;-1&quot;&gt;15 YEARS OF INDEPENDENT RESEARCH to get &amp;quot;self diagnosed&amp;quot;, and ONE (1) 30-MINUTE CONVERSATION to get &amp;quot;officially&amp;quot; diagnosed. THAT&#39;S RIGHT, IT&#39;S DOCTOR APPROVED NOW, SO Y&#39;ALL ELITIST ANTI-SELF-DX ASSHATS CAN EAT AN ENTIRE BAG OF DICKS! &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/#15-years-of-independent-research-to-get-%22self-diagnosed%22-and-one-(1)-30-minute-conversation-to-get-%22officially%22-diagnosed.-that&#39;s-right-it&#39;s-doctor-approved-now-so-y&#39;all-elitist-anti-self-dx-asshats-can-eat-an-entire-bag-of-dicks!&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I was misdiagnosed as ADHD when I was a kid. That was just
clearly wrong, extremely obvious at the time to anyone who&#39;d
taken the time to actually look at the diagnostic criteria and
look at me, and the drugs did &lt;em&gt;actual&lt;/em&gt; harm to me. And &lt;em&gt;I&lt;/em&gt;
figured this out, myself, 4 years after being diagnosed at age 10
by a medical professional, and I was a fucking child of 14 years
old at the time.&lt;/p&gt;
&lt;p&gt;Unlike that official diagnosis of ADHD that I got at age 10, an
incorrect &lt;em&gt;self&lt;/em&gt; diagnosis has never harmed anyone.&lt;/p&gt;
&lt;p&gt;Doctors are less invested in our health than we are, less
motivated to educate themselves about the most recent findings in
the research, and they don&#39;t actually suffer the consequences of
getting it wrong. &lt;strong&gt;Self diagnosis isn&#39;t just &amp;quot;also valid&amp;quot;, it&#39;s in
many cases and for many purposes far &lt;em&gt;more&lt;/em&gt; valid than an
official screening.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;No one&#39;s self diagnosis is &amp;quot;stealing resources&amp;quot; or causing autism
to be taken less seriously. Autism &lt;em&gt;isn&#39;t&lt;/em&gt; taken seriously, never
has been, so this concern is tragically absurd. Autistic adults
know full well that we need to be screened by a professional in
order to qualify for any treatment or other serious
accommodations. But doing the work of self diagnosis &lt;em&gt;ahead of&lt;/em&gt;
an official screening by a psychotherapist or psychiatrist is
unfortunately a critical step if you want to avoid being
misdiagnosed and potentially subjected to drugs and treatment
that are unhelpful or even profoundly harmful.&lt;/p&gt;
&lt;p&gt;Self diagnosis never once made me &amp;quot;feel special&amp;quot;. I don&#39;t feel
special to be autistic. In fact, I felt a lot &lt;em&gt;more&lt;/em&gt; &amp;quot;special&amp;quot;
when I thought all my stereotypically autistic traits were
entirely unique to me! Autism has shown me that I&#39;m an extremely
average example of a pretty big community. There are other people
just like me! That&#39;s fun. That&#39;s very special. It&#39;s allowed me
to find community and acceptance. It allowed me to be &lt;em&gt;less&lt;/em&gt;
special, to be &lt;em&gt;normal&lt;/em&gt;. Which, honestly, is really nice.&lt;/p&gt;
&lt;p&gt;Everyone who decides to get an official autism screening with a
mental health professional must have at some point come to the
conclusion for themselves that they are likely autistic, or else
why bother? So self diagnosis is often actually a component and
&lt;em&gt;requirement&lt;/em&gt; of an official diagnosis.&lt;/p&gt;
&lt;p&gt;If you are against self diagnosis, I&#39;m going to assume you are
ignorant and just hate autistic people (and likely, all disabled
adults) until proven otherwise.&lt;/p&gt;
&lt;small&gt;
1: Not the only way to get one, of course. &lt;a href=&quot;https://blog.izs.me/2024/12/regarding-autism-self-diagnosis/#re-self-dx-1&quot; name=&quot;re-self-dx-fn-1&quot; id=&quot;re-self-dx-fn-1&quot;&gt;back&lt;/a&gt;
&lt;/small&gt;
</content>
	</entry>
	
	<entry>
		<title>Leveraging the Suffering Set-Point</title>
		<link href="https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/"/>
		<updated>2024-09-08T22:51:21Z</updated>
		<id>https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/</id>
		<content type="html">&lt;p&gt;In psychology, &lt;a href=&quot;https://www.sciencedirect.com/topics/psychology/set-point-theory&quot;&gt;&amp;quot;Set Point
Theory&amp;quot;&lt;/a&gt;
is the idea that humans have a given set-point of hedonic
pleasure/suffering that we are always drawn to throughout out
lives.&lt;/p&gt;
&lt;p&gt;This results in the concept of a &lt;a href=&quot;https://en.wikipedia.org/wiki/Hedonic_treadmill&quot;&gt;&amp;quot;Hedonic
Treadmill&amp;quot;&lt;/a&gt;,
where no matter how much pleasure we may add to our lives, we
will always feel about the same level of happiness. It&#39;s
hopeless!&lt;/p&gt;
&lt;p&gt;Or is it?&lt;/p&gt;
&lt;h2 id=&quot;manipulating-the-hedonistat&quot; tabindex=&quot;-1&quot;&gt;Manipulating the Hedonistat &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#manipulating-the-hedonistat&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I imagine it like this: my mind, body, and soul will work
together&lt;sup&gt;&lt;a href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#hedonistat-fn1&quot; id=&quot;hedonistat-ref1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; to ensure that I&#39;m always at the
same basic &amp;quot;level&amp;quot; of happiness.&lt;/p&gt;
&lt;p&gt;Put another way, they work together to keep me at the same basic
level of &lt;em&gt;suffering&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Feelings, of course, are information, which we ignore at our
peril! But, some &amp;quot;emotions&amp;quot; can be quite easily found by choosing
a given framing, or even (in the case of anxiety or low
self-worth) manufactured by the mind completely out of fantasy
without any referent at all.&lt;/p&gt;
&lt;p&gt;When we do not have enough suffering in our lives, our brains
will summon some suffering for us, to keep us at the baseline.&lt;/p&gt;
&lt;p&gt;This is the Hedonistat.&lt;/p&gt;
&lt;h2 id=&quot;don&#39;t-let-go&quot; tabindex=&quot;-1&quot;&gt;Don&#39;t Let Go &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#don&#39;t-let-go&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some two and a half millennia ago, some guy made the
ground-breaking observation that life is out of joint. The
hedonistat ensures we will suffer, no matter what. The only way
out is to release all attachments to desire, seek the void and
moments of enlightenment, to free ourselves from the cycle of
suffering and desire.&lt;/p&gt;
&lt;p&gt;But what if I &lt;em&gt;like&lt;/em&gt; wanting things and stuff?&lt;/p&gt;
&lt;p&gt;I&#39;ve realized recently that it is possible to &lt;em&gt;deliberately&lt;/em&gt;
adjust the hedonistat by &lt;em&gt;adding suffering&lt;/em&gt;, in a way that is
healthy and beneficial. And, by framing it as a simple trade,
&amp;quot;Would you rather suffer with X or suffer with Y?&amp;quot;, I&#39;m able to
trick my inner pathological demand avoidance demons without
having to summon inhuman levels of executive function and will.&lt;/p&gt;
&lt;h2 id=&quot;my-experience-with-this&quot; tabindex=&quot;-1&quot;&gt;My Experience With This &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#my-experience-with-this&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last year, a few life events (including but not limited to &lt;a href=&quot;https://blog.izs.me/2023/02/to-my-father/&quot;&gt;my
dad dying&lt;/a&gt;) left me in a pretty dark
place, and my natural neuroticism really kind of got the best of
me for a while. It&#39;s humbling to admit, to be honest.&lt;/p&gt;
&lt;p&gt;At the start of 2024, I made a New Year&#39;s Resolution (lol) to
&amp;quot;churn grief into sweat&amp;quot;. Around March (that is, &lt;em&gt;not&lt;/em&gt; January),
I finally actually did something in that direction, by signing up
for exercise classes at the gym closest to my house, which
happens to be a Muay Thai gym&lt;sup&gt;&lt;a href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#hedonistat-fn2&quot; id=&quot;hedonistat-ref2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;I really &lt;em&gt;hate&lt;/em&gt; that class. It&#39;s profoundly not fun.&lt;/p&gt;
&lt;p&gt;The people there are great, the trainer is encouraging, and the
exercise has actually been helping with some long-covid symptoms.
I&#39;m not in the best shape of my life (that is almost certainly
behind me at this point), but I&#39;m already in much better shape
than I was last year. But it sucks and it hurts, every time.&lt;/p&gt;
&lt;p&gt;Hating the class &lt;em&gt;is the point&lt;/em&gt;. It&#39;s a sacrificial thing to
deliberately not enjoy, so that my idiot brain will check the box
and get out of the way of the rest of my life.&lt;/p&gt;
&lt;p&gt;Every time I consider not going, I remember that if I don&#39;t go
suffer at the class, by jumping and lifting and running and
bloody-fucking-kill-my-lungs burpeeing for an hour, I&#39;m going to
probably find myself at bedtime replaying the saddest and most
anxiety-inducing horrors my brain can cook up. I don&#39;t have to
care about gains or goals or anything; just go have a small
amount of bad time, and everything else will be fine.&lt;/p&gt;
&lt;p&gt;The results have been awesome. Besides just the normal physical
benefits of regular exercise, I&#39;ve been happier, calmer, more
balanced, more aware of what&#39;s working for me and what isn&#39;t,
more able to let go of what doesn&#39;t matter, and appreciate what
does.&lt;/p&gt;
&lt;p&gt;Those monks flagellating themselves… I &lt;em&gt;get&lt;/em&gt; it now.&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/YgYEuJ5u1K0?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Monks - Monty Python and The Holy Grail&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h6 id=&quot;footnotes&quot; tabindex=&quot;-1&quot;&gt;Footnotes &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#footnotes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;&lt;small id=&quot;hedonistat-fn1&quot;&gt;&lt;strong&gt;1&lt;/strong&gt; Of course,
these three are one in the same, simply viewed from different
angles of analysis, the Holy Trinity of oneself. &lt;a href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#hedonistat-ref1&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;hedonistat-fn2&quot;&gt;&lt;strong&gt;2&lt;/strong&gt; A similar location-based
selection criteria is how I ended up studying Taekwondo in my
late 20s, eventually getting a black belt after training about 20
hours a week for almost 2 years. And in hindsight, I think it was
a similar sort of &amp;quot;self-medicating with less harmful suffering&amp;quot;
kind of behavior. I&#39;m not actually training to fight this time.
I&#39;m in my 40s, I&#39;m just there to peacefully exercise. It is fun
to kick the bags sometimes and let my legs pretend they can still
break stuff, though. &lt;a href=&quot;https://blog.izs.me/2024/09/levaraging-the-suffering-set-point/#hedonistat-ref2&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Morning Image</title>
		<link href="https://blog.izs.me/2024/08/morning-image/"/>
		<updated>2024-08-25T15:00:00Z</updated>
		<id>https://blog.izs.me/2024/08/morning-image/</id>
		<content type="html">&lt;pre&gt;&lt;code&gt;immaculately imperceptibly impossibly softly
  hairs of forehead silk rest warm
    on closed satin eyelid

sleep breath sweet musk
  soft warm vapor waves
    on rough black sand beach cheek

sun invades with welcome warmth
  unwelcome wakefulness
    resisted, burrowing

hands with no expression
  rest on smooth expanse of flesh
    ignore the beating heart beneath

languorous left-over libido, last night&#39;s lust
  lactic lipids left lovely lounging lingual
&lt;/code&gt;&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>the you in me (but iambic pentameter)</title>
		<link href="https://blog.izs.me/2024/07/the-you-in-me-but-iambic-pentameter/"/>
		<updated>2024-07-30T18:11:05Z</updated>
		<id>https://blog.izs.me/2024/07/the-you-in-me-but-iambic-pentameter/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;Run my software on your brain and I
Will live rent-free inside your mind where we
can run together through your every dream

Keep that faithful replica, my voice
(along with all the others making noise)
telling you all day how great you are

Let my homunculous run wild in
the light of your affection and attention,
Creating needs for me to satisfy

Let&#39;s not control, or own, or colonize.
That work is never-ending and unpleasant,
And no one thus attained is worth the cost.

No grand gestures (anyone can do),
Give me little signs that take no effort,
and which are impossible to fake

Subtle twitch of eyes, your cheeks alight.
When we touch, the whispered sharp inhale
the smile you can&#39;t hide, comes out for me

When he looks out your eyes and into mine
and sees the copy of you in my mind
Let the me inside you fall in love
with the you that lives inside of me&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://blog.izs.me/2024/07/the-you-in-me/&quot;&gt;original&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Obsidian</title>
		<link href="https://blog.izs.me/2024/07/obsidian/"/>
		<updated>2024-07-28T17:19:54Z</updated>
		<id>https://blog.izs.me/2024/07/obsidian/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;MARCELINE: At least they&#39;ll find our skeletons entwined together!&lt;/p&gt;
&lt;p&gt;BONNIBEL: I don&#39;t have a skeleton, but that&#39;s pretty romantic!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No exaggeration, &lt;a href=&quot;https://blog.izs.me/2014/10/pb-and-marceline-is-one-of-the-most-poignant-love&quot;&gt;this
story&lt;/a&gt;
is a better model of healthy nuanced relationship dynamics than
anything I have ever seen in fiction. Certainly better than most
kids will ever pick up from the actual adults in their life.&lt;/p&gt;
&lt;p&gt;I&#39;m so thankful that the franchise got to a point where they
could do justice to this romance between a demonic vampire punk
and a sentient candy scientist, even though they are both women.&lt;/p&gt;
&lt;p&gt;🏳️‍🌈&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Honeysuckle</title>
		<link href="https://blog.izs.me/2024/07/honeysuckle/"/>
		<updated>2024-07-24T18:07:11Z</updated>
		<id>https://blog.izs.me/2024/07/honeysuckle/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/p/B_rQruqpEQU1yAtJ14N58rN8d4Yl61PDMv4AIc0/&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2024/07/honeysuckle/honeysuckle.jpg&quot; alt=&quot;a honeysuckle
blossom&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There was a big honeysuckle bush dividing our backyard from our
neighbors in the house in Connecticut where my family lived, from
1985 until my parents finally sold it in 15 years later, a few
years into their divorce. It was a long unkempt monster of a
bush, growing and spilling over the buried remains of a fence,
until it replaced and became the fence, long before our tenure as
residents.&lt;/p&gt;
&lt;p&gt;As it grows, a honeysuckle bush forms a dense haphazard matrix of
leaves and thin spiky branches, like a net of sticks, blooming
with small yellow and white flowers. Pretty, but not exactly
beautiful or remarkable.&lt;/p&gt;
&lt;p&gt;Underneath its impenetrable carapace, a mature honeysuckle bush
discards all but the thickest branches, supporting its outward
quest for dominance and sun. Nothing grows in the dark caves of
its interior spaces. It&#39;s former self continually replaced with
supportive emptiness.&lt;/p&gt;
&lt;p&gt;As a small child, I would spend hours at a time in this hidden
place. I brought treasures and books and pictures. It was my own
secret cave, where I was the sole explorer. I found and unearthed
the old remnants of the fence it had long ago devoured, and
without knowing it, formed vivid intense memories of the feel of
the old wood and the intricate shapes of the twine wrapped around
it, perhaps to support the bush in its infancy, or perhaps in a
vain attempt to keep the fence itself from coming apart.&lt;/p&gt;
&lt;p&gt;In that place, I was safe, and yet being there had a sense of
darkness and foreboding, imbued with the freedom and wild danger
of solitude. It was safe; home, but apart from home, and the
intensity of a world that I never felt fully a part of. Alone, I
could be me, without explanations.&lt;/p&gt;
&lt;p&gt;Now I am a man, a partner and a father, and have precious few
opportunities to lose myself hidden away in a dark thicket of
brambles. My life and self have expanded far beyond that child,
leaving pockets of void in many of the spaces he once filled, as
the ego expands to live up to the promises it makes itself.&lt;/p&gt;
&lt;p&gt;I wouldn&#39;t say that honeysuckle is my favorite flower. But the
smell of it produces such an overwhelmingly painful and joyful
nostalgia that I get dizzy from the emotional impact and have to
brace myself so I don&#39;t fall over. There&#39;s nothing like it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>the you in me</title>
		<link href="https://blog.izs.me/2024/07/the-you-in-me/"/>
		<updated>2024-07-22T22:46:24Z</updated>
		<id>https://blog.izs.me/2024/07/the-you-in-me/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;Run my software on your brain
  and I&#39;ll live rent-free inside your mind
    where we can run together through your dreams

Keep that faithful replica
  my voice along with all your others
    telling you all day how great you are

Let my homunculous run wild
  in the light of your attention
    and I will satisfy the need that he creates

Don&#39;t give me grand gestures &lt;i&gt;(anyone can do that)&lt;/i&gt;
  I want the little signs that take no effort
    and which are impossible to fake

Subtle twitch of eyes and cheeks
  when we touch, the whispered sharp inhale
    the smile you can&#39;t hide

When he looks out your eyes and into mine
  and sees the copy of you in my mind
    Let the me in you fall in love with the you in me&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;&lt;a href=&quot;https://blog.izs.me/2024/07/the-you-in-me-but-iambic-pentameter/&quot;&gt;iambic pentameter version&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>CLT, Near Mode, Far Mode, and Autism</title>
		<link href="https://blog.izs.me/2024/02/near-mode-far-mode-autism/"/>
		<updated>2024-02-23T20:47:29Z</updated>
		<id>https://blog.izs.me/2024/02/near-mode-far-mode-autism/</id>
		<content type="html">&lt;p&gt;This post is an exploration of a &lt;a href=&quot;https://twitter.com/izs/status/1246361720181776384&quot;&gt;half-baked
theory&lt;/a&gt;.
Consider it as an optional thought technology, which you may
choose to employ or not as it proves useful.&lt;/p&gt;
&lt;p&gt;I have found this to be a worthwhile mental tool in navigating
the neurotypical/allistic world as an autistic person. Whether it
is &amp;quot;true&amp;quot; or &amp;quot;valid&amp;quot; or has strong predictive power is less
important.&lt;/p&gt;
&lt;p&gt;Content warnings, this post mentions (in the abstract) grief and
pet-related tragedy, and links to a few websites that contain a
mix of very good and &lt;em&gt;exceptionally&lt;/em&gt; terrible ideas. And it is
possible that merely being aware of this tool may change your
brain and cause you to think in new ways, in case that is
something you&#39;d like to avoid.&lt;/p&gt;
&lt;h2 id=&quot;clt-and-modal-thinking&quot; tabindex=&quot;-1&quot;&gt;CLT and Modal Thinking &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-and-modal-thinking&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/posts/2024/near-mode-far-mode-autism/construal-level-theory-nihms314649.pdf&quot;&gt;Construal level
theory&lt;/a&gt;
is a model of psychological distance, the mental leaps that we
make in order to reason about and experience that which does not
affect the self directly.&lt;/p&gt;
&lt;p&gt;As the authors put it:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;People directly experience only the here and now. It is
impossible to experience the past and the future, other places,
other people, and alternatives to reality. And yet, memories,
plans, predictions, hopes, and counterfactual alternatives
populate our minds, influence our emotions, and guide our choice
and action. How do we transcend the here and now to include
distal entities? How do we plan for the distant future,
understand other people’s point of view, and take into account
hypothetical alternatives to reality? Construal level theory
(CLT) proposes that we do so by forming abstract mental
construals of distal objects. Thus, although we cannot
experience what is not present, we can make predictions about
the future, remember the past, imagine other people’s reactions,
and speculate about what might have been. Predictions, memories,
and speculations are all mental constructions, distinct from
direct experience. They serve to transcend the immediate
situation and represent psychologically distant objects.
Psychological distance is a subjective experience that something
is close or far away from the self, here, and now. Psychological
distance is thus egocentric: Its reference point is the self,
here and now, and the different ways in which an object might be
removed from that point—in time, space, social distance, and
hypotheticality—constitute different distance dimensions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Research on &lt;abbr title=&quot;Construal Level Theory&quot;&gt;CLT&lt;/abbr&gt; has
shown an interesting effect. We evaluate and respond to ideas in
&lt;em&gt;radically different ways&lt;/em&gt;, depending on this perceived
psychological distance. This difference can sometimes shift our
reactions in ways that are surprisingly at odds with an
&amp;quot;objective&amp;quot; evaluation. Consider the following statements:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Statement 1&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The average lifespan of a felis domesticus kept indoors is 12
to 18 years. Outdoor cats live 5 to 10 years on average.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;Statement 2&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My cat just died. I&#39;ve had her since I got her as a kitten
in 2002. I can&#39;t believe she&#39;s gone.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Consider: which of these statements is more sad?&lt;/p&gt;
&lt;p&gt;Even though the cat referenced in the second statement lived
several years longer than the average cat lifespan, it &lt;em&gt;feels
sadder&lt;/em&gt; because it&#39;s phrased in a way that indicates it is
&lt;em&gt;close&lt;/em&gt;. It&#39;s not just &amp;quot;&lt;em&gt;a&lt;/em&gt; cat&amp;quot;, it&#39;s &amp;quot;&lt;em&gt;my&lt;/em&gt; cat&amp;quot;.&lt;/p&gt;
&lt;p&gt;Furthermore, when
&lt;a href=&quot;https://en.wikipedia.org/wiki/Priming_%28psychology%29&quot;&gt;primed&lt;/a&gt;
with concepts associated with psychological closeness, we tend to
use this &amp;quot;near mode&amp;quot; style of thinking. When primed with concepts
associated with greater psychological distance, we tend to use
&amp;quot;far mode&amp;quot; thinking.&lt;/p&gt;
&lt;p&gt;In other words, the degree of sadness we feel about the shortness
of cats&#39; lifetimes has less to do with the length of said
lifetimes or the number of cats suffering such an early demise,
and more to do with whether we are primed to consider feline
death as a &lt;em&gt;near&lt;/em&gt; event or a &lt;em&gt;far&lt;/em&gt; event, with respect to
psychological distance from ourselves and our spheres of
concern.&lt;sup id=&quot;clt-fn-provenance-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-provenance&quot;&gt;0&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&quot;psychogical-distance-modal-thinking-and-autism&quot; tabindex=&quot;-1&quot;&gt;Psychogical Distance, Modal Thinking, and Autism &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#psychogical-distance-modal-thinking-and-autism&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This has a lot of interesting effects and impacts in how we go
about our lives. Simply noticing the shifts in modality can
illuminate a great deal about how and where we direct our
attention, and how this impacts us.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We tend to evaluate the choices and needs of others in far
mode, but our own in near mode, leading to harmful hypocrisy.
As &lt;a href=&quot;http://www.merlinmann.com/&quot;&gt;Merlin Mann&lt;/a&gt; has put it, &amp;quot;&lt;em&gt;Other
people&lt;/em&gt; are big dumb idiots, but I have &lt;em&gt;reasons&lt;/em&gt;.&amp;quot;&lt;/li&gt;
&lt;li&gt;We experience our current state in near mode, but our past
states in far mode, leading to the sense that we are always
doing our best, and yet our past self seems to have always
sabotaged us.&lt;/li&gt;
&lt;li&gt;Similarly, we tend to consider our future states in far mode,
so casually agree to write a whole blog post in a few months,
not realizing that in a few months we&#39;ll be just as busy as we
are right now, if not moreso&lt;sup id=&quot;clt-fn-lol-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-lol&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of the above is the work of professional academics who, for
any of their human shortcomings, seem to have all done this work
conscientiously. What follows is my own reckon, based on personal
experience. I have limited confidence that it is &amp;quot;true&amp;quot; per se
(though it would be an interesting area to research!) But I &lt;em&gt;do&lt;/em&gt;
know that I have gotten value from it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Autistic people seem to have much greater variance regarding
which ideas, phrases, and concepts trigger near-mode experience,
and which trigger far mode.&lt;/strong&gt; By comparison, allistic people seem
to be much more consistent in this regard.&lt;/p&gt;
&lt;h2 id=&quot;priming-near-vs-far-(intentionally-or-implicitly)&quot; tabindex=&quot;-1&quot;&gt;Priming Near vs Far (Intentionally or Implicitly) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#priming-near-vs-far-(intentionally-or-implicitly)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are countless layers of semantics implicit in most bits of
human communication, and priming the listener to consider a
subject at a given psychological distance is a lot of what&#39;s
going on. The overlapping layers can get very subtle and
interesting.&lt;/p&gt;
&lt;p&gt;For example, it can be good to use &amp;quot;I-statements&amp;quot; to speak about
our own emotions and needs in a difficult conversation. This
signals that the speaker is operating in near-mode, and thus is a
subject of empathy, &lt;em&gt;while at the same time&lt;/em&gt;, permits the
listener to receive the &lt;em&gt;information&lt;/em&gt; in far-mode. We&#39;re not
putting the statement &amp;quot;onto them&amp;quot;, so to speak, so they are
primed to consider it more abstractly, and feel less need to take
it personally or get defensive. It&#39;s not an &amp;quot;accusation&amp;quot;, it&#39;s a
problem that I have and would like your help with.&lt;/p&gt;
&lt;p&gt;A near-vs-far tug of war is also the reason for much of the
linguistic techniques employed in politics and sales.
It&#39;s why sales people will pepper their sentences with &amp;quot;today&amp;quot;
and use your name repeatedly when talking about the problem their
product solves, but then switch to complicated abstractions and
payment options when it&#39;s time to discuss the price. They want
you to &lt;em&gt;feel&lt;/em&gt; the need to buy, and disconnect fro the pain of
paying for it.&lt;/p&gt;
&lt;p&gt;The same technique is how political leaders can inspire entire
nations of otherwise sensible ethical citizens to commit
atrocities ranging from environmental destruction to mass murder
and genocide. We are shown graphic images and messages convincing
us that &lt;strong&gt;they&lt;/strong&gt; are coming for your family in particular,
inciting moral panic. But when it&#39;s time to disclose how much
horror our policies or military have &lt;em&gt;inflicted&lt;/em&gt;, suddenly it&#39;s
&amp;quot;casualties&amp;quot; and big numbers and maps of faraway places. &amp;quot;Won&#39;t
&lt;em&gt;somebody&lt;/em&gt; think of &lt;em&gt;the children&lt;/em&gt;!?&amp;quot; takes on a sinister
double-meaning; we are hypersensitive to imagined present-day
threats to our children, but can casually ruin the world they&#39;re
going to inherit, or bomb entire societies out of existence.&lt;/p&gt;
&lt;p&gt;It&#39;s also the method behind the madness of a lot of &lt;a href=&quot;https://blog.izs.me/2015/09/how-to-apologize/&quot;&gt;corporate
non-apologies&lt;/a&gt;.
When we say &amp;quot;mistakes were made&amp;quot; and &amp;quot;we apologize &lt;em&gt;if&lt;/em&gt; any harm
was caused&amp;quot;, we&#39;re distancing ourselves from the decisions and
the harm they caused. This subtly signals that the speaker is
unwilling to consider the situation in near-mode, which can of
course be infuriating if the one being &amp;quot;apologized&amp;quot; to is dealing
with some unpleasant near-mode effects. It&#39;s also why the &amp;quot;I&#39;m so
sorry!&amp;quot; part of most apologies can backfire; it centers the
apologizer&#39;s feelings and demands empathy for &lt;em&gt;their&lt;/em&gt; pain, when
it should be the &lt;em&gt;recipient&#39;s&lt;/em&gt; harm that is the focus!&lt;/p&gt;
&lt;p&gt;My favorite example of absurd corporate distance-priming is the
airport scene in Fight Club. &lt;a href=&quot;https://www.youtube.com/watch?v=ZR_1J8VIyKI&amp;amp;t=80s&quot;&gt;&amp;quot;Of course, it&#39;s company policy
never to imply ownership. We have to use the indefinite
article.&amp;quot;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;When you&#39;ve lost a loved one, one of the most brutally close and
painful experiences humans have, and find yourself surrounded by
friends and relations at a funeral, think about the things that
they typically say. &amp;quot;She&#39;s in a better place.&amp;quot; &amp;quot;At least he
doesn&#39;t have to suffer any more.&amp;quot; &amp;quot;They&#39;ll live on in our
hearts.&amp;quot; These are all attempts to move your thinking into far
mode.&lt;/p&gt;
&lt;p&gt;In fact, the entire experience of grief, with its stages and
emotional rollercoasters, whether due to death or just a simple
breakup, can be seen as a mind struggling to move a near-mode
emotional experience into a far-mode memory, letting them become
&lt;a href=&quot;https://www.youtube.com/watch?v=8UVNT4wvIGY&quot;&gt;somebody that you used to
know&lt;/a&gt;. Even after
rage and depression subside, the casual thought that you should
give them a call or the expectation to see them around the
corner, coming from a habit of near-mode consideration, can show
up and open the wounds all over again.&lt;/p&gt;
&lt;p&gt;Near/far priming doesn&#39;t only need to be linguistic. We consider
things like &amp;quot;warmth&amp;quot; to be near-mode, and &amp;quot;coldness&amp;quot; to be
far-mode. If you want your audience to be primed to offer empathy
and see you as part of their in-group, a person they do favors
for and trust to help them out in return, &lt;a href=&quot;https://www.science.org/doi/10.1126/science.1162548&quot;&gt;give them a warm
beverage to
hold&lt;/a&gt;.
(Perhaps this is why we so often serve coffee at business
meetings?)&lt;/p&gt;
&lt;h2 id=&quot;autistic-vs-allistic-near-and-far&quot; tabindex=&quot;-1&quot;&gt;Autistic vs Allistic, Near and Far &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#autistic-vs-allistic-near-and-far&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This insight has helped me immensely in understanding &lt;em&gt;and
explaining&lt;/em&gt; my autistic experience, and the cases where I and the
allistic people in my life seem to be living in entirely
different universes. Tedious disclaimers, this is my
own experience, etc., but I do believe it is a somewhat
common autistic pattern.&lt;/p&gt;
&lt;p&gt;Conceptual structures and systems are the farthest of far mode
triggers for most allistic people. For me, I experience them
quite like a part of my body. It wasn&#39;t until fairly recently
that I realized when other software developers say they need to
&amp;quot;feel out&amp;quot; a bit of code, they were speaking metaphorically. I
mean that literally. I &lt;em&gt;feel&lt;/em&gt; it with my mind like I&#39;m
manipulating the abstraction with a phantom limb.&lt;/p&gt;
&lt;p&gt;While I of course care about being liked by others, for its
emotional validation and instrumental value, it is an extremely
far-mode thing for me, especially with regards to arbitrary
social customs. I find it hard to care &lt;em&gt;directly&lt;/em&gt; about
popularity or social judgement in the way that most allistic
people seem to. &amp;quot;Shame&amp;quot; doesn&#39;t make a lick of sense to me; I
sort of understand it abstractly, but I&#39;m not sure I&#39;ve ever
actually felt it. For most allistics, shame is an extremely
powerful near-mode motivator, to the point where many find it
difficult to imagine being moral for any other reason.&lt;/p&gt;
&lt;p&gt;I am completely and unwaveringly insistent that employees are not
property, which is not controversial for most people in the
abstract. But for me, it does not feel &amp;quot;abstract&amp;quot;. This has led
to several conflicts in the past, when I vocally defend someone
who leaves the company for a better job, even though it was
really inconvenient for us, or fail to be upset when a rival
&amp;quot;poaches&amp;quot; a member of our team. The assumption is that I must not
care about my team, when nothing could be further from the truth.
I just &lt;em&gt;also&lt;/em&gt; care about the person leaving our team.&lt;/p&gt;
&lt;p&gt;This also helps illustrate the fiery passion of someone like
&lt;a href=&quot;https://en.wikipedia.org/wiki/Greta_Thunberg&quot;&gt;Greta Thunberg&lt;/a&gt;
with respect to climate change. Sadly for the long-term
viability of us human earthlings, most people view global warming
as an extreme far-mode concern. For Greta, it is clearly present
and visceral, as near-mode as it gets.&lt;/p&gt;
&lt;p&gt;Few cases illustrate this divergence as clearly as the
confounding (to allistics) autistic moral compass. As Myk
Bilokonsky
&lt;a href=&quot;https://twitter.com/mykola/status/1515660532828758016&quot;&gt;summarized&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Autistic people are more likely to stick to their values, even
in private and even when tempted with personal gain, than
non-autistic people are.&lt;/p&gt;
&lt;p&gt;Researchers of course framed this as a deficit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What is fascinating to me is not so much the study itself, or the
rather offensive way in which the autistic approach was framed,
but the conversation that it sparked.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;I get money&amp;quot; is near mode for both allistic and autistic.&lt;/li&gt;
&lt;li&gt;&amp;quot;People will find out I&#39;m bad and judge me&amp;quot; is intensely near
mode for allistic, but tends to be far-mode autistic.&lt;/li&gt;
&lt;li&gt;&amp;quot;I violated a value&amp;quot; is far mode for allistic, but near mode
for autistic.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Psychological distance is an important load-bearing aspect of
communication and interpersonal behavior, as it dramatically
shapes how we think and feel. Because most allistics have more or
less similar models of near vs far, it&#39;s nearly automatic in most
cases for them to prime their communication partners in the
manner that they wish. By simply speaking in ways that are
natural for the psychological distance the speaker feels, in all
likelihood the recipient of the communication will be easily
primed to feel the same way, as it will tend to align with their
own natural sense.&lt;/p&gt;
&lt;p&gt;When someone treats a concern in near mode, which to you is far
mode, it&#39;s often annoying. The speaker might seem overly
sensitive or just... &lt;em&gt;weird&lt;/em&gt;. &amp;quot;Cool story bro... you sure are
into that, I guess.&amp;quot; They might even do that &amp;quot;here we go...&amp;quot;
sigh, half-smile, and side-glance to the others in the
conversation to subtly commiserate about the weirdo they have to
suffer politely. (If you are autistic, I&#39;m guessing you know that
look, and the social rejection that inevitably follows.)&lt;/p&gt;
&lt;p&gt;However, when someone treats a concern in far mode, which to you
is near mode, it&#39;s confusing. Perhaps even &amp;quot;doesn&#39;t he notice his
hair is on fire???&amp;quot; confusing. The conclusion is that it&#39;s
entirely NOT a concern for that person. &amp;quot;His head must be
fireproof...?&amp;quot;&lt;/p&gt;
&lt;p&gt;So, to take an example from above, Mary leaves our company to
join Acme, Inc., our rival. This leaves us short-staffed, and
scrambling to fill the gap. Such betrayal! We all know that Acme,
Inc. is paying her more, and offering Mary a position that we
don&#39;t have available, which she&#39;s wanted for a long time. Double
betrayal! We trained her and then she walked out the door to do
that job somewhere else!&lt;/p&gt;
&lt;p&gt;From my point of view, the &amp;quot;betrayal&amp;quot; is a very abstract notion.
Yes, it&#39;s inconvenient and I&#39;d rather things were different, but
that&#39;s just how it goes, people move on. The notion that someone
would stick around even though working here isn&#39;t in their
interest? That feels perverse to me.&lt;/p&gt;
&lt;p&gt;So when I seem to be unphased by Mary&#39;s obvious betrayal, the
allistics around me are left with some seemingly obvious
theories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I didn&#39;t like Mary, wanted her gone, but for some reason never
said so, and in fact praised her work. So from now on, any
time I say something good about an employee, it&#39;s suspect.&lt;/li&gt;
&lt;li&gt;I don&#39;t care about the team having to do more work, or
scrambling to fill the empty position, or about our company&#39;s
ability to retain talent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In fact, I&#39;m just more likely to identify with the employee
themselves than the company, and genuinely wish the best for
them. We all cheer when someone leaves another company to come
join us, why would it be good in one direction, and evil in
another? Just because we stand to benefit? Feels petty.&lt;/p&gt;
&lt;p&gt;Autistic people make this error as well, when evaluating the
priorities and behaviors of allistic people. In the conversation
around the study above, you see autistic people wondering if
allistic people &amp;quot;even have morals&amp;quot;, just as the researchers
theorized that the autistic participants were deficient in their
concern for social pressure, and framed this as &amp;quot;inflexible&amp;quot;.&lt;/p&gt;
&lt;p&gt;In other words, rather than imagine that someone else views a
concern in a &lt;em&gt;different construal level theory modality&lt;/em&gt;, we tend
to assume that either:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;they are stubborn and over-sensitive (if the concern is
far-mode for us, and near-mode for them),&lt;/li&gt;
&lt;li&gt;or that they &lt;em&gt;lack the concern entirely&lt;/em&gt; (if it is near-mode
for us, but far-mode for them).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This almost never yields understanding.&lt;/p&gt;
&lt;h2 id=&quot;no-monoliths&quot; tabindex=&quot;-1&quot;&gt;No Monoliths &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#no-monoliths&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As the saying goes, &amp;quot;If you&#39;ve met one autistic person, you&#39;ve
met one autistic person&amp;quot;.&lt;/p&gt;
&lt;p&gt;And this is part of that &lt;a href=&quot;https://twitter.com/izs/status/1246361720181776384&quot;&gt;half baked
theory&lt;/a&gt;. It&#39;s
not that &amp;quot;allistics are this one consistent way, and autistics
are this other consistent way&amp;quot;. It&#39;s that allistics are largely
consistent as a group, and autistics are &lt;em&gt;extremely diverse&lt;/em&gt;,
with respect to our application of psychological distance.&lt;/p&gt;
&lt;p&gt;This is something I&#39;d very much like to see studied in greater
depth.&lt;/p&gt;
&lt;p&gt;I&#39;ve observed this cause problems among autistic people &lt;em&gt;just
like it does between autistic and allistic people&lt;/em&gt;, with many of
the same assumptions and misconceptions as a result. What is
brutally near-mode for one neurodivergent person may be extremely
abstract and distant for another.&lt;/p&gt;
&lt;p&gt;However, at least in those scenarios, I&#39;ve found autistic people
tend to have an appreciation for the experience of psychological
distances being out of alignment. After all, that&#39;s the story of
our life. And as is often the case, the tools we can use to get
along with each other are the same tools that can prove useful in
getting along in an allistic world, and vice versa.&lt;/p&gt;
&lt;h2 id=&quot;using-modal-shifts&quot; tabindex=&quot;-1&quot;&gt;Using Modal Shifts &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#using-modal-shifts&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Using this thought technology deliberately in practice takes a
bit of work, but I believe it is worth the effort, for people of
any neurotype who wish to understand people and work together
more effectively.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Know Thyself&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Practice identifying in your own mind and experience, when
you are thinking in near mode vs far mode. Do you tend to
spend more time in one than the other?&lt;/p&gt;
&lt;p&gt;The stereotypical (and likely wrong) autistic answer is to
assume that we spend most of our time in far-mode. &amp;quot;I am
cold untouchable robot, everyone says so, and that is safe
and powerful.&amp;quot;&lt;/p&gt;
&lt;p&gt;But I&#39;d encourage you to consider those things that send you
into a spiral of sensory sensitivity, rejection dysphoria, or
whatever it is that brings you to the brink of a meltdown.
That&#39;s some near mode stuff right there; most likely something
that feels &lt;em&gt;very&lt;/em&gt; close to you, but far to everyone else, and
the resulting lack of support or acknowledgement can be
frustrating to tears.&lt;/p&gt;
&lt;p&gt;What are the things that feel close? What things feel far
away?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Consider Alternatives&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Can you think about your near mode concepts in far mode?
Your far mode concepts in near mode? This can be very
challenging, because you&#39;re essentially asking your brain to
think and feel differently than is natural for you.&lt;/p&gt;
&lt;p&gt;Try to identify situations and conversations where you did
your level best to try to help someone, to be kind and
considerate, but it all seemed to go sideways before you knew
it, and they were hurt and angry, called you uncaring. Is it
possible that you were acting from a far mode thinking style,
while they were bringing you a near mode concern? What would
it have been like to be in near mode in that situation?&lt;/p&gt;
&lt;p&gt;On the flip side, identify those situations which are a Very
Big Deal, and no one around you seems to care as much as they
ought to. Is it possible that they are evaluating this
situation in far mode, while it is near to you? What would
it look like to consider the situation abstractly? How can
you express your needs in terms that make sense to that far
mode approach?&lt;/p&gt;
&lt;p&gt;What clues were they giving you about the mode they were in?
What did they say or do, what did they pay attention to? How
might you or they more clearly &amp;quot;primed&amp;quot; one another to get
everyone on the same page?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Practice Shifting&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Our minds will shift modes in response to priming. If you
can identify these priming triggers, it&#39;s possible to
willfully shift your own psychological construal level. You
can bring the far near, and push the near away, by shifting
the mental frame.&lt;/p&gt;
&lt;p&gt;As a safe practice, with plenty of time and space, alone and
apart from distractions, consider an event or idea which is
very far mode for you, but which someone else experiences in
near mode. Imagine not just that it is happening to you, in
the typical sense of &amp;quot;putting yourself in their shoes&amp;quot;.
Imagine that &lt;em&gt;you care about it in the same way they do&lt;/em&gt;, as
a near mode concern.&lt;/p&gt;
&lt;p&gt;Then turn it around. Consider something that is very close
and visceral to you, and try to zoom out. What if you didn&#39;t
care about it that much? What if it was happening to a
character in a movie, that you were watching in the
background? What should that character do? What would be
optimal?&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is no such thing as a &amp;quot;correct&amp;quot; neurotype, or &amp;quot;accurate&amp;quot;
cognitive modality. We all experience the world and ourselves
with the minds we have, and these minds are modal, subtle, and
complicated. But we &lt;em&gt;can&lt;/em&gt; improve our ability to use these minds
and make them work for us.&lt;/p&gt;
&lt;p&gt;I hope that you find this tool useful.&lt;/p&gt;
&lt;hr /&gt;
&lt;h6 id=&quot;footnotes&quot; tabindex=&quot;-1&quot;&gt;Footnotes &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#footnotes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h6&gt;
&lt;p&gt;&lt;small id=&quot;clt-fn-provenance&quot;&gt;&lt;a name=&quot;clt-fn-provenance&quot;&gt;&lt;/a&gt;&lt;strong&gt;0&lt;/strong&gt; The concept of &amp;quot;near mode&amp;quot; and
&amp;quot;far mode&amp;quot; came to my mental toolkit by way of Robin Hanson&lt;sup id=&quot;clt-fn-hanson-disclaimer-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-hanson-disclaimer&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;,
summarized neatly in &lt;a href=&quot;https://www.overcomingbias.com/2010/06/near-far-summary.html&quot;&gt;Near-Far
Summary&lt;/a&gt;,
and explored in several &lt;a href=&quot;https://www.lesswrong.com/tag/near-far-thinking&quot;&gt;other Near-Far mode
essays&lt;/a&gt; in the
LessWrong community&lt;sup id=&quot;clt-fn-lesswrong-disclaimer-back&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-lesswrong-disclaimer&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;.
(Yes, I really did just put footnotes in a footnote.)
&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-provenance-back&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;clt-fn-hanson-disclaimer&quot;&gt;&lt;a name=&quot;clt-fn-hanson-disclaimer&quot;&gt;&lt;/a&gt;&lt;strong&gt;1&lt;/strong&gt; Robin Hanson is a
libertarian who often engages in a distressing pattern of saying
outrageously offensive and hurtful things to rile people up,
especially to &amp;quot;stick it to the liberals&amp;quot;. That said, he &lt;em&gt;has&lt;/em&gt; had
some genuinely insightful ideas over the years, this being one of
them. I do of course agree that platforming troubling individuals
can do harm, but, well, people are complicated, and good ideas
can come from a lot of places.
&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-hanson-disclaimer-back&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;clt-fn-lesswrong-disclaimer&quot;&gt;&lt;a name=&quot;clt-fn-lesswrong-disclaimer&quot;&gt;&lt;/a&gt;&lt;strong&gt;2&lt;/strong&gt; See above disclaimer
about Robin Hanson. Similar can be said about LessWrong. There
are some genuinely good ideas there. There are also some really
bad ones. &lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-lesswrong-disclaimer-back&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;clt-fn-lol&quot;&gt;&lt;a name=&quot;clt-fn-lol&quot;&gt;&lt;/a&gt;&lt;strong&gt;3&lt;/strong&gt; Somewhat
&lt;a href=&quot;https://en.wikipedia.org/wiki/Tongue-in-cheek&quot;&gt;tongue in cheek&lt;/a&gt;,
I&#39;ve been looking forward to writing this for a while, but it is
a thing I do more often than I ought to. And here I am publishing
it several years later, since life got in the way, as usual.
&lt;a href=&quot;https://blog.izs.me/2024/02/near-mode-far-mode-autism/#clt-fn-lol-back&quot;&gt;back&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>They&#39;re not autistic, they&#39;re just...</title>
		<link href="https://blog.izs.me/2024/02/theyre-not-autistic-theyre-just/"/>
		<updated>2024-02-21T17:52:40Z</updated>
		<id>https://blog.izs.me/2024/02/theyre-not-autistic-theyre-just/</id>
		<content type="html">&lt;ul&gt;
&lt;li&gt;smart&lt;/li&gt;
&lt;li&gt;passionate about mud&lt;/li&gt;
&lt;li&gt;really into math&lt;/li&gt;
&lt;li&gt;obsessed with bread&lt;/li&gt;
&lt;li&gt;rude&lt;/li&gt;
&lt;li&gt;really into trains&lt;/li&gt;
&lt;li&gt;really into JavaScript&lt;/li&gt;
&lt;li&gt;really into Pokémon&lt;/li&gt;
&lt;li&gt;insensitive&lt;/li&gt;
&lt;li&gt;hypersensitive&lt;/li&gt;
&lt;li&gt;very focused&lt;/li&gt;
&lt;li&gt;easily distracted&lt;/li&gt;
&lt;li&gt;single-minded&lt;/li&gt;
&lt;li&gt;an idiot&lt;/li&gt;
&lt;li&gt;a knowitall&lt;/li&gt;
&lt;li&gt;brutally honest&lt;/li&gt;
&lt;li&gt;inconsiderate&lt;/li&gt;
&lt;li&gt;temperamental&lt;/li&gt;
&lt;li&gt;introverted&lt;/li&gt;
&lt;li&gt;set in their ways&lt;/li&gt;
&lt;li&gt;lazy&lt;/li&gt;
&lt;li&gt;a workaholic&lt;/li&gt;
&lt;li&gt;not a fan of flourescent lighting&lt;/li&gt;
&lt;li&gt;bothered by polyester&lt;/li&gt;
&lt;li&gt;a picky eater&lt;/li&gt;
&lt;li&gt;a nerd&lt;/li&gt;
&lt;li&gt;good at remembering movie lines&lt;/li&gt;
&lt;li&gt;good at remembering lyrics&lt;/li&gt;
&lt;li&gt;good at remembering names of greek gods&lt;/li&gt;
&lt;li&gt;good at remembering numbers&lt;/li&gt;
&lt;li&gt;good at remembering stuff&lt;/li&gt;
&lt;li&gt;bad at remembering to eat&lt;/li&gt;
&lt;li&gt;bad at remembering what day it is&lt;/li&gt;
&lt;li&gt;bad at remembering birthdays&lt;/li&gt;
&lt;li&gt;bad at remembering stuff&lt;/li&gt;
&lt;li&gt;bad with names&lt;/li&gt;
&lt;li&gt;bad with faces&lt;/li&gt;
&lt;li&gt;bad with big groups&lt;/li&gt;
&lt;li&gt;bad with people&lt;/li&gt;
&lt;li&gt;kinda deaf sometimes&lt;/li&gt;
&lt;li&gt;fidgety&lt;/li&gt;
&lt;li&gt;twitchy&lt;/li&gt;
&lt;li&gt;funny&lt;/li&gt;
&lt;li&gt;humorless&lt;/li&gt;
&lt;li&gt;easily annoyed&lt;/li&gt;
&lt;li&gt;oblivious to drama&lt;/li&gt;
&lt;li&gt;a drama queen&lt;/li&gt;
&lt;li&gt;annoying&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;(This list is not exhaustive.)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A Labeled Box of Feels</title>
		<link href="https://blog.izs.me/2024/02/feelings-box/"/>
		<updated>2024-02-09T22:51:13Z</updated>
		<id>https://blog.izs.me/2024/02/feelings-box/</id>
		<content type="html">&lt;p&gt;I am about 80% sure I did not initially come up with this
concept. As I remember it, the idea of jealousy in particular
being a &amp;quot;feelings box&amp;quot; was something I originally heard at an
open relationship discussion group some time around mid-2009. But
it&#39;s come up 3 times in the last few weeks in various
conversations, and I haven&#39;t been able to find any sources online
other than my own tweets. It&#39;s possible that I&#39;ve explored it
enough that it may as well be mine, and so I ought to write it up
here.&lt;/p&gt;
&lt;p&gt;There are a few examples of things we often think of and treat
like &amp;quot;feelings&amp;quot; or &amp;quot;emotions&amp;quot; that are in fact not feelings, but
a labeled &lt;em&gt;box&lt;/em&gt; of feelings.&lt;/p&gt;
&lt;p&gt;A dramatic example of this is &amp;quot;jealousy&amp;quot;.&lt;/p&gt;
&lt;h2 id=&quot;jealousy-is-a-feelings-box&quot; tabindex=&quot;-1&quot;&gt;Jealousy is a Feelings Box &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/feelings-box/#jealousy-is-a-feelings-box&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To be jealous is not to have one specific identifiable feeling.
Unlike &amp;quot;true&amp;quot; emotions, &amp;quot;jealousy&amp;quot; is a combination of many
&lt;em&gt;different&lt;/em&gt; emotions all jumbled together. We shove those
feelings into a box, put a label on the box, and seal it up
tight. From then on, we only interface with the label, not the
contents.&lt;/p&gt;
&lt;p&gt;In the case of jealousy, the label reads: &lt;code&gt;YOUR FAULT&lt;/code&gt;. Then you
huck the box at the person who did the bad thing that made you
jealous, and now it&#39;s their problem. You are now entitled to demand
that they change their behavior, whatever it was that caused you
to have this box of feelings, rather than unpack the box and
figure out what&#39;s really going on.&lt;/p&gt;
&lt;p&gt;There is no way to productively address the issue without opening
up that box and really examining what&#39;s inside. It may be some
mix of longing, resentment, sadness, grief, anger, anxiety, fear,
even lust or excitement can get stirred up in there! Each of
these are associated with extremely different stories, different
experiences in the body, different framings and conclusions and
reactions and, most importantly, needs. Because the box can
contain emotions with &lt;em&gt;contradictory&lt;/em&gt; aspects (eg, grief and
excitement, or resentment and lust), it is all the more important
to tease them apart and address them one by one.&lt;/p&gt;
&lt;p&gt;If the box contains resentment, maybe the &amp;quot;jealousy&amp;quot; story is
something like &amp;quot;You&#39;re spending so much time with him, that
you haven&#39;t been keeping up with your share of the chores. That
extra work is falling on me, and it&#39;s not fair.&amp;quot; The intervention
here might be something like a clearer structure for
accountability and expectations, to ensure that we all contribute
fairly, and can easily see who&#39;s done what.&lt;/p&gt;
&lt;p&gt;If the box contains fear and anxiety, maybe the &amp;quot;jealousy&amp;quot; would
be addressed with reassurance and reflection on what it is about
you that your partner appreciates. If it&#39;s grief and longing,
maybe it&#39;s just that you need to make some more explicit time for
one another to do the things you enjoy together.&lt;/p&gt;
&lt;p&gt;If your problem is grief or longing for the relationship you once
had, a chore wheel isn&#39;t going to help. If your problem is
resentment, being told how important and valuable you are is
fucking insulting. And if your issue is that you&#39;re afraid
they&#39;re going to leave you at any moment, it&#39;ll be hard to enjoy
doing fun hobbies together.&lt;/p&gt;
&lt;p&gt;As long as we interface with the &lt;em&gt;label&lt;/em&gt; rather than the feelings
contained in that box, no healing can happen, and any processing
will likely make things worse.&lt;/p&gt;
&lt;h2 id=&quot;happiness-is-a-feelings-box&quot; tabindex=&quot;-1&quot;&gt;Happiness is a Feelings Box &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/feelings-box/#happiness-is-a-feelings-box&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Similar to jealousy, &amp;quot;happiness&amp;quot; is a labeled feelings box as
well. But in this case, instead of the label ultimately meaning
&lt;code&gt;YOUR FAULT&lt;/code&gt;, the label says &lt;code&gt;GOOD&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Consider these statements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I&#39;m happy that we&#39;re going to go to the party together.&lt;/li&gt;
&lt;li&gt;I&#39;m happy that we&#39;re here at this party together.&lt;/li&gt;
&lt;li&gt;I&#39;m happy that we had a chance to go to that party together.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;3 extremely different emotions! But once &lt;em&gt;labeled&lt;/em&gt; with that
&lt;code&gt;GOOD&lt;/code&gt; tag, we stop looking at it.&lt;/p&gt;
&lt;p&gt;&amp;quot;Happiness&amp;quot; might contain satisfaction, bliss, mania, pride,
ecstasy, excitement, or even some less &amp;quot;comfortable&amp;quot; emotions,
like longing or anticipation. In the way that &amp;quot;hope&amp;quot; and &amp;quot;fear&amp;quot;
are two sides of a coin, and work together to take you out of
mindful presence, &amp;quot;happiness&amp;quot; can be just as much an obstacle to
introspective englightenment and connection as jealousy is!&lt;/p&gt;
&lt;p&gt;While the jealousy box was mostly some unpleasant or difficult
feelings steming from current or anticipated unmet needs, the
happiness box is usually filled with mostly &lt;em&gt;good&lt;/em&gt; feelings.&lt;/p&gt;
&lt;p&gt;Why would we hide those from ourselves?&lt;/p&gt;
&lt;p&gt;It&#39;s important to realize that our minds and brains are not
goal-optimizing machines or rational hedonic maximizers. Like
everything else made by evolution, our minds are optimized for
reprodutive fitness, with survival as a means to that end. So,
they take shortcuts to conserve energy and offload work whenever
possible.&lt;/p&gt;
&lt;p&gt;It is much less effort to &lt;em&gt;want&lt;/em&gt; to be happy than to actually
figure out &lt;em&gt;how&lt;/em&gt; to be happy or get the thing that will &lt;em&gt;make&lt;/em&gt; us
happy. The quest to &amp;quot;define&amp;quot; happiness is futile; it is not one
thing, but a contextual framing of many different contradictory
states, grouped by a label. By interacting with the label instead
of the states themselves, we can bemoan our lack of happiness,
without ever being compelled to make the changes that would bring
us more happiness.&lt;/p&gt;
&lt;h2 id=&quot;other-cases-(exercises-for-the-reader)&quot; tabindex=&quot;-1&quot;&gt;Other Cases (Exercises for the reader) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/feelings-box/#other-cases-(exercises-for-the-reader)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consider how this concept is at play in the concepts of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Loyalty (and especially, how this contrasts with &amp;quot;integrity&amp;quot;)&lt;/li&gt;
&lt;li&gt;Respect (eg, when it means &amp;quot;deference to authority&amp;quot; vs when it
means &amp;quot;being allowed to exist&amp;quot;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these cases, what might be in the box? How does the label
prevent us from seeing and addressing that?&lt;/p&gt;
&lt;h2 id=&quot;twitter-threads-on-this-subject&quot; tabindex=&quot;-1&quot;&gt;Twitter Threads On This Subject &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2024/02/feelings-box/#twitter-threads-on-this-subject&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/izs/status/1744854738997567586?s=20&quot;&gt;&amp;quot;Happiness&amp;quot;, much like &amp;quot;jealousy&amp;quot; is not an emotion per se,
but an emotion-constellation, or emotion container. A box
containing emotions, taped up, with a label on
it.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://x.com/izs/status/1755767477085278236?s=20&quot;&gt;&amp;quot;Happy&amp;quot; is like &amp;quot;jealous&amp;quot;. It is not one feeling. It is a box
that we put feelings in, and then label so that we don&#39;t have
to do the hard work of examining
them.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Test Assertion Styles in JavaScript</title>
		<link href="https://blog.izs.me/2023/09/software-testing-assertion-styles/"/>
		<updated>2023-09-30T04:28:11Z</updated>
		<id>https://blog.izs.me/2023/09/software-testing-assertion-styles/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://wesleytodd.com/&quot;&gt;Wes Todd&lt;/a&gt; asked me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;reminding myself of &lt;a href=&quot;https://node-tap.org/&quot;&gt;tap&lt;/a&gt;’s api, can you
sell me on why people like a test runner to have built in
assertions?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I answered and he said it should be a blog post, and I obviously
agreed. So here&#39;s the infodump that is even more verbose than the
one he got in slack.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;A lot of it is down to subjective taste, and like a lot of
subjective stuff, you kind of have to give yourself time to
acquire a taste for a thing in order to really appreciate it. And
once you do, you might still eventually decide it&#39;s just not for
you. I have &lt;a href=&quot;https://node-tap.org/#why-tap%3F&quot;&gt;my own
preferences&lt;/a&gt; in the matter,
obviously, but I try to be fair when explaining the pros and
cons.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There are no wrong answers as long as you write tests that help
you make good software.&lt;/strong&gt; But in general, the reason for having
an assertion lib in the test framework (rather than just throwing
on any failure) is so that you can have &lt;em&gt;multiple&lt;/em&gt; assertions in
a given batch with less boilerplate, and fully decouple the
&lt;em&gt;test&lt;/em&gt; from the &lt;em&gt;runner&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;There are two general approaches that are common in JavaScript
testing APIs, which I think of as &amp;quot;the &lt;strong&gt;spec family&lt;/strong&gt;&amp;quot; and &amp;quot;the
&lt;strong&gt;tap family&lt;/strong&gt;&amp;quot;. These aren&#39;t firm categories; it&#39;s a bimodal
distribution, with quite a bit of overlap.&lt;/p&gt;
&lt;p&gt;These families are not unique to JavaScript, and you often see
one or the other being more popular with a given language
community. JavaScript being what it is, of course, we do
everything in every &lt;em&gt;possible&lt;/em&gt; way, with several different
implementations of each.&lt;/p&gt;
&lt;p&gt;The most common complaint about JavaScript is the embarrassment
of riches in open source tooling options, that it moves too fast
and there are too many choices. For a language that is both
functional and object oriented, running on such a wide array of
environments, with the more developers than any other language by
a wide margin, this should be no surprise.&lt;/p&gt;
&lt;p&gt;In this case, the fundamental divide comes down to where a test
framework places its boundary of agnosticism; where it is &lt;em&gt;a la
carte&lt;/em&gt; and where it is &lt;em&gt;omakase&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Frameworks in the spec family tend to be agnostic about the means
of declaring a test function has passed or failed (any throw will
do, do nothing and it passes). Frameworks in the tap family tend
to be agnostic about the boundary between the runner and the test
suite process (anything emitting TAP on stdout and exiting with 0
or not-0 status will do). Each choice has its pros and cons.&lt;/p&gt;
&lt;h2 id=&quot;spec-family&quot; tabindex=&quot;-1&quot;&gt;Spec Family &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2023/09/software-testing-assertion-styles/#spec-family&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the spec family (eg: mocha, lab, jest), you have a block that
defines a suite, and within that, you create a test block
function. If that test function throws, the test fails,
otherwise, it passes. They often (but not always) are paired with
assertion libraries that provide a &amp;quot;literate programming&amp;quot; API.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token function&quot;&gt;describe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;account&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;has a balance of zero when first created&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// if this throws, the test fails&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;it&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;has an empty list of initial addresses&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;expect&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;addresses&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Historically, these are largely inspired by RSpec, and much of
the current popularity of this style can be traced back to TJ
Holowaychuk&#39;s development of ruby-inspired testing tools in the
early days of Node.js, eventually culminating in Mocha.&lt;/p&gt;
&lt;pre class=&quot;language-ruby&quot;&gt;&lt;code class=&quot;language-ruby&quot;&gt;RSpec&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;describe Account &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
  it &lt;span class=&quot;token string-literal&quot;&gt;&lt;span class=&quot;token string&quot;&gt;&quot;has a balance of zero when first created&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
    expect&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;to eq&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Money&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The spec family of JS testing tools rely heavily on decorating
the thrown &lt;code&gt;Error&lt;/code&gt; object, and building up a tree of suites and
tests which are then evaluated. The &amp;quot;protocol&amp;quot; boundary &lt;em&gt;between
the test and harness&lt;/em&gt; is based on direct access to shared (or
directly serialized) object structures, and is thus highly
opinionated.&lt;/p&gt;
&lt;p&gt;Within a given framework, these opinionated parts of the
interface can be formalized, so that a variety of reporters can
be created to turn the tree of Suite and Test objects into
human-readable output, but the barrier to doing so is higher.&lt;/p&gt;
&lt;p&gt;Also, the &lt;code&gt;describe&lt;/code&gt;/&lt;code&gt;it&lt;/code&gt;/&lt;code&gt;context&lt;/code&gt;/etc functions (what Mocha
calls its &amp;quot;BDD&amp;quot; and &amp;quot;TDD&amp;quot; interfaces) are injected as globals,
but only when run with the dedicated runner. Jest takes this a
step further, parsing tests and running them in a fully
virtualized environment, meaning that they can effectively &lt;em&gt;only&lt;/em&gt;
be run with the test framework&#39;s runner.&lt;/p&gt;
&lt;p&gt;However, the boundary between the &lt;em&gt;test functions themselves&lt;/em&gt; and
the framework as a whole is completely agnostic. Any throw will
do. So, there can be quite a lot of innovation and variety in how
those errors are generated and thrown.&lt;/p&gt;
&lt;h2 id=&quot;tap-family&quot; tabindex=&quot;-1&quot;&gt;Tap Family &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2023/09/software-testing-assertion-styles/#tap-family&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The tap family of tools are traditionally built around the &lt;a href=&quot;http://testanything.org/&quot;&gt;Test
Anything Protocol&lt;/a&gt;, a text based
protocol which describes the results of a test run. TAP is
human-readable and machine-parseable, meaning that the results
can be inspected directly, turned into reports, stored,
aggregated, and so on. Most test frameworks today have the
capacity to output TAP, even if they are not built around the
protocol as a first-class concern.&lt;/p&gt;
&lt;p&gt;Testing tools in this family include tap, tape, and (at least in
the presented API, if not all of the internal mechanisms) ava.&lt;/p&gt;
&lt;p&gt;Rather than always throwing on a failed assertion and a set of
global functions to create suites and test blocks, frameworks in
this family expose a single &lt;code&gt;t&lt;/code&gt; object with assertion methods
that define &amp;quot;test points&amp;quot;. Passing test points are reported along
with failures in the TAP stream, though these are often omitted
from reports.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;balance of zero when first created&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;addresses&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;empty list of addresses&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Suites of test points can be grouped using the &lt;code&gt;test&lt;/code&gt; method on these
objects, nested indefinitely, with each subsequent test blocking
getting a &lt;code&gt;t&lt;/code&gt; object relating to the subtest.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;account&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Account&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;balance of zero when first created&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;addresses&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;empty list of addresses&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;test&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;credits&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;token parameter&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;credit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;negative balance after credit&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;debit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    t&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;equal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;balance&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;positive balance after debit&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;TAP started with Larry Wall&#39;s perl test scripts, evolving into
CPAN&#39;s various
&lt;a href=&quot;https://metacpan.org/dist/Test-Simple/view/lib/Test/Tutorial.pod&quot;&gt;&lt;code&gt;Test&lt;/code&gt;&lt;/a&gt;
libraries, and which in turn spawned an ecosystem of TAP
producers in various languages.&lt;/p&gt;
&lt;p&gt;Because failing test points don&#39;t throw, and passing test points
are reported, there&#39;s no need for as many layers of enclosing
block functions, reducing the boilerplate. Ie, instead of
&lt;code&gt;describe(groupName, () =&amp;gt; { it(thingName, () =&amp;gt; { assert(cond) }) })&lt;/code&gt;, the minimum &amp;quot;just test a thing&amp;quot; that shows some output on
success is just &lt;code&gt;t.ok(cond, message)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This is less boilerplate for writing tests, but of course noisier
output, which is pretty much always addressed by having a
reporter that parses the standard TAP output and doesn&#39;t bother
showing you all the passing tests (unless you want it to).&lt;/p&gt;
&lt;p&gt;Because the boundary of agnosticism is between the &lt;em&gt;test file and
the runner&lt;/em&gt;, test files can be anything, and can be run by any
any TAP-consuming harness. Or, they can even be piped to a file,
and their results reported long after the fact. It&#39;s not uncommon
to use a runner for tests that are using some other TAP producing
test framework, perhaps even in another language. I&#39;ve seen the
perl &lt;code&gt;prove&lt;/code&gt; tool used to run node-tap tests, and written tests
in bash that are run by node-tap. This means that the framework
typically doesn&#39;t &lt;em&gt;have&lt;/em&gt; to create a specially crafted
environment for tests, and they can be run any which way, just as
(more or less) &amp;quot;normal&amp;quot; programs.&lt;/p&gt;
&lt;p&gt;The trade-off is that these tools typically &lt;em&gt;don&#39;t&lt;/em&gt; have as
fully agnostic a way to define tests themselves. Because the
expectation is that the test generates a TAP stream, and you
typically want that to capture passes as well as failures, you
see these collections of assertion methods that come along with
the framework itself, because they have to be hooked into the
structure to generate valid TAP (even though this &amp;quot;in-test&amp;quot;
framework can be fully decoupled from the runner).&lt;/p&gt;
&lt;h2 id=&quot;it&#39;s-software-you-can-do-anything-with-anything&quot; tabindex=&quot;-1&quot;&gt;It&#39;s Software, you can do anything with anything &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2023/09/software-testing-assertion-styles/#it&#39;s-software-you-can-do-anything-with-anything&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As I said, these are not strict categories, but more of a bimodal
distribution of styles and approaches, informed by what the
preferences of the creators of these frameworks about what is
important to keep flexible, vs what was important to keep
consistent.&lt;/p&gt;
&lt;p&gt;Pretty much every popular test framework &lt;em&gt;can&lt;/em&gt; output a TAP
stream. And a thrown error in any popular framework will be
treated as a test failure and handled reasonably.&lt;/p&gt;
&lt;p&gt;But the focus and features of a framework will be designed around
its goals, and that tends to show. The TAP stream output by mocha
or jest tends to be much less expressive than that emitted by tap
or tape; and the level of integration between the runner,
reporter, and framework is much reduced in tap family frameworks,
which can sometimes limit what they are capable of providing.&lt;/p&gt;
&lt;h2 id=&quot;aside:-tap-family-cousins-*unit&quot; tabindex=&quot;-1&quot;&gt;&lt;em&gt;Aside: TAP Family Cousins, &lt;code&gt;*Unit&lt;/code&gt;&lt;/em&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2023/09/software-testing-assertion-styles/#aside:-tap-family-cousins-*unit&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TAP is not the only popular cross-platform protocol for
expressing test results as a text stream. Another popular option
is the XML format popularized by JUnit, PHPUnit, and xUnit.
(Technically xUnit is a somewhat different schema from JUnit, but
the principle is the same.)&lt;/p&gt;
&lt;p&gt;It&#39;s an old joke that Java is a DSL for turning XML into stack
traces. JUnit is a DSL for turning stack traces into XML. Because
the test results are captured in a formalized text-based format,
the results can be saved to a file, reported after the fact, and
so on. Anything that generates this text format can interoperate
with anything that can consume it.&lt;/p&gt;
&lt;p&gt;That&#39;s why I consider these test frameworks related to the TAP
family; possibly by convergent evolution as much as by direct
inspiration, I don&#39;t know enough of the history of both to say
one way or the other. I&#39;ve heard that JUnit borrowed a lot from
SUnit, but I&#39;ve also read that SUnit was more of an idea that
multiple smalltalk teams tended to adopt, rather than a specific
format or piece of software.&lt;/p&gt;
&lt;h2 id=&quot;personally...&quot; tabindex=&quot;-1&quot;&gt;Personally... &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2023/09/software-testing-assertion-styles/#personally...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I like the tap family tools better. I&#39;m not saying that they
&lt;em&gt;are&lt;/em&gt; better, they just appeal to my preferences and style. I
&lt;em&gt;often&lt;/em&gt; want to replay tests, look at the raw data, etc. And my
first instinct when I want to zoom in on a test is to just run it
as a normal program to be able to poke at it when I&#39;m debugging
something or working on a new feature. I get frustrated and
annoyed when I can&#39;t just run a node program with node and see
the results right there. And I often work on libraries and
programs where things just won&#39;t work properly in a sandboxed
testing VM, no matter how cleverly implemented.&lt;/p&gt;
&lt;p&gt;Yes, providing a nicely integrated experience can be more
challenging with that approach, but I find the separation of
concerns beneficial enough to make it worthwhile.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How to Get Started in Open Source (as a Developer)</title>
		<link href="https://blog.izs.me/2023/02/how-to-get-started-in-open-source/"/>
		<updated>2023-02-28T16:33:43Z</updated>
		<id>https://blog.izs.me/2023/02/how-to-get-started-in-open-source/</id>
		<content type="html">&lt;p&gt;This was an email I wrote a few years ago in response to someone
asking how they can get started in open source, if they&#39;re
already a professional software developer. Someone else just
asked a similar question, so rather than copy-paste from my sent
messages, I&#39;m copy-pasting onto my blog.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;If you already work as a software developer, there&#39;s a very good
chance you&#39;re interacting with open source dependencies on a
somewhat regular basis. If you want to get involved with
contributing to open source, the simple (but somewhat unhelpful)
answer is: just start doing it.&lt;/p&gt;
&lt;p&gt;To explain somewhat what that actually means, there are four main
activities in open source:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;creating new things&lt;/li&gt;
&lt;li&gt;fixing existing things that are broken in some way&lt;/li&gt;
&lt;li&gt;improving existing things with new functionality&lt;/li&gt;
&lt;li&gt;helping users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you already a professional software developer, then all four
of these are things you can contribute to as part of your normal
work, and ideally it doesn&#39;t need to require extra labor (or at
least, not more than you benefit from). Your job is to create and
improve the software your employer uses and/or sells, so it&#39;s
only a slight mental frame shift to see how &amp;quot;contributing to open
source&amp;quot; is a part of that work.&lt;/p&gt;
&lt;p&gt;For the first, creating things, practice noticing the thought in
the back of your head while working in software, &amp;quot;there should be
a module that just solves this problem for me so it&#39;s easier&amp;quot;.
Sketch out how you&#39;d use it, think about what it would do. Then
write that module and publish it, and use it to solve the problem
you had.&lt;/p&gt;
&lt;p&gt;For the second, fixing things, there&#39;s a lot written on how to
improve your debugging and issue reporting skills, but the most
important thing is building the skill of creating small
reproducible test cases (ideally, even by adding a test to a
program&#39;s existing test suite that fails due to the bug). As a
maintainer, good reproducible bug reports are always a gift.&lt;/p&gt;
&lt;p&gt;Many projects have an ever-increasing list of bugs that have yet
to be addressed, so you can always start in on those. But the
easier approach I&#39;ve found is to build a practice of noticing
when you think &amp;quot;fuck this, this thing is broken, I&#39;ll use xyz
instead&amp;quot;, and before you do switch to the other option, make a
small program to &lt;em&gt;prove&lt;/em&gt; it&#39;s broken in the way you think.  Then
fix the broken thing (or at least, report it to the author with
the small proof you wrote). Surprisingly often, you&#39;ll find that
your minimal test program &lt;em&gt;doesn&#39;t&lt;/em&gt; break in the way you observed
in your actual program, and you learn something interesting about
your own assumptions.&lt;/p&gt;
&lt;p&gt;The third, improving existing things with new functionality, is a
blend of the first two. Keep an eye out for cases where you&#39;re
using something and find that it&#39;s lacking some functionality
that seems to &amp;quot;fit&amp;quot; with what it does, maybe even where you&#39;re
surprised it &lt;em&gt;doesn&#39;t&lt;/em&gt; do what you need. Sketch how you&#39;d use the
added functionality, what it would do, etc. Then add that
functionality, or at least request it as clearly as possible,
with your reasoning and a clear explanation of your use case.
(The author will often have feedback that can be very helpful,
such as workarounds, reasons why it&#39;s not a good idea, better
approaches, etc., so it&#39;s a good idea to at least request the
feature and see what they say, especially if digging into the
code is challenging.)&lt;/p&gt;
&lt;p&gt;For the fourth, helping users, there&#39;s a lot of ways that people
mean to help, but some of these are sometimes unhelpful. When
reporting issues you have, you&#39;ll be right there in the bug
tracker, and will probably see many open issues that could
benefit from a minimal reproduction case, or where a requested
feature is not fully articulated. Get in the habit of asking
questions and clarifying the limits of what you actually know,
rather than stating authoritative answers, especially if it&#39;s not
your project.&lt;/p&gt;
&lt;p&gt;There&#39;s certainly no moral or ethical requirement that you as a
worker personally contribute your time and attention to open
source just because you use it in your day job. If it&#39;s fun and
rewarding for you, if it fills your heart with joy, or if you see
some personal benefits from learning or improving your skills,
then yeah, just do it. If not, don&#39;t. But always know that it&#39;s
optional, and available to you.&lt;/p&gt;
&lt;p&gt;Even if you don&#39;t do these kinds of contributions (which is 100%
fine!), it &lt;em&gt;is&lt;/em&gt; important to encourage your employer to dedicate
time and money towards the open source projects that their
business depends on. Many companies want to contribute back to
the communities they benefit from (for self-serving as well as
altruistic reasons), but often managers and executives lack an
understanding of specifically which projects matter to the
business, and thus where their contributions should be deployed.
So it&#39;s on us to act as technical advisors.&lt;/p&gt;
&lt;p&gt;And if your employer has a problem with you improving your skills
by participating in the oss communities that benefit them, and
improving the state of the craft that their business depends on,
well... find another employer, because that&#39;s really a misguided
and short-sighted point of view.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>To my father</title>
		<link href="https://blog.izs.me/2023/02/to-my-father/"/>
		<updated>2023-02-25T00:37:25Z</updated>
		<id>https://blog.izs.me/2023/02/to-my-father/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;We saw this coming. You saw,
  and &lt;a href=&quot;https://blog.izs.me/2023/02/jim-schlueter-1954-03-06-2023-02-18/&quot;&gt;commented on&lt;/a&gt;
the emptiness
  that your departure would create,
the space for future lives to fill.

&quot;Death is a part of life&quot;
  or so they say, but you
  knew better, knew
that the end is just the end

Now you&#39;re gone, not to a better place,
  not &quot;to&quot; at all, but out of time and space,
  and those parts of you that death cannot erase
    fall short.
You&#39;re gone.

I lost you first when I was young,
  a dad replaced by distant tyrant strung
    out on work and caring less
about his family than his monetary stress

You taught me things I&#39;ll never know,
  so much I have worked
    so hard to outgrow,
A parent scripts the inner voices
  crafting an adult&#39;s neuroses

We found each other two grown men,
  when I was struggling and when
  I lacked the luxury to turn aside
your offered help
  though it bruised my pride

I laugh sometimes at how many of your mistakes
I repeat, along the scripted plan that takes
us by the hand, along the path laid out from birth.
  (The bonds of fate around me always chafe.)
And at how so much of what I try to be,
better than you, a better parent, better lover, better me,
competition underpinning my self-worth,
I got from you.

As an adult, I came in time to respect
  what you did to break the cycle of abuse,
In place of rage and fire, you gave cold neglect,
  and let me be fucked up in my own way

Healing can uncomplicate.
Forgiveness given can recuperate,
And so we got some 20 odd years as father and son.
Grandpa and dad,
  you gave my child the love I craved
    when I was at their age,
and I was genuinely glad.

I recall the last time we hugged, an embrace
awkward as always, like dancers out of place,
But love and pride still unmistakeable and clear.

I was prepared for this a year ago,
  when mortality&#39;s brutal taxes laid you low.
We said our goodbyes, asked final questions,
  but it was not the end.

It happened again.

A rush to the hospital, a phone full of text,
  the first was terror,
    and each a little less,
I learned the pattern, came to expect
a routine, new normal, just what happens next,
you get sick, we worry, then
you get better
and we do it all again
until

the time we don&#39;t.
&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>How do we approach the falling night</title>
		<link href="https://blog.izs.me/2023/02/jim-schlueter-1954-03-06-2023-02-18/"/>
		<updated>2023-02-23T17:59:03Z</updated>
		<id>https://blog.izs.me/2023/02/jim-schlueter-1954-03-06-2023-02-18/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;(An Atheist’s Farewell)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;By Jim Schlueter, February 12, 2023&lt;/p&gt;
&lt;pre class=&quot;poem&quot;&gt;
How do we approach the falling night
When we know there is no dawn in sight
For all the flowers have bloomed
The leaves all blown and trees stripped bare
And soon all that we know will be no more
At the closing of this door

How do we greet this season of our lives
Which will  never show us another spring
We reached our end, and now we sing
For the light the dawn will never bring
That is how I greet this season of my life

I wish that I had another life
To freely live and live again
But that is not the ticket we drew
When into this reality we flew
It is this life you get, just one
And then you’re done

So make great joy with your family &amp; friends
Remember their smiles, hugs, embraces
Their beauty, their love, their kindness
All the sorrows, all the tears, and all the losses
But rage not against what could have been
For in this day, those are just bittersweet dreams
That didn’t find the strength to make it to the end

How do I greet the dawn that will not come today
I take wonder at the miracle that brought me here
I stand in marvel at the gift that made me appear
Knowing now is not the time to waste on any fear
Despite my aging body embracing its decay

It is time to push through, to embrace this day
For this is the time when seconds count eternity
And tomorrow’s dawn will shed no light
As I release my space for another to play
And carry forward a new role into our humanity
That it may grow and prosper in a new way
&lt;/pre&gt;
&lt;p&gt;My dad wrote this 6 days before he passed away.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Technical Debt is a Choice</title>
		<link href="https://blog.izs.me/2022/11/technical-debt-is-a-choice/"/>
		<updated>2022-11-21T10:56:00Z</updated>
		<id>https://blog.izs.me/2022/11/technical-debt-is-a-choice/</id>
		<content type="html">&lt;p&gt;(And often the &lt;em&gt;correct&lt;/em&gt; choice.)&lt;/p&gt;
&lt;p&gt;Original context:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/copyconstruct/status/1592527230978387968&quot;&gt;@copyconstruct&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;What engineers mean by “technical debt”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Poor code quality leading to a brittle codebase&lt;/li&gt;
&lt;li&gt;bad or little to no testing leading to bugs&lt;/li&gt;
&lt;li&gt;spaghetti code due to rapid feature bloat&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What CEOs hear: person making 6 figures failing to due their
job yet demanding even more resources&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/ElleArmageddon/status/1592885383477723137&quot;&gt;@ElleArmageddon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;IDK who needs to hear this, but:&lt;/p&gt;
&lt;p&gt;This is not what is meant by “technical debt.”&lt;/p&gt;
&lt;p&gt;Technical debt is what happens when engineering (and executive)
leadership chooses to prioritize net new work over maintaining
existing projects.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Elle&#39;s is a good response. (An earlier draft of this was posted
as a thread in response to this conversation. A lot of people
found it useful and had interesting comments, so I expanded on it
here.)&lt;/p&gt;
&lt;p&gt;Few topics show communication dysfunction in software
organizations as immediately as discussing Technical Debt.&lt;/p&gt;
&lt;p&gt;From the business side of things, it seems like engineers
constantly complain about being bad at their jobs, and don&#39;t
understand the urgency of shipping. From the engineering side,
it sucks trying to swim uphill in codebases that are full of
aging &amp;quot;temporary&amp;quot; cruft and legacy hacks which eventually make
forward motion impossible.&lt;/p&gt;
&lt;p&gt;The Deeply Wise thing for senior engineering types to say at this
point is that it&#39;s just challenging for &amp;quot;business people&amp;quot; to
comprehend the nature of software, and so we need to find better
ways to advocate for what we need. (Sometimes including &amp;quot;lie to
them&amp;quot;; say stuff will take longer than it really will, because
that&#39;s a &lt;em&gt;great&lt;/em&gt; way to build organizational cohesion.)&lt;/p&gt;
&lt;p&gt;But that&#39;s kinda bullshit. &amp;quot;Business people&amp;quot; are often &lt;em&gt;deeply&lt;/em&gt;
technical people capable of understanding a lot of really
complicated things, and make difficult decisions involving
competing interests all the time. (The good ones, anyway.) It&#39;s
worth considering that perhaps if you can&#39;t explain it well
enough, &lt;em&gt;maybe&lt;/em&gt; it&#39;s because you aren&#39;t understanding it
properly.&lt;/p&gt;
&lt;blockquote class=&quot;pullquote left&quot;&gt;&lt;p&gt;&quot;Technical debt&quot; is not a
universally bad thing, but a result of a set of chosen
trade-offs, which are optimal in a great many
situations.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;An important concept often missing from these conversations is
that &amp;quot;technical debt&amp;quot; is not a universally bad thing, but a
result of a set of chosen trade-offs, which are in fact the
optimal choice in a great many situations. It only becomes toxic
when not clearly chosen or wisely managed.&lt;/p&gt;
&lt;p&gt;&amp;quot;Technical debt&amp;quot; is what happens when you prioritize &amp;quot;try lots of
stuff&amp;quot; over &amp;quot;invest in elegance/maintainability&amp;quot;.&lt;/p&gt;
&lt;p&gt;In software development, elegance and maintainability are not
free! They have costs, that&#39;s why you have to &lt;em&gt;invest&lt;/em&gt; in them.
Time and attention are valuable limited resources. If you&#39;re not
sure what you should be building in the first place, why pay
extra for it?&lt;/p&gt;
&lt;p&gt;During experimentation phases of product design, the best thing
to do is quickly scaffold out a bunch of stuff, designing in such
a way that it&#39;s easy to replace or remove any given piece, but
not necessarily so that it&#39;s easy to maintain or extend (or even
understand). If you do throw something away, any investment in
maintainability there is wasted.&lt;/p&gt;
&lt;p&gt;The best approach is to only switch modes and build/improve
things &amp;quot;for real&amp;quot; once you have adequate product validation. Ie,
pay down the debt once you know you&#39;re keeping the thing you
bought with it. The longer you put off that work, the more the
interest stacks up on it.&lt;/p&gt;
&lt;p&gt;That investment in maintainability should be done such that the
result is easy to keep building throwaway experiments on top of.
That is, &lt;strong&gt;the &lt;em&gt;point&lt;/em&gt; is to take on a lot of technical debt&lt;/strong&gt;,
gain info as fast as possible, and only pay what you need to for
the products and features that matter.&lt;/p&gt;
&lt;p&gt;Doing this well requires keeping a clear view of which features
are still experimental, which of those have been validated and
should be reviewed/refactored for maintainability (or have been
invalidated and should be discarded), and which are out of that
phase and safe to build upon further.&lt;/p&gt;
&lt;h2 id=&quot;failure-modes&quot; tabindex=&quot;-1&quot;&gt;Failure Modes &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/11/technical-debt-is-a-choice/#failure-modes&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I don&#39;t feel like any of this is fundamentally very hard for
business folks to understand. Even the term itself is a very apt
finance metaphor!&lt;/p&gt;
&lt;p&gt;But too often engineers (and especially engineering managers) do
a poor job of planning and managing this debt, and thus a poor
job of communicating the tradeoffs involved, and as a result
business managers are poorly informed about their choices.&lt;/p&gt;
&lt;p&gt;One surefire way to steer a company towards poor use of technical
debt is to reward product management for &amp;quot;shipping&amp;quot; and reward
technical leaders for &amp;quot;impact&amp;quot;.&lt;/p&gt;
&lt;p&gt;Which a LOT of big companies do.&lt;/p&gt;
&lt;p&gt;This is made worse, ironically, when you also treat &amp;quot;technical
debt&amp;quot; as a horrible problem to be avoided at all costs.&lt;/p&gt;
&lt;p&gt;This creates an outsized incentive to oversell the value of
features that are not yet validated, and possibly also shut down
or remove valuable product features rather than invest in making
them cheap to maintain long term.&lt;/p&gt;
&lt;p&gt;So you get high level ICs hopping from one experiment to another
rather than optimizing the organization and architecture, PMs
driving work on features designed for the presenting at the CEO&#39;s
next conference talk rather than user value, and business leaders
wondering why ICs are so grumpy.&lt;/p&gt;
&lt;p&gt;Another failure mode (there are countless ways to fail!) is
overly investing in maintainability of features that should be
experimental (no tech debt! tech debt bad! no touch hot stove
again!) This is costly, and increases the likelihood that the
company stagnates and fails.&lt;/p&gt;
&lt;p&gt;Furthermore, ironically, the &amp;quot;no tech debt!&amp;quot; approach often means
hardening things for the long term that &lt;em&gt;should be built for
removal or replacement&lt;/em&gt;, which means that when they &lt;em&gt;do&lt;/em&gt; need to
be changed, it&#39;s harder to do so! You just increased your tech
debt interest rate!&lt;/p&gt;
&lt;p&gt;(Healthy software organizations are all alike. Each dysfunctional
software organization is dysfunctional in its own way.)&lt;/p&gt;
&lt;h2 id=&quot;it&#39;s-not-about-code-quality&quot; tabindex=&quot;-1&quot;&gt;It&#39;s Not About Code Quality &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/11/technical-debt-is-a-choice/#it&#39;s-not-about-code-quality&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The biggest problem with the take @ElleArmageddon was replying
to, is the idea that there exists some platonic ideal of &amp;quot;code
quality&amp;quot;. The sooner you realize that ALL code is temporary trash
destined for the garbage heap of history, the sooner you can
start making rational decisions.&lt;/p&gt;
&lt;blockquote class=&quot;pullquote right&quot;&gt;&lt;p&gt;There is no such thing as
&quot;high quality code&quot; or &quot;low quality code&quot;.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There is no such thing as &amp;quot;high quality code&amp;quot; or &amp;quot;low quality
code&amp;quot;. Erase that idea from your thinking. There is only
&amp;quot;software that makes tradeoffs that are profitable in a given
situation (and likely not in others)&amp;quot;.&lt;/p&gt;
&lt;p&gt;The choices that are optimal for &amp;quot;figure out what we should be
building by validating features with real world user behavior&amp;quot;
are &lt;em&gt;radically&lt;/em&gt; different from those for &amp;quot;provide and maintain
this feature efficiently at scale for the foreseeable future&amp;quot;.&lt;/p&gt;
&lt;p&gt;And, it should be said, I&#39;m making it seem like a binary by
focusing on two opposite ends of a spectrum here, but it&#39;s not
either-or. All code is temporary, all features are experimental.
The question is how long you want to bet the experiment will run.
And there are extremely strong arguments for making &lt;em&gt;some&lt;/em&gt;
investments in maintainability early on, because they are
counterintuitively cheaper to build up front than do without.
(For example, writing tests.)&lt;/p&gt;
&lt;h2 id=&quot;the-shape-of-a-solution&quot; tabindex=&quot;-1&quot;&gt;The Shape of a Solution &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/11/technical-debt-is-a-choice/#the-shape-of-a-solution&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This &amp;quot;no such thing as code quality&amp;quot; idea can be really
eye-opening. Instead of asking &amp;quot;is this good code?&amp;quot; we should be
asking &amp;quot;what tradeoffs is this code making? what situations make
this a good choice? what situations make it a poor choice? What
situation are we actually in?&amp;quot;&lt;/p&gt;
&lt;p&gt;The real &amp;quot;10X engineer&amp;quot; (if there is such a thing&lt;sup&gt;&lt;a href=&quot;https://blog.izs.me/2022/11/technical-debt-is-a-choice/#techdebt-fn-1&quot; id=&quot;techdebt-return-1&quot;&gt;[1]&lt;a&gt;&lt;/a&gt;&lt;/a&gt;&lt;/sup&gt;) is
the person who can perform this kind of analysis, and then
identify and plot a course towards a set of tradeoffs that are
optimized for the current context.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;That&lt;/em&gt; is the process we should aspire to as engineers. A clear
vision of the appropriate level of commitment and investment in
all the features of our product, so that we can make sound
decisions about what to rely upon, what to be ready to throw
away. When interfacing with the business, we can clearly
indicate which features have been hardened, which were slapped
together to test a hunch, and so on.&lt;/p&gt;
&lt;p&gt;We can start to ask product managers about which things we should
throw away, and which we should invest in hardening. We can even
preemptively set timelines on when these decisions will be made
and what data will drive them. Any product manager worth their
spreadsheets who would be thrilled to get this kind of visibility
and feedback.&lt;/p&gt;
&lt;p&gt;Instead of kvetching about how &amp;quot;The Business&amp;quot; doesn&#39;t understand
or appreciate the salt of the earth software engineers toiling
away in the code mines, or have to suffer wrongheaded questions
like &amp;quot;how long will it take to be production-ready?&amp;quot;, or fight
tooth and nail to justify making everything prohibitively
expensive, we can instead educate the entire organization about
the trade-offs available, make informed choices together, and get
direction that is actually useful in solving the problems before
us. (Assuming, of course, we take the time to understand them
ourselves.)&lt;/p&gt;
&lt;blockquote class=&quot;pullquote left&quot;&gt;&lt;p&gt;By the time you realize you
have a problem, it&amp;#39;s because you have a &lt;em&gt;big&lt;/em&gt;
problem.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Like most emergent software problems, of course, it&#39;s not so
simple. By the time you realize you have a problem, it&#39;s because
you have a &lt;em&gt;big&lt;/em&gt; problem. But digging out of a mess is only a
matter of taking small iterative steps towards improvement.&lt;/p&gt;
&lt;p&gt;Catalog the components of the system. Identify the parts that are
brittle and which of those should be hardened and which should be
thrown away. Conceive of the architecture you wish you&#39;d known
you&#39;d need, and start taking small steps towards it, &lt;em&gt;while still
doing experiments&lt;/em&gt;, but with open eyes and a clear criteria and
timeline for moving them to non-experimental status.&lt;/p&gt;
&lt;p&gt;Bottom line, technical debt is not &amp;quot;created&amp;quot; by engineers writing
bad code, or business leaders making impossible demands, and it&#39;s
not always a bad idea. It&#39;s &lt;em&gt;chosen&lt;/em&gt; by an organization&#39;s
collective priorities, and it is often the correct choice, as
long as it&#39;s acknowledged and managed responsibly.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://blog.izs.me/2022/11/technical-debt-is-a-choice/#techdebt-return-1&quot; id=&quot;techdebt-fn-1&quot; name=&quot;techdebt-fn-1&quot;&gt;[1]&lt;/a&gt;: there isn&#39;t. it&#39;s a myth.&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Trickster Spirit Quest</title>
		<link href="https://blog.izs.me/2022/08/trickster-spirit-quest/"/>
		<updated>2022-08-05T16:30:32Z</updated>
		<id>https://blog.izs.me/2022/08/trickster-spirit-quest/</id>
		<content type="html">&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049345792069636&quot;&gt;1474049345792069636&lt;/a&gt;&lt;/small&gt;
You run a marathon up a mountain. You have books. You&#39;re ready!&lt;/p&gt;
&lt;p&gt;When you get to the top, you are led by a trickster spirit
through every one of your hidden demons. The trickster spirit
makes you fall in love with it, then shits on your head.&lt;/p&gt;
&lt;p&gt;This happens every day, and all night.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049348132507649&quot;&gt;1474049348132507649&lt;/a&gt;&lt;/small&gt;
As the days continue, the spirit compels you to walk tightropes
over fields of stinging nettles. You fall. You are scarred. You
try again. The love increases, consuming you. So does the shit on
your head. You are more tired and more in love than you thought
possible.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049348996534274&quot;&gt;1474049348996534274&lt;/a&gt;&lt;/small&gt;
The trials increase, becoming less physical, but more intense.
There is no respite. You are forced to confront deeper and darker
demons, drawn from your own psyche and thrown in your face. They
lash out at you with whips of stinging thorns.&lt;/p&gt;
&lt;p&gt;When you hit back, they get stronger.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049349957025793&quot;&gt;1474049349957025793&lt;/a&gt;&lt;/small&gt;
The books were no help. You read them again. You weren&#39;t ready.
Every day, you&#39;re ready for yesterday, and surprised with new
assaults. You call for help, get messages that only vaguely apply
to what you&#39;re facing. You try everything. Some of it works for a
while, then doesn&#39;t.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049350871379968&quot;&gt;1474049350871379968&lt;/a&gt;&lt;/small&gt;
There are moments when the clouds part, and you and the spirit
commune and bond, and you fall in love all over again. These
drops sustain you, just barely. You can&#39;t leave. When you need
the light, it&#39;s nowhere to be found. The spirit seems so
delicate, and yet so strong.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049351752183817&quot;&gt;1474049351752183817&lt;/a&gt;&lt;/small&gt;
The trickster spirit wears your face now. It&#39;s like looking in a
mirror. It taunts you, &amp;quot;you can leave any time you want. In fact,
fuck off, I don&#39;t want you here. Go.&amp;quot;&lt;/p&gt;
&lt;p&gt;But you can&#39;t. (Or can you?) If you go, the spirit will turn
wicked and be released. (Maybe that&#39;s ok?)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049354813960195&quot;&gt;1474049354813960195&lt;/a&gt;&lt;/small&gt;
Time stretches and distorts. Have you been on this quest for
decades, or just a few days? It&#39;s so hard to tell. You&#39;re not the
same person who ran up that mountain. You&#39;re better, stronger,
wiser. But also scarred, beaten, and bruised. It&#39;s hard to
remember the life before.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049534703529984&quot;&gt;1474049534703529984&lt;/a&gt;&lt;/small&gt;
Finally, your quest completed, the trickster spirit has grown
into a force of benevolence and goodness. It loves you&lt;/p&gt;
&lt;p&gt;It leaves. You are crushed, but now have the strength to
withstand it. This was always the goal. Maybe the spirit will
visit you. Maybe not. That wasn&#39;t the point&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049536343437312&quot;&gt;1474049536343437312&lt;/a&gt;&lt;/small&gt;
You walk down the mountain, a weaker body than came up, but a
stronger heart, forged and purified and tempered with a form of
love that many never know. You didn&#39;t do everything right, and
feel the sting of every mistake. But you did your best, and
eventually accept it was enough&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049537278832643&quot;&gt;1474049537278832643&lt;/a&gt;&lt;/small&gt;
This is an awesome and noble quest. But what villain would FORCE
someone to go on this sort of ordeal? How could it be anything
but a living hell if it wasn&#39;t chosen and entered into willingly?
How could you fault anyone looking up at that mountain and going
&amp;quot;nah, I&#39;m good.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1474049538079920129&quot;&gt;1474049538079920129&lt;/a&gt;&lt;/small&gt;
All this is to say, I really think the only healthy reason to
have kids is a taste for absurd amounts of emotional intensity,
personal growth, and exhausting shit work. Some people want that,
many don&#39;t, and that&#39;s cool.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Principle of Most Restrictive Production</title>
		<link href="https://blog.izs.me/2022/04/principle-of-most-restrictive-production/"/>
		<updated>2022-04-13T04:24:37Z</updated>
		<id>https://blog.izs.me/2022/04/principle-of-most-restrictive-production/</id>
		<content type="html">&lt;p&gt;There are a lot of strong feelings about programming style.  It&#39;s
fashionable to either have a very strong opinion about any of them, or
shrug and wisely proclaim that it doesn&#39;t matter, as long as some &lt;em&gt;other&lt;/em&gt;
arbitrary requirement is met (consistency, test coverage, performance,
etc.)&lt;/p&gt;
&lt;p&gt;I prefer to try on these opinions like a jacket.  Wear them out for a day,
then take them off again in the evening.  Maybe you never pick it up again,
or maybe you keep putting it on until the elbows wear through.  But every
time it&#39;s a choice, not a part of you.&lt;/p&gt;
&lt;p&gt;One such garment that I find I come back to again and again is this, &amp;quot;The
Principle of Most Restrictive Production&amp;quot;, or simply &amp;quot;MRP&amp;quot; for short:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;When writing code, always choose the stylistic production which is
maximally restrictive.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It started as a fun little side game while writing &lt;code&gt;Arborist&lt;/code&gt;, but I sort
of fell in love with it.&lt;/p&gt;
&lt;p&gt;I will explain the rule itself in practical terms, the justification for
it, and the somewhat surprising and delightful effect it has when applied
rigorously.&lt;/p&gt;
&lt;h2 id=&quot;the-rule-in-practical-terms&quot; tabindex=&quot;-1&quot;&gt;The Rule in Practical Terms &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/04/principle-of-most-restrictive-production/#the-rule-in-practical-terms&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In a nutshell this means that you should always pick the way of writing a
bit of code which has the &lt;em&gt;least&lt;/em&gt; flexibility.&lt;/p&gt;
&lt;p&gt;So, for example, instead of this:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;distance&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; xSq &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; ySq &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; sumOfSq &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; xSq &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; ySq
  &lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; dist &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;sumOfSq&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; dist
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;according to &lt;abbr title=&quot;Most Restrictive Production
principle&quot;&gt;MRP&lt;/abbr&gt;, you would be better to write this:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;token function-variable function&quot;&gt;distance&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; y&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; Math&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;pow&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the first case, the &lt;code&gt;distance&lt;/code&gt; function &lt;em&gt;could&lt;/em&gt; be called with a &lt;code&gt;this&lt;/code&gt;
param, either by being assigned to a prototype or as an object member, or
instantiated with &lt;code&gt;new&lt;/code&gt;, or called with &lt;code&gt;Function.call&lt;/code&gt; or
&lt;code&gt;Function.apply&lt;/code&gt;, or any of the various &lt;code&gt;Reflect&lt;/code&gt; methods.&lt;/p&gt;
&lt;p&gt;As it uses &lt;code&gt;let&lt;/code&gt; instead of &lt;code&gt;const&lt;/code&gt; for its variables, any of them could be
changed anywhere else in the function.&lt;/p&gt;
&lt;p&gt;On the other hand, as an &lt;code&gt;=&amp;gt;&lt;/code&gt; function, without braces, it can &lt;em&gt;only&lt;/em&gt;
possibly return a single expression.&lt;/p&gt;
&lt;p&gt;Note also that &lt;code&gt;(x) =&amp;gt; someValue&lt;/code&gt; is ever so slightly less restrictive
than &lt;code&gt;x =&amp;gt; someValue&lt;/code&gt;, because the &lt;code&gt;()&lt;/code&gt; admit the presence of additional
parameters.&lt;/p&gt;
&lt;p&gt;Similarly, ternary conditionals are often suggested by MRP when
setting values. Instead of this:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// foo sticks around, could be used for anything&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// any of these {} blocks could have another line of code added.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; foo
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;one&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;two&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;three&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;basically none&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;infinity&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;some kind of fake number&#39;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;foo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We could make that more restrictive by removing the braces.  Then each &lt;code&gt;if&lt;/code&gt;
block could only have a single declaration:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// now each `if` block can only possibly have one line, not multiple&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// but still, we have to read each line to know what it&#39;s doing.&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;let&lt;/span&gt; foo
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;one&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;two&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;three&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;basically none&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;infinity&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
  foo &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;some kind of fake number&#39;&lt;/span&gt;

console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;foo&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But we would be even better off writing this:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// no possible way that it could be more than setting a single value,&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// which is used by console.log() and nothing else.&lt;/span&gt;
console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;one&#39;&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;two&#39;&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;three&#39;&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;basically none&#39;&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; x &lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;?&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;infinity&#39;&lt;/span&gt;
  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;some kind of fake number&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A common objection and sense of genuine revulsion that many experience upon
encountering code like this is that it is overly clever code-golfing,
obsessed with terseness for its own sake.&lt;/p&gt;
&lt;p&gt;And indeed, optimizing for the maximally restrictive production &lt;em&gt;does&lt;/em&gt;
often result in much shorter code, and sometimes using unusual language
features with a bit of a &amp;quot;line noise&amp;quot; flavor to them.&lt;/p&gt;
&lt;p&gt;But terseness is not the goal!  Restrictiveness is!  Sometimes MRP results
in code that is &lt;em&gt;longer&lt;/em&gt; than a less restrictive production.  For example,&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Testing a single variable against multiple possible values&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;foo&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;doSomethingWithFoo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;andThenDoSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;bar&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;doSomethingWithBar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;andThenDoSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;blarg&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;x is a blarg, nothing to do&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;invalid x (must be foo bar or blarg)&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;we can use a production that can &lt;em&gt;only&lt;/em&gt; test a single variable against
multiple possible values:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// we know from the start that only x is being tested&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;switch&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;foo&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomethingWithFoo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;andThenDoSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;bar&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;doSomethingWithBar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;andThenDoSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;case&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;blarg&#39;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;x is a blarg&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;break&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;invalid x (must be foo bar or blarg)&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case, the &lt;code&gt;switch&lt;/code&gt; is 15 lines, but the &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;else&lt;/code&gt; chain is 11.
However, the &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;else&lt;/code&gt; chain can switch mid-stream which variable it is
testing, or test something else entirely:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;foo&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;doSomethingWithFoo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;andThenDoSomethingElse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;bar&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;// ... more x tests ...&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;surprise&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;throw&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;not testing x anymore! surprise!! lol&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;x &lt;span class=&quot;token operator&quot;&gt;===&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;blarg&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  console&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&#39;x is a blarg&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And so, the &lt;code&gt;switch&lt;/code&gt; is longer, but still &lt;em&gt;more restrictive&lt;/em&gt;, which is the
point of the MRP rule.&lt;/p&gt;
&lt;h2 id=&quot;why-do-this&quot; tabindex=&quot;-1&quot;&gt;Why Do This? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/04/principle-of-most-restrictive-production/#why-do-this&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As we all know, code is read much more often than it is written.  The times
when a developer starts from a blank slate are few and far between,
compared to the time spent refactoring, bugfixing, integrating, and so on.&lt;/p&gt;
&lt;p&gt;So, why not just &lt;em&gt;be consistent&lt;/em&gt;?  Always use &lt;code&gt;if/else&lt;/code&gt; instead of
ternaries or switches.  Always use braces.  Always use &lt;code&gt;function&lt;/code&gt; instead
of arrows, always use &lt;code&gt;()&lt;/code&gt; even when only one parameter is present, and so
on.  Just pick a linter and get on with it!&lt;/p&gt;
&lt;p&gt;This rule can be summarized (somewhat in opposition to MRP) as &amp;quot;use the
fewest number of coding style productions necessary&amp;quot;.  If &lt;code&gt;if/else&lt;/code&gt; can do
the job, there&#39;s no need for ternaries and switches; if &lt;code&gt;function&lt;/code&gt; works,
then no need for &lt;code&gt;=&amp;gt;&lt;/code&gt;, and so on.&lt;/p&gt;
&lt;p&gt;This is a valid concern, and &amp;quot;consistently use fewer productions&amp;quot; is
definitely a thought jacket that I wear in some of my coding projects.&lt;/p&gt;
&lt;p&gt;However, on balance I would argue that the value of &amp;quot;consistency&amp;quot; touted
here is actually just a proxy for the value of &amp;quot;familiarity&amp;quot;.  Consistently
using a small number of syntax variations leads quickly to familiarity
(when you see the same thing repeatedly, you get familiar with it sooner).&lt;/p&gt;
&lt;p&gt;However, restricting the overall variety of code syntax is not the only way
to make code &amp;quot;familiar&amp;quot;, and I would argue, not the &lt;em&gt;optimal&lt;/em&gt; way of making
it understandable!&lt;/p&gt;
&lt;p&gt;After all, &amp;quot;familiarity&amp;quot; is only a value in reading code insofar as it is a
proxy for &lt;em&gt;understandability&lt;/em&gt;.  It is hard to understand unfamiliar code,
after all.&lt;/p&gt;
&lt;h3 id=&quot;mrp-results-in-more-understandable-code-(albeit-with-a-learning-curve)&quot; tabindex=&quot;-1&quot;&gt;MRP Results in More Understandable Code (albeit with a learning curve) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/04/principle-of-most-restrictive-production/#mrp-results-in-more-understandable-code-(albeit-with-a-learning-curve)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One thing I found rigorously applying an MRP coding style in a large
project was that, in fact, quite a lot of &amp;quot;consistency&amp;quot; emerges.&lt;/p&gt;
&lt;p&gt;There are, after all, countless ways to test a variable and take some
action as a result.  Even in languages like Python or Go, which aim for a
One True Way to do any given thing, there&#39;s still lots of flexibility and
variability in styles.&lt;/p&gt;
&lt;p&gt;But if your goal is &amp;quot;how can I write this in as restrictive a manner as
possible?&amp;quot;, you quickly find that some patterns emerge.  And given that
some of the resulting productions (especially, ternaries, regular
expressions, and arrow functions) &lt;em&gt;are&lt;/em&gt; quite line-noisy, there&#39;s a natural
incentive to keep them short and highly modularized.&lt;/p&gt;
&lt;p&gt;Variable declaration is usually to be avoided.  If you can do it with a
&lt;code&gt;const&lt;/code&gt;, don&#39;t use a &lt;code&gt;let&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The method behind the madness here is this: when reading code, you know
&lt;em&gt;simply based on the style production&lt;/em&gt;, that there are certain things it
cannot do.  And so, you can stop watching for them.&lt;/p&gt;
&lt;p&gt;If a variable is declared as a &lt;code&gt;const&lt;/code&gt;?  Cool.  I don&#39;t have to ever expect
that it can change.&lt;/p&gt;
&lt;p&gt;If a block is testing a variable&#39;s value in a &lt;code&gt;switch&lt;/code&gt;?  Great, no chance
anything else will be the conditional variable here.&lt;/p&gt;
&lt;p&gt;Ternary expression?  Fantastic, every one of these tests will just be
defining an expression for the assignment.&lt;/p&gt;
&lt;h2 id=&quot;delightful-and-surprising-side-effects-of-doing-this&quot; tabindex=&quot;-1&quot;&gt;Delightful and Surprising Side Effects of Doing This &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/04/principle-of-most-restrictive-production/#delightful-and-surprising-side-effects-of-doing-this&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The thing that I started to notice, after a few months of writing code in
this way, was that any time I saw a series of &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;else&lt;/code&gt; using braces, or
a &lt;code&gt;let&lt;/code&gt; instead of a &lt;code&gt;const&lt;/code&gt;, or a lambda defined with &lt;code&gt;function&lt;/code&gt; instead
of &lt;code&gt;=&amp;gt;&lt;/code&gt;, it stuck out like a sore thumb.&lt;/p&gt;
&lt;p&gt;When everything has been written in the most restrictive production,
any code that &lt;em&gt;isn&#39;t&lt;/em&gt; particularly restrictive is a red flag indicating
that some side effects or other shenanigans are sure to follow.&lt;/p&gt;
&lt;p&gt;Though it did get annoying to have to go through and turn a ternary into a
bunch of &lt;code&gt;if&lt;/code&gt; statements sometimes to add &lt;code&gt;console.log()&lt;/code&gt;s while debugging,
or wrap things in braces (only to then strip them off when I was done), in
the end, getting accustomed to seeing any of these loosey-goosey style
productions as warnings really helped with reading code (and thus, with
debugging and refactoring).&lt;/p&gt;
&lt;p&gt;I&#39;d &lt;em&gt;know&lt;/em&gt; that a &lt;code&gt;function () {}&lt;/code&gt; method was definitely going to end up on
an object at some point, because otherwise it would be &lt;code&gt;=&amp;gt;&lt;/code&gt; instead.  The
code style &lt;em&gt;itself&lt;/em&gt; becomes a sort of comment: &amp;quot;Watch out, there will
definitely be weird &lt;code&gt;this&lt;/code&gt; stuff here!&amp;quot;  (Really, it turns out there are
hardly any cases where you&#39;d use &lt;code&gt;function(){}&lt;/code&gt; in JavaScript when
following MRP; almost always it&#39;s either a &lt;code&gt;class&lt;/code&gt; method or an arrow
function.)&lt;/p&gt;
&lt;p&gt;The other interesting impact was that I found myself always thinking about
how to make my code more limited, more precise, more aggressively factored.
If you practice something enough, it starts to become second nature, and
feel strange when you&#39;re &lt;em&gt;not&lt;/em&gt; doing it.  I found this led to clearer
separations of concerns and an easier time reasoning about the overall
architecture.&lt;/p&gt;
&lt;h2 id=&quot;jackets-are-for-wearing-(but-also-for-taking-off)&quot; tabindex=&quot;-1&quot;&gt;Jackets Are for Wearing (but also for taking off) &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2022/04/principle-of-most-restrictive-production/#jackets-are-for-wearing-(but-also-for-taking-off)&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I believe that MRP is a good maxim to follow, but like &lt;abbr title=&quot;Don&#39;t
Repeat Yourself&quot;&gt;DRY&lt;/abbr&gt; or so many other sensible coding maxims, it can
be taken to extremes.  It is good training to try being rigorously dogmatic
about something, in a limited context, just to see the impact and tangibly
understand the effect it has.&lt;/p&gt;
&lt;p&gt;In fact, it&#39;s probably impossible to fully understand it &lt;em&gt;without&lt;/em&gt; actually
doing it.  A blog post like this is a bit like reading a story about
running.  No matter how well I describe it, you won&#39;t break a sweat.&lt;/p&gt;
&lt;p&gt;But just as DRY is a sensible maxim (even though there are plenty of times
where it is actually fine to repeat yourself, I promise), MRP has to be
balanced against all the other demands on a coder&#39;s limited time,
attention, social capital, and so on.&lt;/p&gt;
&lt;p&gt;I wouldn&#39;t recommend fighting with your coworkers over it.  But maybe the
next time you &lt;em&gt;do&lt;/em&gt; start a project in an empty editor, just some little
thing or an idea you had for a side project maybe no one will see, it&#39;s
worth giving it a try.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On growing up with a unique name that did not remain unique</title>
		<link href="https://blog.izs.me/2021/11/the-name-isaac/"/>
		<updated>2021-11-28T01:03:24Z</updated>
		<id>https://blog.izs.me/2021/11/the-name-isaac/</id>
		<content type="html">&lt;p&gt;&amp;quot;Isaac&amp;quot; used to be a very uncommon first name in the USA for anyone who
wasn&#39;t Jewish or Mormon, and my last name is a particular anglicized
spelling of a fairly uncommon German name. (I have distant cousins who came
over and got a different anglicized spelling.)&lt;/p&gt;
&lt;p&gt;I grew up never ever hearing my name unless someone was talking to me, so
never got desensitized to it in the way that someone named &amp;quot;Chris&amp;quot; or
&amp;quot;Matt&amp;quot; or &amp;quot;John&amp;quot; would have.&lt;/p&gt;
&lt;p&gt;Then when I was about 20, the 21st century happened, and every American
parent found out about this trendy cool first name that made them seem
smart and unique, and decided to give it to their kids. In the mid-2000s I
kept having this strange experience (as in, &lt;em&gt;yes, this happened irl several
times&lt;/em&gt;) of being in a supermarket, minding my business, selecting items and
such, and hearing someone from behind me yell in the most authoritative
tone you could imagine, &amp;quot;ISAAC! PUT THAT DOWN!&amp;quot; which always made me jump
and timidly put down whatever I had been holding and turn around to find
out why I, a whole grown ass man, was being scolded, but also knowing from
the tone and intonation that I was clearly in some kind of trouble. Like,
full on Bene Geserit &amp;quot;the voice&amp;quot;-style automatic unthinking instinct
reaction.&lt;/p&gt;
&lt;p&gt;Only to find some poor tired parent trying to maintain an unruly 5 year old
in the supermarket.&lt;/p&gt;
&lt;p&gt;Around the mid- to late-2010s, more and more Isaacs showed up online,
including &lt;strong&gt;THREE&lt;/strong&gt; with my spelling of my last name.&lt;/p&gt;
&lt;p&gt;Joke&#39;s on them. I&#39;ve been extremely online for decades now, and I freaking
dominate those search results. Good luck getting any google juice, suckers.
May as well just learn JavaScript and start tweeting.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Goodbye, GitHub!</title>
		<link href="https://blog.izs.me/2021/11/goodbye-github/"/>
		<updated>2021-11-19T22:29:46Z</updated>
		<id>https://blog.izs.me/2021/11/goodbye-github/</id>
		<content type="html">&lt;p&gt;I&#39;m leaving GitHub!&lt;/p&gt;
&lt;p&gt;After 12 years of working on npm, from &lt;a href=&quot;https://groups.google.com/g/nodejs/c/erDWyS4xPw8/m/E09EInE7NAwJ&quot;&gt;an
idea&lt;/a&gt; to a
&lt;a href=&quot;https://github.com/npm/cli/commit/4626dfa73&quot;&gt;side project&lt;/a&gt; to &lt;a href=&quot;https://venturebeat.com/2014/02/11/former-node-leader-takes-big-money-launches-node-startup/&quot;&gt;a
startup&lt;/a&gt;
and &lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/&quot;&gt;that startup&#39;s acquisition at
GitHub&lt;/a&gt;, I&#39;m moving on to
a new challenge.&lt;/p&gt;
&lt;p&gt;The last few years at GitHub have been great.  It&#39;s an awesome company
filled with great people, doing interesting things in the developer space,
and I&#39;m honored to have been a part of it for a while.  But it&#39;s also a
bigger company than I&#39;m accustomed to.  I&#39;m happiest and most productive
when I&#39;m hyperfocused and moving at the speed of a startup.&lt;/p&gt;
&lt;p&gt;A new opportunity came my way recently, and it&#39;s too enticing for me to
pass up.  I figure I&#39;ve only got one or two more of these left in me, so
it&#39;s time to move onto the next adventure.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/npm/cli&quot;&gt;npm CLI&lt;/a&gt; team is in a better place today
than it&#39;s ever been, and I have full confidence in their ability to
continue to shepherd it into the future.  The
&lt;a href=&quot;https://www.npmjs.com/&quot;&gt;registry&lt;/a&gt; is being managed by a professional team
focused on improving usability and security.  I&#39;ll still be involved as an
open source contributor, but they got this, and I&#39;m looking forward
to watching what they accomplish.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>My Favorite npm Commit</title>
		<link href="https://blog.izs.me/2021/10/my-favorite-npm-commit/"/>
		<updated>2021-10-05T21:42:49Z</updated>
		<id>https://blog.izs.me/2021/10/my-favorite-npm-commit/</id>
		<content type="html">&lt;p&gt;If you are a package manager, it&#39;s important to be able to perform a
&lt;a href=&quot;https://reproducible-builds.org/&quot;&gt;reproducible build&lt;/a&gt;.  That is, the same
contents should result in the same artifact, always.&lt;/p&gt;
&lt;p&gt;One of the biggest challenges to this is that files have timestamps
indicating when they were changed, created, modified, and so on.  While one
could argue that changing the &lt;code&gt;ctime&lt;/code&gt; or &lt;code&gt;mtime&lt;/code&gt; of a file is a &amp;quot;change&amp;quot; to
the contents, git (like most other source control systems) does &lt;em&gt;not&lt;/em&gt; view
it that way, gleefully letting the timestamps be whatever the system
decides they should be.&lt;/p&gt;
&lt;p&gt;So, if you are packing your artifacts in a format that tracks file times,
you have to filter those out.&lt;/p&gt;
&lt;p&gt;npm has used tar forever, and what we used to do is set the &lt;code&gt;mtime&lt;/code&gt; and
&lt;code&gt;ctime&lt;/code&gt; fields in the tar header to &lt;code&gt;0&lt;/code&gt;, ie, &lt;code&gt;1970-01-01T00:00:00Z&lt;/code&gt;, the
start of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Unix_time&quot;&gt;Unix Epoch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This was fine, for many years, but people
&lt;a href=&quot;https://github.com/npm/npm/issues/19933&quot;&gt;complained&lt;/a&gt; that this broke some
zip programs, which became increasingly relevant as Docker uses the zip
archive format.  The zip format does not support any file timestamps with
dates prior to 1980-01-01.&lt;/p&gt;
&lt;p&gt;So, instead of just setting all &lt;code&gt;mtime&lt;/code&gt; and &lt;code&gt;ctime&lt;/code&gt; values to &lt;code&gt;0&lt;/code&gt;, we
needed to pick a date after 1980-01-01.&lt;/p&gt;
&lt;p&gt;We considered using &lt;code&gt;1980-01-01T00:00:00Z&lt;/code&gt;.  But since setting file
timestamps to an arbitrary date in the past is, in a way, a form of time
travel, we &lt;a href=&quot;https://github.com/npm/cli/commit/58d2aa58d5f9c4db49f57a5f33952b3106778669&quot;&gt;did this
instead&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are, today, billions of files in many millions of artifacts on the
npm registry, each one bearing an homage to one of the greatest films of
all time.  Think of Marty and Doc Brown every time you look in your
&lt;code&gt;node_modules&lt;/code&gt; folder and wonder why all the file timestamps are from 1985.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Let It Go, but only slamming doors</title>
		<link href="https://blog.izs.me/2021/09/let-it-go-but-only-slamming-doors/"/>
		<updated>2021-09-27T17:05:24Z</updated>
		<id>https://blog.izs.me/2021/09/let-it-go-but-only-slamming-doors/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;
The door slams loud on the mountain tonight
Not a slammed door to be seen
A kingdom of slamming doors
And it looks like slamming doors
The door is slamming like this slamming door inside
Couldn&#39;t slam the door, heaven knows I&#39;ve tried
Don&#39;t let them in, just slam the door
Be the slammed door, you always slam the door
Slam doors, don&#39;t feel, just slam the door
Well, slam the door
Slam the door, slam the door
Can&#39;t slam the doors anymore
Slam the door, slam the door
Turn away and slam the door
I don&#39;t care if you slam the door
Let the doors slam on
The door never slammed on me anyway
It&#39;s funny how a slammed door makes every door get slammed
And the doors that once slammed on me can&#39;t slam the door at all
It&#39;s time to slam the doors I slam
To test the limits and slam doors
No right, no wrong, slam doors for me
I&#39;m free
Slam the door, slam the door
I slam doors with the wind and sky
Slam the door, slam the door
You&#39;ll never slam the door
Here I stand and slam the door
Let the door slam on
My doors are slamming through the air into the ground
My soul is spiraling in slammed doors all around
And one door slams just an icy blast
I&#39;m never closing doors, the door is in the past
Slam the door, slam the door
When I&#39;ll slam like the door of dawn
Slam the door, slam the door
That perfect door is slammed
I slam doors in the light of day
Let the door slam on
The door never slammed on me anyway
&lt;/pre&gt;
&lt;p&gt;&lt;small&gt;Credit: JNSM&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Do You Believe in God?</title>
		<link href="https://blog.izs.me/2021/09/do-you-believe-in-god/"/>
		<updated>2021-09-22T23:11:44Z</updated>
		<id>https://blog.izs.me/2021/09/do-you-believe-in-god/</id>
		<content type="html">&lt;p&gt;I recently was prompted to answer &amp;quot;Do you believe in god?&amp;quot;  I checked &amp;quot;no&amp;quot;,
of course, but that&#39;s not really a complete answer.&lt;/p&gt;
&lt;p&gt;If we expand the definition of &amp;quot;God&amp;quot; to be &amp;quot;all that exists and all the
laws governing all of existence&amp;quot;, as many do, then yeah, of course I
believe in that.  And that&#39;s usually what I mean when I say &amp;quot;God&amp;quot;.&lt;/p&gt;
&lt;p&gt;The only part of God that can hear your prayers is the part in your head
(and &lt;a href=&quot;https://blog.izs.me/2016/07/an-aspirational-meditation-in-12-stanzas/&quot;&gt;I do pray to that
part&lt;/a&gt;).  On average,
God is radiation and hard vacuum, and to say &amp;quot;God doesn&#39;t care about us&amp;quot; is
putting it far too lightly.&lt;/p&gt;
&lt;p&gt;We live here in the infinitesimal sliver of God that is alive, in this
brief and fleeting moment after Its inception, as It shifts inevitably into
the final divine form: black holes and undifferentiated heat radiation.&lt;/p&gt;
&lt;p&gt;What is, is divine.  It&#39;s on &lt;em&gt;us&lt;/em&gt; to make it good.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Electrolemon&#39;s Sept 21 Videos</title>
		<link href="https://blog.izs.me/2021/09/september-21/"/>
		<updated>2021-09-21T00:00:00Z</updated>
		<id>https://blog.izs.me/2021/09/september-21/</id>
		<content type="html">&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/kPwG6L73-VU?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/16&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/fPpUYXZb2AA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/17&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/CG7YHFT4hjw?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/18&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/_hpU6UEq8hA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/19&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/_zzEDrYTkkg?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/20&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/Qfi9JpgMc2U?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;9/21/21&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;The end of an era.  I am sad that there won&#39;t be a Sept 21 video next year,
but also so very thankful that Demi Adejuyigbe created these for the last 6
years.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Time Moves Slow (pitch shifted, 1 hour)</title>
		<link href="https://blog.izs.me/2021/09/time-moves-slow/"/>
		<updated>2021-09-06T17:02:34Z</updated>
		<id>https://blog.izs.me/2021/09/time-moves-slow/</id>
		<content type="html">&lt;p&gt;It&#39;s kind of ironic that this song about time moving slowly went so viral
once it was bumped up to double speed by Yano 3000.&lt;/p&gt;
&lt;p&gt;This song is so good.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;I found you at the window again
Looking out, watching the leaves falling in
And it was something like a dream
Wow, so perfect, couldn&#39;t talk to me

Time moves slow
When you&#39;re all alone
And the time moves slow
When you&#39;re out on your own
And the time moves slow
When you&#39;re missing a friend
And the time moves slow
When you came to the end

Running away is easy
It&#39;s the leaving that&#39;s hard
Running away is easy
Running away is easy
It&#39;s the living that&#39;s hard
And loving you was easy
It was you leaving that scarred

But what was I to do?
Just couldn&#39;t help myself falling in love with you
And what could I say?
Oh, if I had another chance
To make you stay
&#39;Cause when you ran away
I knew just what you were thinking that day
You just didn&#39;t love me like I do
Like I love you
The sad thing is we&#39;re better off this way

Time moves slow
When you can&#39;t have a thing
Time moves slow
When you&#39;re lost in the dream
Time moves slow
When you wait by the phone
And the time moves slow
When you&#39;re all alone

To run away is easy
It&#39;s the leaving that&#39;s hard
Running away is easy

Running away is easy
It&#39;s the living that&#39;s hard
And loving you was easy
It was you leaving that scarred

&#39;Cause when you&#39;re so alone
Time moves slow
When you&#39;re so alone
Time moves slow
When you&#39;re so alone
Time moves slow

Time moves slow
&lt;/code&gt;&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>fun proof about infinities</title>
		<link href="https://blog.izs.me/2021/09/infinity-proof/"/>
		<updated>2021-09-02T21:31:23Z</updated>
		<id>https://blog.izs.me/2021/09/infinity-proof/</id>
		<content type="html">&lt;p&gt;There are more real numbers between any two real numbers than there are
natural numbers.&lt;/p&gt;
&lt;p&gt;For any pair of real numbers &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;, assign each natural number to a
real number equal to &lt;code&gt;x + (y - x) * p&lt;/code&gt;, where &lt;code&gt;p&lt;/code&gt; is formed by
concatenating the natural numbers from the assignment index to infinity.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 1: x + (y-x) * 0.123456789101112131415161718192021...
 2: x + (y-x) * 0.2345678910111213141516171819202122...
 3: x + (y-x) * 0.345678910111213141516171819202122...
 4: x + (y-x) * 0.4567891011121314151617181920212223...
 5: x + (y-x) * 0.567891011121314151617181920212223...
 6: x + (y-x) * 0.6789101112131415161718192021222324...
 7: x + (y-x) * 0.789101112131415161718192021222324...
 8: x + (y-x) * 0.8910111213141516171819202122232425...
 9: x + (y-x) * 0.910111213141516171819202122232425...
10: x + (y-x) * 0.1011121314151617181920212223242526...
11: x + (y-x) * 0.1112131415161718192021222324252627...
12: x + (y-x) * 0.1213141516171819202122232425262728...
13: x + (y-x) * 0.1314151617181920212223242526272829...
14: x + (y-x) * 0.1415161718192021222324252627282930...
15: x + (y-x) * 0.1516171819202122232425262728293031...
16: x + (y-x) * 0.1617181920212223242526272829303132...
17: x + (y-x) * 0.1718192021222324252627282930313233...
18: x + (y-x) * 0.1819202122232425262728293031323334...
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Since &lt;code&gt;p&lt;/code&gt; is always less than &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;x + (y - x) * p&lt;/code&gt; will always be between
&lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;.  Since &lt;code&gt;p&lt;/code&gt; is never &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;x + (y - x) * p&lt;/code&gt; will never
be equal to either &lt;code&gt;x&lt;/code&gt; or &lt;code&gt;y&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now, take first digit of &lt;code&gt;p&lt;/code&gt; from the first number, second digit of the
second, and so on&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 1: x + (y-x) * 0. 1 23456789101112131415161718192021...
 2: x + (y-x) * 0.2 3 45678910111213141516171819202122...
 3: x + (y-x) * 0.34 5 678910111213141516171819202122...
 4: x + (y-x) * 0.456 7 891011121314151617181920212223...
 5: x + (y-x) * 0.5678 9 1011121314151617181920212223...
 6: x + (y-x) * 0.67891 0 1112131415161718192021222324...
 7: x + (y-x) * 0.789101 1 12131415161718192021222324...
 8: x + (y-x) * 0.8910111 2 13141516171819202122232425...
 9: x + (y-x) * 0.91011121 3 141516171819202122232425...
10: x + (y-x) * 0.101112131 4 151617181920212223242526...
11: x + (y-x) * 0.1112131415 1 61718192021222324252627...
12: x + (y-x) * 0.12131415161 7 1819202122232425262728...
13: x + (y-x) * 0.131415161718 1 920212223242526272829...
14: x + (y-x) * 0.1415161718192 0 21222324252627282930...
15: x + (y-x) * 0.15161718192021 2 2232425262728293031...
16: x + (y-x) * 0.161718192021222 3 242526272829303132...
17: x + (y-x) * 0.1718192021222324 2 52627282930313233...
18: x + (y-x) * 0.18192021222324252 6 2728293031323334...
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This gives you &lt;code&gt;0.135790123417102326...&lt;/code&gt;, which we&#39;ll call &lt;code&gt;r&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Now we create a second number &lt;code&gt;q&lt;/code&gt; from that one.  Any digits that are less
than &lt;code&gt;9&lt;/code&gt;, we add &lt;code&gt;1&lt;/code&gt; to them.  Any &lt;code&gt;9&lt;/code&gt;, we turn into a &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;This gives you &lt;code&gt;0.246801234518213437...&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The number &lt;code&gt;x + (y-x) * q&lt;/code&gt; will be a number between &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;, which does
not appear in the list.&lt;/p&gt;
&lt;p&gt;The only way that it &lt;em&gt;could&lt;/em&gt; appear on the list is if &lt;code&gt;x + (y-x) * p&lt;/code&gt; was
equal to &lt;code&gt;x + (y-x) * q&lt;/code&gt;, for some value of &lt;code&gt;p&lt;/code&gt;.  Which means, that &lt;code&gt;p&lt;/code&gt;
would have to be equal to &lt;code&gt;q&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;But &lt;code&gt;q&lt;/code&gt; can&#39;t be the first &lt;code&gt;p&lt;/code&gt;, because the first digit is different.  It
can&#39;t be the second &lt;code&gt;p&lt;/code&gt;, because the second digit is different.  And so on.&lt;/p&gt;
&lt;p&gt;Because each of the numbers in our mapping have an infinite decimal place,
there is an infinite number of ways we could form a &lt;code&gt;r&lt;/code&gt; and &lt;code&gt;q&lt;/code&gt; and end up
with a number not on the list.  For example, we could form &lt;code&gt;r&lt;/code&gt; by starting
with a 0, and then taking the second digit of the first number in the
mapping, the third digit of the second number in the mapping, and so on.&lt;/p&gt;
&lt;p&gt;And there are also an infinite number of strategies we could use to
transform &lt;code&gt;r&lt;/code&gt; into &lt;code&gt;q&lt;/code&gt;.  We could do that same rotation strategy on the
first number, then the inverse rotation on the second (ie, subtract 1 from
each digit that isn&#39;t a 0, and replace any 0 with a 9), then the original
rotation on the third, and so on.  Or we could rotate by 2 numbers instead
of 1 (so 0-7 are incremented by 2, and 8-9 are decremented by 8).&lt;/p&gt;
&lt;p&gt;Or we could say that any &lt;code&gt;0&lt;/code&gt; is turned into a &lt;code&gt;1&lt;/code&gt;, and any non-&lt;code&gt;0&lt;/code&gt; digit is
turned into a &lt;code&gt;0&lt;/code&gt;.  Or we could do the &lt;code&gt;0&lt;/code&gt;/&lt;code&gt;1&lt;/code&gt; transform a million times,
and then switch to a rotation transform.&lt;/p&gt;
&lt;p&gt;Each such strategy will produce a &lt;code&gt;q&lt;/code&gt; to generate a number between &lt;code&gt;x&lt;/code&gt; and
&lt;code&gt;y&lt;/code&gt; which does not correspond to any natural number in the one to one
mapping.&lt;/p&gt;
&lt;p&gt;Therefore, there are infinitely more numbers in any range of real numbers
than there are natural numbers.&lt;/p&gt;
&lt;p&gt;This is basically Cantor&#39;s proof.&lt;/p&gt;
&lt;p&gt;But in fact, we don&#39;t even have to use the diagonal.  The coefficients in
our mapping all are greater than &lt;code&gt;0.1&lt;/code&gt;.  The smallest will be those
corresponding to increasingly large powers of 10, but they&#39;ll never get all
the way to &lt;code&gt;0.1&lt;/code&gt;, because no natural number is a &lt;code&gt;1&lt;/code&gt; followed by an
infinite number of zeroes.  So &lt;code&gt;x + (y-x) * 0.1&lt;/code&gt; also does not appear on
the list.  Neither does any number with a coefficient less than &lt;code&gt;0.1&lt;/code&gt;, of
which there are infinitely many more than there are natural numbers, as
just proven.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>web tech breakfast club</title>
		<link href="https://blog.izs.me/2021/09/web-tech-breakfast-club/"/>
		<updated>2021-09-01T15:53:30Z</updated>
		<id>https://blog.izs.me/2021/09/web-tech-breakfast-club/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Please get vaccinated</title>
		<link href="https://blog.izs.me/2021/09/please-get-vaccinated/"/>
		<updated>2021-09-01T00:00:00Z</updated>
		<id>https://blog.izs.me/2021/09/please-get-vaccinated/</id>
		<content type="html">&lt;p&gt;Please get vaccinated.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A twitter thread about Flood, by They Might Be Giants</title>
		<link href="https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/"/>
		<updated>2021-01-13T23:20:04Z</updated>
		<id>https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/</id>
		<content type="html">&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736435480636465152&quot;&gt;736435480636465152&lt;/a&gt;&lt;/small&gt;
Someday, I want to sit down and write the 100 page volume of gushing critical analysis that @tmbg’s album &amp;quot;Flood&amp;quot; deserves.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736435849403867137&quot;&gt;736435849403867137&lt;/a&gt;&lt;/small&gt;
In every song, there is always Yet Another Level: in lyrical poetry, in production, in musical arrangement, and in thematic sarcasm.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736436440205123585&quot;&gt;736436440205123585&lt;/a&gt;&lt;/small&gt;
It’s tempting on first listen to hear it as a pleasantly upbeat twee pop album&lt;/p&gt;
&lt;p&gt;But that hides a profoundly deep darkness running throughout&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736436782082838528&quot;&gt;736436782082838528&lt;/a&gt;&lt;/small&gt;
A darkness that both thumbs its nose at surface-focused social progress, while nihilistically accepting that life is essentially suffering.&lt;/p&gt;
&lt;h3 id=&quot;theme-from-flood&quot; tabindex=&quot;-1&quot;&gt;theme from flood &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#theme-from-flood&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/pJ9QQdH3IiQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Theme from Flood&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736437158391603201&quot;&gt;736437158391603201&lt;/a&gt;&lt;/small&gt;
Starting with the title and intro: &amp;quot;Why is the world in love again? Why are we marching hand in hand? Why are the ocean levels rising up?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736437651109085185&quot;&gt;736437651109085185&lt;/a&gt;&lt;/small&gt;
As if to say, presciently: &amp;quot;No, love is not all you need. Humanity will die in the flood it has doomed itself to in its short-sightedness.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736438083046932483&quot;&gt;736438083046932483&lt;/a&gt;&lt;/small&gt;
&amp;quot;Theme from Flood&amp;quot; also sets the standard for the rest of the album musically.
This will not be a jingle over 3 chords.
This is orchestral.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736438292103630849&quot;&gt;736438292103630849&lt;/a&gt;&lt;/small&gt;
Any of the vocal parts in &amp;quot;Theme from Flood&amp;quot;, taken on their own, is a complex and interesting melody, and they weave together perfectly.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736438555514281984&quot;&gt;736438555514281984&lt;/a&gt;&lt;/small&gt;
Remember also, this was 1990. Music was still delivered on records and tapes that were generally always played start to finish.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736439208126992388&quot;&gt;736439208126992388&lt;/a&gt;&lt;/small&gt;
The year was not inconsequential. @tmbg break the fourth wall, declaring this work as emphatically NOT timeless:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736439396346429440&quot;&gt;736439396346429440&lt;/a&gt;&lt;/small&gt;
&amp;quot;It’s a brand new record, for 1990. They Might Be Giants’ brand new album, Flood.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736439735225176064&quot;&gt;736439735225176064&lt;/a&gt;&lt;/small&gt;
This is a flag planted in the ground of history, as if John and John wanted to be able to look back and say &amp;quot;We told you so.&amp;quot;&lt;/p&gt;
&lt;h3 id=&quot;birdhouse&quot; tabindex=&quot;-1&quot;&gt;birdhouse &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#birdhouse&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/NhjSzjoU7OQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;BIRDHOUSE IN YOUR SOUL - THEY MIGHT BE GIANTS ( Complete Original Video )&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736440751022739456&quot;&gt;736440751022739456&lt;/a&gt;&lt;/small&gt;
As the majesty and grandeur of that final choral crescendo fades out, we meet the contradictory opening lines of Birdhouse in Your Soul:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736440865279737856&quot;&gt;736440865279737856&lt;/a&gt;&lt;/small&gt;
&amp;quot;I’m your only friend, I’m not your only friend, but I’m a little glowing friend, but really, I’m not actually your friend, but I am&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736441344718045184&quot;&gt;736441344718045184&lt;/a&gt;&lt;/small&gt;
The self-contradiction is characteristically cute wordsmithery, but also, it balances Theme’s crescendo with the deep insecurity of parenthood&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736441587194986496&quot;&gt;736441587194986496&lt;/a&gt;&lt;/small&gt;
After the overwhelming chorus’s exit, John’s voice seems especially unsure of itself, tiptoeing into the song both musically and lyrically.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736441845786382337&quot;&gt;736441845786382337&lt;/a&gt;&lt;/small&gt;
The parent says to his child, &amp;quot;I am your friend&amp;quot;, but also, &amp;quot;I must somehow be both less and more than your friend.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736441952187482113&quot;&gt;736441952187482113&lt;/a&gt;&lt;/small&gt;
The &amp;quot;little glowing friend&amp;quot; introduces the visual metaphor for this insecurity: a nightlight&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736788849192378368&quot;&gt;736788849192378368&lt;/a&gt;&lt;/small&gt;
Via the nightlight metaphor, &amp;quot;Birdhouse&amp;quot; tackles a personal confrontation with mortality, love, and knowledge of one’s own insufficiency.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736789089739890688&quot;&gt;736789089739890688&lt;/a&gt;&lt;/small&gt;
The chorus is ambiguous:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736789275816005632&quot;&gt;736789275816005632&lt;/a&gt;&lt;/small&gt;
Reading 1, introducing the watcher: &amp;quot;Blue canary in the outlet by the light switch, who watches over you.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736789429231046657&quot;&gt;736789429231046657&lt;/a&gt;&lt;/small&gt;
Reading 2, &lt;em&gt;addressing&lt;/em&gt; the canary: &amp;quot;Blue canary in the outlet by the light switch, who watches over you?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736789727534141442&quot;&gt;736789727534141442&lt;/a&gt;&lt;/small&gt;
A nightlight has a single job: to provide comfort to a sleeping child. But it is ultimately powerless to protect from the darkness of life.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736789995411804160&quot;&gt;736789995411804160&lt;/a&gt;&lt;/small&gt;
This parent nightlight knows that it is not going to stick around. It asks the child to &amp;quot;make a little birdhouse in your soul&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736790385180053504&quot;&gt;736790385180053504&lt;/a&gt;&lt;/small&gt;
As parents, we work tirelessly to instill our values and thus, a part of our SELF into our children.&lt;br /&gt;
This is the only immortality available.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736790645877018624&quot;&gt;736790645877018624&lt;/a&gt;&lt;/small&gt;
But the work is definitely not &amp;quot;tireless&amp;quot;, even though, &amp;quot;like the Longines Symphonette, it doesn’t rest&amp;quot;. It is draining, infinite.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736790942552723456&quot;&gt;736790942552723456&lt;/a&gt;&lt;/small&gt;
This infinite story is the story of all humanity, stretching back into prehistory and forward into the flood that threatens to end us.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736791152964165632&quot;&gt;736791152964165632&lt;/a&gt;&lt;/small&gt;
Each generation has one job, to ensure that some portion of the next generation does not crash upon the rocks of misfortune, and carries on.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736791467012685825&quot;&gt;736791467012685825&lt;/a&gt;&lt;/small&gt;
The second verse drives this point home more clearly.&lt;br /&gt;
Across from the nightlight is a picture of a lighthouse.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736791703013597184&quot;&gt;736791703013597184&lt;/a&gt;&lt;/small&gt;
Looking back at our primitive ancestry, we see countless cases where those greater than ourselves overcame impossible challenges.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736792270645563392&quot;&gt;736792270645563392&lt;/a&gt;&lt;/small&gt;
Again, here, we see that in TMBG’s lexicon, the sea is tied to death, uncertainty, and the unknown.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736792329252544514&quot;&gt;736792329252544514&lt;/a&gt;&lt;/small&gt;
(See also: &amp;quot;I’ll Sink Manhattan&amp;quot;, &amp;quot;Piece of Dirt&amp;quot;, &amp;quot;My Man&amp;quot;, and others)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736792824574709761&quot;&gt;736792824574709761&lt;/a&gt;&lt;/small&gt;
Were our filibustering blue canary given the respectable job of a lighthouse, Jason and the Argonauts would die gruesomely.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736793216276520960&quot;&gt;736793216276520960&lt;/a&gt;&lt;/small&gt;
Nevertheless, our inability to do the impossible tasks of history does not dissuade us from doing what we can in the here and now.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736793508879568896&quot;&gt;736793508879568896&lt;/a&gt;&lt;/small&gt;
The wish of a loving parent for their child: that no matter where they go in life, the echo of loving kindness will stay with them.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736793567843123201&quot;&gt;736793567843123201&lt;/a&gt;&lt;/small&gt;
Like guardian angel, the bluebird of friendliness is always there.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736794195239665664&quot;&gt;736794195239665664&lt;/a&gt;&lt;/small&gt;
At this point, the lyrical bulk of the song delivered, one might expect a repetitive outro. Birdhouse ends this way, but with a twist.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736794628549017600&quot;&gt;736794628549017600&lt;/a&gt;&lt;/small&gt;
The repetition is an increasingly layered fugue, where we first glimpse the depth of the chorus that was lying in wait all along.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736794999593934848&quot;&gt;736794999593934848&lt;/a&gt;&lt;/small&gt;
Anyone who’s tried to sing along to this song knows that it is impossible to do with a single voice, for that reason.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736796672366235648&quot;&gt;736796672366235648&lt;/a&gt;&lt;/small&gt;
None of the instruments are just banging away on chords. Everything is playing a different (compatible) melody.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736796815450771456&quot;&gt;736796815450771456&lt;/a&gt;&lt;/small&gt;
It’s also interesting to note the lack of a fade-out. Birdhouse ends on its own terms. It ends on purpose.&lt;/p&gt;
&lt;h3 id=&quot;lucky-ball-and-chain&quot; tabindex=&quot;-1&quot;&gt;lucky ball and chain &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#lucky-ball-and-chain&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/z8au4eCVPis?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Lucky Ball and Chain&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736797370017517568&quot;&gt;736797370017517568&lt;/a&gt;&lt;/small&gt;
This is primarily a country western genre-piece, but fits nicely with Flood’s theme of being an upbeat telling of a sad story.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736805136324911105&quot;&gt;736805136324911105&lt;/a&gt;&lt;/small&gt;
The story of Lucky Ball and Chain is not complicated. After the lyrical gymnastics of Birdhouse, it provides some needed rest.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736805302184480768&quot;&gt;736805302184480768&lt;/a&gt;&lt;/small&gt;
However, that’s not to say that it’s entirely straightforward. The complexity is shown, rather than told.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736806770669060096&quot;&gt;736806770669060096&lt;/a&gt;&lt;/small&gt;
The narrator first playfully refers to his departed ex-lover as a lucky ball and chain. He paints himself as confident, strong, happy.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736806965930643456&quot;&gt;736806965930643456&lt;/a&gt;&lt;/small&gt;
Yes, he lost her, but well, Whaddaya gonna do? Her loss. She threw away her baby doll, but I held onto my pride.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736807196252508160&quot;&gt;736807196252508160&lt;/a&gt;&lt;/small&gt;
The facade breaks down before it’s even fully completed. I was young and foolish then, but I’m old and foolish now.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736807468873846784&quot;&gt;736807468873846784&lt;/a&gt;&lt;/small&gt;
This poignantly drives home an important point. Enduring hardship does not guarantee learning or wisdom. Loss is sometimes just loss.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736807753214103552&quot;&gt;736807753214103552&lt;/a&gt;&lt;/small&gt;
Having told a story that at least partly cast himself as the strong one, the narrator leans in and gets real.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736808007820972032&quot;&gt;736808007820972032&lt;/a&gt;&lt;/small&gt;
&amp;quot;Confidentially, she never called me baby doll.&lt;br /&gt;
Confidentially, I never had much pride.&amp;quot;&lt;/p&gt;
&lt;p&gt;Confidentially, I lack confidence.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736808373299990528&quot;&gt;736808373299990528&lt;/a&gt;&lt;/small&gt;
As if tearing down the facade of self-image was not enough, he digs even deeper, and we see the first reference to parenthood and family.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736808588610408448&quot;&gt;736808588610408448&lt;/a&gt;&lt;/small&gt;
&amp;quot;Now I rock a bar-stool&amp;quot; (instead of rocking a baby)&lt;br /&gt;
&amp;quot;and I drink for two&amp;quot;, a reference to a pregnant mother &amp;quot;eating for two&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736808749302583297&quot;&gt;736808749302583297&lt;/a&gt;&lt;/small&gt;
The time-bomb in his mind, then, is the realization that he didn’t just lose his lover.&lt;/p&gt;
&lt;p&gt;He lost his child. His future.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736809654953508864&quot;&gt;736809654953508864&lt;/a&gt;&lt;/small&gt;
By referring to her as a ball and chain, mentioning her height, how she is sick of his rattling on, an interesting efficiency is achieved.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736809922860453888&quot;&gt;736809922860453888&lt;/a&gt;&lt;/small&gt;
This stanza stands in for and references all the ways that people characterize former partners as impossible to please, difficult, etc.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736810050254077953&quot;&gt;736810050254077953&lt;/a&gt;&lt;/small&gt;
But, all the same, 4 years later, he’s sitting in a bar telling some stranger this story.&lt;/p&gt;
&lt;p&gt;So.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736810289505570816&quot;&gt;736810289505570816&lt;/a&gt;&lt;/small&gt;
And we’re back to the self-preserving fiction. &amp;quot;She walked away from a happy man, I thought I was so cool&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736810821653651458&quot;&gt;736810821653651458&lt;/a&gt;&lt;/small&gt;
The next line introduces the first reference to &amp;quot;whistling&amp;quot; in the album. (More on that later, with &amp;quot;Whistling in the Dark&amp;quot;)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736811234922663938&quot;&gt;736811234922663938&lt;/a&gt;&lt;/small&gt;
It’s also an explicit melodic and lyrical call out to Darlene Love’s &amp;quot;Today I Met the Boy I’m Gonna Marry&amp;quot;&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/V4XbzYc4E7M?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Darlene Love   Today I Met The Boy I&#39;m Going To Marry&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736812047866810368&quot;&gt;736812047866810368&lt;/a&gt;&lt;/small&gt;
&amp;quot;He smiled at me and then the music started playing&lt;br /&gt;
&#39;Here comes the bride&#39;&lt;br /&gt;
as he walked through the door&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736812676215537665&quot;&gt;736812676215537665&lt;/a&gt;&lt;/small&gt;
Imagining that scene, in the context of a relationship that started like Darlene Love sings about, the heartbreak deepens even further.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736813082270273536&quot;&gt;736813082270273536&lt;/a&gt;&lt;/small&gt;
Seeing this scene in our minds, we get there perhaps one step ahead of the narrator: &amp;quot;What a an asshole&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736813331927814144&quot;&gt;736813331927814144&lt;/a&gt;&lt;/small&gt;
But the narrator is us, and we are taken on this journey with him as he switches from remembering his denial to facing painful acceptance.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736813542007934979&quot;&gt;736813542007934979&lt;/a&gt;&lt;/small&gt;
&amp;quot;I could shake my tiny fists, and swear I wasn’t wrong, but what’s the sense in arguing when you’re all alone?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736814260567711744&quot;&gt;736814260567711744&lt;/a&gt;&lt;/small&gt;
She took the fight away. Now all that’s left is his loss.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736814594081972224&quot;&gt;736814594081972224&lt;/a&gt;&lt;/small&gt;
Acceptance reached, the second &amp;quot;confidentially&amp;quot; verse dips back into depression. The facade of self-image is fully gone now.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736814784788594688&quot;&gt;736814784788594688&lt;/a&gt;&lt;/small&gt;
Confidentially, she was amazing. Even though we had nothing, I had her love, and that was perfect.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736815255741857794&quot;&gt;736815255741857794&lt;/a&gt;&lt;/small&gt;
The &amp;quot;railroad’ imagery serves partly to help establish the genre of a country-western piece, but it also highlights a recurrent theme: fate.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736815514865926144&quot;&gt;736815514865926144&lt;/a&gt;&lt;/small&gt;
As stages of grief go, depression can be hard to stay in. The narrator bargains for some semblance of avoiding blame by appealing to fate.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736815702275850240&quot;&gt;736815702275850240&lt;/a&gt;&lt;/small&gt;
He was fated to meet her, fated to fall in love, fated to lose her. A powerless (and thus blameless) creature in the universe’s hands.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736815740699836417&quot;&gt;736815740699836417&lt;/a&gt;&lt;/small&gt;
He is Person Man.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736816979915378692&quot;&gt;736816979915378692&lt;/a&gt;&lt;/small&gt;
Musically, though this song is shooting for a country-western vibe (and achieves it) the production is ridiculously layered for country.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736817106344255488&quot;&gt;736817106344255488&lt;/a&gt;&lt;/small&gt;
Listen to it with headphones for optimum effect, and pay attention to the background vocals.&lt;br /&gt;
They move around.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736817475816284162&quot;&gt;736817475816284162&lt;/a&gt;&lt;/small&gt;
It’s as if 10 different melodies are all playing at once, and a poppy up-tempo western song just springs forth from the melee.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736817955468513281&quot;&gt;736817955468513281&lt;/a&gt;&lt;/small&gt;
When everything drops out for the chord-hits and a cappella start of &amp;quot;Confidentially&amp;quot;, the sense of leaning in for a secret is palpable&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736818951959646210&quot;&gt;736818951959646210&lt;/a&gt;&lt;/small&gt;
This song does end with a fade-out, but dropping parts one at a time so that the skeleton of the song is revealed on the way out&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736820808421539840&quot;&gt;736820808421539840&lt;/a&gt;&lt;/small&gt;
Right before disappearing, you realize how much of the song was being carried by synth, horn, and accordion.&lt;/p&gt;
&lt;h3 id=&quot;istanbul&quot; tabindex=&quot;-1&quot;&gt;istanbul &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#istanbul&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736821584007036928&quot;&gt;736821584007036928&lt;/a&gt;&lt;/small&gt;
After a pretty slow fade-out, we sit expectantly as the next song fades IN, an extremely unusual move in 1990s pop rock albums.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736821939419807744&quot;&gt;736821939419807744&lt;/a&gt;&lt;/small&gt;
We hear something far away.&lt;br /&gt;
Down a long hall perhaps?&lt;br /&gt;
A tiny figure in the distance, playing a violin.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736822410029105158&quot;&gt;736822410029105158&lt;/a&gt;&lt;/small&gt;
Playing the HELL out of a violin,  I should say. Wildly, impulsively, unconnected to anything or anyone.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736822616825036801&quot;&gt;736822616825036801&lt;/a&gt;&lt;/small&gt;
As if gently disturbed from their personal revery by our presence, the violinist transitions smoothly to a more orderly pace.&lt;/p&gt;
&lt;p&gt;A drum starts&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736823683918897153&quot;&gt;736823683918897153&lt;/a&gt;&lt;/small&gt;
Up next: Istanbul (Not Constantinople)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/736823779385442304&quot;&gt;736823779385442304&lt;/a&gt;&lt;/small&gt;
This is the only cover on the album. If you’re not familiar with it, check out the 4 Lads version:&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/Wcze7EGorOk?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;The Four Lads -  Istanbul (not Constantinople)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737151718450855936&quot;&gt;737151718450855936&lt;/a&gt;&lt;/small&gt;
The 4 Lads version is a bouncy playful rounded barbershop swing song. It’s light. It’s cute.&lt;/p&gt;
&lt;p&gt;TMBG’s is… different.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737152028846084096&quot;&gt;737152028846084096&lt;/a&gt;&lt;/small&gt;
For starters, it’s sped up about 25%, which (given the dense tongue-twisting lyrics) makes it just on the edge of frenetic.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737152627364888576&quot;&gt;737152627364888576&lt;/a&gt;&lt;/small&gt;
Next, except for the violin, trumpet, and primary vocals, &lt;em&gt;everything&lt;/em&gt; on this track is a sample.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737153007603703809&quot;&gt;737153007603703809&lt;/a&gt;&lt;/small&gt;
There are some truly bizarre sounds if you listen closely. The instrumentation is impossibly foreign, because it IS impossible.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737153384138964992&quot;&gt;737153384138964992&lt;/a&gt;&lt;/small&gt;
The thing that sounds like an accordion is a melodica that’s been sampled and played back via keyboard.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737153501323661313&quot;&gt;737153501323661313&lt;/a&gt;&lt;/small&gt;
The bass hits in the bridge are a coke bottle sampled and turned into a chord.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737155669921390592&quot;&gt;737155669921390592&lt;/a&gt;&lt;/small&gt;
The song’s lyrics are a quip about how a city changed names, and the 4 Lads’ treatment is hokey and playful.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737155942354034690&quot;&gt;737155942354034690&lt;/a&gt;&lt;/small&gt;
In TMBG’s recasting, in context of Flood, it’s a psychedelic paean to the fickleness and impermanence of human structures.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737156742920835072&quot;&gt;737156742920835072&lt;/a&gt;&lt;/small&gt;
(I forgot to mention: a bunch of the bass hits that AREN’T coke bottles are Linnell saying &amp;quot;Bull&amp;quot; sampled and pitch-shifted down.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737157794353139716&quot;&gt;737157794353139716&lt;/a&gt;&lt;/small&gt;
It says a lot, I think, that the Giants were able to breathe new life into this 47-year-old song, and so thoroughly claim it as their own.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737158185006424064&quot;&gt;737158185006424064&lt;/a&gt;&lt;/small&gt;
Very few people today realize that this is even a cover.&lt;/p&gt;
&lt;p&gt;Also, remember this?&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/IqJXxHi6RwQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Istanbul - Tiny Toons&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737158510685736961&quot;&gt;737158510685736961&lt;/a&gt;&lt;/small&gt;
I don’t have much to say about this song from a critical point of view, but if you ever see @tmbg live, pray that they play Istanbul.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737158984998653953&quot;&gt;737158984998653953&lt;/a&gt;&lt;/small&gt;
I’d like to take a moment here to comment once again on the impeccable balance and poise in the song transitions on this album.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737159174123966465&quot;&gt;737159174123966465&lt;/a&gt;&lt;/small&gt;
Istanbul’s wild production is just yet another example of TMBG’s utter mastery of every technical aspect of their craft and moment.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737159315807559680&quot;&gt;737159315807559680&lt;/a&gt;&lt;/small&gt;
Flood is, first and foremost, a cassette tape, designed to be played in order, front then back, then repeated.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737159593042661380&quot;&gt;737159593042661380&lt;/a&gt;&lt;/small&gt;
When answering machines were invented, TMBG used them to get exposure, putting ads in the Village Voice for their Dial-A-Song service.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737159858739286016&quot;&gt;737159858739286016&lt;/a&gt;&lt;/small&gt;
On Apollo 18, the next after Flood, they created an album designed as a CD to be played on shuffle.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737160643912945664&quot;&gt;737160643912945664&lt;/a&gt;&lt;/small&gt;
The first album that I was able to pay money for and download (DRM-free!) was Long Tall Weekend, in 1999&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737160992887472128&quot;&gt;737160992887472128&lt;/a&gt;&lt;/small&gt;
So, here on Flood, Istanbul isn’t just a cool song, or a weird song, or even a great redefining cover.&lt;/p&gt;
&lt;p&gt;It’s setting us up for the next hit.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737161528315518977&quot;&gt;737161528315518977&lt;/a&gt;&lt;/small&gt;
The frenetic swirling harmonic-minor-flaunting violin party reaches a satisfying conclusion with one final delighted squeal.&lt;/p&gt;
&lt;p&gt;IS TAN BULLL…&lt;/p&gt;
&lt;h3 id=&quot;dead&quot; tabindex=&quot;-1&quot;&gt;dead &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#dead&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/bPgXYPJC2uA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Dead&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737162032537948161&quot;&gt;737162032537948161&lt;/a&gt;&lt;/small&gt;
What follows is a plodding series of chords on the piano, in 4/4 time, the pace of walking up stairs carrying groceries in each arm.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737163568810889216&quot;&gt;737163568810889216&lt;/a&gt;&lt;/small&gt;
This song doesn’t mess around.&lt;/p&gt;
&lt;p&gt;&amp;quot;Dead&amp;quot;&lt;/p&gt;
&lt;p&gt;Little on the nose. This is the song about death. (Well, explicitly.)&lt;/p&gt;
&lt;p&gt;And groceries.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737163972231602177&quot;&gt;737163972231602177&lt;/a&gt;&lt;/small&gt;
Let’s start with the first bit first.&lt;/p&gt;
&lt;p&gt;&amp;quot;I returned a bag of groceries accidentally taken off the shelf before the expiration date&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737164204461805568&quot;&gt;737164204461805568&lt;/a&gt;&lt;/small&gt;
It’s &lt;em&gt;not&lt;/em&gt; that the groceries are expired. They’re fine. They were just accidentally taken off the shelf. They’re the &lt;em&gt;wrong&lt;/em&gt; groceries.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737164350511677440&quot;&gt;737164350511677440&lt;/a&gt;&lt;/small&gt;
Their time had not come to be disposed of. It seemed like their purpose had been fulfilled.&lt;/p&gt;
&lt;p&gt;But no. Accident.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737164765525463040&quot;&gt;737164765525463040&lt;/a&gt;&lt;/small&gt;
In an ironic reincarnation, the narrator comes back after an untimely death as a bag of groceries.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737165851535638534&quot;&gt;737165851535638534&lt;/a&gt;&lt;/small&gt;
The narrator wonders, knowing that he’ll never find out, if a large procession waved torches and danced on his grave.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737166148450455552&quot;&gt;737166148450455552&lt;/a&gt;&lt;/small&gt;
We get the impression that the narrator knows he was not well-liked. His &amp;quot;head falling in a basket&amp;quot; indicates his death was not natural.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737166533214887937&quot;&gt;737166533214887937&lt;/a&gt;&lt;/small&gt;
&amp;quot;Now it’s over, I’m dead, and I haven’t done anything that I want, or I’m still alive, and there’s nothing I want to do&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737166619810504708&quot;&gt;737166619810504708&lt;/a&gt;&lt;/small&gt;
There’s two ways to read this:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737166814489120769&quot;&gt;737166814489120769&lt;/a&gt;&lt;/small&gt;
Literally, the narrator is either dead and thus unable to fulfill his yet-unmet desires, or is now groceries, which do not have desires.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737167081704038402&quot;&gt;737167081704038402&lt;/a&gt;&lt;/small&gt;
But figuratively, this &amp;quot;damned if you do&amp;quot; construction inches close to being reminiscent of Hamlet’s &amp;quot;slings and arrows&amp;quot; soliloquy&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737167245294469120&quot;&gt;737167245294469120&lt;/a&gt;&lt;/small&gt;
Either I die leaving stuff undone, or I stay alive, and don’t really want to do anything.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737167958607159296&quot;&gt;737167958607159296&lt;/a&gt;&lt;/small&gt;
(Note: don’t buy the bowlderized crap. Hamlet was contemplating suicide, there’s no other way to read it. He is extremely clear about this.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737168256411176960&quot;&gt;737168256411176960&lt;/a&gt;&lt;/small&gt;
In &amp;quot;Dead&amp;quot;, we plod step by step into the darkest of all possible themes, all the while wrapped in the emotional armor of absurdity.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737169043795251200&quot;&gt;737169043795251200&lt;/a&gt;&lt;/small&gt;
It asks: what, truly, is the difference between being reincarnated as groceries and being wracked by depression, without motivation or care?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737169352537972736&quot;&gt;737169352537972736&lt;/a&gt;&lt;/small&gt;
The middle section mourns the loss of what the narrator can never do, now that he has been reincarnated as groceries.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737169931595218944&quot;&gt;737169931595218944&lt;/a&gt;&lt;/small&gt;
&amp;quot;I will never say the word procrastinate again&amp;quot;&lt;/p&gt;
&lt;p&gt;In life, he was unable to accomplish much, blocked by a lack of motivation.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737170085329010689&quot;&gt;737170085329010689&lt;/a&gt;&lt;/small&gt;
&amp;quot;I’ll never see myself in the mirror with my eyes closed&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737170254359461888&quot;&gt;737170254359461888&lt;/a&gt;&lt;/small&gt;
This is impossible, of course. But we see him, in private, trying to figure this out, instead of doing something else.&lt;/p&gt;
&lt;p&gt;Procrastinating.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737170585294241792&quot;&gt;737170585294241792&lt;/a&gt;&lt;/small&gt;
&amp;quot;I didn’t apologize for when I was 8 and I made my younger brother have to be my personal slave&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737170735915896833&quot;&gt;737170735915896833&lt;/a&gt;&lt;/small&gt;
He regrets his narcissism, but only now that he can no longer make amends. He put this off until it was too late.&lt;/p&gt;
&lt;p&gt;Fate comes for us all.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737171150929682432&quot;&gt;737171150929682432&lt;/a&gt;&lt;/small&gt;
In the refrain, listen to the slower background vocal.&lt;/p&gt;
&lt;p&gt;&amp;quot;Did a large procession dance?&lt;br /&gt;
Now it’s over.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737171912615301120&quot;&gt;737171912615301120&lt;/a&gt;&lt;/small&gt;
In the context of Flood, Dead is a complete stripping away of the many layers built up in the songs thusfar.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737172541773512704&quot;&gt;737172541773512704&lt;/a&gt;&lt;/small&gt;
There are only three voices: John, John, and the piano. It’s extremely simple, and yet this serves to underscore the complexity of the story&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737173257577598976&quot;&gt;737173257577598976&lt;/a&gt;&lt;/small&gt;
&amp;quot;So I won’t be around ever any more. I hope y’all enjoyed my execution. I’m groceries now.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737173335415480321&quot;&gt;737173335415480321&lt;/a&gt;&lt;/small&gt;
It’s as if he’s too weary from life to even muster a &amp;quot;fuck you all for killing me&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737174956006473728&quot;&gt;737174956006473728&lt;/a&gt;&lt;/small&gt;
I warned you that this was a particularly dark album if you look closely.&lt;/p&gt;
&lt;p&gt;And that the darkness thumbs its nose at liberal hypocrisy.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737175471956185088&quot;&gt;737175471956185088&lt;/a&gt;&lt;/small&gt;
Dead cares so little about even the most existential crisis possible, ending as simply and casually as it began.&lt;/p&gt;
&lt;h3 id=&quot;your-racist-friend&quot; tabindex=&quot;-1&quot;&gt;your racist friend &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#your-racist-friend&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/JFGQdvYIJ0M?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Your Racist Friend&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737175739775090689&quot;&gt;737175739775090689&lt;/a&gt;&lt;/small&gt;
And we move on to Your Racist Friend, which is about caring too much to just sit by quietly and let things go.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737175997594750976&quot;&gt;737175997594750976&lt;/a&gt;&lt;/small&gt;
Of all the songs on this album so far, Racist Friend is the one that most feels like an early They Might Be Giants song.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737176272917303296&quot;&gt;737176272917303296&lt;/a&gt;&lt;/small&gt;
In many ways, Flood turned a corner for TMBG. But Racist Friend would’ve been at home on Lincoln, or the stand-out hit on Food Shelter Fun.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/737176730272563201&quot;&gt;737176730272563201&lt;/a&gt;&lt;/small&gt;
(&amp;quot;Food Shelter Fun&amp;quot; is their first album, also sometimes referred to as &amp;quot;The Pink Album&amp;quot;, officially named &amp;quot;They Might Be Giants&amp;quot;)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738629228053168128&quot;&gt;738629228053168128&lt;/a&gt;&lt;/small&gt;
A fun thing writing long-ish form via Twitter is that there is only time to edit for a moment. It’s a high-wire rough draft in real time.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738629528231280640&quot;&gt;738629528231280640&lt;/a&gt;&lt;/small&gt;
Let’s back up to an important reference in Dead that somehow I skipped past, re: &amp;quot;I’ll never see myself in the mirror with my eyes closed&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738629878954622976&quot;&gt;738629878954622976&lt;/a&gt;&lt;/small&gt;
This line is a reference to Narcissus, so obsessed with himself that he chased after his reflection in the water, and drowned.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738630216575131648&quot;&gt;738630216575131648&lt;/a&gt;&lt;/small&gt;
In Dead, the narrator bemoans his inability to see himself in the mirror with eyes closed. Clearly, his &amp;quot;eyes are closed&amp;quot; because he is dead&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738630776422424576&quot;&gt;738630776422424576&lt;/a&gt;&lt;/small&gt;
Sorry for the out of order critical analysis. Twitter, amirite?&lt;/p&gt;
&lt;p&gt;&amp;quot;Your Racist Friend&amp;quot; starts with finality: &amp;quot;This is where the party ends&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738631720874868736&quot;&gt;738631720874868736&lt;/a&gt;&lt;/small&gt;
According to John Linnell, TMBG didn’t realize that there was already a similar song by this title:&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/gqH_0LPVoho?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;The Specials - Racist Friend (Official Music Video)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738633068630528000&quot;&gt;738633068630528000&lt;/a&gt;&lt;/small&gt;
While Racist Friend is a very well crafted song, a lot of Flood fans consider it by far the least interesting on the album.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738633392896385025&quot;&gt;738633392896385025&lt;/a&gt;&lt;/small&gt;
However, unlike Birdhouse or Dead, which wrap a difficult theme under layers of absurdity, Racist Friend goes straight for the discomfort.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738633829166907392&quot;&gt;738633829166907392&lt;/a&gt;&lt;/small&gt;
I dig that. As a young socially awkward person who wanted to do the right thing, this song gave me permission to make it weird.&lt;/p&gt;
&lt;p&gt;For justice&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738634505284521984&quot;&gt;738634505284521984&lt;/a&gt;&lt;/small&gt;
He says, &amp;quot;I know that this is unpleasant for you that I’m enforcing my boundary. But I’m done here. Your friend is problematic. Bye.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738635477964595200&quot;&gt;738635477964595200&lt;/a&gt;&lt;/small&gt;
Once the boundary is enforced, the friend chases us down trying to make amends.&lt;br /&gt;
&amp;quot;Out from the kitchen to the bedroom to the hallway&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738635694382321665&quot;&gt;738635694382321665&lt;/a&gt;&lt;/small&gt;
There are times when we have to go ahead and be negative, regardless of who might be bothered by &amp;quot;the negativity&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738636137573425152&quot;&gt;738636137573425152&lt;/a&gt;&lt;/small&gt;
The line &amp;quot;Can’t shake the devil’s hand, and say you’re only kidding&amp;quot; is a double reference&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738636214496989185&quot;&gt;738636214496989185&lt;/a&gt;&lt;/small&gt;
First, to the friend blaming their racism on being drunk.&lt;br /&gt;
Because that’s bullshit.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738636474594123776&quot;&gt;738636474594123776&lt;/a&gt;&lt;/small&gt;
Second, to the recipient of the song, who can’t hand-wave away their friend’s bad behavior.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738637158605414400&quot;&gt;738637158605414400&lt;/a&gt;&lt;/small&gt;
Musically, this song features a lot of rising-volume notes that build tension&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738637587816943616&quot;&gt;738637587816943616&lt;/a&gt;&lt;/small&gt;
That rising tension all melts away in the chorus&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738637931804385281&quot;&gt;738637931804385281&lt;/a&gt;&lt;/small&gt;
As if to capture the cognitive dissonance of wanting to both avoid conflict and maintain one’s values, and the calm once a decision is made&lt;/p&gt;
&lt;h3 id=&quot;particle-man&quot; tabindex=&quot;-1&quot;&gt;particle man &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#particle-man&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738639961755246592&quot;&gt;738639961755246592&lt;/a&gt;&lt;/small&gt;
From the extremely relatable situation of conflicting with one’s friends’ friends, we plunge into multi-layered weirdness with Particle Man&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/738640597859196928&quot;&gt;738640597859196928&lt;/a&gt;&lt;/small&gt;
This was another song (along with Istanbul) that was put to a Tiny Toons video:&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/LsAiCs66l40?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - Particle Man (Tiny Tunes)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055968817942130688&quot;&gt;1055968817942130688&lt;/a&gt;&lt;/small&gt;
Particle Man is such a weird song to try to unpack, and in fact, I&#39;m marking myself as a TMBG nerd by even considering it. According to The Johns, it has no meaning at all. &lt;a href=&quot;http://tmbw.net/wiki/Particle_Man&quot;&gt;It just is what it is.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And yet...&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055969455539286016&quot;&gt;1055969455539286016&lt;/a&gt;&lt;/small&gt;
In the words of Roland Barthes in La mort de l&#39;auteur, &amp;quot;To give a text an author is to impose a limit on that text.&amp;quot; The creator of a work of art is a collaborator and instigator of its meaning, but should not ever be seen as the final authority of that meaning.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055970005685129216&quot;&gt;1055970005685129216&lt;/a&gt;&lt;/small&gt;
The song is a bouncy play on the Spider-Man theme, and presents a few characters in brief vignettes.&lt;/p&gt;
&lt;p&gt;Particle Man, the unknowably small&lt;br /&gt;
Triangle Man, the violent and hateful&lt;br /&gt;
Universe Man, the unknowably large&lt;br /&gt;
Person Man, the human condition&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055970598864642050&quot;&gt;1055970598864642050&lt;/a&gt;&lt;/small&gt;
The words of the song fit into the overarching theme of Flood&#39;s nihilistic fixation with death (even for a TMBG album) and especially combined with Linnell&#39;s insistence that the song doesn&#39;t have any hidden meaning, is the most flippant and Dadaesque track on the album.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055970858630434816&quot;&gt;1055970858630434816&lt;/a&gt;&lt;/small&gt;
&amp;quot;When he&#39;s underwater, does he get wet? Or does the water get him instead? Nobody knows.&amp;quot; There&#39;s no meaning here. No deep epiphanies. It just is what it is. Get over your damn self.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055972038706257920&quot;&gt;1055972038706257920&lt;/a&gt;&lt;/small&gt;
After introducing the other three characters, the wretch of Person Man is given a final sneer from the narrator. &amp;quot;Who came up with Person Man?&amp;quot; It evokes the image of an editors&#39; room, going through ideas from a brainstorm and throwing out the trash. &amp;quot;The fuck is THIS shit?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055972762777341952&quot;&gt;1055972762777341952&lt;/a&gt;&lt;/small&gt;
The song doesn&#39;t just &amp;quot;not have any deep meaning&amp;quot;, as Linnell says. It actively thumbs its nose at the very idea of finding deep meaning in life. It toys playfully with the futility of life in a vast unknowable universe. In the end, you get beat up by a hateful triangle. So what?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1055975579218927616&quot;&gt;1055975579218927616&lt;/a&gt;&lt;/small&gt;
In the context of the album, Particle Man&#39;s cosmic nihilism sits right between the local interpersonal dramas of Racist Friend and Twisting. As if to say that, in the grand scheme of things, our human preoccupations are ultimately petty and pointless.&lt;/p&gt;
&lt;h3 id=&quot;twisting&quot; tabindex=&quot;-1&quot;&gt;twisting &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#twisting&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/j0jNgo6Ar4Q?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Twisting&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058866456929034240&quot;&gt;1058866456929034240&lt;/a&gt;&lt;/small&gt;
&amp;quot;Twisting&amp;quot; is a deliciously tangled knot of cultural references, and in many ways, encapsulates the essence of Flood more than any other song on the album.&lt;br /&gt;
The opening bars are reminiscent of Twisting By The Pool by Dire Straits.&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/DsJ5aYK-S6Y?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Dire Straits - Twisting By The Pool&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058867440807948290&quot;&gt;1058867440807948290&lt;/a&gt;&lt;/small&gt;
The song is explicitly influenced by the two bands mentioned, the dB&#39;s and the Young Fresh Fellows. (Both worth checking out if you dig TMBG.) Flans told Rolling Stone &amp;quot;Amplifier&amp;quot; was &amp;quot;a more melodramatic iteration of the same idea.&amp;quot; (CW suicide if you look up that song.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058868089335373824&quot;&gt;1058868089335373824&lt;/a&gt;&lt;/small&gt;
For me, the dB&#39;s &amp;quot;Neverland&amp;quot; has more in common with this song in terms of feel and concept.&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/hfpli2VQtZU?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;&amp;quot;Neverland&amp;quot; by The dB&#39;s&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;As much as Intro&#39;s explicit reference to 1990, this song is rooted in the late-80s indie rock scene. Flood is, as mentioned above, of a specific time and place.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058868631012929537&quot;&gt;1058868631012929537&lt;/a&gt;&lt;/small&gt;
The reference to the dB&#39;s and Young Fresh Fellows also sets up the exact type of guy the narrator is addressing. A young cool indie-rocker on the make, surprised to find that a girl&#39;s life does not revolve around him. Complete with smoke machine and Marshall stack.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058869020483436545&quot;&gt;1058869020483436545&lt;/a&gt;&lt;/small&gt;
The song describes acts of casual cruelty that she did. Set your goldfish free, now she&#39;s sighing. Blew out your pilot light, and made a wish.&lt;/p&gt;
&lt;p&gt;She doesn&#39;t need her records back. She doesn&#39;t generally take things back.&lt;/p&gt;
&lt;p&gt;It&#39;s over, buddy.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058869520889049088&quot;&gt;1058869520889049088&lt;/a&gt;&lt;/small&gt;
This is the second song in the album explicitly about a breakup, and bears a striking similarity to Lucky Ball And Chain. A guy who thinks he&#39;s so cool, struggling to accept that it&#39;s over. This time, however, the point of view has shifted external. &amp;quot;She doesn&#39;t miss you.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058870057780965378&quot;&gt;1058870057780965378&lt;/a&gt;&lt;/small&gt;
There&#39;s a moment of hope, &amp;quot;She wants to see you again... she wants to see you again&amp;quot;&lt;/p&gt;
&lt;p&gt;But--&lt;/p&gt;
&lt;p&gt;&amp;quot;slowly twisting, in the wind.&amp;quot; She wants to see you at the end of a rope. Suffering inescapably.&lt;/p&gt;
&lt;p&gt;Y&#39;all had a fight, she won.&lt;/p&gt;
&lt;p&gt;She is Triangle Man.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058871486457380864&quot;&gt;1058871486457380864&lt;/a&gt;&lt;/small&gt;
Musically, this is one of my favorite songs on the album. It&#39;s at first listen a straight down the middle rock song, but blends a ton of influences and references, with a timelessness of instrumentation and format. And it&#39;s just under 2 minutes. Gets the job done and gets out.&lt;/p&gt;
&lt;h3 id=&quot;we-want-a-rock&quot; tabindex=&quot;-1&quot;&gt;we want a rock &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#we-want-a-rock&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/ZH34Fx9meSA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - &amp;quot;We Want a Rock&amp;quot; (2018-12-30 - Daryl&#39;s House, Pawling, NY)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058871977522323456&quot;&gt;1058871977522323456&lt;/a&gt;&lt;/small&gt;
I&#39;ve always felt like the first few bars of We Want A Rock feel like maybe Twisting just had a bit more to say. The one song flows right into the other, but apart from that transition, they really couldn&#39;t be more different. This is a very well sequenced album.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058872312693288960&quot;&gt;1058872312693288960&lt;/a&gt;&lt;/small&gt;
And, indeed, We Want A Rock picks up mid-thought with more to say, in a conversation where we aren&#39;t given context, where context had been lost to the speaker. &amp;quot;Where was I? I forgot the point that I was making...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058873739897524224&quot;&gt;1058873739897524224&lt;/a&gt;&lt;/small&gt;
This line captures the entire theme of the song, which is a metaphor for infinite regress in a chain of thought. To wind string, you need something to wind the string around. I was saying, if I were smart, I&#39;d work out how to get a thing like that. &amp;quot;Everyone&amp;quot; knows you need one.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058874438282706944&quot;&gt;1058874438282706944&lt;/a&gt;&lt;/small&gt;
How can you ever get started? Life begins already in progress, and ends before it is completed. True stories start mid-stream.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058874783838855168&quot;&gt;1058874783838855168&lt;/a&gt;&lt;/small&gt;
John Linnell:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This sounds really abstract, but in order to begin wrapping a piece of string around itself, you need something to start with. Like a rock. I guess you can make a ball of string starting from nothing if you just make a tiny loop at the end of the string.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058875141923364864&quot;&gt;1058875141923364864&lt;/a&gt;&lt;/small&gt;
JL, contd:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;But it seems theoretically impossible. It&#39;s a metaphor for getting started.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058875627636318209&quot;&gt;1058875627636318209&lt;/a&gt;&lt;/small&gt;
The idea that &amp;quot;everybody wants a rock to wind a piece of string around&amp;quot; is the classic TMBG Unreliable Narrator showing up. It&#39;s ludicrous. &amp;quot;Everyone&amp;quot; doesn&#39;t want this thing, YOU want this thing, you&#39;re just saying &amp;quot;everyone&amp;quot; wants it to justify your own desires.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058876867141263360&quot;&gt;1058876867141263360&lt;/a&gt;&lt;/small&gt;
The line &amp;quot;If I were a carpenter&amp;quot; is a reference to the 1967 Tim Hardin song about staying with a lover of humble means. The reference contrasts with the breakup anthems, while calling back to Lucky Ball and Chain&#39;s railroad apartment (the &amp;quot;perfect place&amp;quot;)&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/K6NcbHokih8?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Johnny Cash and June Carter - If I were a carpenter with lyrics&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058877354057945089&quot;&gt;1058877354057945089&lt;/a&gt;&lt;/small&gt;
The song&#39;s chorus has several references to infancy. Crib doors, crawl inside, the play-house. And the nameless oppressors who &amp;quot;want to burn the playhouse down&amp;quot;, to stop the people who want big prosthetic foreheads on their real heads.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058877776130797568&quot;&gt;1058877776130797568&lt;/a&gt;&lt;/small&gt;
These are not, however, references to parenting (like we see in Lighthouse and with the &amp;quot;baby doll&amp;quot; in Lucky Ball and Chain). Childhood here is a reference to the paternalistic way in which the narrator is attempting to pitch his idea to a gullible audience by playing the victim.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058878238368268288&quot;&gt;1058878238368268288&lt;/a&gt;&lt;/small&gt;
In 2018, a charismatic person who tends to lose their train of thought, selling obviously garbage ideas to a mass audience by convincing them that he&#39;s the only one who can protect them and give them what &amp;quot;everybody&amp;quot; wants is... well, oddly prescient for 1990.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058879300890329088&quot;&gt;1058879300890329088&lt;/a&gt;&lt;/small&gt;
In a potentially accidental (plausible deniability) greatest terrible pun of all time, the two songs &amp;quot;Twisting&amp;quot; and &amp;quot;We Want A Rock&amp;quot; (to tie a string around) appear at the end of the first side of the cassette.&lt;/p&gt;
&lt;p&gt;Then the listener winds the tape up to play the second side.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058879840718282752&quot;&gt;1058879840718282752&lt;/a&gt;&lt;/small&gt;
(For the yungins following along, MP3s used to be distributed as uncompressed audio content on magnetic tape media in plastic cassettes which could only be played end to end. When one side of the tape was done, you had to wind up the remaining, and flip it over to continue.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1058880533369778176&quot;&gt;1058880533369778176&lt;/a&gt;&lt;/small&gt;
For the sequencing, it means that We Want A Rock is the close of the first side. After which, throw the crib doors wide, and crawl inside for the second act. This album is optimized for its medium.&lt;/p&gt;
&lt;p&gt;The second side gets weirder, darker, and even more magnificent. Stay tuned.&lt;/p&gt;
&lt;h3 id=&quot;chair&quot; tabindex=&quot;-1&quot;&gt;chair &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#chair&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/5pud7rt4KhU?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Someone Keeps Moving My Chair&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131096337145859&quot;&gt;1082131096337145859&lt;/a&gt;&lt;/small&gt;
Side 2 starts with a trilogy of songs about the modern workplace, which increase in intensity as they progress. &lt;a href=&quot;http://tmbw.net/wiki/Aversion_To_Work&quot;&gt;&amp;quot;Work is Hell&amp;quot; is kind of a thing for TMBG.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131134811561985&quot;&gt;1082131134811561985&lt;/a&gt;&lt;/small&gt;
Someone Keeps Moving My Chair tells the story of the harried office worker Mr. Horrible, and the Ugliness Men who thought that their dreadfulness might be a thing to annoy him with.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131185101225985&quot;&gt;1082131185101225985&lt;/a&gt;&lt;/small&gt;
But despite the horrible business left for him to attend to, as something unpleasant that has spilled on his brain, and so on, what bothers him is that someone keeps moving his chair.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131249018228737&quot;&gt;1082131249018228737&lt;/a&gt;&lt;/small&gt;
In the face of increasingly horrible situations, we are reduced to being irrationally concerned about petty annoyances.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131285856808960&quot;&gt;1082131285856808960&lt;/a&gt;&lt;/small&gt;
The song is ludicrously upbeat, full of late-80s synth-pop energy, and like so many TMBG songs, if you didn&#39;t listen to the lyrics, you&#39;d think it was deliriously happy.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131395990806528&quot;&gt;1082131395990806528&lt;/a&gt;&lt;/small&gt;
The repetitiveness of the message, with the &amp;quot;is it ok with you?&amp;quot; from someone who clearly doesn&#39;t care, perfectly captures the faux optimism and fake esteem of burned coffee and fluorescent lighting.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131430212128768&quot;&gt;1082131430212128768&lt;/a&gt;&lt;/small&gt;
Things are bad, but we can&#39;t talk about it what&#39;s really bad, so we get upset about our chair being moved.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131488001290240&quot;&gt;1082131488001290240&lt;/a&gt;&lt;/small&gt;
This song is a masterpiece of long sentences of lyrics that perfectly line up a rolling run-on melody.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131549888245761&quot;&gt;1082131549888245761&lt;/a&gt;&lt;/small&gt;
&amp;quot;Would it be okay with you if we wrote a reminder of things we&#39;ll forget to do today otherwise, using a green magic marker, if it&#39;s alright, on the back of your head?&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131649813393409&quot;&gt;1082131649813393409&lt;/a&gt;&lt;/small&gt;
The song ends with a bang, with pretty much the same energy level that it started. The next up greets us with a much more bizarre soundscape, starting with a sample of old-timey crooning, the first recognizable words being &amp;quot;your mercy&amp;quot;.&lt;/p&gt;
&lt;h3 id=&quot;hearing-aid&quot; tabindex=&quot;-1&quot;&gt;hearing aid &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#hearing-aid&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/wMF6Jpm5cvQ?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Hearing Aid&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131689936019456&quot;&gt;1082131689936019456&lt;/a&gt;&lt;/small&gt;
&amp;quot;Hearing Aid&amp;quot; dives more directly into the malaise and angst of working a soulless office job. Behind the opening chords, we hear unspecified machines cranking away. It goes a pretty long time before the lyrics start.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131740808728576&quot;&gt;1082131740808728576&lt;/a&gt;&lt;/small&gt;
The lyrics are short gut-shot vignettes.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131789924098048&quot;&gt;1082131789924098048&lt;/a&gt;&lt;/small&gt;
&amp;quot;Frosty the supervisor lives by himself. Sometimes I feel sorry for him. Usually I can&#39;t.&amp;quot;&lt;/p&gt;
&lt;p&gt;Yeah, me and the boss are in this together. But fuck him.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131829971243008&quot;&gt;1082131829971243008&lt;/a&gt;&lt;/small&gt;
This line reminds me a bit of Puppet Head&#39;s &amp;quot;ads up in the subway are the work of someone trying to please his boss, and though the guy&#39;s a pig, we all know what he wants is just to please somebody else.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131892936175616&quot;&gt;1082131892936175616&lt;/a&gt;&lt;/small&gt;
There are a few TMBG songs that reference hearing loss or hearing difficulty in some way. I&#39;ve often wondered if there&#39;s a bit of &amp;quot;fear of becoming Beethoven&amp;quot; aspect to it.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131928948469760&quot;&gt;1082131928948469760&lt;/a&gt;&lt;/small&gt;
In this case, the hearing aid serves as a metaphor for tuning in and giving a shit. It&#39;s already hard for me to hear, but you know what? I don&#39;t need to be hearing this.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082131964688093184&quot;&gt;1082131964688093184&lt;/a&gt;&lt;/small&gt;
The narrator is turning off their fucks given. They sarcastically ask for more coffee, because they&#39;re not as messed up as they want to be.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132025157402624&quot;&gt;1082132025157402624&lt;/a&gt;&lt;/small&gt;
Apparently by accident, TMBG release another song, Glean, 25 years later, with an alto sax line that closely mimics Hearing Aid&#39;s melody.&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/EapAXU441F8?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - Glean (official video)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132066022506496&quot;&gt;1082132066022506496&lt;/a&gt;&lt;/small&gt;
Compared with Chair&#39;s manic energy, Hearing Aid is morose and croony. I love this song so much. There are literally vacuum sounds in the middle. It doesn&#39;t &amp;quot;end&amp;quot; so much as just &amp;quot;give up&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132119311212544&quot;&gt;1082132119311212544&lt;/a&gt;&lt;/small&gt;
After the second &amp;quot;because&amp;quot;, it&#39;s almost like the chords and melody expect another verse and then... oh, you&#39;re not coming back? Um. Ok.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Full minute of 16th note high-hats while Flans just abuses his amp a little&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132180669685760&quot;&gt;1082132180669685760&lt;/a&gt;&lt;/small&gt;
As the noise winds down, it leads right into Minimum Wage, the third act in the Flood Side 2 anti-work trilogy.&lt;/p&gt;
&lt;h3 id=&quot;minimum-wage&quot; tabindex=&quot;-1&quot;&gt;minimum wage &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#minimum-wage&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/SRcRn_Xv7Ek?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Minimum Wage&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132790232080384&quot;&gt;1082132790232080384&lt;/a&gt;&lt;/small&gt;
The lyrics could hardly be more minimal. &amp;quot;Minimum wage, HYAH!&amp;quot; &lt;em&gt;whipcrack&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In terms of meaning-density, this song is a masterpiece (perhaps rivaled only by their cover of &amp;quot;The Lady Is A Tramp&amp;quot;), and serves as a foil to Chair&#39;s slew of bouncing iambs and meandering triplets.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082132860847288320&quot;&gt;1082132860847288320&lt;/a&gt;&lt;/small&gt;
This song is short and brutally to the point, but it feels theatrical, like something that might play over the opening credits in a 1960s western. Until I realized that the keys are synth voice &amp;quot;Ah&amp;quot; sounds, and then it seems just... well, creepy&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082133170605027328&quot;&gt;1082133170605027328&lt;/a&gt;&lt;/small&gt;
Fun fact: no whips were used in the production of the whipcrack. The wind bit is a sample of a dying Moog synthesizer, and the crack is a wet towel.&lt;/p&gt;
&lt;h3 id=&quot;letterbox&quot; tabindex=&quot;-1&quot;&gt;letterbox &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#letterbox&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/gkBTQX4VwqI?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Letterbox&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082136493760569346&quot;&gt;1082136493760569346&lt;/a&gt;&lt;/small&gt;
The next song, Letterbox, is a palate cleanser mood-wise, and can be interpreted a lot of ways. The simplest, and probably closest to its authors&#39; intent, is essentially just an extended tongue-twister with some callbacks to various cliches and sayings.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1082137085614612481&quot;&gt;1082137085614612481&lt;/a&gt;&lt;/small&gt;
Letterbox was a regular part of their live shows for quite a long time before Flood. In 1988, Linnell commented that they wrote it &amp;quot;about 8 years ago, back when we were young and good&amp;quot;. But in the context of Flood, the bird theme and some other elements take on new meaning.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274232766410878977&quot;&gt;1274232766410878977&lt;/a&gt;&lt;/small&gt;
The reference to the titular &amp;quot;letterbox&amp;quot; is future oriented, expressing a lack of knowledge regarding what will befall the song&#39;s recipient. The ostensible source of this information would be &amp;quot;a little bird&amp;quot;, which doesn&#39;t provide the information one really wants to know.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274233202597453824&quot;&gt;1274233202597453824&lt;/a&gt;&lt;/small&gt;
The bird, we note, is &amp;quot;my best friend&amp;quot;. This harkens back to Birdhouse&#39;s convoluted but eloquent explanation of parenthood: &amp;quot;I&#39;m your only friend, I&#39;m not your only friend, but I&#39;m a little glowing friend, but really, I&#39;m not actually your friend (but I am)&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274234144424292352&quot;&gt;1274234144424292352&lt;/a&gt;&lt;/small&gt;
The visual metaphor bears a reflected similarity as well, in that both a birdhouse and a letterbox are small wooden boxes outside one&#39;s home.&lt;/p&gt;
&lt;p&gt;One for caretaking, the other for receiving from the world.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274236385751269377&quot;&gt;1274236385751269377&lt;/a&gt;&lt;/small&gt;
Where Birdhouse contemplates a tiny sleeping child, and the insecurity of a new parent wondering if they&#39;ll rise to the task, Letterbox is on the other side of the relationship, dealing with the loss of connection as a child differentiates and moves on into their own future.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274236980990099456&quot;&gt;1274236980990099456&lt;/a&gt;&lt;/small&gt;
In a way, the puns and cliches all serve to capture the change in nature of a parent as they move from deep unspeakable awe and wonder at a newborn, to a mature parent&#39;s jokey references and cliches. &amp;quot;If I had a X for every time you Y, ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274238299599540224&quot;&gt;1274238299599540224&lt;/a&gt;&lt;/small&gt;
With a newborn, a parent has a relationship with a potential future, and it&#39;s a common moment for contemplation of their place in the great chain of history and society. But once grown, there is a relationship with an actual specific person, and an established dynamic.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274239191820296192&quot;&gt;1274239191820296192&lt;/a&gt;&lt;/small&gt;
&amp;quot;too late or too soon to make noise about love, and there&#39;s no time for sorrow&amp;quot;&lt;/p&gt;
&lt;p&gt;In the busyness of life with a child coming into their own full adult personhood, there just isn&#39;t a good time for that kind of deep connection. Their job is to grow up, our job is to gtfo of the way&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274239629999304704&quot;&gt;1274239629999304704&lt;/a&gt;&lt;/small&gt;
So what do we do? &amp;quot;Run around with a hole in the head till tomorrow.&amp;quot;&lt;/p&gt;
&lt;p&gt;Letterbox offers no solace, no comfort, no solution. It is what it is. I don&#39;t get to know your life as you grow into an adult. The past does not have the luxury of knowing the future. That&#39;s how it works.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274242334629130241&quot;&gt;1274242334629130241&lt;/a&gt;&lt;/small&gt;
The instrumentation on Letterbox reinforces the point as well. It&#39;s dominated by acoustic guitar and accordion, about as &amp;quot;unplugged&amp;quot; as TMBG gets, but then there&#39;s this backwards snare at the start and after the bridge, like the song itself is taking trying to catch its breath.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274245224617795588&quot;&gt;1274245224617795588&lt;/a&gt;&lt;/small&gt;
Coming after the &amp;quot;work sucks&amp;quot; trilogy of Chair/Hearing Aid/Minimum Wage, and starts another set of 3 songs that fit together, all flirting with darkness, but just hinting at its presence before retreating to playfulness.&lt;/p&gt;
&lt;p&gt;Up next, as on the nose as can be, &amp;quot;Whistling in the Dark&amp;quot;&lt;/p&gt;
&lt;h3 id=&quot;whistling&quot; tabindex=&quot;-1&quot;&gt;whistling &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#whistling&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/pBN4sOQbYxk?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Whistling in the Dark&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274246000136253440&quot;&gt;1274246000136253440&lt;/a&gt;&lt;/small&gt;
Of course, the title &amp;quot;whistling in the dark&amp;quot; or &amp;quot;whistling past the graveyard&amp;quot; implies keeping one&#39;s spirits high, even though there is something scary. Sometimes that&#39;s the right thing to do, but it can also lead one astray if legitimate danger goes unnoticed.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274248101180567557&quot;&gt;1274248101180567557&lt;/a&gt;&lt;/small&gt;
Callback in the title to Lucky Ball and Chain, where the narrator &amp;quot;just stood there whistling &#39;there goes the bride&#39; as she walked out the door&amp;quot;. In Ball and Chain, the narrator comes to regret his bravado. The narrator in Whistling is much more comfortable with their nature.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274249050619932673&quot;&gt;1274249050619932673&lt;/a&gt;&lt;/small&gt;
Whistling presents two strange dreamlike scenes, where the narrator is confronted by someone. In the first, a woman offers to poison their mind with &amp;quot;wrong ideas that appeal to him&amp;quot;. Written across her scalp are the words of the chorus. The narrator tries to scream (but can&#39;t?)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274249476257935367&quot;&gt;1274249476257935367&lt;/a&gt;&lt;/small&gt;
In the second, a man offers to change (not poison) their mind by hitting it with a rock. This short violent exchange is understood to be a joke, and zooming out, we see that they&#39;re both in jail together. And the narrator does hit their own head.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274250265089077249&quot;&gt;1274250265089077249&lt;/a&gt;&lt;/small&gt;
The chorus is one of my favorite bits of poetry in the TMBG canon, largely because of what it fixates on versus what it slides past.&lt;/p&gt;
&lt;p&gt;The narrator is only good at one thing. That one thing is: be you, be what you&#39;re like, be like yourself. They&#39;re having a wonderful time.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274250546971414528&quot;&gt;1274250546971414528&lt;/a&gt;&lt;/small&gt;
But, even though they are having a wonderful time accepting themselves for who they are, and not being anything different, what they&#39;d RATHER be doing is whistling in the dark.&lt;/p&gt;
&lt;p&gt;This is a song about someone who cannot bring themself to stop staring directly into the void.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274251416220172289&quot;&gt;1274251416220172289&lt;/a&gt;&lt;/small&gt;
Given how the focus and repetition of the stanza works, it is easy to skip past the &amp;quot;but I&#39;d rather be&amp;quot;. Be yourself! Whistle in the dark if that&#39;s your thing!&lt;/p&gt;
&lt;p&gt;But that&#39;s not the narrator&#39;s thing, and despite the joy of self-acceptance, there&#39;s always a longing to be different.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274252182817083392&quot;&gt;1274252182817083392&lt;/a&gt;&lt;/small&gt;
The narrator in this song is terrified at the prospect of giving up this inability to whistle in the dark, by poisoning their mind with wrong ideas that appeal to them. And yet, they would actually rather doing that, if it was something they could do well.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274252501403877376&quot;&gt;1274252501403877376&lt;/a&gt;&lt;/small&gt;
Whistling in the dark is, unfortunately, the one and only thing that they like.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274253493377753089&quot;&gt;1274253493377753089&lt;/a&gt;&lt;/small&gt;
In classic TMBG and Flood fashion, Whistling is a layer cake of darkness and frivolity. The imagery is strange in the way that only nightmares can be, but the overall mood is light enough to be a kids&#39; song.&lt;/p&gt;
&lt;h3 id=&quot;hot-cha&quot; tabindex=&quot;-1&quot;&gt;hot cha &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#hot-cha&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/7RUR-k3O3TY?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants: Hot Cha (Unofficial Video)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274255344902893568&quot;&gt;1274255344902893568&lt;/a&gt;&lt;/small&gt;
The third song in this sequence is Hot Cha, bringing us back onto the subject of wayward offspring.&lt;/p&gt;
&lt;p&gt;The three form a neat line from Letterbox&#39;s steady march to Whistling&#39;s bassy weirdness to Hot Cha&#39;s jazzy syncopation.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274256575364882432&quot;&gt;1274256575364882432&lt;/a&gt;&lt;/small&gt;
It&#39;s debatable whether the wayward Hot Cha refers to a child or some other family member.&lt;/p&gt;
&lt;p&gt;John Flansberg introduces this song live as &amp;quot;a song that&#39;s not about my brother&amp;quot;.&lt;/p&gt;
&lt;p&gt;Paxus Flansberg calls Hot Cha &amp;quot;the most clearly-about-me song my brother has written&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274256816474427393&quot;&gt;1274256816474427393&lt;/a&gt;&lt;/small&gt;
Paxus went on to say:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My brother and I often played the game Derby Day when we were little and Hot Cha was horse number two and my favorite. Despite his claims otherwise, I am clear that this song on the Flood album is about me. [...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274256914587631616&quot;&gt;1274256914587631616&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The song refers to the first time Hot Cha went away, a float[ing] island was his home. A pretty clear reference to the time I spent hitching on sailboats across the Pacific. [...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274257083664236544&quot;&gt;1274257083664236544&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My brother certainly feels some affinity for the prodigal son story in light of my disappearance, and we did eat fondue together when we were growing up, which is a bit of an odd food choice.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274257543812923392&quot;&gt;1274257543812923392&lt;/a&gt;&lt;/small&gt;
The purpose of this project, I hasten to clarify, is emphatically NOT to determine or make the case for any particular &amp;quot;actual&amp;quot; meaning behind these songs. Our goal is to explore the meaning that emerges from the artifact itself in context and in combination with a listener.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274258267217121281&quot;&gt;1274258267217121281&lt;/a&gt;&lt;/small&gt;
Like all great works of art, Flood is a hodgepodge of what was available, what seemed like a good idea at the time, kinda sorta felt like it fit, and what could be shipped with the resources at hand. It is what it is.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274258636806602754&quot;&gt;1274258636806602754&lt;/a&gt;&lt;/small&gt;
It is great because, by design or by accident, it touches deep fundamental human themes in a profound and elegant way. We needn&#39;t get inside Johns&#39; heads in the late 80s to interrogate or understand how that happens. They surely didn&#39;t fully grok it themselves.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274260727386140674&quot;&gt;1274260727386140674&lt;/a&gt;&lt;/small&gt;
All that said, Hot Cha certainly sounds like it&#39;s from the point of view of someone experiencing a mixture of annoyance and loss at their sibling leaving home. Did actual John Flansberg intentionally write it about his actual brother? It hardly matters.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274428883526279168&quot;&gt;1274428883526279168&lt;/a&gt;&lt;/small&gt;
This is the second reference to sibling relationships in Flood, the first being making the narrator&#39;s brother have to be their personal slave in Dead. Even the most loving sibling relationships are inextricably tied to the inevitable jumbling trauma of growing up.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274429522641711104&quot;&gt;1274429522641711104&lt;/a&gt;&lt;/small&gt;
Another callback to Dead, we have the line &amp;quot;everybody&#39;s eyes are closed&amp;quot;, a reference back to &amp;quot;I&#39;ll never see myself in the mirror with my eyes closed&amp;quot;, from that same section of Dead where the narrator regrets how they treated their younger brother poorly as a child.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274429831581556737&quot;&gt;1274429831581556737&lt;/a&gt;&lt;/small&gt;
Perhaps the closed eyes is why the narrator &amp;quot;can&#39;t see why I miss you so&amp;quot;.&lt;/p&gt;
&lt;p&gt;We didn&#39;t even get along. I was happy you were getting out of my hair. And now you&#39;re gone and I... miss you? Wtf.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274430303084269568&quot;&gt;1274430303084269568&lt;/a&gt;&lt;/small&gt;
The verses play out in three acts. In the first, Hot Cha leaves to live on a floating island, but is summoned back when &amp;quot;the phone rang off the hook&amp;quot;. In the second, we learn that in Hot Cha&#39;s second departure, they left without any regard for unfinished business.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274430773278330880&quot;&gt;1274430773278330880&lt;/a&gt;&lt;/small&gt;
&amp;quot;Second time he went away, left the bathtub running over, stereo on, and cooking bacon. Never came back to tell us why.&amp;quot;&lt;/p&gt;
&lt;p&gt;Departure is not pretty. Children and siblings leave, return, and then eventually leave and don&#39;t return. We don&#39;t get to know why.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274431174543171584&quot;&gt;1274431174543171584&lt;/a&gt;&lt;/small&gt;
The contents of their Letterbox is their own business, not ours. This song is another point of view on the creation and inevitable destruction of a family of origin. Families exist to create people, but the people created change and move on. The future gives nothing to the past.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274431702782246912&quot;&gt;1274431702782246912&lt;/a&gt;&lt;/small&gt;
The third act expresses the longing for the sibling&#39;s return most directly, but with a barb of filial resentment. If that honey would come back, we would throw such a party. Drink and cook the prodigal son.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274432077270708225&quot;&gt;1274432077270708225&lt;/a&gt;&lt;/small&gt;
The sibling who stays knows that, even though narrator was the good one, if Cha returns he&#39;ll be &lt;a href=&quot;https://en.wikipedia.org/wiki/Parable_of_the_Prodigal_Son&quot;&gt;showered with welcome and celebration&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274432857948094464&quot;&gt;1274432857948094464&lt;/a&gt;&lt;/small&gt;
Like so much of Flood, the complicated emotions are presented obliquely, shown but not told. Of course I miss my brother, of course I can&#39;t stop thinking about him and wondering what adventures he&#39;s having. But also, fuck that guy, where&#39;s MY parade?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274433633600696320&quot;&gt;1274433633600696320&lt;/a&gt;&lt;/small&gt;
Hot Cha has a swinging feel to it, but the sound is so bizarre. They took samples of a door buzzer and hitting various things with mallets and drumsticks, and then keyed them to a drumpad. All the drums are programmed and the horns are recorded through a fuzz box.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274433992125636610&quot;&gt;1274433992125636610&lt;/a&gt;&lt;/small&gt;
The net effect is like a collection of childhood toys played at random, but somehow a song comes out of it. Jerky and half-formed, still trying to figure out how to get to a polished swing, like a child coming into their own adulthood in the shadow of a more dynamic brother.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274435105038073858&quot;&gt;1274435105038073858&lt;/a&gt;&lt;/small&gt;
After Hot Cha&#39;s decisive ending, we have another grand epic in Women And Men, similar in many ways to Theme From Flood. Women And Men is a bookmark that stands alone and resets the mood for the denouement trilogy of Sapphire Bullets, They Might Be Giants, and Road Movie To Berlin&lt;/p&gt;
&lt;h3 id=&quot;women-and-men&quot; tabindex=&quot;-1&quot;&gt;women and men &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#women-and-men&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/bwX2P0x9lu8?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - Women and Men&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274435456461975553&quot;&gt;1274435456461975553&lt;/a&gt;&lt;/small&gt;
Women and Men can be seen as a celebration of the whole human expansion project. The ship runs out of ocean and runs aground. What&#39;s in the ship? Women and men, bringing with them messages of love, and everywhere they go, love will grow.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274435724306116608&quot;&gt;1274435724306116608&lt;/a&gt;&lt;/small&gt;
They enter the wilds of the new land, and set up shop. This stream of people gets wider, eventually becoming an ocean, which bears more ships of more women and men.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274436194151985152&quot;&gt;1274436194151985152&lt;/a&gt;&lt;/small&gt;
Like Theme From Flood, however, and taken as a reflection of that opening movement, this takes on a somewhat sinister tone. The &amp;quot;messages of love&amp;quot; are whistling in the dark, ignoring the apocalyptic (and in many cases genocidal) impacts of such expansion.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274437031465107457&quot;&gt;1274437031465107457&lt;/a&gt;&lt;/small&gt;
Again and again in the TMBG canon, &amp;quot;ocean&amp;quot; is death and destruction; it is tumultuous, full of fickle peril. It is the flood that threatens to end us. The ocean is what the mighty lighthouse stands guard over, which the meager nightlight could never hope to aspire to. It&#39;s SCARY.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274437281307230208&quot;&gt;1274437281307230208&lt;/a&gt;&lt;/small&gt;
The people who crossed the ocean are only trying to make a life for themselves. They&#39;re loving, they&#39;re kind, they just wanna have kids and families. But in so doing, what do they become?&lt;/p&gt;
&lt;p&gt;Another ocean.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274438074932453376&quot;&gt;1274438074932453376&lt;/a&gt;&lt;/small&gt;
As the beneficiaries of this expansion, rolling over and erasing what was before, what are we to do? Shall we accept the messages of love, and become an ocean carrying more ships?&lt;/p&gt;
&lt;p&gt;Flood doesn&#39;t give us &amp;quot;ought&amp;quot;. Only &amp;quot;is&amp;quot;. And we probably will continue expanding and destroying.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274438551426306048&quot;&gt;1274438551426306048&lt;/a&gt;&lt;/small&gt;
Women And Men takes the pattern of retreating from darkness to absurdity, and makes it personal. WE are the darkness. WE are the danger. WE are the flood rising.&lt;/p&gt;
&lt;p&gt;And overall, we&#39;re happy about it. Quite pleased with ourselves, in fact.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274441103333158912&quot;&gt;1274441103333158912&lt;/a&gt;&lt;/small&gt;
Next up: Sapphire Bullets Of Pure Love.&lt;/p&gt;
&lt;p&gt;There is SO much to say about this song. If Birdhouse and Particle Man are the songs from Flood that everyone (or, at least, every GenX and Millennial) knows, Sapphire Bullets is the one that perhaps looms largest for TMBG superfans.&lt;/p&gt;
&lt;h3 id=&quot;sapphire-bullets&quot; tabindex=&quot;-1&quot;&gt;sapphire bullets &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#sapphire-bullets&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274441334724587520&quot;&gt;1274441334724587520&lt;/a&gt;&lt;/small&gt;
The title is from this short weird piece by the same name, from the Mahavishnu Orchestra&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/CFVtZKC9RLA?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Mahavishnu Orchestra - Sapphire Bullets of Pure Love&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274441895884673025&quot;&gt;1274441895884673025&lt;/a&gt;&lt;/small&gt;
&amp;quot;The Sapphire Bullets&amp;quot; is also the name of the best TMBG cover band.&lt;/p&gt;
&lt;p&gt;Or, I should say, FAKE cover band.&lt;/p&gt;
&lt;p&gt;&amp;quot;Fake&amp;quot; in the sense that they&#39;re actually &lt;a href=&quot;http://tmbw.net/wiki/Sapphire_Bullets&quot;&gt;TMBG pretending to be a TMBG cover band&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274442502926295041&quot;&gt;1274442502926295041&lt;/a&gt;&lt;/small&gt;
The other fake TMBG cover band is &amp;quot;Count Drinkalot&amp;quot;, where John and John would open for themselves by doing an acoustic, set wearing vampire masks, and encouraging the audience to drink, with the intent of ensuring that their real set would have a receptive audience.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274443045052624897&quot;&gt;1274443045052624897&lt;/a&gt;&lt;/small&gt;
TMBG have a version of this song that they play backwards, note for note and syllable for syllable. I haven&#39;t ever caught a show where they performed Stilloob, but I hope to someday. It hasn&#39;t been recorded, that I&#39;m aware of.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;(Addendum: after this twitter thread, they did perform this a few
times, and it got posted online. Check it out!)&lt;/small&gt;&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/lt1V5gD4GoE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - &amp;quot;Stilloob&amp;quot; Premiere (&amp;quot;Sapphire Bullets of Pure Love&amp;quot; Backwards) + REVERSED&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/y03ABXQWQtE?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - “Stilloob&amp;quot; or &amp;quot;Sapphire Bullets of Pure Love&amp;quot; but backwards&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274443500784738304&quot;&gt;1274443500784738304&lt;/a&gt;&lt;/small&gt;
Anyway, enough gushing in-jokes.&lt;/p&gt;
&lt;p&gt;After the epic re-introduction in Women And Men, Bullets fades in slowly, bit by bit. It feels like a song out of the middle of a musical, where it can be assumed that we already have the context, so no more is provided.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274443953924747264&quot;&gt;1274443953924747264&lt;/a&gt;&lt;/small&gt;
The words are sparse.&lt;/p&gt;
&lt;p&gt;Pistol shots. Gun shots. Bullets from a revolver. Bullets from a gun. Bullets through the atmosphere.&lt;/p&gt;
&lt;p&gt;Here they come.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274444245605052417&quot;&gt;1274444245605052417&lt;/a&gt;&lt;/small&gt;
There is a resignation and acceptance of the narrator&#39;s fate. He&#39;s not trying to get away or save himself. He has decided to go ahead and suffer the slings and arrows of outrageous fortune, as it were. Or maybe he knows that escape is futile in this case.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274444809294376960&quot;&gt;1274444809294376960&lt;/a&gt;&lt;/small&gt;
At &amp;quot;Here they come&amp;quot;, the organ comes in sounding a bit like an old timey movie, at the point when the vampire knows that all hope is lost. It carries us through the next verse.&lt;/p&gt;
&lt;p&gt;John, I&#39;ve been bad, and they&#39;re coming after me.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274445375877730304&quot;&gt;1274445375877730304&lt;/a&gt;&lt;/small&gt;
This takes an interesting turn on the next line: &amp;quot;Done someone wrong, and I fear that it was me.&amp;quot;&lt;/p&gt;
&lt;p&gt;I&#39;ve hurt someone. The someone I hurt was myself.&lt;/p&gt;
&lt;p&gt;After this, the spare lyrics become completely poetic and enigmatic.&lt;/p&gt;
&lt;p&gt;Sapphire bullets. Bullets of pure love.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274445614961442817&quot;&gt;1274445614961442817&lt;/a&gt;&lt;/small&gt;
The beauty of this song is how its sparseness can be turned in almost any direction, but no matter where it&#39;s pointed, the result is excruciatingly poignant.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274445880402165760&quot;&gt;1274445880402165760&lt;/a&gt;&lt;/small&gt;
The visual metaphor presents something hideous and fatal, a sense of impending doom and resignation to it, but the ultimate nature of this destruction is pure love.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274446110799441920&quot;&gt;1274446110799441920&lt;/a&gt;&lt;/small&gt;
The love of the parent in Birdhouse for the child who they hope will keep them alive in some way.&lt;br /&gt;
The love of Lucky Ball And Chain&#39;s narrator which he himself turned his back on out of pride.&lt;br /&gt;
The love of the Women And Men mowing down everything in their path of consumption.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274446477650087936&quot;&gt;1274446477650087936&lt;/a&gt;&lt;/small&gt;
Even the love of the woman presenting Whistling&#39;s narrator with wrong ideas that appeal to them, or the resentful bittersweet love of Hot Cha&#39;s narrator for his wayward brother, or the love about which Letterbox&#39;s narrator can find no good time to make noise about.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274446762812428288&quot;&gt;1274446762812428288&lt;/a&gt;&lt;/small&gt;
In each of these cases throughout the album, we see love tied to destruction, annihilation (personal or global), and heartache.&lt;/p&gt;
&lt;p&gt;Sapphire Bullets doesn&#39;t stipulate which one it is. It&#39;s just: &amp;quot;Here it is. Love and death. That&#39;s the song.&amp;quot;&lt;/p&gt;
&lt;h3 id=&quot;they-might-be-giants&quot; tabindex=&quot;-1&quot;&gt;they might be giants &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#they-might-be-giants&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/e-cz03eTE54?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274581173327388672&quot;&gt;1274581173327388672&lt;/a&gt;&lt;/small&gt;
(left) &amp;quot;Hang on&amp;quot;&lt;br /&gt;
(right) &amp;quot;--Hang on tight&amp;quot;&lt;/p&gt;
&lt;p&gt;They Might Be Giants (the song) is a whirlwind merry-go-round that opens with this recommendation swirling around our head.&lt;/p&gt;
&lt;p&gt;(If you have two working ears, listen with headphones. All of Flood, really, but especially this one.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274582000901357569&quot;&gt;1274582000901357569&lt;/a&gt;&lt;/small&gt;
They Might Be Giants is a song that TMBG wrote and recorded originally way back in 1985, but it didn&#39;t feel like it was a fit for the pink album or Lincoln. Where Theme roots the album firmly in 1990, this song says even more confidently, &amp;quot;Here we are. This is us.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274583828791611395&quot;&gt;1274583828791611395&lt;/a&gt;&lt;/small&gt;
John and John have described this song as their &amp;quot;Hey hey, we&#39;re the monkeys&amp;quot; track. It is in many ways the epitome of a TMBG song. Obscure samples, off the shelf drum track, absurd layering, and lyrics that hint at something much deeper. A found framework, coated in richness.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274584340584787968&quot;&gt;1274584340584787968&lt;/a&gt;&lt;/small&gt;
In &amp;quot;Gigantic&amp;quot;, they mentioned that the origin of the name &amp;quot;they might be giants&amp;quot; is not intended to be about themselves, but outward facing. It&#39;s a reference to Don Quixote tilting at windmills, but it&#39;s everyone out there in the world who might be giants.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274585453996326914&quot;&gt;1274585453996326914&lt;/a&gt;&lt;/small&gt;
John and John are not the windmills -- they are Don Quixote.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274586527113216001&quot;&gt;1274586527113216001&lt;/a&gt;&lt;/small&gt;
But anyway this song. There are so many layers it&#39;s amazing it doesn&#39;t sound like a muddy mess, but somehow it all fits together. If you listen carefully and focus on each individual part, you quickly lose track of all the different pieces. It&#39;s dizzying, but not cacophonous.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274587797148430341&quot;&gt;1274587797148430341&lt;/a&gt;&lt;/small&gt;
After each of the first few sections, the parts drift out, leaving a lonely horn or guitar swinging back and forth all alone before the rest of the parts come back in. It definitely feels like a large and well-coordinated orchestra, albeit one from a faery&#39;s fever dream.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274588245561503744&quot;&gt;1274588245561503744&lt;/a&gt;&lt;/small&gt;
And this was done by two guys with a 4-track, using an off the shelf drum track and a vocal sample from &amp;quot;a kinda fake, budget version of a self-improvement program that was on a cassette we bought for, probably, 10 cents in some junk store.&amp;quot;&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 56.00000000000001%;&quot;&gt;&lt;iframe width=&quot;356&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/75YZjb-H-sM?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274590364268023809&quot;&gt;1274590364268023809&lt;/a&gt;&lt;/small&gt;
The lyrics carry this further, listing a variety of things that &amp;quot;they&amp;quot; might be. The items are goofy and playful, but fit with the characteristic foreboding and anxiety that is present in the rest of Flood.&lt;/p&gt;
&lt;p&gt;First, they might be rain, heat, or frying up a stalk of wheat.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274591533824540679&quot;&gt;1274591533824540679&lt;/a&gt;&lt;/small&gt;
&amp;quot;Stalk of Wheat&amp;quot; is referenced again in the song by the same name on the album Spine, where the narrator went for a walk on a stalk of wheat, and ended up losing everything and being out of ideas.&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/eFxQdS0RdSw?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;Stalk of Wheat&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274591629601464320&quot;&gt;1274591629601464320&lt;/a&gt;&lt;/small&gt;
(So out of ideas, in fact, that he plucked one from a song he wrote 28 years earlier.)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274591963191193600&quot;&gt;1274591963191193600&lt;/a&gt;&lt;/small&gt;
In the context of Flood, the &amp;quot;stalk of wheat&amp;quot; seems, along with &amp;quot;Dr. Spock&#39;s backup band&amp;quot;, to be just an intentionally absurd way to say &amp;quot;they could be literally anything&amp;quot;. But in the second verse, it starts getting a bit darker. They might be brain, they might be washed.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274592369015287808&quot;&gt;1274592369015287808&lt;/a&gt;&lt;/small&gt;
And then we get the full vocal sample, alternating between speakers, cutting itself off.&lt;/p&gt;
&lt;p&gt;To make the merry-go-round go faster&lt;br /&gt;
--So that everyone needs to hang on tighter&lt;br /&gt;
----just to keep from being thrown to the wolves&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274592917785473024&quot;&gt;1274592917785473024&lt;/a&gt;&lt;/small&gt;
Tabloid footprints everywhere. We are dragged along by the hype that we&#39;ve created, and we can&#39;t stop creating it, because what are we going to do if it turns out to be false? What if these are really just windmills?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274594659629588482&quot;&gt;1274594659629588482&lt;/a&gt;&lt;/small&gt;
That the tabloid footprints are in your hair, and &amp;quot;they might be bald&amp;quot;, is a reference to Purple Toupee, a metaphor for the way period revivals tend to be based on fiction and hypocrisy. What if these maybe-giants are devoid of artifice? What if they don&#39;t play our games?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274595100333494272&quot;&gt;1274595100333494272&lt;/a&gt;&lt;/small&gt;
But, they might be &amp;quot;snow&amp;quot; (ie, an undifferentiated part of the background of countless other similar artists), or they might be &amp;quot;something else in the snow&amp;quot;. Something that truly stands out from the static.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274595360648749057&quot;&gt;1274595360648749057&lt;/a&gt;&lt;/small&gt;
Or they might be fake. Lies. Big big fake fake lies.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274595957993136128&quot;&gt;1274595957993136128&lt;/a&gt;&lt;/small&gt;
Along with Hey Mr. DJ, Piece of Dirt, Rhythm Section Want Ad, Puppet Head, Number 3, and many other early TMBG songs, this whole track is an ironic indictment of the entire enterprise of music, entertainment, and fame. And at the same time, it casually flaunts its brilliance.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274596852562710529&quot;&gt;1274596852562710529&lt;/a&gt;&lt;/small&gt;
In one breath, it says &amp;quot;fuck you and your bullshit party&amp;quot;, and also casually, even playfully, displays such a shocking level of technical prowess that it&#39;s impossible to discount.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274597378989805568&quot;&gt;1274597378989805568&lt;/a&gt;&lt;/small&gt;
While there&#39;s a lot of tracks and parts (2 guitars, 2 trumpet tracks, an entire choral arrangement of vocals), none of them are just banging away on a chord. Every one of those tracks is a worthwhile melody in its own right, but they all support one another as a cohesive piece.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274598139182198784&quot;&gt;1274598139182198784&lt;/a&gt;&lt;/small&gt;
The song is thus working on several levels as well. From the point of view of TMBG&#39;s would-be critics in the music industry (and remember, prior to Flood, they were small potatoes), it says &amp;quot;Listen asshats, yes, we&#39;re legit. We&#39;re working on a whole different level.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274598637251604481&quot;&gt;1274598637251604481&lt;/a&gt;&lt;/small&gt;
At the same time, looking outward as an artist trying to break into the mainstream success that will allow one to keep creating, it says, &amp;quot;What if they really are giants out there? Do we have a chance?&amp;quot; but lays its strongest hand out on the table nonetheless. We can&#39;t be silent.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274598896212180993&quot;&gt;1274598896212180993&lt;/a&gt;&lt;/small&gt;
Ultimately, even if the world is full of fakers and liars, heads full of tabloid footprints, they might be giants. We can&#39;t be silent. And if they aren&#39;t? We&#39;ll figure that out when we get there.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1274599352858640384&quot;&gt;1274599352858640384&lt;/a&gt;&lt;/small&gt;
Despite the somewhat pessimistic (some might say, realistic) view of business and culture, They Might Be Giants has an extremely encouraging message. It&#39;s the rallying cry to keep going in the face of tough odds and difficult challenges.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480276766801920&quot;&gt;1349480276766801920&lt;/a&gt;&lt;/small&gt;
&amp;quot;They Might Be Giants&amp;quot; fades out for a &lt;em&gt;long&lt;/em&gt; time. Each layer gradually peels back, leaving just the weird monster voice vocals and tweaky electronic sounds. A lesser band would have ended the album on that note. Flood would still be a classic if it had.&lt;/p&gt;
&lt;h3 id=&quot;road-movie&quot; tabindex=&quot;-1&quot;&gt;road movie &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#road-movie&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 74%;&quot;&gt;&lt;iframe width=&quot;267&quot; height=&quot;200&quot; src=&quot;https://www.youtube.com/embed/e-_Etalm7_w?feature=oembed&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; title=&quot;They Might Be Giants - TMBG / Road Movie to Berlin (2008-10-25 - (le) poisson rouge - New York, NY)&quot; style=&quot;position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480359478534144&quot;&gt;1349480359478534144&lt;/a&gt;&lt;/small&gt;
But no. The main attraction finished, we get the most &amp;quot;old movie soundtrack&amp;quot; song on the album, and what is, to this day, my favorite TMBG song: Road Movie To Berlin.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480393947287552&quot;&gt;1349480393947287552&lt;/a&gt;&lt;/small&gt;
Road Movie drips with film noir, alcohol and smoke and low light, set against the backdrop of East German communism and the Soviet bloc. &amp;quot;Can&#39;t drive out the way we drove in.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480441846194176&quot;&gt;1349480441846194176&lt;/a&gt;&lt;/small&gt;
This song, and the story around it, is a fascinating comment on the impermanence of human edifice. They didn&#39;t intend it to be timely when they wrote this song, or when they recorded it. At the time, the Berlin Wall seemed as permanent as anything.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480475799109634&quot;&gt;1349480475799109634&lt;/a&gt;&lt;/small&gt;
Between recording and release, the wall came down. So much for that. Flans said it&#39;s strangely dated, &amp;quot;like pulling out my vietnam war song&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480559119003649&quot;&gt;1349480559119003649&lt;/a&gt;&lt;/small&gt;
The verses aren&#39;t long, and each feels like only half of the conversation, trailing off in a deeply unsatisfying way. A conversation where much is left unsaid, getting at many of the themes and messages in the rest of Flood.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480600411881474&quot;&gt;1349480600411881474&lt;/a&gt;&lt;/small&gt;
The bookends, just the image of two people in a &amp;quot;road movie&amp;quot; (a genre of movie where the characters leave home and go on a long adventure) to Berlin. But, once there, they&#39;re stuck. Can&#39;t drive out the way we drove in.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480632057884673&quot;&gt;1349480632057884673&lt;/a&gt;&lt;/small&gt;
So what&#39;s to do? Sneak out a drink, and let&#39;s go for it. Why not?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480679642333184&quot;&gt;1349480679642333184&lt;/a&gt;&lt;/small&gt;
&amp;quot;We were once so close to Heaven, Peter came out and gave us medals, declaring us the nicest of the damned.&amp;quot; Congratulations, you tried, but you failed. Thanks for playing the &amp;quot;life&amp;quot; game, better luck next time.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480713557430272&quot;&gt;1349480713557430272&lt;/a&gt;&lt;/small&gt;
This song has a verse that was included in the liner notes, and typically performed live, but didn&#39;t make it onto the recording. It is:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480756976906241&quot;&gt;1349480756976906241&lt;/a&gt;&lt;/small&gt;
&amp;quot;You said you were the King of Liars&lt;br /&gt;
And I believed you and called you sire&lt;br /&gt;
But I realize now that I have been deceived&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480952234344449&quot;&gt;1349480952234344449&lt;/a&gt;&lt;/small&gt;
The second to last verse acts as a sort of bridge before the final closing, and sums up the overarching themes of Flood perfectly:&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349480992659050498&quot;&gt;1349480992659050498&lt;/a&gt;&lt;/small&gt;
&amp;quot;Time won&#39;t find the lost. It&#39;ll sweep up our skeleton bones. So take the wheel, and I will take the pedals.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481022975401985&quot;&gt;1349481022975401985&lt;/a&gt;&lt;/small&gt;
There is no satisfying ending, no final wrap-up. The losses are just lost, never to be seen again. All is impermanent, all goes to dust. Our lives and great struggles are fleeting and irrelevant in the fullness of time. But we go on, together.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481079011385344&quot;&gt;1349481079011385344&lt;/a&gt;&lt;/small&gt;
I am always struck by the image of one person working the pedals of a car while the other steers, an awkward and yet intimate bonding as we attempt to work together and make progress, despite the ultimate irrelevance of it all.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481116495822849&quot;&gt;1349481116495822849&lt;/a&gt;&lt;/small&gt;
We are stuck with this life. We cannot escape the same way we got here. There is no turning back. The only way out is through. So let&#39;s go.&lt;/p&gt;
&lt;h3 id=&quot;epilogue&quot; tabindex=&quot;-1&quot;&gt;epilogue &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2021/01/a-twitter-thread-about-flood-by-they-might-be-giants/#epilogue&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481241565806596&quot;&gt;1349481241565806596&lt;/a&gt;&lt;/small&gt;
When I started this thread, I was a brand new parent, just shy of two months into this phase of my adventure. Barack Obama was president. My startup had just raised its Series A.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481284125356032&quot;&gt;1349481284125356032&lt;/a&gt;&lt;/small&gt;
Now that baby who slept on my chest as I wrote those early tweets is a thoughtful precocious kid, almost 5 years old. We are at the tail-end (hopefully!) of a period of disease discord and upheaval; some of it productive, much of it pointless and painful.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481323468005376&quot;&gt;1349481323468005376&lt;/a&gt;&lt;/small&gt;
So many of our hopes have evaporated and fallen through our fingers. And several wonderful things have come into my life that I wouldn&#39;t have known to hope for.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481359874510848&quot;&gt;1349481359874510848&lt;/a&gt;&lt;/small&gt;
I suppose I could feel some sense of accomplishment or finality at finishing this absurd and poignant homage to such an absurd and poignant piece of art.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481393571545088&quot;&gt;1349481393571545088&lt;/a&gt;&lt;/small&gt;
But mostly, it&#39;s just another thing to be washed away by the rising tide of time. More skeleton bones to be swept up.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481451180331014&quot;&gt;1349481451180331014&lt;/a&gt;&lt;/small&gt;
Nihilism can depress us and make progress and forward motion feel impossible and pointless. Or it can be a calling, a beckoning warning that there is no future written in the stars, no joy but that which we make for ourselves, no time to waste.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481483182854144&quot;&gt;1349481483182854144&lt;/a&gt;&lt;/small&gt;
Will you be Person Man? Will you rock a barstool, making excuses for your past failures? Or will you rise to the challenge of that long road movie, sneaking out what small peasures you can?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481516624035840&quot;&gt;1349481516624035840&lt;/a&gt;&lt;/small&gt;
The world is full of absurdity if you just think to look at it critically, all this pride and folly and attachment. None of this is essential. Nothing is above examination. All is impermanent and fleeting.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481908288118785&quot;&gt;1349481908288118785&lt;/a&gt;&lt;/small&gt;
Carry these petty grievances and stresses lightly. You can&#39;t take them with you. In the end, you may just be groceries on the shelf, accidentally taken off the shelf before their expiration date.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://twitter.com/izs/status/1349481955516006401&quot;&gt;1349481955516006401&lt;/a&gt;&lt;/small&gt;
Do your best, folks. Be kind to each other. Grab the life you have while you have it. Thanks for reading.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Next Phase Montage</title>
		<link href="https://blog.izs.me/2020/03/next-phase-montage/"/>
		<updated>2020-03-16T17:00:00Z</updated>
		<id>https://blog.izs.me/2020/03/next-phase-montage/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://blog.npmjs.org/post/612764866888007680/next-phase-montage&quot;&gt;npmjs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;tl;dr -- Good news!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://github.blog/2020-03-16-npm-is-joining-github/&quot;&gt;&lt;strong&gt;npm, Inc., is being purchased by
GitHub.&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The public registry remains public, free, and as available as ever.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;npm as you know it continues, and in fact, there is good reason to
believe that it&#39;ll only get better.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I&#39;m still going to be working on npm (but with the luxury of more
resources and less stress).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I&#39;m really excited about the stuff we&#39;re going to do.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;It is customary for a founder, in the closing chapter of their startup, to
ruminate in a blog post about their incredible journey&lt;sup style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montagefn1&quot; id=&quot;montageref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.  When we founded npm, Inc., I knew that I
was signing up for a post like this someday.  I&#39;m extremely thankful that
this is the one I get to write&lt;sup style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montagefn2&quot; id=&quot;montageref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;h2 id=&quot;history-and-origin&quot; tabindex=&quot;-1&quot;&gt;history and origin &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#history-and-origin&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Back in 2009, after too long without a vacation, I quit my job, in hopes of
discovering what happens when I untether my creativity.&lt;/p&gt;
&lt;p&gt;What happened is I wrote a package manager.&lt;/p&gt;
&lt;p&gt;I created npm with the goal of sharing modules in a tiny group of nerdy
weirdos who&#39;d decided to write web servers in JavaScript.  From that niche
beginning, npm grew, slowly but surely, the background project I&#39;d greedily
steal away time for.&lt;/p&gt;
&lt;p&gt;At the end of 2013, npm hit a rough spot and we had to make a decision.
This was the first big bookmark in the npm story, when the project could no
longer survive on donations.  We made some slide decks and raised an amount
of money that seemed enormous at the time, but inevitably got spent
&lt;em&gt;really&lt;/em&gt; fast.&lt;/p&gt;
&lt;h2 id=&quot;the-part-where-i-talk-about-startups&quot; tabindex=&quot;-1&quot;&gt;the part where i talk about startups &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#the-part-where-i-talk-about-startups&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Running a company is &lt;em&gt;hard&lt;/em&gt;.  It is grueling, unglamorous work.&lt;/p&gt;
&lt;p&gt;I don&#39;t want to make it sound completely terrible.  There are definitely a
few awesome parts.  But once is enough for me.&lt;/p&gt;
&lt;p&gt;Throughout this journey, our north star has been the mission that we
founded this company with: &lt;strong&gt;reduce friction in JavaScript software
development&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;I have a set of goals that I wrote down back then, and have shared openly
with the team.  They haven&#39;t changed much.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Keep the npm registry running forever (not only for the life of the
company).&lt;/li&gt;
&lt;li&gt;Be a company that we can all enjoy working at, and do the best work of
our careers up until now.&lt;/li&gt;
&lt;li&gt;Get a big enough exit that I can quit my job and see what comes out of
me a second time.&lt;/li&gt;
&lt;li&gt;Share the rewards equitably with the people who got npm to where it is.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There are few unmitigated successes or failures in the real world.  But
this is a win, and a good one, for me and the team and the entire
JavaScript community.&lt;/p&gt;
&lt;p&gt;We have made tremendous progress on (1), and that&#39;s the thing I&#39;m happiest
about in this.  As far as (2), there&#39;s been ups and downs, to say the
least, but the bright spots outshine the dark.  I&#39;ve lost some valued
friendships in the process, but made a few as well.  On (3), well, I&#39;m
still working a jobby job, but I always knew that was a long shot, and
&amp;quot;make npm a better package manager&amp;quot; is a job I enjoy.  And as for (4), I&#39;m
proud of the deals that we&#39;ve been able to negotiate for the team.&lt;/p&gt;
&lt;p&gt;It&#39;s not a kajillion billion dollar 10x startup cinderella story, and we&#39;ve
taken our hits, but in the end we&#39;ve done right by our community, team, and
careers, and I&#39;m extremely proud of what we&#39;ve achieved.&lt;/p&gt;
&lt;h2 id=&quot;the-part-where-i-talk-about-the-company-buying-us&quot; tabindex=&quot;-1&quot;&gt;the part where i talk about the company buying us &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#the-part-where-i-talk-about-the-company-buying-us&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the questions founders get asked a lot is &amp;quot;what might your exit look
like?&amp;quot;  I always mentioned the big tech companies as possibilities, and
GitHub as a sort of &amp;quot;wishful thinking&amp;quot; option.&lt;/p&gt;
&lt;p&gt;I&#39;ve been following GitHub&#39;s trajectory closely since they came to Yahoo!
to give a talk about git and social coding &lt;a href=&quot;https://yuiblog.com/blog/2009/09/29/video-github/&quot;&gt;way back in
2009&lt;/a&gt;&lt;sup style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montagefn3&quot; id=&quot;montageref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;.  It&#39;s been a huge part of my life ever
since I dove head-first into open source as a lifestyle choice.&lt;/p&gt;
&lt;p&gt;When I saw the GitHub Packages beta announcement and demo at GitHub HQ in
San Francisco, I remember turning to Shanku Niyogi and clumsily blurting
out, &amp;quot;Why aren&#39;t you trying to buy us?&amp;quot;&lt;/p&gt;
&lt;p&gt;It seemed so maddeningly... &lt;em&gt;obvious&lt;/em&gt;.  Forget about whose logo is on which
webpage, just... if you&#39;re going to &lt;em&gt;do&lt;/em&gt; this thing, do it &lt;em&gt;right&lt;/em&gt;, ffs.
This clearly needs to be integrated with the actual registry in a very deep
way.  &amp;quot;I mean... You &lt;em&gt;see&lt;/em&gt; that, right?&amp;quot;  (I think he probably did.  And if
he didn&#39;t, then props to him for taking my reaction as flattery or a good
idea, rather than condescension.)&lt;/p&gt;
&lt;p&gt;What I didn&#39;t really expect at the beginning of the acquisition process was
how much I&#39;d genuinely &lt;em&gt;like&lt;/em&gt; everyone I met at GitHub, starting with my
initial conversations with Nat, as well as all the people on the team he&#39;s
built.  As we dug into the technical and strategic plans for how npm would
fit into the vision of GitHub moving forward, it became clear that this
isn&#39;t just a good option for the JavaScript community -- it&#39;s significantly
&lt;em&gt;better&lt;/em&gt; than what npm, Inc., can provide on its own.&lt;/p&gt;
&lt;p&gt;There are not many companies that can claim to have the kind of fanatical
commitment to open source that GitHub does.  In the track record of Nat and
the team he&#39;s assembled, there&#39;s really something special here that I&#39;m
thrilled to be a part of.&lt;/p&gt;
&lt;p&gt;I&#39;ve said countless times before that I wouldn&#39;t let the registry go
someplace that won&#39;t take care of it.  (See goal (1) above.  I&#39;ve
sacrificed years of my life and put a strain on many personal and
professional relationships in pursuit of that goal.)&lt;/p&gt;
&lt;p&gt;As GitHub has branched out into other aspects of the end-to-end developer
community experience, it&#39;s natural to see how the JavaScript package
management process fits into that story.  It&#39;s not a loss leader or an
experimental add-on or a way to quickly hire a team.  Rather, the npm
registry is a significant and concrete strategic asset serving GitHub&#39;s
mission of eliminating transaction costs in software development.&lt;/p&gt;
&lt;p&gt;That&#39;s important.&lt;/p&gt;
&lt;h2 id=&quot;the-part-about-what-comes-next&quot; tabindex=&quot;-1&quot;&gt;the part about what comes next &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#the-part-about-what-comes-next&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Today, npm serves over 1.3 million packages to roughly 12 million
developers, who download these things 75 billion times a month, and all of
this is growing at a rate that ensures these massive numbers will seem
small in a few years.&lt;/p&gt;
&lt;p&gt;Our commitment to that community is to keep the npm registry free for open
source development for the foreseeable future, and continue to improve the
npm CLI.  At GitHub, npm will have the added support and backing of one of
the world&#39;s largest companies, behind the world&#39;s largest community of
developers.&lt;/p&gt;
&lt;p&gt;There are some awesome opportunities for improvement in the npm experience,
to meaningfully improve life for JS devs in countless large and small ways.
We&#39;ll be making things more reliable, convenient, and connected for
everyone across our vast interdependent JavaScript ecosystem.&lt;/p&gt;
&lt;p&gt;For six years, in the grind of a startup, we&#39;ve had dreams too big to dare
hope for.  This next chapter is a chance to realize those dreams.&lt;/p&gt;
&lt;p&gt;This is the end of &amp;quot;npm, Inc.&amp;quot;, the Delaware C Corp.  But it&#39;s an exciting
upgrade for npm.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;small id=&quot;montagefn1&quot; style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montageref1&quot;&gt;[1]&lt;/a&gt;: Reference joke &lt;a href=&quot;https://ourincrediblejourney.tumblr.com/&quot;&gt;Our Incredible
Journey&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;montagefn2&quot; style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montageref2&quot;&gt;[2]&lt;/a&gt;: It&#39;s also worth noting that GitHub allowed
such a long, nuanced, and candid announcement as this one, and didn&#39;t push
for a watered down corporate version.  Cultural alignment is a good
sign.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;small id=&quot;montagefn3&quot; style=&quot;font-size: 0.8em&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2020/03/next-phase-montage/#montageref3&quot;&gt;[3]&lt;/a&gt;: Check out the date on the &lt;a href=&quot;https://web.archive.org/web/20200406085446/https://yuiblog.com/blog/2009/09/29/video-github/&quot;&gt;post for that
talk&lt;/a&gt;.
Then note the date on &lt;a href=&quot;https://github.com/npm/cli/commit/4626dfa73b7847e9c42c1f799935f8242794d020&quot;&gt;this
commit&lt;/a&gt;.
It&#39;s like some kind of cryptic message from the past, and it&#39;s weirding me
out, tbh.&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>An Old Bug</title>
		<link href="https://blog.izs.me/2019/07/an-old-bug/"/>
		<updated>2019-07-10T00:00:00Z</updated>
		<id>https://blog.izs.me/2019/07/an-old-bug/</id>
		<content type="html">&lt;p&gt;Recently, I happened across &lt;a href=&quot;https://github.com/npm/read-package-tree/blob/4eed760/rpt.js#L88&quot;&gt;weird line in
&lt;code&gt;read-package-tree&lt;/code&gt;&lt;/a&gt;
while reading through the code to see where I might get started
implementing Workspaces for the npm CLI.&lt;/p&gt;
&lt;p&gt;At the time, I was so deep in the flow of reading code and tracing flows
through various parts of the system, it didn&#39;t strike me how important it
was.  I just thought &amp;quot;oh, that&#39;s obviously wrong&amp;quot; and &lt;a href=&quot;https://github.com/npm/read-package-tree/blob/e9cd536/rpt.js#L137&quot;&gt;fixed
it&lt;/a&gt;
without a second thought.  When I tried to integrate my changes back to the
mainline CLI with &lt;code&gt;read-package-tree&lt;/code&gt; version 5.3.0, however, I realized
what I&#39;d found.&lt;/p&gt;
&lt;p&gt;It might not seem weird at first, so I&#39;ll provide some context.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;read-package-tree&lt;/code&gt; module reads the tree of packages in a
&lt;code&gt;node_modules&lt;/code&gt; folder.  It doesn&#39;t do dependency resolution, or figure out
how that tree needs to be modified during an install or update, but it
&lt;em&gt;does&lt;/em&gt; provide the basic data structure that is subsequently modified
within the npm CLI installer codebase.  Most importantly, it loads &lt;code&gt;Node&lt;/code&gt;
objects with &lt;code&gt;parent&lt;/code&gt; and &lt;code&gt;children&lt;/code&gt; links on them.&lt;/p&gt;
&lt;p&gt;Node.js&#39;s module loader has a subtle and important property to it, which
makes a lot of npm&#39;s magic possible, and has made it such a good choice
over the years as a way to create CLI utilities.  When a module in Node
calls &lt;code&gt;require(&#39;foo&#39;)&lt;/code&gt;, Node looks up through the &lt;code&gt;node_modules&lt;/code&gt; hierarchy
to find the &lt;code&gt;foo&lt;/code&gt; module.  However, importantly, when a package is
symlinked into another location, the module resolution process runs based
on the &lt;em&gt;target&lt;/em&gt; location, not the &lt;em&gt;link&lt;/em&gt; location.&lt;/p&gt;
&lt;p&gt;This is why, for example, you can have a symlink from &lt;code&gt;/usr/local/bin/npm&lt;/code&gt;
that points to &lt;code&gt;/usr/local/lib/node_modules/npm/bin/npm-cli.js&lt;/code&gt;, but the
program doesn&#39;t have to be updated to carry all its dependencies along with
it.  This is how you can have multiple different versions of a dependency
loaded in the same Node program at the same time, providing a release valve
on the dependency constraint solver and thus avoiding dependency hell.&lt;/p&gt;
&lt;p&gt;So back to this weird line.  In the context of that file, this bit of code
is loading up the children of a given node.  In order to match Node&#39;s
module resolution algorithm, that &lt;em&gt;should&lt;/em&gt; be reading the target and then
loading the children there, rather than treating the &lt;em&gt;link&lt;/em&gt; as the parent.&lt;/p&gt;
&lt;p&gt;In the mindset of general code cleanup, I &lt;a href=&quot;https://github.com/npm/read-package-tree/commit/e9cd536c543a0b722cb3acdee2cf2c7f881a9016#diff-e9a2fce8b6849815821a380c66e2a11aR137&quot;&gt;modified it without even really
noticing&lt;/a&gt;
and then mistakenly let it slip past into a completely unrelated commit.&lt;/p&gt;
&lt;p&gt;When I tried to integrate &lt;code&gt;read-package-tree&lt;/code&gt; (with this change) into the
npm CLI, a bunch of tests broke in really bizarre ways.  That&#39;s when it hit
me what was going on, and a &lt;em&gt;lot&lt;/em&gt; of strange CLI behavior over the years
started to make a ton of sense.  Like, how occasionally a manually
symlinked module would result in its dependencies being stripped away or
mutated in some way that seemed to make no sense.  (I&#39;m sure most people
don&#39;t do this, but as someone who is probably too comfortable with module
systems, I often mess with my projects with reckless abandon.)&lt;/p&gt;
&lt;p&gt;Prior to npm v3, there was no deduplication by default, and installation
happened in a very naive &amp;quot;run in parallel, fetch whatever is still needed
at that level&amp;quot; kind of way.  It was dumb, in a mostly good way, but the
result was that occasionally you&#39;d get 15 copies of something when 1 would
do just fine.  It also meant that a proper progress bar was impossible,
since the installer had no way of knowing when it would be done.  (Simple
loop detection helped it know that eventually it &lt;em&gt;would&lt;/em&gt; be done, but not
&lt;em&gt;when&lt;/em&gt;, exactly.)&lt;/p&gt;
&lt;p&gt;Over the years, npm has had a lot of bugfixes and logic added to work
around the issues that this one subtle mistake caused.  The result of all
that fixing, however, means that fixing the bug breaks a lot of stuff that
works just fine today.  The good news is that npm v7 will have Workspaces,
and (once the installer is completely refactored into
&lt;a href=&quot;https://github.com/npm/arborist&quot;&gt;@npmcli/arborist&lt;/a&gt;), it&#39;ll be trivial to
implement.&lt;/p&gt;
&lt;p&gt;Out of idle curiosity, I tracked down where this bug had snuck in, though I
was pretty sure I already knew the answer.  It dates back to the &lt;a href=&quot;https://github.com/npm/read-package-tree/commit/d8b7143&quot;&gt;original
inception of the &lt;code&gt;read-package-tree&lt;/code&gt;
module&lt;/a&gt;.  It
really &lt;em&gt;should&lt;/em&gt; have been caught and fixed in
&lt;a href=&quot;https://github.com/npm/read-package-tree/commit/db70482&quot;&gt;db70482&lt;/a&gt; but,
well, it wasn&#39;t.&lt;/p&gt;
&lt;p&gt;Spotted my past self red-handed, messing with me as usual, sneaking bugs
into my code.  If I ever catch that guy, he&#39;ll have quite a few things to
answer for.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Easy Automatic npm Publishes</title>
		<link href="https://blog.izs.me/2019/04/easy-automatic-npm-publishes/"/>
		<updated>2019-04-30T16:00:00Z</updated>
		<id>https://blog.izs.me/2019/04/easy-automatic-npm-publishes/</id>
		<content type="html">&lt;p&gt;One common question from people using npm to publish, especially on CI systems,
is how best to automate the process, especially when dealing with multiple
branches.&lt;/p&gt;
&lt;p&gt;For a while now, I&#39;ve been using a pattern that takes almost all of the human
interaction out of it, since I tend to mess stuff up when I type it with my
fingers.  This works well for automatic publishes from CI or when publishing
manually from a terminal.&lt;/p&gt;
&lt;p&gt;I haven&#39;t manually typed &lt;a href=&quot;https://docs.npmjs.com/cli/publish&quot;&gt;&lt;code&gt;npm publish&lt;/code&gt;&lt;/a&gt; in a while, which is a good
thing.&lt;/p&gt;
&lt;h2 id=&quot;first-things-first-have-good-tests&quot; tabindex=&quot;-1&quot;&gt;First things first, have good tests &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#first-things-first-have-good-tests&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I am a huge fan of running tests with 100% test coverage.  It isn&#39;t a perfect
guard against every problem out there, but it does keep me from doing stupid
things, like assuming that I know what my program does.&lt;/p&gt;
&lt;p&gt;My go-to test library is &lt;a href=&quot;https://www.node-tap.org/&quot;&gt;&lt;code&gt;tap&lt;/code&gt;&lt;/a&gt;, but you can do this
with any testing library that supports code coverage.  If it doesn&#39;t support
code coverage out of the box, you can use &lt;a href=&quot;https://istanbul.js.org/&quot;&gt;&lt;code&gt;nyc&lt;/code&gt;&lt;/a&gt; to
run any Node.js process with coverage tracking.&lt;/p&gt;
&lt;p&gt;To use it, run &lt;code&gt;npm i tap -D&lt;/code&gt;, and then add this to your &lt;code&gt;scripts&lt;/code&gt; section in
package.json:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;the-npm-version-command&quot; tabindex=&quot;-1&quot;&gt;The &lt;code&gt;npm version&lt;/code&gt; Command &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#the-npm-version-command&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://docs.npmjs.com/cli/version&quot;&gt;&lt;code&gt;npm version&lt;/code&gt;&lt;/a&gt; command will
figure out what the next version should be, edit your package.json file, and
even check it into git with a signed tag.  The beauty of this is that it also
prevents you from bumping the version when you have untracked changes in your
git working directory, and provides some hook scripts that can do other things
before or after the version bump.&lt;/p&gt;
&lt;p&gt;In the &lt;code&gt;scripts&lt;/code&gt; section of my &lt;code&gt;package.json&lt;/code&gt; file, I add a &lt;code&gt;preversion&lt;/code&gt; script
that runs my tests:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;preversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, before I can bump the version, npm will make sure that my tests pass.  If
the test fails (or if coverage isn&#39;t 100%), then it&#39;ll fail and the version
command fails.&lt;/p&gt;
&lt;h2 id=&quot;publishing-on-version-change&quot; tabindex=&quot;-1&quot;&gt;Publishing on Version Change &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#publishing-on-version-change&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bumping the version is fine, but then it&#39;s time to share it.  Along with
&lt;code&gt;preversion&lt;/code&gt;, the &lt;code&gt;postversion&lt;/code&gt; command does actions &lt;em&gt;after&lt;/em&gt; the version is
bumped.  So, let&#39;s hook onto that to publish the package.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm publish&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;preversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;keeping-git-and-npm-in-sync&quot; tabindex=&quot;-1&quot;&gt;Keeping Git and npm in Sync &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#keeping-git-and-npm-in-sync&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;That&#39;s fine for pushing to npm, but then I have to remember to push the changes
to git.  (I have &lt;em&gt;many times&lt;/em&gt; forgotten to do this, and gotten issues because
the code on npm is not in GitHub, which is generally a bad sign.)&lt;/p&gt;
&lt;p&gt;Thankfully, npm also gives us a way to hook a script around the &lt;code&gt;publish&lt;/code&gt;
event, so let&#39;s use that:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postpublish&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;git push origin --all; git push origin --tags&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm publish&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;preversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This runs two commands.  The first pushes all branches, and the second pushes
all the tags (including my newly published version tag).&lt;/p&gt;
&lt;h2 id=&quot;branches-and-dist-tags&quot; tabindex=&quot;-1&quot;&gt;Branches and Dist-Tags &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#branches-and-dist-tags&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Occasionally, I&#39;ll find myself working on some big feature for a new release
that is not yet ready for prime time.&lt;/p&gt;
&lt;p&gt;In the feature branch, I&#39;ll modify the scripts by adding a &lt;code&gt;--tag&lt;/code&gt; argument to
the npm publish command to put it on a
&lt;a href=&quot;https://docs.npmjs.com/cli/dist-tag&quot;&gt;dist-tag&lt;/a&gt; other than &lt;code&gt;latest&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm publish --tag=next&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postpublish&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;git push origin --all; git push origin --tags&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;preversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, I can tell people to run &lt;code&gt;npm install my-module@next&lt;/code&gt; to try out the new
prerelease version.&lt;/p&gt;
&lt;p&gt;On the other side, I might want to land a bugfix or backport a feature for a
legacy version.  To do that, I create a git branch with the old version, and
update &lt;code&gt;package.json&lt;/code&gt; to add a &lt;code&gt;legacy&lt;/code&gt; tag instead.&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;scripts&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm publish --tag=legacy&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;postpublish&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;git push origin --all; git push origin --tags&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;preversion&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;npm test&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;test&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;tap&quot;&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;tap&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;check-coverage&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;bonus-points:-sign-your-versions&quot; tabindex=&quot;-1&quot;&gt;Bonus Points: Sign Your Versions &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#bonus-points:-sign-your-versions&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Git has support for PGP signing tagged commits.  To tell npm to take advantage
of this, set these two config values:&lt;/p&gt;
&lt;pre class=&quot;language-bash&quot;&gt;&lt;code class=&quot;language-bash&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; config &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; sign-git-commit &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;
&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; config &lt;span class=&quot;token builtin class-name&quot;&gt;set&lt;/span&gt; sign-git-tag &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If setting up PGP and hooking it up with Git is too much of a pain, you&#39;re not
alone.  I&#39;m a nerd who&#39;s been computering for a very long time, and I can&#39;t
handle it.  Also, I&#39;m always worried about my keys just sitting on my machine
in text files, even if they are encrypted with a passphrase.  And if they &lt;em&gt;are&lt;/em&gt;
encrypted with a passphrase, then I have to type it in all the time, and that&#39;s
just too much work.&lt;/p&gt;
&lt;p&gt;I&#39;m a huge fan of &lt;a href=&quot;https://krypt.co/&quot;&gt;Krypton&lt;/a&gt;.  It stores your PGP and SSH
private keys in your mobile device&#39;s secure storage vault, and then sends a
push notification to allow it to do things with those keys.  It&#39;s dead-simple
to set up, and extremely easy to use, and gives you a hardware second factor
for everything that matters.&lt;/p&gt;
&lt;p&gt;Of course, and I don&#39;t exactly know if this is a bug or a feature, it does mean
that whenever I run &lt;code&gt;npm version&lt;/code&gt;, between the commit, the signature, the tag,
and the two SSH connections, my phone does a lot of buzzing.&lt;/p&gt;
&lt;h2 id=&quot;running-npm-version-to-test-and-publish&quot; tabindex=&quot;-1&quot;&gt;Running &lt;code&gt;npm version&lt;/code&gt; to Test and Publish &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#running-npm-version-to-test-and-publish&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From there, I use the &lt;a href=&quot;https://docs.npmjs.com/cli/version&quot;&gt;&lt;code&gt;npm version&lt;/code&gt;&lt;/a&gt;
command to do all my publishing.  For bug fixes, I run &lt;code&gt;npm version patch&lt;/code&gt;.
For new features, I run &lt;code&gt;npm version minor&lt;/code&gt;.  For breaking changes, I run &lt;code&gt;npm version major&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you use &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt; or
similar tools, you could even automate the detection of what kind of version
bump it should be, though that&#39;s left as an exercise for the reader.&lt;/p&gt;
&lt;p&gt;This approach of using npm scripts to automate the process works well with any
system where you&#39;ll be publishing and committing.  Set it up in your next
project, and trust your human fingers a little bit less :)&lt;/p&gt;
&lt;h2 id=&quot;ps:-npm-configuration-is-very-flexible&quot; tabindex=&quot;-1&quot;&gt;PS: npm Configuration is Very Flexible &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/04/easy-automatic-npm-publishes/#ps:-npm-configuration-is-very-flexible&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You&#39;ll note that I did &lt;code&gt;--tag=&amp;lt;whatever&amp;gt;&lt;/code&gt; in the publish commands above.  You
can also &lt;a href=&quot;https://docs.npmjs.com/misc/config&quot;&gt;configure&lt;/a&gt; npm in many other
ways.  Any configuration value (including &lt;code&gt;tag&lt;/code&gt; in the case of &lt;code&gt;npm publish&lt;/code&gt;)
can be set:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;explicitly on the command line, like &lt;code&gt;--tag=whatever&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;in the environment, like &lt;code&gt;NPM_CONFIG_TAG=whatever&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;in a &lt;code&gt;.npmrc&lt;/code&gt; file in the root of your project, like &lt;code&gt;tag = whatever&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;in a &lt;code&gt;.npmrc&lt;/code&gt; file in your home directory&lt;/li&gt;
&lt;li&gt;in &lt;code&gt;/usr/local/etc/npmrc&lt;/code&gt; (or &lt;code&gt;/usr/etc/npmrc&lt;/code&gt; on some systems).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This works inheritance-style, so the higher up on that list a setting is, the
higher the priority.&lt;/p&gt;
&lt;p&gt;For CI/CD systems, this means that you can sometimes set environment variables
to control the behavior of npm commands, without having to change the code or
inject files into places.  If it&#39;s easier to control it with a file (for
example, checking a &lt;code&gt;.npmrc&lt;/code&gt; file into git), then that&#39;s also fine.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On Building npm and Hiring a CEO - Founders Talk</title>
		<link href="https://blog.izs.me/2019/01/on-building-npm-and-hiring-a-ceo-founders-talk/"/>
		<updated>2019-01-25T18:36:02Z</updated>
		<id>https://blog.izs.me/2019/01/on-building-npm-and-hiring-a-ceo-founders-talk/</id>
		<content type="html">&lt;p&gt;I had the opportunity to chat with Adam Stacoviak recently about the
journey of creating npm and turning that into npm, Inc., 4 and a half
years as CEO, and the transition to my new role as Chief Product
Officer.  Along the way, we touched on some of the long dark teatimes
of the soul one goes through when contemplating handing your company
over to a new leader, after pouring your heart into it for so long.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changelog.com/founderstalk/61&quot;&gt;I hope you enjoy it.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Imgur - One hell of a rollercoaster ride</title>
		<link href="https://blog.izs.me/2019/01/imgur-one-hell-of-a-rollercoaster-ride/"/>
		<updated>2019-01-16T23:04:15Z</updated>
		<id>https://blog.izs.me/2019/01/imgur-one-hell-of-a-rollercoaster-ride/</id>
		<content type="html">&lt;p&gt;wow.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>OSS, Risk, and Compliance</title>
		<link href="https://blog.izs.me/2019/01/oss-and-compliance/"/>
		<updated>2019-01-16T19:32:23Z</updated>
		<id>https://blog.izs.me/2019/01/oss-and-compliance/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://blog.npmjs.org/post/182064135060/oss-risk-and-compliance&quot;&gt;npmjs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&#39;m going to tell you a story.&lt;/p&gt;
&lt;p&gt;There are no villains in this story.  Just smart people doing their
best, and unfortunately working at cross-purposes through no fault of
their own.&lt;/p&gt;
&lt;p&gt;The names and places have been changed, but it is a true story.  I&#39;ve
heard this story a lot over the years in my role at
npm.&lt;/p&gt;
&lt;h2 id=&quot;once-upon-a-time...&quot; tabindex=&quot;-1&quot;&gt;Once Upon A Time... &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#once-upon-a-time...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Way back in the late 1900s, the once-successful ACME Corporation was
falling behind. Their development of proprietary widgets (on a
proprietary software stack) was unable to keep up with the
competition, who were leveraging Open Source platforms at a much lower
cost.&lt;/p&gt;
&lt;p&gt;Many within ACME Corp wanted to adopt the &lt;abbr title=&quot;Open Source
Software&quot;&gt;OSS&lt;/abbr&gt; approach, but they were bound by a multitude of
contracts and agreements with customers and the regulatory rules of
the various countries in which ACME Corp operated.&lt;/p&gt;
&lt;p&gt;ACME Corp was in a pickle.  Over a barrel.  Pickled in a barrel of
mixed metaphors, one could say.&lt;/p&gt;
&lt;h2 id=&quot;accepting-open-source-software&quot; tabindex=&quot;-1&quot;&gt;Accepting Open Source Software &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#accepting-open-source-software&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Luckily, ACME Corp hit on a solution. They joined some of the
foundations springing up to provide governance structures for popular
OSS projects, and instituted a policy where any employee could use any
Open Source code that they liked, provided it was submitted for review
by their compliance team.&lt;/p&gt;
&lt;p&gt;This allowed them to avoid projects that were abandoned, insecure, or
published with an incompatible license. Using a simple form was all it
took, their developers could deliver value using the most up to date
methods and tools.&lt;/p&gt;
&lt;p&gt;Life was good.&lt;/p&gt;
&lt;h2 id=&quot;then-life-changed&quot; tabindex=&quot;-1&quot;&gt;Then Life Changed &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#then-life-changed&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Shortly after the turn of the 21st century, a series of well-intended
solutions to valid problems ended up causing new problems for ACME
Corp.  All solutions, in solving a problem, reveal new ones.&lt;/p&gt;
&lt;p&gt;First, GitHub made it far easier for developers of Open Source to
collaborate with one another. This allowed projects to become quite
popular without any corporate or nonprofit backing.&lt;/p&gt;
&lt;p&gt;Next, Node.js brought JavaScript out of the web browser. Prior to
Node, plenty of Server-Side JS platforms had been hacked up as side
projects, or funded projects of promising companies.  But Node was the
first to significantly benefit from GitHub&#39;s network effects.&lt;/p&gt;
&lt;p&gt;The last piece of this puzzle was an early Node.js contributor, who&#39;d
been working in the SSJS space for a while, and decided to write a
&lt;a href=&quot;https://www.npmjs.com/&quot;&gt;package manager&lt;/a&gt;. He&#39;d seen the importance of
package management as a development tool before, and had spent quite a
bit of time thinking about how reducing friction makes great things
happen.&lt;/p&gt;
&lt;h2 id=&quot;impacts&quot; tabindex=&quot;-1&quot;&gt;Impacts &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#impacts&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A simple module system and package methodology became ubiquitous.
Suddenly JavaScript was easy to share and compose.  Instead of
JavaScript platforms having to include the kitchen sink, they could be
lightweight toolkits with loose coupling between parts.&lt;/p&gt;
&lt;p&gt;This reduction in friction enabled what came to be known as the &amp;quot;small
modules&amp;quot; movement. A number of prolific Open Source enthusiasts began
to conceive of a &lt;em&gt;single file&lt;/em&gt; as the default unit of code sharing,
instead of a branded platform backed by a foundation.&lt;/p&gt;
&lt;h2 id=&quot;meanwhile-back-at-acme-corp...&quot; tabindex=&quot;-1&quot;&gt;Meanwhile, back at ACME Corp... &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#meanwhile-back-at-acme-corp...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With all this distributed sharing, instead of relying on 2 or 3
well-known OSS platforms with clear governance, web applications came
to rely on an interconnected mesh of thousands of tiny modules,
created by an unaffiliated horde of hundreds individual contributors.&lt;/p&gt;
&lt;p&gt;At ACME Corp, the process has started to creak. Well, not &amp;quot;creak&amp;quot;,
exactly. More like &amp;quot;break&amp;quot;. It&#39;s broken.&lt;/p&gt;
&lt;p&gt;The compliance team insists on only using modules that pass review.
Developers who do write hand-rolled scripts to catalog all of their
dependencies for the requisition forms are laughed at.&lt;/p&gt;
&lt;p&gt;&amp;quot;2305 modules? You&#39;ve gotta be kidding me. Use less, or come back next
year.&amp;quot;&lt;/p&gt;
&lt;p&gt;The best devs have moved on to companies with less stringent rules.
New developers coming out of school don&#39;t even know how to create
websites without npm and React and Babel and a zillion of these
things.&lt;/p&gt;
&lt;p&gt;Today, the battle lines are drawn within ACME Corp, forcing developers
to rely on subterfuge. The cost of a security vulnerability or getting
sued for violating a license can be in the millions. But failing to
ship a website is an existential threat.&lt;/p&gt;
&lt;p&gt;When compliance complains that the new continuous delivery system is
circumventing their OSS rules, the CTO says &amp;quot;I know, I&#39;m on it&amp;quot;, and
then quietly ignores it.&lt;/p&gt;
&lt;h2 id=&quot;and-they-all-lived-happily-ever-after...&quot; tabindex=&quot;-1&quot;&gt;And they all lived happily ever after...? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2019/01/oss-and-compliance/#and-they-all-lived-happily-ever-after...&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I wish that this was pure fiction.&lt;/p&gt;
&lt;p&gt;The approach to compliance in almost every industry has not kept up
with the advances in Open Source Software practices. This is a
pressing crisis facing some of the biggest software development teams
in the world right now.&lt;/p&gt;
&lt;p&gt;I believe this problem is solvable, but it is not adequately solved
yet.&lt;/p&gt;
&lt;p&gt;Most solutions ask an organization to choose between safety and
efficiency; but inefficiency is never safe. The only valid approach is
to reduce friction for development teams, while also helping
compliance teams to do their job.  This is the the only way to bring
peace to the enterprise.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Will Happen, Happening, Happened - Rebecca Sugar</title>
		<link href="https://blog.izs.me/2018/12/will-happen-happening-happened-rebecca-sugar/"/>
		<updated>2018-12-28T23:40:47Z</updated>
		<id>https://blog.izs.me/2018/12/will-happen-happening-happened-rebecca-sugar/</id>
		<content type="html">&lt;p&gt;Time is an illusion that helps things make sense
So we are always living in the present tense
It seems unforgiving when a good thing ends
But you and I will always be back then
You and I will always be back then
You and I will always be back then
You and I will always be back then&lt;/p&gt;
&lt;p&gt;Singing: Will happen, happening, happened
Will happen, happening, happened
And will happen again and again
Cause you and I will always be back then
You and I will always be back then
Will happen, happening, happened
Will happen, happening, happened
And we&#39;ll happen again and again
&#39;Cause you and I will always be back then&lt;/p&gt;
&lt;p&gt;If there was some amazing force outside of time
to take us back to where we were
And hang each moment up like pictures on the wall
Inside a billion tiny frames so we can see it
all, all, all&lt;/p&gt;
&lt;p&gt;It would look like, will happen, happening, happened
Will happen, happening happened
And there we are again and again
&#39;Cause you and I will always be back then
You and I will always be back then
Will happen, happening, happened
Will happen, happening, happened
And there we are again and again
&#39;Cause you and I will always be back then
You and I will always be back then
You and I will always be back then
You and I will always be back then
That&#39;s why
You and I will always be best friends&lt;/p&gt;
&lt;p&gt;I know rationally that Adventure Time is over.  I saw it coming, and
heard it rumored, and heard the wails of anguish over it from friends,
and consumed by some unconscious fear of my own mourning, I slowed
down watching the show, and gradually fell further and further behind.&lt;/p&gt;
&lt;p&gt;The ending is waiting for me in the future, bittersweet and beautiful.&lt;/p&gt;
&lt;p&gt;It will happen.  Until then, Adventure Time is still happening.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Plugin Published: gatsby-remark-tumble-media</title>
		<link href="https://blog.izs.me/2018/12/plugin-published-gatsby-remark-tumble-media/"/>
		<updated>2018-12-28T22:35:10Z</updated>
		<id>https://blog.izs.me/2018/12/plugin-published-gatsby-remark-tumble-media/</id>
		<content type="html">&lt;p&gt;Slight update on the &lt;a href=&quot;https://blog.izs.me/2018/12/porting-to-gatsby&quot;&gt;port of this site to
Gatsby&lt;/a&gt;.  I published the tumblr-esque
media handling bits as a standalone plugin.  It&#39;s now available &lt;a href=&quot;http://npm.im/gatsby-remark-tumble-media&quot;&gt;on
npm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you try it out, &lt;a href=&quot;https://blog.izs.me/ask&quot;&gt;please let me know&lt;/a&gt;!  I&#39;d love to see if
anyone else finds it useful.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Porting to Gatsby</title>
		<link href="https://blog.izs.me/2018/12/porting-to-gatsby/"/>
		<updated>2018-12-27T00:06:04Z</updated>
		<id>https://blog.izs.me/2018/12/porting-to-gatsby/</id>
		<content type="html">&lt;p&gt;Last month, Tumblr announced that they&#39;d no longer be allowing &amp;quot;Adult
Content&amp;quot; on their platform.  I found this distressing, not because I
depend on Tumblr for pornography, but because it was clear that a
hamfisted approach to automating the deletion of adult content would
not go good.&lt;/p&gt;
&lt;p&gt;I downloaded my blog content using &lt;a href=&quot;https://github.com/bbolli/tumblr-utils&quot;&gt;a script I
found&lt;/a&gt;, and
started looking around for the best thing to port my blog to.  I
definitely wanted something that would let me write markdown and
export static content.  &lt;a href=&quot;http://blosxom.sourceforge.net/&quot;&gt;Blosxom&lt;/a&gt;
looked promising, but it seemed pretty old, and I have no interest in
learning Perl at this time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.gatsbyjs.org/&quot;&gt;Gatsby&lt;/a&gt; stood out as a serious contender.
All the cool kids use React and Graphql these days, and it would let
me both learn the new shape of web development, and leverage my
JavaScript and Node.js skills.&lt;/p&gt;
&lt;p&gt;My initial impressions so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt;: basically an ideal component/data model, though the data
handling was a bit of a confusing learning curve.  (Gatsby and
Graphql make this both better and worse in different ways.)  JSX is
an itchy sweater that I resent wearing.  It&#39;s not &lt;em&gt;hard&lt;/em&gt; to use, in
fact, it&#39;s pretty easy, but the ceremony feels excessive, and
switching between &lt;code&gt;{xyz}&lt;/code&gt; in JSX and &lt;code&gt;${xyz}&lt;/code&gt; in template strings is
annoying.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Gatsby&lt;/strong&gt;: pretty effin rad.  I like it a lot.  Blends really nice
dev-time hotswap experience with a powerful component model and an
optimized static SSR build for production.&lt;/p&gt;
&lt;p&gt;The docs are well written, and it has them, but there are not nearly
enough.  As a result, they sometimes jump way too fast from &amp;quot;this is
how you type codes into an editor&amp;quot; to &amp;quot;and then you use React
components to...&amp;quot; The tutorials were frustrating at first because of
being so novice, and then frustrating because they took a lot of
know-how for granted.&lt;/p&gt;
&lt;p&gt;Gatsby feels like it&#39;s still a bit of a power tool for power users.
When there&#39;s a paved path or a starter, and that path is marked,
it&#39;s easy, but I found I ended up hacking through jungle a bunch of
times.  (Maybe that&#39;s what I was looking for?  I did enjoy the
experience!)  There are a lot of paved paths, but they don&#39;t go
everywhere, and they aren&#39;t all marked.&lt;/p&gt;
&lt;p&gt;That being said, it&#39;s extremely powerful, well thought-out, and fun
to use.  I believe this platform will mature &lt;em&gt;very&lt;/em&gt; nicely as more
docs and tutorials are added to fill in the blanks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Graphql&lt;/strong&gt;: confusing learning curve, still don&#39;t quite grok how
it&#39;s doing stuff, but once the basics clicked, it&#39;s way easier to
use than SQL, and I already get queries right on the first try more
often than not.  I can see why everyone&#39;s excited about it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt;: happy with it as expected, but for one bump.  You
can&#39;t use them as a TLS terminator in front of a plaintext HTTP
backend, which I &lt;em&gt;guess&lt;/em&gt; sorta makes sense, but wasn&#39;t clear in
their interface or docs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The
&lt;a href=&quot;https://github.com/isaacs/blog.izs.me/tree/master/import&quot;&gt;importer&lt;/a&gt;
was fun to write, and pretty straightforward.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/isaacs/blog.izs.me/tree/master/plugins/gatsby-remark-photoset&quot;&gt;media plugin goober
thingie&lt;/a&gt;
was originally only going to be used for photosets, but I ended up
using it for all media types, so it&#39;s increasingly misnamed.  I plan
to publish it as a standalone plugin, though I&#39;m not sure how many
people would make use of it.  I did actually try to make photosets
work with &lt;code&gt;flex-box&lt;/code&gt; and &lt;code&gt;display:table&lt;/code&gt;, but in practice, nothing is
as stable or reliable as actual &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; elements.  I always got
weird extra whitespace when turning divs into &lt;code&gt;display:table&lt;/code&gt;
elements.&lt;/p&gt;
&lt;p&gt;I made them reactive by just making all the elements &lt;code&gt;display:block&lt;/code&gt;.
It&#39;s much more reliable to turn a &lt;code&gt;td&lt;/code&gt; into a &lt;code&gt;div&lt;/code&gt; than the other way
around, apparently.&lt;/p&gt;
&lt;p&gt;The template and CSS I built from scratch using my existing tumblr
blog as a visual design.  I went down a weird rabbit hole for a while
because I didn&#39;t realize you were supposed to just &lt;code&gt;import &#39;./foo.css&#39;&lt;/code&gt;
in a component in order to pull in the CSS.  I was using
Helmet to stuff a &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag in the header, and always getting a
flash of unstyled content.&lt;/p&gt;
&lt;p&gt;Overall, I&#39;m happy with the result, and really glad that things like
Gatsby exist :)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/12/via-understanding-your-partners-attachment/"/>
		<updated>2018-12-12T01:27:14Z</updated>
		<id>https://blog.izs.me/2018/12/via-understanding-your-partners-attachment/</id>
		<content type="html">&lt;p&gt;(via &lt;a href=&quot;https://soundcloud.com/gottman-institute/understanding-your-partners-attachment-style-an-interview-with-stan-tatkin&quot;&gt;Understanding Your Partner’s Attachment Style: An Interview with Stan Tatkin&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;A great conversation about attachment styles.  Awareness is power.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/12/headphones-required/"/>
		<updated>2018-12-12T01:23:33Z</updated>
		<id>https://blog.izs.me/2018/12/headphones-required/</id>
		<content type="html">&lt;p&gt;Headphones required.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/12/gadotsdiana-wonder-woman-2017-dir-patty/"/>
		<updated>2018-12-12T01:22:45Z</updated>
		<id>https://blog.izs.me/2018/12/gadotsdiana-wonder-woman-2017-dir-patty/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://gadotsdiana.tumblr.com/post/161369949970/wonder-woman-2017-dir-patty-jenkins&quot; class=&quot;tumblr_blog&quot;&gt;gadotsdiana&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;small&gt;&lt;b&gt;Wonder Woman&lt;/b&gt; &lt;b&gt;(2017)&lt;/b&gt; dir. Patty Jenkins&lt;/small&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/12/tha-boy-literally/"/>
		<updated>2018-12-05T23:18:16Z</updated>
		<id>https://blog.izs.me/2018/12/tha-boy-literally/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://tha-boy.tumblr.com/post/180808766969/literally&quot; class=&quot;tumblr_blog&quot;&gt;tha-boy&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;literally&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/11/images-that-make-me-feel-some-kind-of-way/"/>
		<updated>2018-11-30T00:43:18Z</updated>
		<id>https://blog.izs.me/2018/11/images-that-make-me-feel-some-kind-of-way/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Brussels Sprouts</title>
		<link href="https://blog.izs.me/2018/11/brussels-sprouts/"/>
		<updated>2018-11-20T01:17:15Z</updated>
		<id>https://blog.izs.me/2018/11/brussels-sprouts/</id>
		<content type="html">&lt;p&gt;It&amp;rsquo;s that time of year again, when a lot of people will enact great tragedies on that most underappreciated of vegetables, the Brussels sprout.&lt;/p&gt;
&lt;p&gt;This is the correct way to prepare Brussels sprouts.  It&amp;rsquo;s also one of the easiest and lowest-effort.  The ingredients are few and simple.  The work is minimal.  It requires very little skill and is easy to learn.  If you&amp;rsquo;ve never had Brussels sprouts prepared like this, you&amp;rsquo;ll be amazed at how good they taste.  In fact, you may learn for the first time that they even &lt;em&gt;have&lt;/em&gt; a taste, and that it is sweet and delicious, and not at all improved by bacon, cream, or vinegar, or whatever other awful tortures people put these things through.&lt;/p&gt;
&lt;h3&gt;Ingredients&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Brussels sprouts, ideally all roughly the same size&lt;/li&gt;
&lt;li&gt;Some salt&lt;/li&gt;
&lt;li&gt;Plenty of oil&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Steps&lt;/h3&gt;
&lt;p&gt;Rinse the sprouts.&lt;/p&gt;
&lt;p&gt;Cut them in half longitudinally.  That is, so that the cut goes through the stem, and you have two symmetrical halves.  Don&amp;rsquo;t cut them along the equator, if you do that they&amp;rsquo;ll shred.  Put them in a bowl and try not to break them up too much, but don&amp;rsquo;t sweat it if a few leaves fall off.&lt;/p&gt;
&lt;p&gt;Put enough oil in a large flat pan so that it covers the bottom.  Heat it up.&lt;/p&gt;
&lt;p&gt;While it&amp;rsquo;s heating, place the sprouts in the oil flat side down.  Don&amp;rsquo;t just dump them all in there.  This is important.  Cover the bottom, but &lt;strong&gt;do not&lt;/strong&gt; do more than one layer.  Every sprout should have its flat face fully flush against the bottom of the pan.&lt;/p&gt;
&lt;p&gt;If the sprouts start to absorb some of the oil, put some more in.  The bottom should be covered, but they should not be swimming.&lt;/p&gt;
&lt;p&gt;Toss any stray leaves in there just kinda randomly, it&amp;rsquo;s fine.&lt;/p&gt;
&lt;p&gt;Throw a bit of salt on them.  I give it a good &amp;ldquo;shooka-shook&amp;rdquo; from the salt shaker, probably like a quarter teaspoon or so, but this is pretty flexible.  Make them, and if they&amp;rsquo;re not salty enough, put some more salt on them and use a bit more next time.&lt;/p&gt;
&lt;p&gt;The cooking time and heat will need to vary based on the size of the sprouts.  The goal is to burn the bottom and let the insides steam in the little dome of Brussels sprouts leaves.  Big sprouts will take longer to cook the insides, so you&amp;rsquo;ll use a lower heat and cook for longer.  Little sprouts, turn that shit up (but if the oil starts smoking, that&amp;rsquo;s too hot, back off a bit).  If you get it a bit off, it&amp;rsquo;s fine.  Just means that they might have to get a little more or less browned.&lt;/p&gt;
&lt;p&gt;They&amp;rsquo;re done when the top is dark green and the bottom is completely browned (but not black, that&amp;rsquo;s probably too much).&lt;/p&gt;
&lt;p&gt;Use a tongs to pick one of them up and check if they&amp;rsquo;re done.  Other than that, &lt;strong&gt;do not fucking touch them&lt;/strong&gt;.  They don&amp;rsquo;t need to be messed with, stirred, moved around, or touched.  They just need to burn and steam, &lt;em&gt;and that&amp;rsquo;s it&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;Results&lt;/h3&gt;
&lt;p&gt;They taste like sweet popcorn.  I&amp;rsquo;m serious.  The crunchy bottom tends to soften pretty quickly, so sooner you eat them, the better, but this is usually not a problem.  (And they&amp;rsquo;re still good when they&amp;rsquo;re not super crispy, just a little less amazing.)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Node + JS Foundation</title>
		<link href="https://blog.izs.me/2018/10/node-js-foundation/"/>
		<updated>2018-10-04T20:16:51Z</updated>
		<id>https://blog.izs.me/2018/10/node-js-foundation/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://blog.npmjs.org/post/178734613655/node-js-foundation&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Today the Node.js and JS Foundations &lt;a href=&quot;https://medium.com/@nodejs/the-node-js-foundation-and-js-foundation-announce-an-intent-to-merge-a-message-from-the-boards-8a2e4a5cbd2b&quot;&gt;announced&lt;/a&gt; an intent to merge.&lt;/p&gt;
&lt;p&gt;tl;dr – This is a good thing.  I’m psyched.&lt;/p&gt;
&lt;p&gt;The JavaScript community is a big and diverse group of people, doing lots of stuff.  Most companies in the world use JavaScript, and at npm, we have a unique view into the shape and scope of this ecosystem.&lt;/p&gt;
&lt;p&gt;The overwhelming majority of JavaScript users are people making websites, using modern frameworks, and tooling built in Node.js.  They are trying to get a job done, and they want streamlined tools that make them more able to do their jobs.  Many of them are not what we might have thought of as “Node Devs” a few years ago (though many are).  Their websites run on every back-end platform, including but not limited to Node.js, and they all have to ship a website to browsers, which means JavaScript.  Node.js is the dominant platform for building the tools for doing this, and npm is the place where platforms, modules, and tooling are distributed and shared.&lt;/p&gt;
&lt;p&gt;A split between “back-end” and “front-end” JavaScript makes less and less sense in light of the way that this community has grown over the last 9 years since Node.js was released.  &lt;em&gt;(Wow, has it really been that long?  Time flies.)&lt;/em&gt;  A fast-growing community means that most of the people writing websites, using Node.js-powered tooling and pulling libraries and frameworks from npm, &lt;em&gt;have only been doing it for less than 2 years&lt;/em&gt;.  The split may have felt normal to those of us involved in 2009, but it seems unnatural and awkward to most working in the field today.  It’s just JavaScript.  It runs on servers, and on the command line, and in browsers, and you use npm and a bunch of other tools it provides.  Is “babel” a front-end tool or a back-end tool?  Why are there two groups, when it’s mostly the same people?&lt;/p&gt;
&lt;p&gt;Node.js getting more integrated with the broader JS community means that the project can more effectively advocate for server-side use cases, and can get better feedback from those who are depending on Node.js to power the tools they use to ship websites.&lt;/p&gt;
&lt;p&gt;As one of the companies at the center of JavaScript development, we at npm are thrilled to see the two major JavaScript foundations joining forces to provide a forum for the entire Open Source JavaScript community.  Consistency of governance, processes, and policies can make it easier for devs in disparate JavaScript projects to collaborate and coordinate, removing an unnecessary barrier to innovation.  Both foundations now have an established history of iterating on their processes.  I hope that this new shift provides a chance to retrospect on what worked, what didn’t work, and what can be improved by working together.&lt;/p&gt;
&lt;p&gt;On a personal note, I got involved with Node.js in the first place because I wanted to live in a world where front-end, back-end, tooling, and infrastructure coding did not require constantly shifting my brain around to a whole new language.  I couldn’t have predicted how npm would become so relevant to the world of web development, and it’s more than I would have thought to hope for.  There’s a lot of open questions about what exactly a merged foundation will look like, but I’m very happy to see things move in this direction.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Bookends</title>
		<link href="https://blog.izs.me/2018/06/bookends/"/>
		<updated>2018-06-08T21:04:56Z</updated>
		<id>https://blog.izs.me/2018/06/bookends/</id>
		<content type="html">&lt;p&gt;Content warning: suicide.  I wrote this in January of 2014.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;We don&amp;rsquo;t often notice the difference between one day and the next in our memory.  A year blends together.  As you get more distance, a block of similar years become a single unit, characterized by a specific flavor of scenery, people, and feelings.&lt;/p&gt;
&lt;p&gt;The cracks in the sidewalk that I&amp;rsquo;d avoid stepping on as I crossed the bridge over Fitch street on my way to class.  The girl I smiled at walking over that bridge, and the months of passionate sex and breakups that smile unleashed.  The cheap limitless terrible food at Conn Hall.  The drudgery of debugging printers for professors so I could pay my rent.  Winters where stepping the wrong way on a sheet of ice plunged me ankle deep into brown slush.  The insufferable New Haven towing racket and incredible pizza.&lt;/p&gt;
&lt;p&gt;And then, in a flash, the channel changes.&lt;/p&gt;
&lt;p&gt;Suddenly it&amp;rsquo;s palm trees and vacuum cleaners, then Yahoo! and JavaScript.  A terrible marriage and a happy divorce.  Then it flips again, to Joyent and Node and bart and biking.  Speaking at conferences.  Open source, buzzwords and business cards.  My arrival as an internet personality.  Marisa.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s blatant in hindsight, but I usually don&amp;rsquo;t see it coming.  Some changes are complete and total, marking a brand new lifetime with each transition.  I&amp;rsquo;m not sure I&amp;rsquo;m the same person as a few versions ago.  Every line has been edited, every vision altered.&lt;/p&gt;
&lt;p&gt;This most recent shift, though… I saw this one coming.  Or at least, I saw one side of the book mark.&lt;/p&gt;
&lt;p&gt;I prepared the transition to be as smooth as possible.  I recruited allies, and trained a successor.  Now was the time.  I didn&amp;rsquo;t know what exactly would be showing on the new channel, but I knew that a change was coming, and I wanted to make sure it&amp;rsquo;d be good.  This idea of book marks was going to be my Pastry Box contribution.  I had thought it all out.&lt;/p&gt;
&lt;p&gt;I had no idea.&lt;/p&gt;
&lt;p&gt;On Christmas eve, I sat in a thai restaurant with my friend.  Luke, who makes jokes, and travels the world, and works on npm.  By the end of 2013 we hung out about weekly or more, to eat and chat and laugh.  We had met at Taco Conf a few years prior, where he told me that he wanted to move to Oakland to hang out with the Node people.  He did that.  We clicked well.  He watched my cats once.  I recommended him to Yahoo.&lt;/p&gt;
&lt;p&gt;The day before that dinner, Luke had written a note.  We complained about the holidays a bit, and shared Kao Nam Tod.  It didn&amp;rsquo;t seem weird to me that he was in town.  After all, I was also.  I knew he was from upstate New York, but he didn&amp;rsquo;t ever talk about his family there.  I don&amp;rsquo;t know if I ever talked about my family much either.  Just never came up.  We reminisced about New England winters and how much nicer California is.  We talked about how horrible the holidays are, and about business and dating and the future.&lt;/p&gt;
&lt;p&gt;A few days later, I went out of town to visit family.  The trip was too long by a day.  At the end we were all eager to get back to our lives.  I came back on New Year&amp;rsquo;s Eve.  I sent Luke a message the next morning, telling him that relatives had given me some cat toys, because they don&amp;rsquo;t know how fat and lazy my cats are.  Maybe his kitten could attack them, instead of attacking his face, like it usually did.&lt;/p&gt;
&lt;p&gt;It was still early.  I figured he&amp;rsquo;d get it when he got up.  I could bring them by.  I was working on npm that day.  The new startup.  The Book Mark.  Everything was going great.  I was looking forward to telling him about the latest developments.&lt;/p&gt;
&lt;p&gt;I got a message from Luke at 4:15 in the afternoon.  Before seeing what it said, it reminded me that I hadn&amp;rsquo;t had lunch yet, and hadn&amp;rsquo;t seen him in a week, which was a perfect coincidence.  I was going to suggest Xolos.  His message asked, &amp;ldquo;Could you share this publicly or privately in a few hours or so?&amp;rdquo;  A link to the note that he wrote on Christmas Eve Eve.&lt;/p&gt;
&lt;p&gt;Oh no.  Wait.  Where are you, I&amp;rsquo;m going there now.  I&amp;rsquo;m coming to your house.  911.  Call Mikeal.  Call Dustin.  Tell Marisa to bring the car back home, we have to go, now.&lt;/p&gt;
&lt;p&gt;We met the police at his apartment.  The key was where he said it&amp;rsquo;d be, and there was food and water for his kitten.  Calling, again and again, it rings 4 times, and then voicemail.  iMessages delivered, but no response.&lt;/p&gt;
&lt;p&gt;5:09, another buzz in my pocket.  &amp;ldquo;I&amp;rsquo;ve finally built up the courage to do it.  Thanks again.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Calling.  Straight to voicemail.&lt;/p&gt;
&lt;p&gt;He said he&amp;rsquo;d been hiding for years, that he was tired of pretending, tired of masking his pain.  It wasn&amp;rsquo;t a statement, it was a choice, an expedient escape from his medical problem.&lt;/p&gt;
&lt;p&gt;We didn&amp;rsquo;t know where he went.  Searched everything, everywhere.  Yahoo hired an investigator.  The police were beyond useless.  Clues pointed to a bridge, most likely the Golden Gate.  Coast Guard didn&amp;rsquo;t have any John Does.&lt;/p&gt;
&lt;p&gt;He slipped through my fingers like smoke.  He&amp;rsquo;d reached out to me.  I didn&amp;rsquo;t save him.&lt;/p&gt;
&lt;p&gt;That week, I learned a lot about Luke&amp;rsquo;s history, things he never told any of us.  I learned about his family, his past, his friends.  I talked to his mother and sisters.  Eyeballs deep in other people&amp;rsquo;s shit, the unexpected executor of my friend&amp;rsquo;s farewell.  I frantically invaded his privacy, tried to find anything that could give me some hope, some clue, some rock I could turn over that he&amp;rsquo;d pop out from under.&lt;/p&gt;
&lt;p&gt;For a while some hoped that he was faking.  He&amp;rsquo;d fled to Asia or Africa on some manic adventure, played a joke on all of us.  At 5:09 on New Year&amp;rsquo;s Day, I lost my hope.  He wasn&amp;rsquo;t joking.  Luke&amp;rsquo;s jokes are funny, and clever, and often offensive.  His note was calm, resigned, touching.  If he had been crying for help, we would&amp;rsquo;ve been able to help him.  He was smart.  He knew what he was doing.  He was doing it for himself, not for anyone else.&lt;/p&gt;
&lt;p&gt;I waited for permission to grieve.  I told everyone else that we can&amp;rsquo;t give up hope until they find a body.  But that was a lie, and I wasn&amp;rsquo;t fooled.  I passed along &lt;a href=&quot;http://blog.izs.me/post/72990767417/a-member-of-our-community-is-missing-help-find&quot;&gt;the flyers&lt;/a&gt;, in a gesture of mourning.&lt;/p&gt;
&lt;p&gt;In December, I&amp;rsquo;d hoped that this phase shift would be marked by the change of job roles, and in the fullness of time, maybe it will be.  But overlaid on that is the turbulent border between the part of my life where my friend Luke existed, and the part where he was abruptly and permanently gone.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>npm Pride 2018 Shirts</title>
		<link href="https://blog.izs.me/2018/06/npm-pride-2018-shirts/"/>
		<updated>2018-06-01T18:06:27Z</updated>
		<id>https://blog.izs.me/2018/06/npm-pride-2018-shirts/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://blog.npmjs.org/post/174469070810/npm-pride-2018-shirts&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;npm loves everyone!&lt;/p&gt;
&lt;p&gt;Just like last year, npm team’s Pride shirts available to all, with help from our friends at &lt;a href=&quot;https://andyet.com/&quot;&gt;&amp;amp;yet&lt;/a&gt; and &lt;a href=&quot;https://teespring.com/&quot;&gt;Teespring&lt;/a&gt;. Select your favorite design from the pictures below and click through for types and sizes — or collect them all! — and 100% of proceeds will benefit &lt;a href=&quot;http://www.thetrevorproject.org/&quot;&gt;The Trevor Project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Heads up! The timer on each Teespring page resets every three days when an order goes out — these shirts will be available indefinitely. &lt;/p&gt;
&lt;p&gt;Are we missing a design? &lt;a href=&quot;mailto:%20marketing@npmjs.com&quot;&gt;Reach out and let us know&lt;/a&gt;!&lt;/p&gt;
&lt;table style=&quot;max-width: 100%; border: none; border-collapse: collapse; padding: 0;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;
&lt;td style=&quot;width: 33%;&quot;&gt;&lt;a href=&quot;https://teespring.com/pride-npm-2018#pid=395&amp;amp;cid=6625&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018.jpg&quot;&gt;&lt;img style=&quot;max-height: 200px;&quot; src=&quot;https://66.media.tumblr.com/2d52927a799baa145d870a0c8d1fef83/tumblr_inline_p9nhrrr3aq1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33%;&quot;&gt;&lt;a href=&quot;https://teespring.com/npm-ace-pride-2018#pid=2&amp;amp;cid=566&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-ace.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/251cf1d787a6a0ab1671f7913e2c1119/tumblr_inline_p9nhrsNbQJ1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-ace.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34%;&quot;&gt;&lt;a href=&quot;https://teespring.com/npm-labrys-pride-2018#pid=395&amp;amp;cid=6622&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-labrys.jpg&quot;&gt;&lt;img style=&quot;max-height: 200px;&quot; src=&quot;https://66.media.tumblr.com/2dbe9f428882882da86fc50d81bc4979/tumblr_inline_p9nhrs01Tr1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-labrys.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-pride-lesbian-2018#pid=395&amp;amp;cid=6625&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-lesbian.jpg&quot;&gt;&lt;img style=&quot;max-height: 200px;&quot; src=&quot;https://66.media.tumblr.com/a59e362037cf980d82b33c89c4f70b8d/tumblr_inline_p9nhrt4a3X1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-lesbian.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-trans-pride-2018#pid=2&amp;amp;cid=569&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-trans.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/b1d5a829e704d45c45f004e560cc2230/tumblr_inline_p9nhruFCNY1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-trans.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-aro-pride-2018#pid=2&amp;amp;cid=573&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-aro.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/e26737eb1424e272c9c4db80a3b836b9/tumblr_inline_p9nhrucj4t1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-aro.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-bear-pride-2018#pid=2&amp;amp;cid=568&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-bear.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/fbebaa6d46b5aa5e97bd3341698a2005/tumblr_inline_p9nhrvEXAv1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-bear.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-genderqueer-pride-2018#pid=2&amp;amp;cid=569&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-genderqueer.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/399f58ef99aa9a58499ed4fc27aaa6c7/tumblr_inline_p9nhrwjvTs1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-genderqueer.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-leather-pride-2018#pid=2&amp;amp;cid=569&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-leather.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/3bbd69f0dbf648853c6ca5bc9bd96867/tumblr_inline_p9nhrxhT071ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-leather.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-pan-pride-2018#pid=2&amp;amp;cid=573&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-pan.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/cdeea1b06972f4c641f4867122be2390/tumblr_inline_p9nhryM9jf1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-pan.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-bi-pride-2018#pid=2&amp;amp;cid=569&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-bi.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/f24da0b87fb7a5b4a2f7b1cae9b56d0c/tumblr_inline_p9nhryysAq1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-bi.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://teespring.com/npm-nb-pride-2018#pid=2&amp;amp;cid=573&amp;amp;sid=front&quot;&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-nb.jpg&quot;&gt;&lt;img style=&quot;max-height: 220px;&quot; src=&quot;https://66.media.tumblr.com/e3e46cbd0f7d3e4c347fe7d7bfa47624/tumblr_inline_p9nhrzvhyK1ukt7ok_540.jpg&quot; alt=&quot;image&quot; data-orig-height=&quot;560&quot; data-orig-width=&quot;470&quot; data-orig-src=&quot;./pride-2018-nb.jpg&quot; /&gt;&lt;/figure&gt;&lt;/a&gt; &lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>npm Acquires ^Lift Security and Node Security Platform</title>
		<link href="https://blog.izs.me/2018/04/npm-acquires-lift-security-and-node-security/"/>
		<updated>2018-04-10T16:55:49Z</updated>
		<id>https://blog.izs.me/2018/04/npm-acquires-lift-security-and-node-security/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/172793182214/npm-acquires-lift-security-and-node-security&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;289&quot; data-orig-width=&quot;1200&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/7375b9960741db224d1507a5d2b4358a/tumblr_inline_p6y00tw6YC1uum5zo_540.png&quot; data-orig-height=&quot;289&quot; data-orig-width=&quot;1200&quot; /&gt;&lt;/figure&gt;&lt;p&gt;Today, we’re excited to announce that npm, Inc. has acquired the team and assets of ^Lift Security, including their work on the Node Security Platform. Adam Baldwin and his team have joined npm to work full time on keeping the npm Registry and npm applications safe, and to develop new products to help developers and their companies securely develop JavaScript.&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;We go way back&lt;/h2&gt;
&lt;p&gt;^Lift Security has been working with npm longer than npm, Inc. has been a company. They review npm’s own code to ensure it’s safe before we take it live, and conduct periodic security audits, including penetration tests of our services. Most prominently, their &lt;a href=&quot;https://nodesecurity.io/&quot;&gt;Node Security Platform&lt;/a&gt; has become a definitive catalogue of JavaScript vulnerabilities for developers and security vendors.&lt;/p&gt;
&lt;p&gt;npm is where the Node Security Platform belongs. All NSP users are npm users, and the security of open source code is core to npm’s mission. By combining our resources, we can deliver a continuous approach to security at scale, empowering millions of developers to build more secure code.&lt;/p&gt;
&lt;p&gt;As one team, we’ll continue keeping the Registry safe, and develop new ways to help individuals and companies understand and trust the JavaScript code that they write and share.&lt;/p&gt;
&lt;h2&gt;Watch this space&lt;/h2&gt;
&lt;p&gt;Today’s announcement is the first in a series of strategic security initiatives we’ll be announcing in coming weeks. In conjunction with the next version of npm, shipping with Node.js version 10, we’ll introduce a series of new security features available to every npm user, directly integrated into the npmjs.com registry and the npm command line tool. Soon, we’ll also introduce a series of security products specifically tailored to the unique requirements of corporate developers and enterprises.&lt;/p&gt;
&lt;h2&gt;Security is everyone’s responsibility (including yours).&lt;/h2&gt;
&lt;p&gt;Security is the responsibility of every part of an organization. It needs to be intermixed with engineering, operations, and application development. npm is at the center of these workflows, so we are uniquely positioned to help you secure your code.&lt;/p&gt;
&lt;p&gt;We know that the safety of the code you use &lt;a href=&quot;https://medium.com/npm-inc/security-in-the-js-community-4bac032e553b&quot;&gt;is important to you, whether you’re a beginner or a seasoned expert&lt;/a&gt;. Together, we’ll ensure that the world’s largest community of software developers is also its safest.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2018/03/stimmystuffs/"/>
		<updated>2018-03-28T19:17:16Z</updated>
		<id>https://blog.izs.me/2018/03/stimmystuffs/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://stimmystuffs.com/post/172331282729/httpswwwinstagramcompbgiyxohox7taken-by-t&quot; class=&quot;tumblr_blog&quot;&gt;stimmystuffs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://www.instagram.com/p/Bgiyx_ohoX7/?taken-by=tastemade_japan&quot;&gt;https://www.instagram.com/p/Bgiyx_ohoX7/?taken-by=tastemade_japan&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Bundt Lasagna.  Yes.  This is brilliant.  I need to do this.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2017/10/webcomicname-reblog-if-you-are-the-offspring-of/"/>
		<updated>2017-10-31T21:29:13Z</updated>
		<id>https://blog.izs.me/2017/10/webcomicname-reblog-if-you-are-the-offspring-of/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://webcomicname.com/post/154380587284/reblog-if-you-are-the-offspring-of-older-humans&quot; class=&quot;tumblr_blog&quot;&gt;webcomicname&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;reblog if you are the offspring of older humans&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Protect your npm account with two-factor authentication and read-only tokens</title>
		<link href="https://blog.izs.me/2017/10/protect-your-npm-account-with-two-factor/"/>
		<updated>2017-10-05T18:40:27Z</updated>
		<id>https://blog.izs.me/2017/10/protect-your-npm-account-with-two-factor/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/166039777883/protect-your-npm-account-with-two-factor&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;UPDATE: To try out TFA, you’ll need the beta of the npm client. To get it, run `npm install npm@next -g`.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Today, we are announcing two new ways to protect your npm account. Please read on to learn how you can use these security features to keep your code safe and increase everyone’s trust in the more than 550,000 packages of code in the npm Registry.&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Two-factor authentication (2FA)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Now, you can sync your npm account with an authentication application like &lt;a href=&quot;https://support.google.com/accounts/answer/1066447?co=GENIE.Platform%3DAndroid&amp;amp;hl=en&quot;&gt;Google Authenticator&lt;/a&gt; or &lt;a href=&quot;https://authy.com/&quot;&gt;Authy&lt;/a&gt;. When you log in, you’ll be prompted for a single-use numeric code generated by the app.&lt;/p&gt;
&lt;p&gt;2FA is another layer of defense for your account, preventing third parties from altering your code even if they steal or guess your credentials. This is one of the easiest and most important ways to ensure that only you can access to your npm account.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Read-only tokens&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;If your continuous integration / continuous deployment (CI/CD) workflow includes linking your npm account to tools like Travis CI with &lt;a href=&quot;https://npme.npmjs.com/docs/workflow/travis.html&quot;&gt;authentication tokens&lt;/a&gt;, you can now create read-only tokens for tools that don’t need to publish. You can also restrict tokens to work from only specified ranges of IP addresses.&lt;/p&gt;
&lt;p&gt;Even if your token is compromised — for example, if you accidentally commit it to GitHub — no one else can alter your code, and only authorized CI servers will be able to download your code.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Set these up now (please)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;The npm community is now larger than the population of New York City, so it’s never been more important to reinforce trust and encourage collaboration. Every developer who secures their npm account with these new methods helps ensure the safety and integrity of the code we all discover, share, and reuse to build amazing things.&lt;/p&gt;
&lt;p&gt;Learn how to activate 2FA in this doc:&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://docs.npmjs.com/getting-started/using-two-factor-authentication&quot;&gt;Using Two-Factor Authentication&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Watch this space&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;There has never been a major security incident caused by leaked npm credentials, but our security work is never finished. We work continuously to protect the npm Registry and detect and remove malicious code, and we try to keep you informed of our efforts.&lt;/p&gt;
&lt;p&gt;If you ever believe you’ve encountered any malicious code on the Registry or in npm itself, contact us right away [using the npm website](lgt security contact form) or by emailing &lt;a href=&quot;mailto:security@npmjs.com&quot;&gt;security@npmjs.com&lt;/a&gt;. If you have any feedback or questions about what we’ve rolled out today, just contact &lt;a href=&quot;mailto:support+2fa@npmjs.com&quot;&gt;support@npmjs.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks for helping keep the npm community safe.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2017/06/that-scrape-tho-recommended/"/>
		<updated>2017-06-21T20:54:31Z</updated>
		<id>https://blog.izs.me/2017/06/that-scrape-tho-recommended/</id>
		<content type="html">&lt;p&gt;that scrape tho.  🎧 recommended👂🏼〰〰&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Documentation Driven Development</title>
		<link href="https://blog.izs.me/2017/06/documentation-driven-development/"/>
		<updated>2017-06-09T21:31:28Z</updated>
		<id>https://blog.izs.me/2017/06/documentation-driven-development/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;ve used the term &amp;ldquo;Documentation Driven Development&amp;rdquo; in conversation a few times over the years, and people usually seem to just get what I&amp;rsquo;m talking about.  It&amp;rsquo;s like &amp;ldquo;test driven development&amp;rdquo;, and every bit as disciplined, but for docs instead of tests.  I &lt;a href=&quot;https://www.google.com/search?q=%22documentation+driven+development%22&quot;&gt;certainly did not invent this concept&lt;/a&gt;, and it&amp;rsquo;s very simple.&lt;/p&gt;
&lt;p&gt;I also don&amp;rsquo;t think that many folks realize just how serious I am about this.  And the repeated truism that &lt;a href=&quot;https://medium.com/@mikeal/docs-docs-docs-1e06d17fa06f&quot;&gt;bad documentation is the worst thing in open source&lt;/a&gt; seems to indicate that it&amp;rsquo;s not being evangelized enough.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the process in a nutshell.  This is how I usually write JavaScript modules, but it&amp;rsquo;s also how I approach designing product changes at npm, from small tweaks to entire new product lines.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;Before anything else&lt;/strong&gt;, write down what the thing is in &lt;code&gt;README.md&lt;/code&gt;.  I use markdown, but any portable plain-text format will do.  This takes three parts:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;The name of the thing.&lt;/li&gt;
&lt;li&gt;The 1-sentence description of what the thing is.&lt;/li&gt;
&lt;li&gt;If necessary, a few paragraphs describing the thing.&lt;/li&gt;
&lt;li&gt;Example code demonstrating how to use the thing.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Note: the thing doesn&amp;rsquo;t exist yet.  You do this &lt;em&gt;before&lt;/em&gt; it exists.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy the example code into a test file.  (Basically just do &lt;code&gt;const t = require(&#39;tap&#39;)&lt;/code&gt; and throw some asserts around it.)  For things bigger than a single JavaScript module, you can also copy the various points of the description into user story issues for QA or whatever process you use to verify that the thing you built is actually what the docs say it is.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you are ready to write the code that does that thing.  Whenever it seems like the usage example was wrong, update it.  As it becomes more clear what it is and how it works, keep the docs in sync with the code and the tests.  The goal is to maintain 100% test coverage &lt;em&gt;and&lt;/em&gt; 100% documentation coverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;When you want to make a change to the thing, first update the docs &lt;em&gt;and then&lt;/em&gt; write the code and the test.  It doesn&amp;rsquo;t matter if the test comes along with the code or if you write the code and then the test, but the docs should &lt;em&gt;absolutely&lt;/em&gt; be written before any implementation or test code.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you ever find yourself thinking &amp;ldquo;It&amp;rsquo;s done, I just need to update the docs&amp;rdquo;, then you&amp;rsquo;ve violated this process by even having that thought.  Not only is it not done, but you might&amp;rsquo;ve done the wrong thing.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s fine to write some code to try to figure out what the thing should be.  But that is experimental scaffolding, and should not be thought of as anything other than useful garbage, like a sketch on a napkin.  Maybe it can be turned into something enduring, but that starts with docs.&lt;/p&gt;
&lt;p&gt;Writing clear prose about software is an unreasonably effective way to increase productivity by reducing both the frequency and cost of mistakes.  Just as with good tests, it helps ensure that your program does what you think it does, and that you&amp;rsquo;ve thought it all the way through.&lt;/p&gt;
&lt;p&gt;This unreasonable effectiveness of writing things down comes from the fact that a human brain&amp;rsquo;s working memory size is absurdly small.  While it seems that we can hold a lot of things in our mind at once, it&amp;rsquo;s only by constantly swapping to long-term storage and ignoring increasing numbers of trees in order to see the forest.  A written document does not have that problem.  We can fully off-load significant chunks of thought with hardly any data-loss, allowing us to think slower and more carefully while still covering a huge semantic surface.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t like using inline comments to generate interface documentation, for the simple reason that my sole focus must be on the user mental model when writing docs, and that should lead the creation of the thing.  If I&amp;rsquo;m writing documentation and implementation at the same time (or even in the same format), I&amp;rsquo;m naturally inclined to create a &amp;ldquo;nice implementation&amp;rdquo;, which may or may not be an interface that meshes well with the user&amp;rsquo;s mental model.&lt;/p&gt;
&lt;p&gt;The design of how a thing is used limits the implementations available, &lt;em&gt;and vice versa&lt;/em&gt;, so whichever is done first will tend to limit the scope of the other.  It can be a bit of extra work wrestling the code to fit into the constraints of a user&amp;rsquo;s mental model.  But it&amp;rsquo;s work you only have to do once, as opposed to the ongoing slog of handling bugs and issues that result from trying to shape user expectations to fit an implementation.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2017/06/mark-hamill-excalibur/"/>
		<updated>2017-06-08T00:12:47Z</updated>
		<id>https://blog.izs.me/2017/06/mark-hamill-excalibur/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Be useful</title>
		<link href="https://blog.izs.me/2017/06/be-useful/"/>
		<updated>2017-06-05T18:28:53Z</updated>
		<id>https://blog.izs.me/2017/06/be-useful/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://seldo.tumblr.com/post/161335444560/be-useful&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I get asked for career advice semi-regularly by people just starting out in tech. I don’t know to what degree I’m qualified to advise anybody, but the advice is always very different and specific to somebody’s circumstances. However, there is one recommendation common to everyone: be useful.&lt;/p&gt;
&lt;p&gt;By that I mean: if you pick a company and get hired for a job, do that job. If the job changes or the company changes, then do your new job, or quit. But don’t try to do some other job. Be useful. Be the person your company needs you to be right now.&lt;/p&gt;
&lt;p&gt;You’d think that would be obvious, but the opposite happens all the time. People get hired thinking they’re going to be doing task A, discover there’s more task B to be done, and declare “that’s not my job”. Okay, sure, it’s disappointing you don’t get to do A. But the company is not going to create a job for you doing A. Either you do B or you quit, or they will fire you.&lt;/p&gt;
&lt;p&gt;Another way it happens is when, through the best of intentions, somebody attempts to grow in their career within a company. They’re doing A, they want to be doing B, they start picking up any B that happens to be lying around. That’s great! You should do that. But not if it means A doesn’t get done. When the company is big enough that you need two full-time people doing A and B, you can pick which one you do. But not before then.&lt;/p&gt;
&lt;p&gt;Being useful is another way of saying “respond to market demand, not what you guess”. I thought I was going to be a Java developer in 2005, but Yahoo hired me to be a PHP developer. I could have said no and worked at a bunch of other Java companies, but that would have been a bad idea. Once at Yahoo I was supposed to be writing desktop software, but the team needed a website, so I built a website. Then there was a reorg and I found myself in another part of the company expecting to still be a web developer, but they needed a DBA, so I became the DBA. Over and over in my career, I have done the job that needed doing, and it’s made me valued at my job and more valuable as an engineer.&lt;/p&gt;
&lt;p&gt;Right now I’m a COO. I don’t really enjoy talking to lawyers and accountants all day. I’m not jazzed about spreadsheets, generally, though they have a certain quiet satisfaction. But it’s the job that needs doing, and doing it is making the company better. It’s making me more valuable – if I ever decide to do a startup again, I know a lot more about finance than I did before – and it’s entirely an accident.&lt;/p&gt;
&lt;p&gt;All that said, you don’t have to stay in one job forever just because it needs doing. If your career isn’t growing, by all means quit and find a job at another company. But don’t try to create that need at a company that doesn’t have it.&lt;/p&gt;
&lt;p&gt;Do the job that needs doing. Be useful. And it will pay off.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>announcing free Orgs</title>
		<link href="https://blog.izs.me/2017/03/announcing-free-orgs/"/>
		<updated>2017-03-22T22:35:09Z</updated>
		<id>https://blog.izs.me/2017/03/announcing-free-orgs/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/158718200065/announcing-free-orgs&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;419&quot; data-orig-width=&quot;705&quot; data-orig-src=&quot;./vsip.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/1b3cb024e07894443ef60639cc12ab38/tumblr_inline_p7qge2rwU41qzgxun_540.png&quot; alt=&quot;image&quot; data-orig-height=&quot;419&quot; data-orig-width=&quot;705&quot; data-orig-src=&quot;./vsip.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Today, we’re excited to announce that npm Orgs, our collaboration tool for helping teams manage permissions and share their code, is free for all developers of open source packages. You may invite an unlimited number of collaborators to manage an unlimited number of public packages for $0.&lt;/p&gt;
&lt;p&gt;We launched Orgs in 2015 for companies that needed to mix public and private code. They wanted an easy way to set permissions for multiple team members and multiple packages. Now, teams who don’t need private packages can use this functionality too.&lt;/p&gt;
&lt;p&gt;Why would we give away our most popular product? Making it easier to collaborate on open source projects is good for the whole community, and anything that reduces friction makes it easier for everyone to build amazing things.&lt;/p&gt;
&lt;p&gt;Take a look at our &lt;a href=&quot;https://www.npmjs.com/docs/orgs/&quot;&gt;Orgs docs&lt;/a&gt; to learn how these work, and &lt;a href=&quot;https://www.npmjs.com/orgs&quot;&gt;create a free Org&lt;/a&gt; now to supercharge how you collaborate on development projects.&lt;/p&gt;
&lt;p&gt;If you run into any questions, just drop a line to our support team at &lt;a href=&quot;http://support@npmjs.com/&quot;&gt;support@npmjs.com&lt;/a&gt; or tweet us &lt;a href=&quot;https://twitter.com/npmjs&quot;&gt;@npmjs&lt;/a&gt;. We can’t wait to see what you build.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2017/03/2jam4u-micdotcom-sportscaster-dale-hansen/"/>
		<updated>2017-03-03T18:01:58Z</updated>
		<id>https://blog.izs.me/2017/03/2jam4u-micdotcom-sportscaster-dale-hansen/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://2jam4u.tumblr.com/post/157927658432/micdotcomsportscaster-dale-hansen-defends-student&quot; class=&quot;tumblr_blog&quot;&gt;2jam4u&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://micdotcom.tumblr.com/post/157911359898/sportscaster-dale-hansen-defends-student-wrestler&quot; class=&quot;tumblr_blog&quot;&gt;micdotcom&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;h2&gt;&lt;b&gt;&lt;a href=&quot;http://bit.ly/2mxnMXL&quot;&gt;Sportscaster Dale Hansen defends student wrestler Mack Beggs and takes a stand against transphobia&lt;/a&gt;&lt;/b&gt;&lt;/h2&gt;&lt;/blockquote&gt;
&lt;p&gt;WHOS GRANDPA IS THIS!?!&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>My First npm Publish</title>
		<link href="https://blog.izs.me/2017/02/my-first-npm-publish/"/>
		<updated>2017-02-16T01:17:27Z</updated>
		<id>https://blog.izs.me/2017/02/my-first-npm-publish/</id>
		<content type="html">&lt;p&gt;My first npm publish was unusual.  npm didn&amp;rsquo;t exist at the time, so
that presented a bit of a challenge.&lt;/p&gt;
&lt;p&gt;This is the story of helping to inventing a universe so that I could
&lt;a href=&quot;https://www.youtube.com/watch?v=zSgiXGELjbc&quot;&gt;make an apple pie from
scratch&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;SSJS&lt;/h3&gt;
&lt;p&gt;Back in 2009, I was working at Yahoo! as a Front-End Engineer.  That
meant that I wrote a lot of PHP and JavaScript.  I had just finished
a project where we had front-end components generated on the back-end
and shipped to the client based on some data being parsed into a
template, and then later on, on the front-end, do the same work in
JavaScript with the same templates and data services.&lt;/p&gt;
&lt;p&gt;These days, that&amp;rsquo;d be called &amp;ldquo;fast boot&amp;rdquo; or &amp;ldquo;isometric templates&amp;rdquo; or
something clever, but back in those dark days, it required tediously
maintaining two implementations of a view layer, one in PHP and the
other in JavaScript.  Maintaining the same thing in two languages was
downright awful.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Well&amp;rdquo;, I figured, &amp;ldquo;JavaScript is a language, and we can control
what&amp;rsquo;s on the server, why not &lt;em&gt;just&lt;/em&gt; run JavaScript on the server?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The state of the art in server-side JavaScript (SSJS) was Rhino on the
JVM.  The problem was, unless you compiled your JavaScript into JVM
bytecode using arcane special magicks, it was godawful slow.  I
started messing around with V8 and SpiderMonkey, thinking &amp;ldquo;I want
something like PHP, but JavaScript&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;The SSJS community at that time was a very different place than the
Node.js of today.  There were dozens of projects, any one of which
could&amp;rsquo;ve seemed like it would be the breakout hit.
&lt;a href=&quot;http://spiderape.sourceforge.net/&quot;&gt;SpiderApe&lt;/a&gt; and
&lt;a href=&quot;https://code.google.com/archive/p/v8-juice/&quot;&gt;v8-juice&lt;/a&gt; were trying to
make it easier to embed spidermonkey and v8, and add a standard
library to each.  &lt;a href=&quot;https://code.google.com/archive/p/v8cgi/&quot;&gt;v8cgi&lt;/a&gt;
(renamed to &lt;a href=&quot;https://code.google.com/archive/p/teajs/&quot;&gt;TeaJS&lt;/a&gt;)
provided a CGI binding to use v8 in Apache2.  I started messing around
with &lt;a href=&quot;https://github.com/sebastien/k7&quot;&gt;K7&lt;/a&gt;, which provided a bunch of
macros for using V8 in various contexts, and
&lt;a href=&quot;https://github.com/tlrobinson/narwhal&quot;&gt;Narwhal&lt;/a&gt;, which was the only
one of these that seemed to be delivering a fully thought-out platform
for making programs.  There was also &lt;a href=&quot;http://helma.org/&quot;&gt;Helma&lt;/a&gt; and
&lt;a href=&quot;https://ringojs.org/&quot;&gt;RingoJS&lt;/a&gt;, and probably a bunch of others I&amp;rsquo;m
forgetting.&lt;/p&gt;
&lt;p&gt;A few years ago, we used to joke that every Node.js dev had their own
test framework and argument parser.  Well, in 2009, every server-side
JavaScript developer had their own SSJS platform.&lt;/p&gt;
&lt;p&gt;The contributors to all of these platforms got together in a mailing
list and tried to form some kind of standard for server-side
JavaScript programming.  Front-end JavaScript has the DOM, so we
thought, and right now, writing server-side JavaScript suffers from a
dearth of portability.  What we need is a standards body, clearly!
This was initially called &amp;ldquo;ServerJS&amp;rdquo;, but then expanded its scope to
&lt;a href=&quot;http://www.commonjs.org/&quot;&gt;CommonJS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The first proper &amp;ldquo;module&amp;rdquo; I wrote in JavaScript was a port of a url
parser I wrote for YUI.  I landed it in Narwhal.  There was no
userland, really.  Just lots of little cores.&lt;/p&gt;
&lt;p&gt;Some time later, in August of 2009, I gave &lt;a href=&quot;https://web.archive.org/web/20091020193405/http://developer.yahoo.com/yui/theater/video.php?v=isaac-ssjs&quot;&gt;a tech
talk&lt;/a&gt;
about SSJS and demonstrated using Narwhal and Jack, a Rack-like thing
built on top of Narwhal, using the
&lt;a href=&quot;https://en.wikipedia.org/wiki/JSGI&quot;&gt;JSGI&lt;/a&gt; protocol.&lt;/p&gt;
&lt;p&gt;After the talk, one of the people in the audience asked if I&amp;rsquo;d ever
tried out Node.js.  As it turned out, I had, but like so many SSJS
platforms:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;It had a single developer working on it, and no other contributors
or community.&lt;/li&gt;
&lt;li&gt;The documentation was &lt;a href=&quot;https://nodejs.org/docs/v0.0.2/&quot;&gt;extremely
sparse&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;It failed to build on my mac laptop.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Ergo: Not a thing.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I dunno,&amp;rdquo; he said.  &amp;ldquo;Maybe try it again.  It&amp;rsquo;s pretty nifty.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;He insisted that it was fast, and I was like, &amp;ldquo;Meh.  JVM is fine.&amp;rdquo;&lt;/p&gt;
&lt;h3&gt;Node.js&lt;/h3&gt;
&lt;p&gt;I checked the website again, and &lt;a href=&quot;https://nodejs.org/docs/v0.0.6/#community&quot;&gt;they&amp;rsquo;d added a &amp;ldquo;Community&amp;rdquo;
section&lt;/a&gt;.  Also, the docs
still sucked, but it was version 0.0.6 now, which was like, 4 more
than it was the first time I&amp;rsquo;d checked, so whoever this Ryan guy was,
he was at least working hard on the thing.&lt;/p&gt;
&lt;p&gt;It compiled successfully, and I was hooked!  It started up so fast
compared to Rhino!  And it had tests that ran when I did &lt;code&gt;make test&lt;/code&gt;,
and they passed!&lt;/p&gt;
&lt;p&gt;3 important lessons for OSS success:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Docs and tests matter.&lt;/li&gt;
&lt;li&gt;At least have a link to a mailing list or &lt;em&gt;something&lt;/em&gt;.  (Remember:
this was before GitHub connected us all with Issues.)&lt;/li&gt;
&lt;li&gt;It has to build and be fast.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I gradually stopped paying much attention to CommonJS, and instead
just threw my efforts at Node.  I hung out on the mailing list and in
IRC during all my free time.&lt;/p&gt;
&lt;p&gt;The problem with Node back then was that even though a growing number
of people were all writing really interesting programs, it was hard to
share them.  So, I wrote &lt;a href=&quot;https://github.com/npm/npm/commit/4626dfa&quot;&gt;this
thing&lt;/a&gt;, which was a port of
a bash script I was using to play with people&amp;rsquo;s code.&lt;/p&gt;
&lt;h3&gt;The Registry&lt;/h3&gt;
&lt;p&gt;Technically that wasn&amp;rsquo;t &amp;ldquo;publishing&amp;rdquo; though.  In order to actually
&lt;em&gt;publish&lt;/em&gt; to npm there had to be an npm registry.  Today, that
registry is a webservice at &lt;a href=&quot;https://registry.npmjs.org/&quot;&gt;https://registry.npmjs.org/&lt;/a&gt;, run by
&lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npm, Inc.&lt;/a&gt;.  The first registry was a git
repo called &amp;ldquo;npm-data&amp;rdquo;.  I collected up the handful of modules that&amp;rsquo;d
been shared from on the mailing list and in the Node.js wiki page, and
made a JSON file with links to them.&lt;/p&gt;
&lt;p&gt;One principle of package management that I felt was really important
was that no one person should be the bottleneck in community growth.
Especially if that person is me.  Because I really hate that crap.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t mind working really hard on lots of challenging stuff, but if
I have to do some simple task over and over again, especially if other
people are depending on me to do it, it&amp;rsquo;s like torture to me.  The
prospect of being in someone&amp;rsquo;s critical path for deploying their
module was just&amp;hellip; ugh.  Gross.&lt;/p&gt;
&lt;p&gt;I needed a web service type thing that would let people publish
packages and then could download those packages and install them.&lt;/p&gt;
&lt;p&gt;I got to talking to &lt;a href=&quot;http://mikealrogers.com/&quot;&gt;Mikeal Rogers&lt;/a&gt;, who
worked at
&lt;a href=&quot;https://www.crunchbase.com/organization/couch-io&quot;&gt;Couch.IO&lt;/a&gt;.  He
built &lt;a href=&quot;https://github.com/npm/npm-registry-couchapp/commit/f7f5c93&quot;&gt;the first npm registry
CouchApp&lt;/a&gt;,
and got it functional.&lt;/p&gt;
&lt;p&gt;Fun fact!  For a little while, anyone could publish any package, and
we relied on the honor system to keep anyone from clobbering
anyone else&amp;rsquo;s name.  It was an ok system for a short while, since
there were only about 4 or 5 people in the world who knew this thing
existed, but we got an authentication and authorization system set up
before anyone could take advantage of it.&lt;/p&gt;
&lt;p&gt;By that time, I&amp;rsquo;d quit my job at Yahoo! and was taking a sabatical.
If you can afford it, I highly recommend saving up a little nest egg
and taking a few months off to see what comes out of you.  Muses
can be fickle, and tend to call when least expected.&lt;/p&gt;
&lt;h3&gt;I know what you&amp;rsquo;re thinking&amp;hellip;&lt;/h3&gt;
&lt;p&gt;You&amp;rsquo;re thinking that the culmination of this story is that I published
npm to npm and that was my first npm publish, and it&amp;rsquo;ll be super meta
and awesome like that.  It&amp;rsquo;d be a beautiful punchline.&lt;/p&gt;
&lt;p&gt;Real life is sloppy sometimes.&lt;/p&gt;
&lt;p&gt;I knew that I wanted npm to be able to accept abbreviated versions of
commands, so that &lt;code&gt;npm inst&lt;/code&gt; would do the same thing as &lt;code&gt;npm install&lt;/code&gt;.
(To this day, the friendly CLI shorthands are some of npm&amp;rsquo;s most
beloved features.)&lt;/p&gt;
&lt;p&gt;The first thing I published to npm was &lt;a href=&quot;http://npm.im/abbrev&quot;&gt;abbrev&lt;/a&gt;.
I&amp;rsquo;d written it already, mostly as a sort of coding crossword
puzzle some&amp;hellip; Saturday?  Wednesday?  All the days were pretty
identical during those two lazy/exhausting months of funemployment.&lt;/p&gt;
&lt;p&gt;Since abbrev was only one module, no build command, it was
really easy to publish and install repeatedly.  Ever since then, it&amp;rsquo;s
always been one of my go-to testing modules to make sure things are
working properly.  Not only was it &lt;em&gt;my&lt;/em&gt; first npm publish, it was
&lt;em&gt;the&lt;/em&gt; first npm publish, and it was published probably dozens or
hundreds of times to &lt;code&gt;http://localhost:5984/&lt;/code&gt; while I was working on
npm.  So, of course, when I had a registry running on my little
DreamHost instance, &lt;code&gt;abbrev&lt;/code&gt; was the first thing I published to it.&lt;/p&gt;
&lt;p&gt;The really wacky part: despite it being the first thing I&amp;rsquo;d published
with npm, I didn&amp;rsquo;t actually &lt;em&gt;use&lt;/em&gt; abbrev in npm until &lt;a href=&quot;https://github.com/npm/npm/commit/4f8b35e&quot;&gt;5 months
later&lt;/a&gt;. That whole time I
kept trying to figure out how to have proper dependencies in the thing
that installed dependencies.  Eventually, I gave up and threw it in a
&lt;code&gt;utils&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;Looking back over abbrev now, it&amp;rsquo;s amazing to me how little it&amp;rsquo;s
changed.  Most of the code is still that initial implementation from
May 2010.&lt;/p&gt;
&lt;p&gt;The moral of the story is that you don&amp;rsquo;t know how it&amp;rsquo;s going to end.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2017/02/its-arrested-development-you-know-our/"/>
		<updated>2017-02-02T17:40:29Z</updated>
		<id>https://blog.izs.me/2017/02/its-arrested-development-you-know-our/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://its-arrested-development.tumblr.com/post/49872289984/you-know-our-familys-really-messed-up-i-know&quot; class=&quot;tumblr_blog&quot;&gt;its-arrested-development&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;small&gt;You know, our family’s really messed up.&lt;br /&gt;&lt;strong&gt;I know. We’re like the only normal ones.&lt;/strong&gt;&lt;/small&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Reclaim Red</title>
		<link href="https://blog.izs.me/2016/11/reclaim-red/"/>
		<updated>2016-11-13T00:25:21Z</updated>
		<id>https://blog.izs.me/2016/11/reclaim-red/</id>
		<content type="html">&lt;p&gt;Hillary Clinton was judged to be too much of an insider. She didn&amp;rsquo;t have a story for the disaffected working class voter who sees a mechanized future where they have no place. A voter who wants something, anything, as long as it&amp;rsquo;s different. They&amp;rsquo;ll find out soon enough that this isn&amp;rsquo;t what they got. &lt;/p&gt;
&lt;p&gt;The obvious solution: radicalism. An obstinate hard left anti-capitalist socialist workers&amp;rsquo; movement, focused on: systematically destroying and tearing down the institutions of corruption, including the electoral college and the military industrial complex; nationalizing banking, health care, and higher education; criminalizing the bribery of representatives by corporate interests; providing civilian oversight for police; restoring protection for voting rights and establishing universal suffrage as a constitutionally protected right; ending slavery by abolishing private prisons and mandatory minimum sentencing; ending wage slavery by establishing universal basic income for all Americans; streamlining the process of naturalization and providing amnesty for so-called &amp;ldquo;illegals&amp;rdquo; who wish to become naturalized. &lt;/p&gt;
&lt;p&gt;Such a movement would have the right amount of social justice, scapegoating, catchy slogans, and could unite oppressed minorities and disaffected heartland whites. We can reclaim what it means to be a&amp;quot; red state&amp;quot;.&lt;/p&gt;
&lt;p&gt;It is time, comrades! ☭&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On Building Bridges</title>
		<link href="https://blog.izs.me/2016/11/on-building-bridges/"/>
		<updated>2016-11-11T22:57:38Z</updated>
		<id>https://blog.izs.me/2016/11/on-building-bridges/</id>
		<content type="html">&lt;p&gt;To the hot-take authors, politicians, and liberals asking us to build bridges.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s an incomplete list of people more deserving of our empathy right now than white heartland voters, in no particular order:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Muslim Americans who watched in horror as the GOP candidate successfully campaigned on a platform of targeting them with state violence.&lt;/li&gt;
&lt;li&gt;The people of Puerto Rico, who live under US federal rule without representation or voice in the electoral process.&lt;/li&gt;
&lt;li&gt;Everyone who is unable to vote for the rest of their lives due to a conviction for a nonviolent offense.&lt;/li&gt;
&lt;li&gt;Native peoples facing further destruction of their homes in the name of oil.&lt;/li&gt;
&lt;li&gt;The peaceful protestors in North Dakota holding their ground against rubber bullets, riot gear, and attack dogs.&lt;/li&gt;
&lt;li&gt;The millions of people whose drinking water will be in jeopardy of contamination due to the oil pipeline those protestors are protesting.&lt;/li&gt;
&lt;li&gt;Black people.  Just, all of them, everywhere.  But especially black women, who showed up for Hillary more than any other group.&lt;/li&gt;
&lt;li&gt;All non-white people, who now face hate that has been emboldened by Trump&amp;rsquo;s win.&lt;/li&gt;
&lt;li&gt;Everyone whose vote was restricted by voter ID laws and other policies that violate the Voting Rights Act.&lt;/li&gt;
&lt;li&gt;The 20 million people depending on the ACA for access to medical care.&lt;/li&gt;
&lt;li&gt;The millions of disabled people whose legal and medical lifelines Trump has promised to remove.&lt;/li&gt;
&lt;li&gt;Same-sex couples, whose families and marriages will face concerted attack from the federal government in the near future.&lt;/li&gt;
&lt;li&gt;Transgender people, who only just recently started seeing progress towards equitable treatment and protection by the federal government, and can expect that to roll back.&lt;/li&gt;
&lt;li&gt;Basically the entire LGBTQ community, no longer safe from discrimination in their jobs, homes, hospitals, or anywhere else.&lt;/li&gt;
&lt;li&gt;The millions of women relying on Planned Parenthood for reliable and safe access to reproductive healthcare.&lt;/li&gt;
&lt;li&gt;The civilians living in Syria, Iraq, Afghanistan, Libya, Yemen, and everywhere else where the US maintains a state of constant dangerous wartime readiness.&lt;/li&gt;
&lt;li&gt;International allies and trade partners of the US.&lt;/li&gt;
&lt;li&gt;Teachers doing their best to curb bullying of children, with inadequate resources.&lt;/li&gt;
&lt;li&gt;Everyone who has immigrated to this country, who will be 1 misplaced document away from sudden deportation or worse.&lt;/li&gt;
&lt;li&gt;Victims of rape and sexual assault, watching as a predator ascends to the highest office in the land.&lt;/li&gt;
&lt;li&gt;The next few generations of earthlings, who may be the last, as we quickly make the planet too hot to inhabit.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When you&amp;rsquo;ve summoned empathy and built bridges with all of the people on this list, let&amp;rsquo;s start talking about the Trump voters who attacked all these groups this week.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Economic Uncertainty</title>
		<link href="https://blog.izs.me/2016/11/economic-uncertainty/"/>
		<updated>2016-11-09T18:24:03Z</updated>
		<id>https://blog.izs.me/2016/11/economic-uncertainty/</id>
		<content type="html">&lt;p&gt;This was never about &amp;ldquo;economic uncertainty&amp;rdquo;. Lots of rich white people voted for this monster. This was never about &amp;ldquo;the elites&amp;rdquo; vs &amp;ldquo;the downtrodden&amp;rdquo;. Donald is a parody of an evil crooked billionaire, and already starting to name cronies from the financial elite to put in positions of power.&lt;/p&gt;
&lt;p&gt;This is about kicking the newcomers out of the franchise. It&amp;rsquo;s about returning to a supposed golden age when men were men, and whites were on top, and spoke english, and had jobs, and never had to confront their homophobia or transphobia. It&amp;rsquo;s about blaming The Other for our problems.&lt;/p&gt;
&lt;p&gt;Watch as the media spins a tale about the poor disenfranchised Trump voters, about how the media just didn&amp;rsquo;t listen enough, about how black folks didn&amp;rsquo;t show up in great enough numbers to the polls.
But the facts don&amp;rsquo;t line up with that story. Hillary Clinton won the popular vote despite losing the white majority. People of color did show up. There just weren&amp;rsquo;t enough of them. A democracy is always vulnerable to a tyrannical majority.&lt;/p&gt;
&lt;p&gt;And here&amp;rsquo;s why I&amp;rsquo;m so terrified: the checks and balances that prevent the President from becoming a tyrant only work if the congress, the state governors, and the supreme court are willing to stand up to executive abuses. The GOP now has a majority in both houses of congress, a majority of governorships, and the presidency. There&amp;rsquo;s an open seat on the SCOTUS, and 2 more likely to open in the next 4 years.&lt;/p&gt;
&lt;p&gt;Throughout this election, the GOP leadership has shown unthinkable cowardice and weakness in calling him out for his excesses. Do you really think they&amp;rsquo;ll change now? His plans are going to harm women, minorities, trans and queer people, foreign civilians, our positions in treaty and trade agreements with other countries, and our economy.
Among his first campaign pledges have been promises to jail his political opponents, repeal healthcare for millions of americans, and do away with what little federal protections that LGBTQ people had. People will die, and you can be damn sure it won&amp;rsquo;t be &amp;ldquo;the elites&amp;rdquo; who suffer.&lt;/p&gt;
&lt;p&gt;And there is no longer anyone to stop him.&lt;/p&gt;
&lt;p&gt;WE did this, White People. It was OUR families, OUR culture, OUR people. I am ashamed, and guilty, and enraged.&lt;/p&gt;
&lt;p&gt;Donald Trump is our chicken come home to roost.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/10/when-will-you-be-posting-the-notes-from-your/"/>
		<updated>2016-10-11T08:02:16Z</updated>
		<id>https://blog.izs.me/2016/10/when-will-you-be-posting-the-notes-from-your/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;When will you be posting the notes from your OSFeels talk?
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=G5_8u3NA8M8&quot;&gt;video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/2016/10/when-will-you-be-posting-the-notes-from-your/nvc-oss.pdf&quot;&gt;slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.izs.me/2016/10/when-will-you-be-posting-the-notes-from-your/nvc-oss-notes.pdf&quot;&gt;slides + notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/10/hello-will-you-be-at-sxsw-austin-tx-at-any-tech/"/>
		<updated>2016-10-11T07:59:51Z</updated>
		<id>https://blog.izs.me/2016/10/hello-will-you-be-at-sxsw-austin-tx-at-any-tech/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Hello, will you be at SXSW, Austin TX, at any tech booths? It would cool to meet the maintainer of NPM.
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I don’t plan to be at SXSW any time in the next several years.  Traveling is tough now, because I have a baby at home, and also because I don’t really like traveling.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/10/im-really-curious-about-the-tj-node-js-story-is/"/>
		<updated>2016-10-11T07:58:29Z</updated>
		<id>https://blog.izs.me/2016/10/im-really-curious-about-the-tj-node-js-story-is/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;I&#39;m really curious about the TJ node js story is he real? Or just screen name? According to one of the cuddletech blog posts he is real?
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;TJ Holowaychuk is a real person.  So it TJ Fontaine.  They’re both real people that I’ve met in real life.  They have arms and legs and feelings and heads.  Well, just one head each, as far as I know.  I’m not sure which TJ you meant to ask about, but they’re both nice and definitely real.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>anti-authoritarianism</title>
		<link href="https://blog.izs.me/2016/10/anti-authoritarianism/"/>
		<updated>2016-10-04T17:00:00Z</updated>
		<id>https://blog.izs.me/2016/10/anti-authoritarianism/</id>
		<content type="html">&lt;p&gt;After all the noise I&#39;ve been making about Trump, one could
reasonably assume I&#39;m a die-hard Democrat.&lt;/p&gt;
&lt;p&gt;Those who&#39;ve known me a bit longer may be surprised, since I have
also pulled hard in the past for the Libertarian angle.&lt;/p&gt;
&lt;p&gt;Truth be told, the only unifying principle of my political belief
is anti-authoritarianism.&lt;/p&gt;
&lt;p&gt;I believe that the role of government in a free society should be
to free individuals from tyranny, and I am deeply skeptical of
power granted to any authority.  That power must thus be tightly
limited, balanced, checked, and directed by the people for the
people.  We must only grant power when it is necessary to counter
some other form of tyranny.&lt;/p&gt;
&lt;p&gt;Make no mistake: ALL power is tyranny, and NONE of us are
innocent of wielding it.  We have a moral duty to ensure that it
is balanced, checked, and restricted.&lt;/p&gt;
&lt;p&gt;One of the most deadly forms of power in the world today is
American military power.  We have the most powerful military in
the world, by far, by any reasonable measure.  We are over-armed
to the point of absurdity.&lt;/p&gt;
&lt;p&gt;Killing doesn&#39;t always mean bringing death.  Tyranny can also be
withholding life.  Another form of power that can be deadly is
the power to restrict and control access to nutrition, water,
medical care, shelter, and other resources.&lt;/p&gt;
&lt;p&gt;My opposition to tyrannical authority is both moral and
pragmatic.&lt;/p&gt;
&lt;p&gt;Morally, it offends my emotional sensibility for people to
interact as master and slave or as combatants.  It doesn&#39;t feel
good to be operating in a mode of violence, fear, and
desperation.  At best, it leads to a cycle of adrenaline and
cortisol that shuts down the best parts of our brains.  At worst,
it leads to horrors.&lt;/p&gt;
&lt;p&gt;Pragmatically, it is also suboptimal from a systems theory point
of view.  No matter how well-informed, wise, and benevolent, an
authority will almost never have enough insight to make the right
decisions.  When the boss tells everyone what to do, the company
fails.  Better to push authority to where the information is,
whenever possible.&lt;/p&gt;
&lt;p&gt;This idea of pushing authority to the edges, has informed how
I&#39;ve tried to build my company, run open source projects, and
design products.  It&#39;s very challenging, and requires a lot of
trust and communication, but people work really well when they
have the right balance of alignment, competence, and autonomy.
I&#39;ve tried being in charge all the time.  It&#39;s exhausting and
leads to bad outcomes.&lt;/p&gt;
&lt;p&gt;In the American political spectrum, this makes me most closely
aligned with Social Democrats and Libertarians, the two groups
perhaps &lt;em&gt;most&lt;/em&gt; at odds with one another.  That&#39;s amusing to me.&lt;/p&gt;
&lt;p&gt;I have often found other people to be enigmas, but I like
studying puzzles, especially the interaction of complex systems.
That&#39;s why I&#39;ve loved open source communities and projects so
much, and why business and software are also really fun.  It&#39;s
not just debugging the computer, it&#39;s debugging the humans.
People provide the best puzzles!&lt;/p&gt;
&lt;p&gt;I&#39;ve read a lot of history and philosophy over the years.  Never
enough to be a real scholar, per se, but some of the best stories
are true stories.&lt;/p&gt;
&lt;p&gt;The rise of Hitler always fascinated and disturbed me.  Of
course, everything gets distorted in hindsight.  Everyone rushes
to say he was monster NOW.  But the German people elected him.
They voted, and chose him, and supported him.  And it&#39;s not that
he &amp;quot;was a great speaker&amp;quot;.  Accounts at the time painted him as
something of a blustering idiot.  He lied constantly, made
promises and claims that made no sense, talked about a return to
a glorious unified Germanic state that never existed.&lt;/p&gt;
&lt;p&gt;It&#39;s not as if people at the time didn&#39;t call him out on it.
They did.  Again and again.  I once chalked it up to &amp;quot;people were
dumb in oldentimes&amp;quot;, but the horror of the Third Reich is that
they &lt;em&gt;weren&#39;t&lt;/em&gt; dumb, not really.  They were just like us.  Less
connected, less informed, but not by much.  They were smart and
dedicated and trying to do what they thought was best.&lt;/p&gt;
&lt;p&gt;And then they elected a monster of historic proportions.  &amp;quot;The
Nazis&amp;quot; are STILL the go-to villain for lazy screenwriters.&lt;/p&gt;
&lt;p&gt;So when someone like Trump comes along, and he lies so casually
and constantly, it&#39;s really unique and fascinating to me, but
also very disturbing.  No other American politician does that.  I
mean, yeah, they all LIE, but in a completely different way.
Bush and Cheney and the gang lied about the WMDs in Iraq.  Bill
Clinton lied about getting a blowjob.  Every politician has
probably lied in countless ways that never come to light.&lt;/p&gt;
&lt;p&gt;But that&#39;s just it; all those lies are the sort of thing that CAN
&amp;quot;come to light&amp;quot;.  Because in those lies, the person is making up
a distinct and consistent factual reality, and trying to convince
us all of that reality.&lt;/p&gt;
&lt;p&gt;Trump isn&#39;t.  He&#39;s just trying to win.  In every social
interaction, he&#39;s trying to be The Boss.  We&#39;re over here playing
a language game where the truth matters, but Trump isn&#39;t playing
that game.&lt;/p&gt;
&lt;p&gt;Trump&#39;s game is to get himself into a position of power in this
interaction, and then to use that power to get into a position of
more power in the next interaction.  That&#39;s the point of his
game.  When he says &amp;quot;I didn&#39;t say that&amp;quot;, it&#39;s only because the
other person accused him of something, and he knows that a flat
denial is the strongest response.  He doesn&#39;t care that you have
a recording of him saying it.  No one can be the boss of
recordings, so there&#39;s no point interacting with them.&lt;/p&gt;
&lt;p&gt;There has likely never been, in the history of American politics,
a presidential candidate more directly opposed to everything I
believe in.  I find myself watching, with abject terror, as we
tread dreadfully close to putting someone functionally identical
to Hitler in charge of more than half of the modern world&#39;s
combined military power.&lt;/p&gt;
&lt;p&gt;If he&#39;s elected, at some point, he&#39;s going to say &amp;quot;Bomb the hell
outta them!&amp;quot; because that&#39;s a badass thing to say in a meeting,
&lt;em&gt;and then actual bombs will kill actual people as a result&lt;/em&gt;, and
there is no way in hell that he&#39;ll be measured or restrained in
how he does this, because he is never measured or restrained in
anything whatsoever.&lt;/p&gt;
&lt;p&gt;He&#39;s exactly the kind of leader who&#39;d use the FISA Courts to
accuse his opponents and protestors of &amp;quot;terrorism&amp;quot;, which is
exactly the mechanism and function of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sondergericht&quot;&gt;Special
Courts&lt;/a&gt; in 1930s
Germany.&lt;/p&gt;
&lt;p&gt;He&#39;s already suggested &amp;quot;rounding up&amp;quot; muslim-americans.&lt;/p&gt;
&lt;h2 id=&quot;so-what-do-i-believe-in&quot; tabindex=&quot;-1&quot;&gt;so what do I believe in? &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2016/10/anti-authoritarianism/#so-what-do-i-believe-in&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I support scaling back the American military complex
dramatically.  There are no functional checks on this power
anymore, and it has become a runaway empire.  It is immoral to
rule through force without granting political agency to the
nations we are dominating.&lt;/p&gt;
&lt;p&gt;I support a universal basic income guarantee and universal
healthcare and education.  People are not free when they live
under the constant threat of losing their food, shelter, or
health, or when they don&#39;t have the mental toolkit to reason
about the world around them.&lt;/p&gt;
&lt;p&gt;I support Black Lives Matter, same-sex marriage, respect for
native peoples&#39; land, equal opportunity housing and employment,
and slavery reparations.  People are not free when they are
second-class citizens.  We can&#39;t eradicate centuries of racism,
sexism, or homophobia in one fell swoop, but we can chip away at
it diligently.&lt;/p&gt;
&lt;p&gt;I oppose citizenship and immigration control except as necessary
for controlling the spread of diseases (including plant- and
animal-borne pathogens).  The restriction of human movement
prevents efficient distribution of labor, reduces overall
happiness, and quickly becomes a vector for abuse.  Participation
within a community should be determined, as it most commonly was
throughout history, by residence within that community.&lt;/p&gt;
&lt;p&gt;Taxation is a form of tyranny, but it&#39;s far less offensive than
slow starvation or fast bullets.  My heart breaks for the souls
we force unnecessarily through hell on earth, and for the future
that has lost the art and invention and inspiration that they
could have offered.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Newcomb Programming Languages</title>
		<link href="https://blog.izs.me/2016/09/newcomb-programming-languages/"/>
		<updated>2016-09-08T18:06:57Z</updated>
		<id>https://blog.izs.me/2016/09/newcomb-programming-languages/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Newcomb%27s_paradox&quot;&gt;Newcomb&amp;rsquo;s Problem&lt;/a&gt;
is a very divisive thought experiment in decision theory. The tl;dr version is:&lt;/p&gt;
&lt;p&gt;A supreme intelligence Omega comes down from the sky, and offers you
two boxes, labeled A and B.  In box A, Omega has placed $1000.&lt;/p&gt;
&lt;p&gt;Omega makes a prediction about whether you will open only one box, or
both boxes.  If Omega predicts that you will open both boxes, then box
B is empty.  If Omega predicts that you will open only one box, then
Omega places $1000000 in box B.&lt;/p&gt;
&lt;p&gt;In over a million trials, Omega has never incorrectly predicted
someone&amp;rsquo;s decision.  (Supreme intelligence is supreme!)&lt;/p&gt;
&lt;p&gt;Omega places both boxes before you, and flies away to torment some
other decision theorist.&lt;/p&gt;
&lt;p&gt;Do you open both boxes, or just box B?&lt;/p&gt;
&lt;p&gt;Well, you figure, Omega is gone now, its prediction already in the
past.  At this point, if I open both boxes, then I&amp;rsquo;ll get either $1000
or $1001000.  If I open only box B, then I&amp;rsquo;ll get either $0 or
$1000000.  Regardless of Omega&amp;rsquo;s prediction, I&amp;rsquo;m always better off
opening both boxes.&lt;/p&gt;
&lt;p&gt;So you open box B, and find it empty.&lt;/p&gt;
&lt;p&gt;You lament that Omega seemingly rewards &amp;ldquo;improper&amp;rdquo; decision theorists,
and treat yourself to $1000 worth of whatever.  Since you&amp;rsquo;re a
dedicated rationalist, you probably make a bunch of sound investments
with it and end up doing ok anyway.&lt;/p&gt;
&lt;p&gt;Good for you.&lt;/p&gt;
&lt;p&gt;Another approach is to commit to opening only box B, and stick to that
commitment.  Decision theory be damned, I want a million bucks.
Before doing anything else, you set box A on fire, just to be sure.
You open box B, and get a million dollars.&lt;/p&gt;
&lt;p&gt;What use is a decision theory if it doesn&amp;rsquo;t optimize outcomes?  That&amp;rsquo;s
not to say that it&amp;rsquo;s worthless to study the science of priors and
statistics and possible outcomes.  Certainly, in most situations, we
are not dealing with supreme intelligences handing out money
capriciously.  But in the real world, there &lt;em&gt;are&lt;/em&gt; occasionally
situations where the ends matter more than being theoretically
correct.&lt;/p&gt;
&lt;p&gt;On the other hand, perhaps a purity of theoretical correctness is an
important part of one&amp;rsquo;s self-image.  Maybe it imparts emotional
satisfaction that a million dollars just can&amp;rsquo;t buy.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s perfectly fine to be a two-boxer.  In a way, I respect it, like a
monk or an artist.  There&amp;rsquo;s a beauty in that purity.&lt;/p&gt;
&lt;p&gt;But still.  Fuck that, I want the money.  I can be a monk later.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Most programming languages are to some extent art projects.  There&amp;rsquo;s a
lot of subjectivity to them.  They exist to seek a beautiful ideal.&lt;/p&gt;
&lt;p&gt;Most programming languages are also to some extent practical.  You can
do real stuff with them.  They exist to make stuff.&lt;/p&gt;
&lt;p&gt;The difference is, when tradeoffs must be made between &amp;ldquo;beautiful
ideal&amp;rdquo; and &amp;ldquo;make stuff&amp;rdquo;, what wins?&lt;/p&gt;
&lt;p&gt;If our ideal is in fact beautiful, and if we are skilled in our
pursuit of it, then one might expect that these trade-offs will be
infrequent.  The most beautiful programming language is the one that
is the most pragmatic.&lt;/p&gt;
&lt;p&gt;But like boxes of money, programming languages do not exist in a
vacuum.  We have imperfect vision, and may find ourselves heading down
a blind alley to explore what we hope will be beautiful.  In the
making of things, we may find that it was a mistake, and that the only
way out is to choose to either make the language more beautiful (and
lose pragmatic value for its current users) or preserve pragmatic
value (and give up on some potential beauty).&lt;/p&gt;
&lt;p&gt;Both choices are fraught with hazard.  The first can alienate the
community.  The second can lead to a mongrel language with warts and
bad parts.&lt;/p&gt;
&lt;p&gt;Making software is the purpose of a programming language.  That is the
winning condition.  Valuing something other than that seems to me akin
to opening both boxes, because decision theory said so.&lt;/p&gt;
&lt;p&gt;In box A, Omega has placed beauty.  In box B, Omega has placed
pragmatism and community, but only if Omega predicts that you will
only choose box B.  Omega has never been wrong.&lt;/p&gt;
&lt;p&gt;Make your choice.&lt;/p&gt;
&lt;p&gt;Except, in this version, you can open B, and get pragmatism and
community.  But once opened, if you choose A, then the community will
eventually be lost.&lt;/p&gt;
&lt;p&gt;I can see the value in a beautiful thing.  But for myself,
willy-nilly, I like useful software and happy communities more than
programming languages for their own sake.&lt;/p&gt;
&lt;p&gt;This is why I love JavaScript so much.  Fuck beautiful code, I wanna
make a web page.  We&amp;rsquo;d rather lack a feature than add something
that&amp;rsquo;ll break anything.  We drag the albatross of ancient websites
along with us, and while this is often a curse, it is also a sort of
blessing.&lt;/p&gt;
&lt;p&gt;JavaScript is a one-boxer language.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Someone emailed me asking for tips or sites for learning JavaScript, and this is my final answer.</title>
		<link href="https://blog.izs.me/2016/08/someone-emailed-me-asking-for-tips-or-sites-for/"/>
		<updated>2016-08-23T23:44:27Z</updated>
		<id>https://blog.izs.me/2016/08/someone-emailed-me-asking-for-tips-or-sites-for/</id>
		<content type="html">&lt;p&gt;Warning, this is going to seem like &amp;ldquo;I believe I did, Bob&amp;rdquo;-style advice (ref: &lt;a href=&quot;http://howfuckedismydatabase.com/nosql/&quot;&gt;http://howfuckedismydatabase.com/nosql/&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s really not.  I really mean this, really and truly, from the bottom of my heart, as actual advice that I firmly believe will help people more efficiently and thoroughly than any other approach to learning JavaScript.  My advice is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Read the ECMAScript specification.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t feel like you have to understand every word.  Give yourself permission to just force the words into your brain, and move on to the next section.  If you&amp;rsquo;re diligent about it, it only takes a few hours.  Repeat this process every few years.&lt;/p&gt;
&lt;p&gt;I guarantee it will be an unpleasant experience if you&amp;rsquo;re not already experienced with reading language specifications.  (As they go, this is a pretty good one, I&amp;rsquo;ve since learned.)  It&amp;rsquo;s not fun reading.  And it&amp;rsquo;s not like you&amp;rsquo;ll be able to sit down and suddenly grok the whole language like seeing the matrix or anything.&lt;/p&gt;
&lt;p&gt;But I can also pretty much guarantee that you&amp;rsquo;ll be surprised what sticks.  Weeks or months or years later, you&amp;rsquo;ll encounter some weird bug, or read a blog post, and go &amp;ldquo;OH!  So THAT&amp;rsquo;S what that was talking about!  Where was that?  The part on function contexts or something?&amp;rdquo; and then you&amp;rsquo;ll be prepared to go look it up and get the exact details.&lt;/p&gt;
&lt;p&gt;If you already know a bit of JavaScript, then reading the spec will be a bit less unpleasant, but parts will seem like you can skip them.  &lt;strong&gt;Don&amp;rsquo;t skip those parts.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Programming requires a certain kind of precision, and a specification is a very precise thing.  It&amp;rsquo;s tempting to think that learning must also follow a kind of precision, where you fully grok each concept before learning the next one, and follow a proper ordering of things.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the thing: humans aren&amp;rsquo;t precise.  Learning is not like putting data into a computer because we aren&amp;rsquo;t computers and understanding isn&amp;rsquo;t information to be tokenized and stored.  Understanding is more like a muscle than a memory, and learning is more like digestion than data entry.  Let&amp;rsquo;s none of us be confused that digestion is anything but a process of turning nutrients into some combination of more you, mostly-wasted energy, and shit, and it&amp;rsquo;s not even remotely precise or ordered.  And a language spec is like boiled kale with no salt, but it&amp;rsquo;s packed with nutritive understanding that will mostly be shat out of your brain or wasted in pointless hacker news threads, but some small part of it will make you strong and healthy.&lt;/p&gt;
&lt;p&gt;So if you want to grow in the JavaScripts, you&amp;rsquo;ll never get there with candy-coated tutorials.  Eat your fucking vegetables, and read the spec.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.ecma-international.org/publications/standards/Ecma-262.htm&quot;&gt;http://www.ecma-international.org/publications/standards/Ecma-262.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll be glad you did.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Plop the Frog</title>
		<link href="https://blog.izs.me/2016/08/plop-the-frog/"/>
		<updated>2016-08-07T06:24:47Z</updated>
		<id>https://blog.izs.me/2016/08/plop-the-frog/</id>
		<content type="html">&lt;p&gt;Once upon a time, there was a frog, who had no name, but we&amp;rsquo;ll call
Plop.  Plop hopped along as best he could. However, Plop had a few
extra legs, which didn&amp;rsquo;t work so well. Environmental activists, tall
bald chimps of the sort that builds factories and complains about
factories, thought it was because of pollution from the factories.
But actually, it was a parasite that entered Plop&amp;rsquo;s egg and lived in
Plop while he was a tadpole, eventually altering his development
during metamorphosis.&lt;/p&gt;
&lt;p&gt;Eventually, since Plop couldn&amp;rsquo;t hop like his fellow frogs, he was
eaten by a snake, and Plop&amp;rsquo;s parasite infected the snake&amp;rsquo;s intestine,
where it would reproduce, and create offspring to make other frogs hop
like Plop.  (A snail was also involved, but this story is already more
than complicated enough.)&lt;/p&gt;
&lt;p&gt;The moral of the story is that nature is fascinating in its utter and
complete lack of empathy.  Evolution doesn&amp;rsquo;t give any fucks about
anyone.  Genes do whatever they have to do to get ahead, even if it
means ruining the lives of frogs like Plop, and sending them through
an agonizing existence into an early grave in the belly of a snake.&lt;/p&gt;
&lt;p&gt;Factories are bad for lots of reasons.  But the opposite of bad isn&amp;rsquo;t
good, and &amp;ldquo;natural&amp;rdquo; is not a synonym for &amp;ldquo;healthy&amp;rdquo;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>on cargo shorts</title>
		<link href="https://blog.izs.me/2016/08/on-cargo-shorts/"/>
		<updated>2016-08-05T18:21:30Z</updated>
		<id>https://blog.izs.me/2016/08/on-cargo-shorts/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://shanenickerson.tumblr.com/post/127561589129&quot;&gt;shanenickerson&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here’s the thing. We’ve given up on style. We can’t keep up. We have too many kids and not enough time, and when we go out on a weekend day to do a bunch of stuff, we need pockets. We need them for wallets and dolls and water bottles and an extra pull-up, maybe a sippy cup or a phone or two. We aren’t concerned about whether you like them. We are trying to get through this phase of our lives, which, quite frankly, requires more pocket space than we ever expected. Let us live. CRGO 4 LYF.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>A final response to the &quot;Tell me why Trump is a fascist&quot;. • /r/EnoughTrumpSpam</title>
		<link href="https://blog.izs.me/2016/07/a-final-response-to-the-tell-me-why-trump-is-a/"/>
		<updated>2016-07-27T21:46:30Z</updated>
		<id>https://blog.izs.me/2016/07/a-final-response-to-the-tell-me-why-trump-is-a/</id>
		<content type="html">&lt;h2&gt;To my good and kind hearted conservative friends and relatives:&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s always challenging to learn about the history leading up to the Third Reich and Hitler&amp;rsquo;s rise to power. How didn&amp;rsquo;t they see it coming? Why didn&amp;rsquo;t anyone stop him?&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s such a horrible series of events that any comparison to it seems not just inaccurate, but an outrageously cruel and inappropriate joke.&lt;/p&gt;
&lt;p&gt;However, it is no exaggeration to say that we are in such a situation now, where historians of the future may ask why we didn&amp;rsquo;t stop the rise of a brutal fascist dictator who overturned the rule of law and performed unspeakable evil. Like the Germans who elected Hitler to power, you are good people, but many of you may not see the stakes of your choice or the power to do Good that rests in your hands.&lt;/p&gt;
&lt;p&gt;Donald Trump is not just a buffoon. He knows what he&amp;rsquo;s doing, and he&amp;rsquo;s following a script which has been horrifyingly successful numerous times in the past.&lt;/p&gt;
&lt;p&gt;I know you probably don&amp;rsquo;t love Hillary. I don&amp;rsquo;t either. But she is not a fascist. Trump will possibly be even worse than Hitler was. Imagine Hitler with the power of nuclear weapons and the modern American military.&lt;/p&gt;
&lt;p&gt;Call on your fellow conservatives to answer for Trump&amp;rsquo;s fascism before voting for him. Ask them if they are willing to take their share of the blame for the unspeakable horrors he is explicitly and openly planning.&lt;/p&gt;
&lt;p&gt;This is 2016. Everything is recorded, and Trump makes no apologies or excuses for his plans. History will remember that you should have known what you were doing.&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;1337&quot; data-orig-width=&quot;2048&quot; data-orig-src=&quot;./shitler.jpg&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/b3623dc686a0e03131340766161a20e3/tumblr_inline_pe360fnDrS1qzgxun_540.jpg&quot; alt=&quot;sieg heil&quot; style=&quot;width:100%&quot; data-orig-height=&quot;1337&quot; data-orig-width=&quot;2048&quot; data-orig-src=&quot;./shitler.jpg&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;em&gt;(Posted originally to Facebook, because that&amp;rsquo;s where a lot of y&#39;all hang out)&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/07/they-might-be-giants-played-a-hell-of-a-show-at/"/>
		<updated>2016-07-23T07:31:12Z</updated>
		<id>https://blog.izs.me/2016/07/they-might-be-giants-played-a-hell-of-a-show-at/</id>
		<content type="html">&lt;p&gt;They Might Be Giants played a hell of a show at the Berkeley UC Theater. They did two sets (opening for themselves). On the way out I heard some guy say he got the set list and I felt sharp pangs of envy, but I got a picture of it. Which, really, is for the best because all I&amp;rsquo;d do if I&amp;rsquo;d been the one to grab the list is take a picture and then guiltily keep the faded paper for too long and then guiltily throw it away eventually. &lt;/p&gt;
&lt;p&gt;A tmbg show is a thing of beauty. Their catalog is so huge, and they&amp;rsquo;re still so prolific, it&amp;rsquo;s a good bet that they&amp;rsquo;ll play a few songs you&amp;rsquo;d forgotten, a few you don&amp;rsquo;t know, a few you just started listening to, and your favorite from a long time ago. And a surprising cover or two. (In this case, it was &amp;ldquo;pay my bills&amp;rdquo; by Destiny&amp;rsquo;s Child.) Plus they&amp;rsquo;re hilarious, and rock stars.  (at The UC Theatre)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/07/destinyrush-unarmed-black-man-with-hands-up/"/>
		<updated>2016-07-21T23:59:24Z</updated>
		<id>https://blog.izs.me/2016/07/destinyrush-unarmed-black-man-with-hands-up/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://destinyrush.tumblr.com/post/147738460183&quot;&gt;destinyrush&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;&lt;b&gt;Unarmed Black Man With Hands Up Shot By Police.&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Charles Kinsey, 47, a behavior therapist from South Florida was shot in the leg three times by the police in North Miami while laying on the ground with his arms up and trying to help his patient with autism who had run away from a group home.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;It all started when someone called 911 and said there was a man walking around with a gun. However it was Kinsey’s patient who was sitting on the ground cross-legged, playing with a toy truck.&lt;/p&gt;
&lt;h2&gt;Charles got shot by police despite telling them he was only trying to help his patient.&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;The police shot him, handcuffed him and left him on ground bleeding.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;North Miami police have not released much information at
all. They haven’t released the officer’s name, they haven’t given us an update
on the investigation. However, they did say that the state attorney is now a part of
this investigation.&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;210&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://66.media.tumblr.com/4f1951ae3b0e282a551c8dca3d38312d/tumblr_inline_oao3li4d1B1qbn4on_540.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/4f1951ae3b0e282a551c8dca3d38312d/tumblr_inline_oao3lniE2f1qbn4on_540.png&quot; data-orig-height=&quot;210&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;https://66.media.tumblr.com/4f1951ae3b0e282a551c8dca3d38312d/tumblr_inline_oao3li4d1B1qbn4on_540.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;b&gt;#CharlesKinsey   #BlackLivesMatter &lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;#StopPoliceBrutality   #NorthMiamiPoliceDepartment&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Among the Many Hardest Problems in Computer Science Are Such Things As...</title>
		<link href="https://blog.izs.me/2016/07/among-the-many-hardest-problems-in-computer/"/>
		<updated>2016-07-15T16:20:57Z</updated>
		<id>https://blog.izs.me/2016/07/among-the-many-hardest-problems-in-computer/</id>
		<content type="html">&lt;p&gt;There&amp;rsquo;s a saying that the two hardest problems in computer science are caching, naming things, and off-by-one errors.&lt;/p&gt;
&lt;p&gt;I think there&amp;rsquo;s just one hard problem: asynchronously shared state.  The others are all instances of it.&lt;/p&gt;
&lt;p&gt;Race conditions can only happen when processing happens in multiple places, and they become even more complicated when information is updated by multiple actors and stored in multiple places.&lt;/p&gt;
&lt;p&gt;You read a thing from disk, do some stuff to it, write back the result.  Except, while you&amp;rsquo;re doing stuff to the information, some other process reads the same file, does some different stuff to it, and writes its result back.  Whoever takes the longest wins, the other&amp;rsquo;s write is gone.&lt;/p&gt;
&lt;p&gt;Where this is more complicated is when the processing is done in human brains, which are notoriously hard to observe, operate in massively parallel fashion, and have extremely distributed and unreliable data storage capabilities.&lt;/p&gt;
&lt;p&gt;What do we call this thing?  Is it a cache, or a copy?  A read-through cache?  How often should it be purged?  If it&amp;rsquo;s a copy, is it authoritative?  When does it get synced back?  The problem is not just that words have meaning, but that they have so many meanings.&lt;/p&gt;
&lt;p&gt;A word like &amp;ldquo;specification&amp;rdquo; can mean &amp;ldquo;hard and fast set of rules which explicitly limit the scope of work&amp;rdquo; to one person, and &amp;ldquo;the beginning of a conversation which points at the intent of a feature&amp;rdquo; to someone else.  They&amp;rsquo;re probably going to have some unproductive arguments about whether a thing &amp;ldquo;satisfies the spec&amp;rdquo; or not.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s just when we&amp;rsquo;re talking about simple things like programming.  Start getting into conflict or culture or strategy, and holy moly, it&amp;rsquo;s so much harder.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s tempting to say that the solution is &amp;ldquo;more communication&amp;rdquo;, but more &lt;em&gt;bad&lt;/em&gt; communication can make the situation worse, and even good communication has a cost.  &amp;ldquo;So write it down!&amp;rdquo; I say to myself in my internal argument, wherein I attempt to reconcile the state I share among the many processes across my brain.  Ok, but write &lt;em&gt;what&lt;/em&gt; down?  Where?  How often do you read it back again?  Does anyone know where it&amp;rsquo;s written?  Is it authoritative or suggestive?  How does one edit it when the situation changes?&lt;/p&gt;
&lt;p&gt;Turns out hard things are hard.  My past self often assumed that something would not be so hard, and my current self now has to reconcile the new experience of hardness with the cached value of expected ease.&lt;/p&gt;
&lt;p&gt;Shared state.  It&amp;rsquo;s one hell of a fucker.  The only easy thing is solipsism, but then it&amp;rsquo;s hard to get much done on your own, isn&amp;rsquo;t it?&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;380&quot; data-orig-width=&quot;450&quot; data-orig-src=&quot;./Monty-Python-Spanish-Inquisition-GIF.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/287c3d03471af837e9c5a1fa3b69dfe5/tumblr_inline_pe360fGION1qzgxun_540.gif&quot; title=&quot;NOBODY expects asynchronously shared state problems!&quot; alt=&quot;NOBODY expects asynchronously shared state problems! [DIABOLICAL LAUGHTER]&quot; style=&quot;width:100%&quot; data-orig-height=&quot;380&quot; data-orig-width=&quot;450&quot; data-orig-src=&quot;./Monty-Python-Spanish-Inquisition-GIF.gif&quot; /&gt;&lt;/figure&gt;
</content>
	</entry>
	
	<entry>
		<title>An Aspirational Meditation in 12 Stanzas</title>
		<link href="https://blog.izs.me/2016/07/an-aspirational-meditation-in-12-stanzas/"/>
		<updated>2016-07-08T17:26:31Z</updated>
		<id>https://blog.izs.me/2016/07/an-aspirational-meditation-in-12-stanzas/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;Open Mind
Clear Vision
True Speech
Warm Heart
Calm Center

Open Mind
Open Vision
Open Speech
Open Heart
Open Center

Clear Mind
Clear Vision
Clear Speech
Clear Heart
Clear Center

True Mind
True Vision
True Speech
True Heart
True Center

Warm Mind
Warm Vision
Warm Speech
Warm Heart
Warm Center

Calm Mind
Calm Vision
Calm Speech
Calm Heart
Calm Center

Open Mind
Clear Mind
True Mind
Warm Mind
Calm Mind

Open Vision
Clear Vision
True Vision
Warm Vision
Calm Vision

Open Speech
Clear Speech
True Speech
Warm Speech
Calm Speech

Open Heart
Clear Heart
True Heart
Warm Heart
Calm Heart

Open Center
Clear Center
True Center
Warm Center
Calm Center

Open Mind
Clear Vision
True Speech
Warm Heart
Calm Center&lt;/pre&gt;
&lt;p&gt;On each in-breath, I hold the first word.  On the out breath, I hold the second word, and bring the feeling of that concept to the part of my body referenced (head, eyes, mouth/throat, heart, gut).&lt;/p&gt;
&lt;p&gt;I try to consider that each term is both an adjective, and thus a thing to aspire to (a True Heart, an Open Vision, etc.) as well as a verb instructing me how to attain that state.&lt;/p&gt;
&lt;p&gt;When I notice my mind has wanderd, I try to pick up where I left off, or back at the beginning.&lt;/p&gt;
&lt;p&gt;This is how I&amp;rsquo;ve been going to sleep lately, unless I&amp;rsquo;m too tired to do anything but breath counting.  When I have time, I try to go through it in the shower as well.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know if it&amp;rsquo;s making me a better person, but it feels good to remind myself that I aspire to be curious, capable, and compassionate.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/06/earlpostsaboutwhatever/"/>
		<updated>2016-06-23T18:49:20Z</updated>
		<id>https://blog.izs.me/2016/06/earlpostsaboutwhatever/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://earlpostsaboutwhatever.tumblr.com/post/146199902504&quot;&gt;earlpostsaboutwhatever&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://scatterdarknessscattersilence.tumblr.com/post/146149371654&quot;&gt;scatterdarknessscattersilence&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://killerville.tumblr.com/post/146148956652&quot;&gt;killerville&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://korrasforevergirl.tumblr.com/post/146079360404&quot;&gt;korrasforevergirl&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://thefingerfuckingfemalefury.tumblr.com/post/146079288758&quot;&gt;thefingerfuckingfemalefury&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://airl0ck.tumblr.com/post/146079031296&quot;&gt;airl0ck&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://thefingerfuckingfemalefury.tumblr.com/post/146067017013&quot;&gt;thefingerfuckingfemalefury&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://scottbaiowulf.tumblr.com/post/145845024441&quot;&gt;scottbaiowulf&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://broke-and-eating-well-in-okc.tumblr.com/post/145842666699&quot;&gt;broke-and-eating-well-in-okc&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://hojolove.tumblr.com/post/145562992459&quot;&gt;hojolove&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;Proof you can market anything as a “Superfood” if it says Organic, Raw and Gluten-free.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;THERE’S A FREAK’N WARNING ON THE BACK THAT IF EATEN IN EXCESS THEY CAUSE SYMPTOMS OF CYANIDE POISONING!&lt;/p&gt;
&lt;p&gt;Their suggestion to eating these is to methodically poison yourself by eating 2-4 every other day. Since when has eating Apricot kernels been a thing in anyone’s diet!?&lt;/p&gt;
&lt;p&gt;&lt;i&gt;these can be found at Wholefoods&lt;/i&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;WHAT.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jesus Christ, how is this legal&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;What in the HELLS O.O&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mmm, delicious poison.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Please do not eat the Healthy Poison O.O&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Someone could fucking kill someone with these if they poured them in a ziploc bag and called them peanuts&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;QUESTION: if i eat enough of these, can i build up a tolerance to cyanide poisoning&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is &lt;a href=&quot;http://www.sunfood.com/apricot-kernels-sweet-8oz-organic.html&quot;&gt;apparently a real thing&lt;/a&gt;. &lt;a href=&quot;https://en.wikipedia.org/wiki/Apricot_kernel&quot;&gt;More info from Wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alright, folks, time to get Science Side of Tumblr on this. There is SO MUCH BULLSHIT packed into this that I ended up writing an obnoxiously long post, for which I apologize.&lt;/p&gt;
&lt;p&gt;Let’s start with the product description page that Nora helpfully linked to. There’s just a ton of bullshit pseudoscience and feel-good woo in here and I’m gonna break it down.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“Apricot Kernels are one of the highest natural sources of a rare phytonutrient called amygdalin, also known as vitamin B17, an important nutrient which has largely disappeared from Western diets.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Wow. Lots of fail in one sentence. &lt;a href=&quot;https://en.wikipedia.org/wiki/Amygdalin&quot;&gt;Amygdalin&lt;/a&gt; is not, in fact, particularly rare; as the wiki page states, it’s found in “many plants” “particularly the Prunus genus, Poaceae (grasses), Fabaceae (legumes), and in other food plants, including linseed and manioc.” The only people who refer to amygdalin as a vitamin are those trying to make money from it. It is absolutely NOT a vitamin in any way, shape, or form. The definition of the word “vitamin” is “a compound which is required by the body in small amounts, which it cannot make on its own and thus must be obtained from the diet.” Your body does not *require* amygdalin in the least. In fact, if you consume too much of it, you will LITERALLY DIE OF CYANIDE POISONING. It is NOT an “important nutrient.” It has not “disappeared from Western diets” because it was never a part of any culture’s diet. Any group of people who ate too much of it probably died.&lt;/p&gt;
&lt;p&gt;Moving on:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“Our raw, certified organic apricot kernels originate from wild apricot trees that have never come into contact with any sort of pesticide, herbicide or synthetic fertilizer. The apricots are harvested gently by hand, then the kernels are removed and slowly sun-dried. Our farmers pride themselves on cultivating the highest quality kernels possible while maintaining eco-friendly and sustainable agricultural practices.”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Wait, there’s a contradiction in there.&lt;/p&gt;
&lt;p&gt;“…originate from wild apricot trees…”&lt;br /&gt;“…farmers pride themselves on cultivating…”&lt;/p&gt;
&lt;p&gt;Listen, I don’t wanna be a pedantic asshole and debate semantics here, but if farmers are cultivating something, then it’s not wild. Okay? You can certainly have a bunch of people going out into a forest and harvesting things from the wild; for herbs this is called wildcrafting and for fruits/vegetables it is generally called foraging. No part of this involves cultivation or farms, which are about as far removed from wild plants as… well, most varieties of fruits and vegetables that we eat today.&lt;/p&gt;
&lt;p&gt;Now we get to the hilarious part:&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“WARNING: Sweet apricot kernels contain amygdalin (Vitamin B17) which can cause symptoms of cyanide poisoning when eaten in excess. DO NOT EAT MORE THAN 8 SEEDS PER DAY. See a doctor immediately if you experience symptoms like nausea, fever, headache, or low blood pressure. Do not eat if you are pregnant or nursing. Not intended for children”&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;THEY LITERALLY FUCKING TELL YOU THAT THESE CAUSE CYANIDE POISONING. Oh wait, no, my mistake, they tell you that they cause “symptoms of cyanide poisoning.” Well, you know what else causes “symptoms” of cyanide poisoning? CYANIDE. If you read the wiki article on amygdalin, you may have noticed this part:&lt;/p&gt;
&lt;p&gt;“Amygdalin is hydrolyzed by intestinal β-glucosidase, emulsin, and amygdalase to gentiobiose and L-mandelonitrile. Gentiobiose is further hydrolyzed to glucose, whereas mandelonitrile is hydrolyzed to benzaldehyde and hydrogen cyanide. Hydrogen cyanide in sufficient quantities (allowable daily intake: ~0.6 mg) causes cyanide poisoning (fatal oral dose: 0.6-1.5 mg/kg).”&lt;/p&gt;
&lt;p&gt;Also, from the article on apricot kernels that Nora also linked (thank you Nora), there’s this little nugget of info:&lt;/p&gt;
&lt;p&gt;“On average, bitter apricot kernels contain about 5% amygdalin and sweet kernels about 0.9% amygdalin. These values correspond to 0.3% and 0.05% of cyanide. Since a typical apricot kernel weighs 600 mg, bitter and sweet varieties contain respectively 1.8 and 0.3 mg of cyanide.”&lt;/p&gt;
&lt;p&gt;The kernels that these assholes are selling are the sweet variety, so they do have less cyanide than bitter apricot kernels do. However, let’s run the numbers, shall we? One sweet apricot kernel contains approximately 0.3 mg of cyanide, which means that to get to the fatal oral dose of cyanide (0.6-1.6 mg/kg), one would have to eat between 2 and 5 kernels per kilogram of body weight. Now, admittedly, this would take some effort; I weigh about 84 kg, so a fatal dose of these would be between 168 and 420 kernels. These are 8 oz bags, or approximately 226 g, and one kernel weighs about 600 mg, which means there are around 376 kernels in an average bag. This is WELL within the lethal range for me, and I’m a pretty big guy; someone who weighs a lot less than me would have to eat a lot fewer kernels to get a lethal dose.&lt;/p&gt;
&lt;p&gt;Let’s not mince words, folks; &lt;a href=&quot;https://en.wikipedia.org/wiki/Cyanide_poisoning&quot;&gt;cyanide poisoning&lt;/a&gt; is fucking awful. Cyanide blocks an enzyme that your cells need in order to properly process oxygen. It basically causes you to suffocate on a cellular level. Sounds like fun, doesn’t it?&lt;/p&gt;
&lt;p&gt;And these things are legally for sale? In fucking HEALTH FOOD STORES?!? Can you imagine if a small child got into one of these bags? I can only hope these alternative health wingnuts buying these things are keeping them away from their kids.&lt;/p&gt;
&lt;p&gt;Oh, what’s that? You’ll be okay as long as you don’t eat the whole bag? Well, I have unfortunate news for you. Cyanide is not like iocaine powder; you don’t build up an immunity to it by ingesting small amounts daily for years. It can still kill you, although in much more horrible ways than acute cyanide poisoning. From wiki: “Exposure to lower levels of cyanide over a long period results in increased blood cyanide levels, which can result in weakness and a variety of symptoms, including permanent paralysis, nervous lesions, hypothyroidism, and miscarriages. Other effects include mild liver and kidney damage.” Sounds like fun, doesn’t it?&lt;/p&gt;
&lt;p&gt;Oh, and if you want a real treat, read the reviews on the product page above. Hoooooooly shit, people can fool themselves into thinking ANYTHING is good for them if it has the words “organic” and “natural” on the package, and if the seller hypes it up to be this AMAZING LONG-LOST SUPERFOOD OMG. Here’s some of the highlights, in case you don’t want to read them all for fear of losing too many brain cells (note that all of these quotes are from separate reviews):&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I eat these apricot kernels because of the B17 cancer fighting factor.”&lt;/i&gt; No such thing as B17, and amygdalin has been shown to be useless against cancer.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I noticed that my energy is constant all day and I believe they are actually helping me to lose weight.”&lt;/i&gt; Chances are it’s whatever else you’re putting in your smoothie. Keep eating these long enough and I doubt you’ll have energy all day.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I love them even more after researching all of the health properties!”&lt;/i&gt; Clearly you didn’t do any research outside of browsing a couple articles on fucking David Wolfe’s website or some shit.&lt;/p&gt;
&lt;p&gt;This next one has three separate hilarious bits so I’ll quote all three parts together:&lt;br /&gt;&lt;i&gt;“I still am not sure what they do for me yet; however they are loaded with B17 which is said to be really good for certain health benefits.”&lt;/i&gt; 1/Well, that sounds promising. 2/Loaded with cyanide, yum! 3/“certain health benefits.” Not sure which ones, but a website said it, so it must be true!&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“Too bad I can’t eat too many without lowering blood pressure too much.”&lt;/i&gt; I can only assume that this person is referring to the fact that your blood pressure drops to 0/0 when you’re dead.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I like them…not too bitter, but enough so that I know I am getting what I need.”&lt;/i&gt; Because something being bitter is a great indication that it’s good for you, amirite? I mean, kale is great for you, and it’s bitter, so that must mean the bitterness is what makes it good for you!&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I have cancer and eat 5 kernels, 3 times a day.. I eat them with some food so I don’t end up with a stomach ache.”&lt;/i&gt; I would make a comment about how you should know better than to eat things that give you a stomach ache, but then again, this person could conceivably be on chemo, which also causes awful symptoms, so maybe they’re just conditioned to believe that things that make them feel horrible are actually helping cure them.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I eat a few a day and I will hopefully see my blood pressure down next dr appt”&lt;/i&gt; …folks, please don’t eat poison instead of taking blood pressure medication. I know doctors tend to overprescribe pills, but COME THE FUCK ON.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“I’m trying to get off medication (over 30 years) and want to use natural food to help heal my body!”&lt;/i&gt; Which is an admirable goal, and certainly possible. But this is not the way to do it. You need to do your research into the foods you eat to try and heal yourself, and if you did the SLIGHTEST BIT OF RESEARCH you would have found that these things contain CYANIDE. Which absolutely WILL NOT heal your body.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“they are crunchy, aromatic, and slightly bitter, and numb the tip of my tongue when I chew on more than a few at a time.”&lt;/i&gt; HOW IS THIS NOT A GIANT RED FLAG HOLY FUCKING SHIT&lt;/p&gt;
&lt;p&gt;&lt;i&gt;“It is important to read the information about how many to consume per day as it is a medicinal food with great potential.”&lt;/i&gt; Great potential to kill you, yes. Medicinal food, not so much.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;tl;dr&lt;/b&gt; Apricots are the devil’s nutsack, please don’t eat his testicles.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/06/justlearningasigo-quietasides-mark-whether/"/>
		<updated>2016-06-13T22:23:00Z</updated>
		<id>https://blog.izs.me/2016/06/justlearningasigo-quietasides-mark-whether/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://justlearningasigo.tumblr.com/post/145866769702&quot;&gt;justlearningasigo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://quietasides.tumblr.com/post/145840950971&quot;&gt;quietasides&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mark: Whether I’m gay or not has no reflection –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: No, it does. Just listen –&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: I don’t think that you have ownership of horror of this crime.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Can I just say, I find this, I find this astonishing.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Julia: I’m not Jewish and I’m not gay, I’m not French, but I still am equally horrified by these crimes.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: This was a – I’m being yelled at, which is incredible.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: Stop talking so [we hadn’t do].&lt;/p&gt;
&lt;p&gt;Mark: That’s the headline: ‘Isil wages war on gays in west’. Now you share that view, that basically this was deliberately targeted on one part of the community rather than the freedom to enjoy yourself no matter what your sexual orientation is.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: What are you talking about?!?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Mark: I’m talking about the coverage in the newspapers. &lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11iH6RK1qdmoaq_540.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/94d06fbac9334257292e5aa581314f40/tumblr_inline_pe360fxfhX1qzgxun_540.gif&quot; class=&quot;&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11iH6RK1qdmoaq_540.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;i&gt;Owen: It’s not some abstract, kind of, he just picked a random club out of nowhere. He picked a club because it was full of people he regarded as deviants. That’s why he attacked the club.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: It’s a hate crime, this is an act of terrorism, it was an attack on gay people, absolutely, it was horrific. However, my mind guesses this man probably would be as horrified by me as a gobby woman as he would – genuinely, genuinely – this is the thing. We don’t know right now. We can speculate, but we don’t know how much of this is motivated by just his homophobia.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: We heard from his own father about his revulsion – why are we trying to deflect? Why are you both pick-&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Mark: We are not trying to deflect. We are trying to reflect what is being said by the authorities here and –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Can I ask, what argument are you trying to pick here?&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Mark: I’m now going to quote from what The Telegraph is saying…’his father said…[he] may have targeted the gay community after becoming angry when he saw two men–’&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: ‘May have’? He did! Why are you saying this?&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: ‘After seeing two men kissing in Miami some months ago’ – he may have been angered by many other things since then!&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: I’m sorry. I just find this the most astonishing thing I’ve ever been involved with on television. If he’d walked into a synagogue, and massacred dozens of Jewish people, you wouldn’t be saying what you’re saying now.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11iHkB61qdmoaq_540.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/2565aaa8d6bed5beb0b851f256847b5b/tumblr_inline_pe360fJGuE1qzgxun_540.gif&quot; class=&quot;&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11iHkB61qdmoaq_540.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;i&gt;Owen: This bizarre attempt to deflect from this –&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Mark: We are trying to draw parallels in terrorist attacks on people who are being attacked whether they are enjoying rock music in Paris, whether they are gay people in Florida enjoying a night out.&lt;br /&gt;&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11jL35v1qdmoaq_540.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/0b5a5bb2007342887a431e9f535f0f85/tumblr_inline_pe360gT2GS1qzgxun_540.gif&quot; class=&quot;&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11jL35v1qdmoaq_540.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;Julia: I completely accept it, as [Mark] does, that it was a homophobic attack, but for me the issue is there are going to be homophobic people, there’ll be people who hate black people, or who hate gay people, or hate Jewish people. There are going to be people, who are lunatics, who are fanatics –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Who are “lunatics”! Stop using these words, Julia!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: Is it possible for me to finish one sentence?&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: If you stop using words like “lunatic” to talk about homophobic terrorist attacks!&lt;/i&gt;&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11kHma31qdmoaq_540.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/9c18cb76409c5ccd46ce0321ac46cdd8/tumblr_inline_pe360gkyuW1qzgxun_540.gif&quot; class=&quot;&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11kHma31qdmoaq_540.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;Julia: Well thank you. Whoever these people are, and whatever their motivations are, the key thing is we’re always going to have mad and bad people in the world.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Mad and bad people. Okay.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: And the key issue is, that they can’t do too much or any harm. When you have free access to assault weapons in a country like America, then they’re able to put their hatred of other people –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Yes! Obviously!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: – into effect, and do damage. That’s the issue for me.&lt;/p&gt;
&lt;p&gt;(discussion between Mark and Julia on gun control and the U.S. …Julia: It is absolutely absurd, if America were not going to do something about gun control after Sandy Hook in 2012, if you’re going to watch six- and seven-year-olds being massacred and you don’t think you need to act, they are never going to act.)&lt;/p&gt;
&lt;p&gt;Mark: There’s something else here in The Telegraph coverage, which I think we need to bring up, Owen, in relation to your point. And that is, I think that we’ve got at least a call from a spokesman for Stonewall saying that people would be feeling vulnerable, and basically indicating –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Oh, you’re going to have an LGBT voice talking about it. Interesting.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Mark: Sorry?&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Nothing, carry on. Go on.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: Owen, seriously.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: I’ve had enough of this. I’m going home. Sorry. No way.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: Owen, genuinely, we’re trying to have a civilized conversation. &lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: I know you’re having it, I don’t want it!&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: I know you’re upset, you’re very upset –&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Owen: Yeah, I am, I’m very upset. I’m very upset.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Julia: Everyone’s upset and angry about this, but storming off a TV set –&lt;/p&gt;
&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11kvoUT1qdmoaq_540.gif&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/6d76cc0529eb67a310c8d928b239a021/tumblr_inline_pe360hktH81qzgxun_540.gif&quot; class=&quot;&quot; data-orig-height=&quot;305&quot; data-orig-width=&quot;540&quot; data-orig-src=&quot;./tumblr_inline_o8p11kvoUT1qdmoaq_540.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;i&gt;Owen Jones, Mark Longhurst, and Julia Hartley-Brewer discuss the Pulse nightclub shootings, &lt;a href=&quot;http://t.umblr.com/redirect?z=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DTEgd9q8ugs4&amp;amp;t=YjdiOTczZGNjZTVkNDA0NWFlMjBjZDAzODFlMWU1YmMzNzc4M2JiYyxya21GS2NaWA%3D%3D&quot;&gt;12 June 2016&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bless you Owen&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/05/jonboniver-listen-strange-naked-women-emerging/"/>
		<updated>2016-05-18T06:39:52Z</updated>
		<id>https://blog.izs.me/2016/05/jonboniver-listen-strange-naked-women-emerging/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://jonboniver.tumblr.com/post/144440880821&quot;&gt;jonboniver&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;listen, strange naked women emerging from fires is no basis for a system of government&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Come see the violence inherent in the system!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/05/he-distinctly-said-to-blave/"/>
		<updated>2016-05-09T07:23:07Z</updated>
		<id>https://blog.izs.me/2016/05/he-distinctly-said-to-blave/</id>
		<content type="html">&lt;p&gt;He distinctly said &amp;ldquo;to blave&amp;rdquo;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>how many npm users are there?</title>
		<link href="https://blog.izs.me/2016/04/how-many-npm-users-are-there/"/>
		<updated>2016-04-27T18:45:14Z</updated>
		<id>https://blog.izs.me/2016/04/how-many-npm-users-are-there/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://npmjs.tumblr.com/post/143451680695&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;A story in 6 graphs&lt;/h2&gt;
&lt;p&gt;How many npm users are there? It’s a surprisingly tricky question.&lt;/p&gt;
&lt;p&gt;There are a little over 211,000 registered npm users, of whom about 73,000 have published packages. But far more people than that use npm: most things npm does do not require you to login or register. So how many are there, and what are they up to? Our first and most obvious clue is the number of packages they are downloading:&lt;/p&gt;
&lt;h3&gt;How many packages are downloaded?&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;536&quot; data-orig-width=&quot;678&quot; data-orig-src=&quot;./412a8096-0bc1-11e6-9b2a-fb1b3c9b3973.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/12052643999164e11e252395dc09a725/tumblr_inline_pe360fbqqn1qzgxun_540.png&quot; alt=&quot;package downloads per week passed 1 billion in April&quot; data-orig-height=&quot;536&quot; data-orig-width=&quot;678&quot; data-orig-src=&quot;./412a8096-0bc1-11e6-9b2a-fb1b3c9b3973.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;That’s over a billion downloads &lt;em&gt;per week&lt;/em&gt;, and that only counts package installs that weren’t already in cache – about 66% of npm package installs don’t require downloading any packages, because they fetch from the &lt;a href=&quot;https://docs.npmjs.com/cli/cache&quot;&gt;cache&lt;/a&gt;. Still, the growth is truly, without exaggeration, exponential.&lt;/p&gt;
&lt;p&gt;So what’s driving all the downloads? Are the same people building ever-more-complicated applications, downloading more packages to do it? Are the same people running build servers over and over? Or are there actually more people? Our next clue comes from the number of unique IPs hitting the registry:&lt;/p&gt;
&lt;h3&gt;How many IPs hit the registry?&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;452&quot; data-orig-width=&quot;714&quot; data-orig-src=&quot;./0bbeeb34-0bc3-11e6-8572-59b72251cb88.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/5983fc4806964f24e587d90b02f8210a/tumblr_inline_pe360fzbth1qzgxun_540.png&quot; alt=&quot;3.1MM unique IPs hit the registry in March&quot; data-orig-height=&quot;452&quot; data-orig-width=&quot;714&quot; data-orig-src=&quot;./0bbeeb34-0bc3-11e6-8572-59b72251cb88.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Here’s a ton of growth again, close to 100% growth year-on-year, but much more linear than the downloads: 3.1 million IPs hit the registry in March. Of course, &lt;a href=&quot;https://en.wikipedia.org/wiki/Wikipedia:IP_addresses_are_not_people&quot;&gt;IP addresses are not people&lt;/a&gt;. Some of these IPs are build servers and other robots. Other IP addresses are companies or educational institions that serve thousands or even tens of thousands of people. So while it doesn’t correlate perfectly, generally speaking, more IPs means more people are using npm.&lt;/p&gt;
&lt;h3&gt;How many times does npm get run?&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;430&quot; data-orig-width=&quot;654&quot; data-orig-src=&quot;./130501bc-0bc3-11e6-8bfc-32ec0b74ad47.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/d0f01b749b3fabb655e2f267626a16e6/tumblr_inline_pe360gIEtn1qzgxun_540.png&quot; alt=&quot;unique sessions&quot; data-orig-height=&quot;430&quot; data-orig-width=&quot;654&quot; data-orig-src=&quot;./130501bc-0bc3-11e6-8bfc-32ec0b74ad47.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Every time npm runs it generates a unique ID that it sends as a header for every request it makes during that run. This ID is random and not tied to you in any way, and once npm finishes running it is deleted. We use this ID for debugging the registry: it lets us see that these 5, 10 or 50 requests were all part of the same operation, which makes it easier to see what’s going on when somebody has a problem. It also makes it possible to say roughly how many times npm is run – or at least, run in a way that makes a request to the registry. There were 84 million npm sessions in March: this number is growing faster than IPs, but less quickly than downloads.&lt;/p&gt;
&lt;p&gt;We can take these last two and combine them:&lt;/p&gt;
&lt;h2&gt;How many packages per npm run?&lt;/h2&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;451&quot; data-orig-width=&quot;625&quot; data-orig-src=&quot;./192f2e78-0bc3-11e6-8f01-d3590efd53cf.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/23ac0a4bff84e47d115c2814c52b417a/tumblr_inline_pe360hS1iu1qzgxun_540.png&quot; alt=&quot;downloads per session&quot; data-orig-height=&quot;451&quot; data-orig-width=&quot;625&quot; data-orig-src=&quot;./192f2e78-0bc3-11e6-8f01-d3590efd53cf.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This number is interesting because it’s not going anywhere. The ratio of packages downloaded to npm sessions is essentially constant (this is not the same as the number of packages downloaded per install, because many npm sessions don’t result in downloads). But this is a clear signal: the number of packages per install isn’t rising. Applications aren’t getting notably more complicated; people are installing packages more often because they are writing more applications.&lt;/p&gt;
&lt;p&gt;Here’s a final clue:&lt;/p&gt;
&lt;h3&gt;How many packages per IP?&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;512&quot; data-orig-width=&quot;725&quot; data-orig-src=&quot;./20f7fffe-0bc3-11e6-9220-e6d34f5efe15.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/00819669639a6109cc8674ed308ddf0f/tumblr_inline_pe360h0m0l1qzgxun_540.png&quot; alt=&quot;downloads per IP&quot; data-orig-height=&quot;512&quot; data-orig-width=&quot;725&quot; data-orig-src=&quot;./20f7fffe-0bc3-11e6-9220-e6d34f5efe15.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;The number of packages downloaded by an IP is also rising linearly. So, not only are more people using npm, but the people who are already using npm are using it more and more frequently. And then of course there’s this number:&lt;/p&gt;
&lt;h3&gt;Web users&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;187&quot; data-orig-width=&quot;724&quot; data-orig-src=&quot;./2d3c9dba-0bc3-11e6-8fbc-fb8cb755006f.png&quot;&gt;&lt;img src=&quot;https://66.media.tumblr.com/504694df35d00046cb029f525e7a4854/tumblr_inline_pe360ix3sE1qzgxun_540.png&quot; alt=&quot;unique web users&quot; data-orig-height=&quot;187&quot; data-orig-width=&quot;724&quot; data-orig-src=&quot;./2d3c9dba-0bc3-11e6-8fbc-fb8cb755006f.png&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Another way of counting npm users is counting people who visit npm’s website. This also grew enormously; 400% since we started the company. In the last 90 days, npm saw just over 4 million unique users visit our site. Ordinarily, you take web user numbers with a grain of salt – there’s lots of ways they can be wrong. But combined with the IPs, the sessions, and the download numbers, we think that number is probably accurate, maybe even a little conservative.&lt;/p&gt;
&lt;h3&gt;Invisible users&lt;/h3&gt;
&lt;p&gt;There are so many sources of error! There are robots who crawl the registry. There are lots of companies who host their own internal registry caches, or run &lt;a href=&quot;https://www.npmjs.com/enterprise&quot;&gt;npm Enterprise&lt;/a&gt;, and so have their own npm website and registry and never hit ours. There’s the entire nation of China, which finds it difficult to access npm through the great firewall, and is served by our hard-working friends at &lt;a href=&quot;https://cnpmjs.org/&quot;&gt;cnpmjs&lt;/a&gt;. There’s errors that inflate our numbers, and errors that deflate them. If you think we’re way off, let us know. But we think we have enough for a good guess.&lt;/p&gt;
&lt;h3&gt;4 million npm users&lt;/h3&gt;
&lt;p&gt;We think there are four million npm users, and we think that number is doubling every year. Over at the node.js foundation, they see &lt;a href=&quot;https://www.youtube.com/watch?v=nHOTBiuAxtU&amp;amp;feature=youtu.be&amp;amp;t=4m12s&quot;&gt;similar growth numbers&lt;/a&gt;. Not only are there more of them, but they’re more engaged than ever before. This is awesome! The &lt;a href=&quot;https://twitter.com/seldo/status/725040729001611264&quot;&gt;25 very hard working people of npm Inc.&lt;/a&gt; thank you for your participation and your contributions to the community, and we hope to see even more of you.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/03/one-person/"/>
		<updated>2016-03-16T05:38:17Z</updated>
		<id>https://blog.izs.me/2016/03/one-person/</id>
		<content type="html">&lt;p&gt;I love this couple.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/02/dolphandhisactionnips-champagnemanagement-i/"/>
		<updated>2016-02-21T03:52:46Z</updated>
		<id>https://blog.izs.me/2016/02/dolphandhisactionnips-champagnemanagement-i/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://dolphandhisactionnips.tumblr.com/post/104989270359&quot;&gt;dolphandhisactionnips&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://champagnemanagement.tumblr.com/post/104989134511&quot;&gt;champagnemanagement&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;i may reblog this every day for the rest of my life. or maybe i’ll just start a new tumblr called Dolph and His Action Nips.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;it’s done&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/02/probertson-inside-out/"/>
		<updated>2016-02-20T22:27:06Z</updated>
		<id>https://blog.izs.me/2016/02/probertson-inside-out/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://probertson.tumblr.com/post/128836103074&quot;&gt;probertson&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;inside out&lt;br /&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/02/the-corollary-of-constant-change-is-ignorance/"/>
		<updated>2016-02-03T10:24:32Z</updated>
		<id>https://blog.izs.me/2016/02/the-corollary-of-constant-change-is-ignorance/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;The corollary of constant change is ignorance. This is not often talked about: we computer experts barely know what we’re doing. We’re good at fussing and figuring out. We function well in a sea of unknowns. Our experience has only prepared us to deal with confusion. A programmer who denies this is probably lying, or else is densely unaware of himself&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;-Ellen Ullman, &lt;em&gt;Close to the Machine&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is the paragraph of the book that made me finally realize it was okay and actually good to be in a constant state of terror as a software developer.&lt;/p&gt;
&lt;p&gt;(via &lt;a href=&quot;http://negativitysandwiches.com/&quot; class=&quot;tumblr_blog&quot;&gt;jennschiffer&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;It gets worse when you switch to the management track, and worse still if you start a company.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Promises vs Eventual Values</title>
		<link href="https://blog.izs.me/2016/02/promises-vs-eventual-values/"/>
		<updated>2016-02-02T21:26:01Z</updated>
		<id>https://blog.izs.me/2016/02/promises-vs-eventual-values/</id>
		<content type="html">&lt;p&gt;A few times on Twitter, I&amp;rsquo;ve
&lt;a href=&quot;https://twitter.com/izs/status/694321665430261760&quot;&gt;complained&lt;/a&gt; that
Promises are a poor conceptual stand-in for Eventual Values.&lt;/p&gt;
&lt;p&gt;A colleague of mine pointed out that I tweet this or something like it
every few months.  He&amp;rsquo;s correct, I do.&lt;/p&gt;
&lt;p&gt;The responses usually flow in saying something to the effect of &amp;ldquo;Well,
if you&amp;rsquo;re not sure if a thing is a Promise or not, just use
&lt;code&gt;Promise.resolve(thing)&lt;/code&gt; and now you&amp;rsquo;re guaranteed to get either the
Promise, or a Promise that resolves to the thing.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;And it&amp;rsquo;s true, that is &amp;ldquo;a&amp;rdquo; solution of sorts.  It solves the &amp;ldquo;I don&amp;rsquo;t
know if this is a Promise or not&amp;rdquo; problem by ensuring that you
definitely do have a Promise, and not a normal value.&lt;/p&gt;
&lt;p&gt;My problem, though, is that I&amp;rsquo;d really like to write code that
interacts with values, and not Promises, and leave the machinery to
the computer to work out.&lt;/p&gt;
&lt;h2 id=&quot;eventual-values&quot;&gt;Eventual Values&lt;/h2&gt;
&lt;p&gt;An Eventual Value is a value that is not yet resolved.  However, by
design, it is mostly indistinguishable from a &amp;ldquo;normal&amp;rdquo; value.  Here&amp;rsquo;s
an example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;// promise code
function add5 (x) {
  return x + 5
}

function add5Promise (x) {
  return Promise.resolve(x).then(function (x) {
    return add5(x)
  })
}

function someNumberLater () {
  return new Promise(function (resolve) {
    databaseConnector.get(&#39;numeric value&#39;).then(function (x) {
      resolve(x)
    })
  })
}

add5Promise(someNumberLater()).then(function (xplus5) {
  console.log(&#39;the number plus 5 is %d&#39;, xplus5)
})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;With Eventual Values, this would look like the following:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;// eventual value code
function add5 (x) {
  return x + 5
}

function someNumberLater () {
  databaseConnector.get(&#39;numeric value&#39;))
}

console.log(&#39;the number plus 5 is %d&#39;, add5(someNumberLater()))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you imagine getting a few numbers, any of which might be as yet
unresolved, it&amp;rsquo;s even more annoying:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;// promise code
function addThreeNumbers (x, y, z) {
  return Promise.all([x, y, z]).then(function (numbers) {
    return Promise.resolve(numbers[0] + numbers[1] + numbers[3])
  })
}

// eventual code
function addThreeNumbers (x, y, z) {
  return x + y + z
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;criteria&quot;&gt;Criteria&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Eventual Values can be interacted with like normal values.&lt;/li&gt;
&lt;li&gt;If an Eventual Value is part of a simple value operation, then that
expression resolves to a new Eventual Value which resolves when all
its Eventual Values are resolved.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;That&amp;rsquo;s it.  You interact with Eventual Values as if they&amp;rsquo;re normal
synchronous values, and the machine takes care of waiting where it&amp;rsquo;s
necessary and appropriate.&lt;/p&gt;
&lt;h2 id=&quot;but-zalgo-&quot;&gt;But Zalgo!&lt;/h2&gt;
&lt;p&gt;Indeed, this is
&lt;a href=&quot;http://blog.izs.me/post/59142742143/designing-apis-for-asynchrony&quot;&gt;Zalgo&lt;/a&gt;&amp;rsquo;s
purest form.  But let&amp;rsquo;s clarify exactly what&amp;rsquo;s wrong with the
maybe-sync anti-pattern.&lt;/p&gt;
&lt;p&gt;The problem with Zalgo APIs is that they&amp;rsquo;re hard to reason about.
Given code like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;someApi(function () {
  console.log(&#39;foo&#39;)
})
console.log(&#39;bar&#39;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In a sync callback API, you know that this will always print out
&lt;code&gt;foo&#92;nbar&lt;/code&gt;.  In an async callback API, you know that this will always
print out &lt;code&gt;bar&#92;nfoo&lt;/code&gt;.  This predictability is important for human
brains.&lt;/p&gt;
&lt;p&gt;This is why the built-in dezalgo of Promises A+ is so important.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;new Promise(function (resolve) {
  console.log(&#39;foo&#39;)
  resolve()
})
console.log(&#39;bar&#39;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This code must either (a) always print &lt;code&gt;foo&#92;nbar&lt;/code&gt;, or (b) always print
&lt;code&gt;bar&#92;nfoo&lt;/code&gt;.  Since Promise resolution &lt;em&gt;can&lt;/em&gt; be async, it &lt;em&gt;must&lt;/em&gt; be
async all the time, or else this predictability constraint is
violated.&lt;/p&gt;
&lt;p&gt;With Eventual Values, Zalgo is not a problem, because whether things
happen synchronously or asynchronously, they always happen in the same
predictable order.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;function getFoo () {
  return new Eventual(function (resolve) {
    setTimeout(function () {
      resolve(&#39;foo&#39;)
    })
  })
}

function getBar () {
  return new Eventual(function (resolve) { resolve(&#39;foo&#39;) })
}

console.log(getFoo())
console.log(getBar())
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In this case, it will always print &lt;code&gt;foo&#92;nbar&lt;/code&gt;, even though &lt;code&gt;foo&lt;/code&gt; is
resolved later, and &lt;code&gt;bar&lt;/code&gt; is resolved immediately.  Eventual Values
behave like synchronous values.&lt;/p&gt;
&lt;h2 id=&quot;introspection-operators-etc-&quot;&gt;Introspection, Operators, Etc.&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;d be nice to have some magic &lt;code&gt;isEventual&lt;/code&gt; operator that could tell
you if a thing was already resolved or not.&lt;/p&gt;
&lt;p&gt;Or even a &lt;code&gt;wasEventual&lt;/code&gt; operator to tell you whether this thing you
have was ever waited upon.&lt;/p&gt;
&lt;p&gt;But mostly, while it&amp;rsquo;s great to be able to introspect programs, it&amp;rsquo;s
even better not to have to &lt;em&gt;need&lt;/em&gt; to introspect programs.  We don&amp;rsquo;t
have memory address introspection in JavaScript, and no one seems to
mind.  Inspecting Eventual Values should be akin to peering into the
dark machinery of the VM; something that&amp;rsquo;s useful once in a while, and
certainly interesting from an academic point of view, but not in the
normal day to day activities of the typical JavaScript programmer.&lt;/p&gt;
&lt;p&gt;Language design is hard.  It may be that there&amp;rsquo;s some really good
reason for at least having a special operator or something to say
&amp;ldquo;Yes, I would like any Eventual Values to be resolved before calling
this function.&amp;rdquo;  Maybe use &lt;code&gt;functionE&lt;/code&gt; instead of &lt;code&gt;function&lt;/code&gt;, I don&amp;rsquo;t
know.  I don&amp;rsquo;t care.  I just want to stop having to stick my nose in
the machinery.  Ideally, we&amp;rsquo;d almost never have to care, because it
only matters at the very edges of a program, when data is sent to the
DOM, or written to a file or socket or terminal.&lt;/p&gt;
&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;p&gt;This cannot be implemented in userland, nor should they be.  Eventual
Values are a language feature.  Promises are an API, and easy to
implement in userland.&lt;/p&gt;
&lt;p&gt;Promises will never grow into Eventuals, because they are
fundamentally different things, even though they implement a similar
pattern.&lt;/p&gt;
&lt;h2 id=&quot;looking-async&quot;&gt;Looking Async&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve argued in the past, quite forcefully, that synchronous code
should look synchronous, and async code should look async.  But again,
like Zalgo, let&amp;rsquo;s not conflate &amp;ldquo;a good rule of thumb for API design&amp;rdquo;
with &amp;ldquo;a language feature that would make our lives better&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;If you dig one layer deeper, you find that the only reason
asynchronous code needs to look asynchronous is that we continually
rely upon our human brains to deal with the timing and synchronicity
of our programs.&lt;/p&gt;
&lt;p&gt;In cases where we are relying on a meat brain to analyze a program, it
is extremely important for it to look like what it is.  There will
likely always be some API surfaces that are asynchronous, and even in
a world with Eventual Values, there is a place for APIs that are
creatively asynchronous, and they should look and behave like what
they are.&lt;/p&gt;
&lt;h2 id=&quot;anti-promises&quot;&gt;Anti-Promises&lt;/h2&gt;
&lt;p&gt;Promises are neat.  They&amp;rsquo;re a terse and expressive way to chain
together a series of potentially asynchronous actions in a way that&amp;rsquo;s
relatively easy for a meat brain to make sense of.&lt;/p&gt;
&lt;p&gt;Also, it&amp;rsquo;s quite nice how they invert control differently than
callbacks.  With a callback, the caller creates and passes a token to
the API, with the contract that the API provider will use that token
to indicate done-ness.  With Promises, the API provider creates and
passes a token to the caller, with the contract that the API provider
will use that token to indicate done-ness.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a subtle difference, but one that many people find easier to
reason about.  That&amp;rsquo;s fine.&lt;/p&gt;
&lt;p&gt;However, if you have a function that takes a list of arguments, any of
which may potentially be promises, and then needs to only act once all
of those promises are resolved, it gets tedious quite fast.  Promises
tend to expose quite a lot of boilerplate to the user in these types
of situations.  And, since the only straightforward solution is to
either turn all things into Promises, or manually check each for
Promise-ness, one potentially ends up introducing a lot of
&lt;code&gt;nextTick()&lt;/code&gt; delays unnecessarily.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t dislike Promises.  But I do long for Eventual Values, and
Promises are not those.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Mountains</title>
		<link href="https://blog.izs.me/2016/01/mountains/"/>
		<updated>2016-01-24T02:29:04Z</updated>
		<id>https://blog.izs.me/2016/01/mountains/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;
I am sorry  &lt;br /&gt;
  that you will never know
    how much I love you.

You think you get it.

You see the shadow of mountains,
  and think, &amp;ldquo;Mountains are flat.&amp;rdquo;

But it is a huge thing
  and not flat.
&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>on cargo shorts</title>
		<link href="https://blog.izs.me/2016/01/on-cargo-shorts/"/>
		<updated>2016-01-20T07:59:07Z</updated>
		<id>https://blog.izs.me/2016/01/on-cargo-shorts/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://shanenickerson.tumblr.com/post/127561589129/on-cargo-shorts&quot; class=&quot;tumblr_blog&quot;&gt;shanenickerson&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Here’s the thing. We’ve given up on style. We can’t keep up. We have too many kids and not enough time, and when we go out on a weekend day to do a bunch of stuff, we need pockets. We need them for wallets and dolls and water bottles and an extra pull-up, maybe a sippy cup or a phone or two. We aren’t concerned about whether you like them. We are trying to get through this phase of our lives, which, quite frankly, requires more pocket space than we ever expected. Let us live. CRGO 4 LYF.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>ru a gay or what</title>
		<link href="https://blog.izs.me/2016/01/ru-a-gay-or-what/"/>
		<updated>2016-01-17T18:58:19Z</updated>
		<id>https://blog.izs.me/2016/01/ru-a-gay-or-what/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;m going to turn off anon access to my &lt;a href=&quot;https://blog.izs.me/ask&quot;&gt;Ask page&lt;/a&gt;.  If you need to reach me, my email address and twitter handle are all over the place.&lt;/p&gt;
&lt;p&gt;For the anon(s) repeatedly demanding to know if I&amp;rsquo;m &amp;ldquo;a gay&amp;rdquo;, &lt;a href=&quot;http://blog.izs.me/post/88487057983/lgt&quot;&gt;the answer is no, I&amp;rsquo;m bi, it&amp;rsquo;s a different thing&lt;/a&gt;, thanks for asking.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>NVC and OSS</title>
		<link href="https://blog.izs.me/2016/01/nvc-and-oss/"/>
		<updated>2016-01-17T18:46:01Z</updated>
		<id>https://blog.izs.me/2016/01/nvc-and-oss/</id>
		<content type="html">&lt;p&gt;This is a talk I gave at Open Source and Feelings last fall.&lt;/p&gt;
&lt;p&gt;Please enjoy it.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://j.mp/nvc-oss-video&quot;&gt;Video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://j.mp/nvc-oss&quot;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://j.mp/nvc-oss-notes&quot;&gt;Slides + notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/01/hello-there-sadly-the-picture-links-in-this/"/>
		<updated>2016-01-17T18:41:25Z</updated>
		<id>https://blog.izs.me/2016/01/hello-there-sadly-the-picture-links-in-this/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Hello there. Sadly the picture links in this blogpost are broken: /post/23048895912/tacoconf-anarchism It would be great, if you could find the time to update them. All the best, Per
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ack, looks like they got lost in the switch to a new hosting provided.  Fixed now, thanks.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2016/01/re-the-bathtub-analogy-in-your-captioning-at/"/>
		<updated>2016-01-17T18:32:01Z</updated>
		<id>https://blog.izs.me/2016/01/re-the-bathtub-analogy-in-your-captioning-at/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;re: the bathtub analogy in your &#39;captioning at jsconf&#39; post-- Joel Spolsky used it in a post from 2000 at joelonsoftware, so that might be the source. (I can&#39;t link here, but searching &#39;joelonsoftware bathtub grab bars&#39; should work.) I just stumbled across it today and remembered your post! :) -Zara
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thank you so much! Found a link here: &lt;a href=&quot;http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html&quot;&gt;http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/12/togrutan-%E3%83%84/"/>
		<updated>2015-12-28T00:55:50Z</updated>
		<id>https://blog.izs.me/2015/12/togrutan-%E3%83%84/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://togrutan.tumblr.com/post/135540730114/%E3%83%84&quot; class=&quot;tumblr_blog&quot;&gt;togrutan&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;¯&#92;_(ツ)_/¯&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/12/kyraneko-thewinterotter-kyraneko/"/>
		<updated>2015-12-19T20:28:46Z</updated>
		<id>https://blog.izs.me/2015/12/kyraneko-thewinterotter-kyraneko/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://kyraneko.tumblr.com/post/112294447196&quot;&gt;kyraneko&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://thewinterotter.tumblr.com/post/104024848851&quot;&gt;thewinterotter&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://kyraneko.tumblr.com/post/103824470601&quot;&gt;kyraneko&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://doujinshi.tumblr.com/post/102639487994&quot;&gt;doujinshi&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I hate that I laughed at this&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;“Like a good neighbor, State Farm is there,” and another one appears. And dodges the downward sweep of claws, darting to the side, bouncing off the pentagram’s barriers, and tripping over the demon’s tail. “In the Vatican!” she cries out as she moves, using the State Farm Agent summoning charm to modify the situation as she was taught, and mentally thanking her trainer for expecting her to be fast enough to do it on the first incantation.&lt;/p&gt;
&lt;p&gt;Most State Farm agents, when they run into trouble, have to get the customer to do the jingle a second time. That guy with the buffalo was lucky.&lt;/p&gt;
&lt;p&gt;The magic takes hold, and she materializes in the aisle of St. Peter’s Basilica, still holding the demon by the tail, in the middle of Sunday morning Mass. The music clatters unprofessionally to a halt as laypeople, deacons, priests, monks, nuns, and the Pope all turn their attention to the surprised demon whose fifth course of dinner has turned, unaccountably, into a visit to one of his least favorite places on Earth.&lt;/p&gt;
&lt;p&gt;There is chanting in Latin, and vaguely cross-shaped gestures, and clouds of incense, and the demon vanishes in a puff of smoke, whether from the efforts of the clergy or of his own volition no one can say. The Agent doesn’t wait, fleeing towards the doors and escaping in the confusion.&lt;/p&gt;
&lt;p&gt;She gains the exit and walks, purposefully, toward Rome proper; there, she ducks into the nearest alley. A burner cell phone comes out of one of the less-used pockets of her purse, and she dials a number from memory.&lt;/p&gt;
&lt;p&gt;“Allstate,” says a smooth masculine voice after three rings.&lt;/p&gt;
&lt;p&gt;“State Farm,” she answers. “I’m calling in a favor.”&lt;/p&gt;
&lt;p&gt;“Yeah?” Interest. “What sort?”&lt;/p&gt;
&lt;p&gt;As she talks she’s pulling out her smartphone, keying an app that was activated by the summoning, and pulling up the policyholder data that enabled the incantation to work.&lt;/p&gt;
&lt;p&gt;“Insurance fraud,” she said, and can almost hear teeth sharpening on the other end of the line. She gives him the name, the address, the policy number. “Someone needs some mayhem.”&lt;/p&gt;
&lt;p&gt;“That’s my name,” the man says.&lt;/p&gt;
&lt;p&gt;She smiles. “Someone needs &lt;i&gt;all&lt;/i&gt; the mayhem.”&lt;/p&gt;
&lt;p&gt;He chuckles. Slow. Evil. Even with the echoes of demonic laughter ringing in her ears, she’s impressed. “Don’t worry,” he says, almost purring.&lt;/p&gt;
&lt;p&gt;“You’re in good hands.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OH MY FUCKING GOD I just read insurance commercial fan fiction and it was so good, bless you, I’m going to remember this day forever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;IT COMES BACK TO ME! *preens*&lt;/p&gt;
&lt;p&gt;Part 2:&lt;/p&gt;
&lt;p&gt;It’s not too long later—State Farm will occasionally loan out their teleportation trick, though Heaven help anyone who tries to use it to compete with them—and the man they call Mayhem is squatting next to a demonic circle with tacky half-dried blood under the leather soles of his shoes. Whoever dispelled the circle didn’t do a good job of it; the ring is still faintly smoldering and Mayhem has already singed his fingers on the air above it. He’s in the basement of a house with a State Farm homeowner’s policy, waiting for his partner in, erm, crime, to show up.&lt;/p&gt;
&lt;p&gt;“Oh, good heavens.” He smiles at the sound of someone hopping delicately back, then carefully tiptoeing through the mess. Demons are messy eaters, and Flo’s wearing all white.&lt;/p&gt;
&lt;p&gt;She steps gingerly over what might be most of a femur, looks from circle to Mayhem to—is that half a skull on the floor? “Freaky. Whaddaya need?”&lt;/p&gt;
&lt;p&gt;“Tech,” he says. “State Farm knows the homeowner summoned them, but the Agent reported at least five people present. Maybe six. She isn’t sure, what with being busy evading a demon inside a very small space with zappy walls.”&lt;/p&gt;
&lt;p&gt;Flo’s already got a—where does she get those from anyway? a cardboard box in her hands. Mayhem watches as she unfolds it, refolds it, and ends up with something significantly bigger, shaped like a satellite dish. He tries to watch how she does it; they may be working together, but they’re still rivals and his own higher-ups will be very interested in the latest whatever-it-does that Progressive has come up with.&lt;/p&gt;
&lt;p&gt;A blue glow lights up the concave side. Mayhem is pretty sure cardboard doesn’t work that way. Flo makes a pleased sound, and starts rattling off names, addresses, policy numbers.&lt;/p&gt;
&lt;p&gt;Impressed, Mayhem asks, “How the fuck?” If Progressive is developing some sort of superspy technology, well, that’s kind of ominous.&lt;/p&gt;
&lt;p&gt;Flo grins and looks embarrassed. “I, ah, have occasional dealings with a couple guys from That Other Insurance Company. One of them knows someone who knows someone who works in quality control for the Infernal Realms, and it turns out Hell monitors all their summoned manifestations for safety purposes. His contact got me the list of who was there.”&lt;/p&gt;
&lt;p&gt;Mayhem nods. He’s had occasional encounters That Other Insurance Company himself. Bland, grey-suited, timid men who are even worse spies than they are insurance agents. “Wait, Hell has a quality control department?”&lt;/p&gt;
&lt;p&gt;“And all other forms of administration,” Flo says. “I understand it’s to generate maximum paperwork. It is a place of punishment, after all.”&lt;/p&gt;
&lt;p&gt;Mayhem actually winces. “That’s definitely hellish. All right. The Agent who called me in is flying back from Italy and should meet us in a few hours. Should give us plenty of time to plan an attack. Are they all State Farm customers?”&lt;/p&gt;
&lt;p&gt;“Just the one,” Flo replies, folding her toy up, and Mayhem watches with vague envy as it becomes a giant sword. “One Allstate, one Progressive, one Geico, two Farmers. We gonna invite anyone else to the party?” She hopes so. Mayhem’s precision strikes on any sort of insurance fraud perpetrators are the stuff of legend, and the Farmers guys would bring in enough absurdity to make it a work of art.&lt;/p&gt;
&lt;p&gt;Mayhem’s grin is something that ought to haunt her nightmares. Instead, she finds herself matching it. “Yes,” he says. “Let’s.”&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/11/people-get-built-different-we-dont-need-to/"/>
		<updated>2015-11-22T02:38:01Z</updated>
		<id>https://blog.izs.me/2015/11/people-get-built-different-we-dont-need-to/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;People get built different. We don&amp;rsquo;t need to figure it out, we just need to respect it&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Bonnibel Bubblegum is my favorite.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Private Packages for Organizations</title>
		<link href="https://blog.izs.me/2015/11/private-packages-for-organizations/"/>
		<updated>2015-11-19T19:00:58Z</updated>
		<id>https://blog.izs.me/2015/11/private-packages-for-organizations/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://npmjs.tumblr.com/post/133542170540&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Today, npm released a set of features that I’m really excited about: Private Packages for Organizations.&lt;/p&gt;
&lt;p&gt;This release allows teams to use private npm packages more effectively. It’s intended for businesses that manage developer teams, with varying permissions and multiple projects.&lt;/p&gt;
&lt;p&gt;You can read the &lt;a href=&quot;http://finance.yahoo.com/news/npm-inc-announces-products-organizations-140000934.html&quot;&gt;official announcement&lt;/a&gt;, and learn more about the product &lt;a href=&quot;https://www.npmjs.com/npm/private-packages/&quot;&gt;on our website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A big part of the motivation to start a company around this project was that people using npm at work wanted to be able to manage teams and control access to private code.  We got a lot of feedback from the early adopters of private packages for individuals, and even more from our beta testers who’ve been banging on this stuff for the last few months as it’s come together.&lt;/p&gt;
&lt;p&gt;The team at npm has worked hard on this release, and we look forward to feedback and suggestions from the community.  Now that it’s live, we’ll be continuing to improve and polish it as we see how more people use it.  &lt;a href=&quot;https://www.npmjs.com/contact&quot;&gt;Contact us&lt;/a&gt; and tell us how we’re doing :)&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/11/salon-watch-snls-sasheer-zamata-mock-clueless/"/>
		<updated>2015-11-10T21:56:28Z</updated>
		<id>https://blog.izs.me/2015/11/salon-watch-snls-sasheer-zamata-mock-clueless/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://salon.tumblr.com/post/131748187807&quot;&gt;salon&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;&lt;b&gt;&lt;a href=&quot;http://www.salon.com/2015/10/22/snls_sasheer_zamata_mocks_clueless_white_dude_privilege_in_painfully_hilarious_video/?utm_source=Tumblr&amp;amp;utm_medium=Tumblr%20Share&amp;amp;utm_campaign=Tumblr&quot;&gt;Watch SNL‘s Sasheer Zamata mock clueless white-dude privilege in painfully hilarious video&lt;/a&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Twitter Hearts Killed the Favoriting Star</title>
		<link href="https://blog.izs.me/2015/11/twitter-hearts-killed-the-favoriting-star/"/>
		<updated>2015-11-04T23:12:14Z</updated>
		<id>https://blog.izs.me/2015/11/twitter-hearts-killed-the-favoriting-star/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;
I met you on Live Journal way back in &amp;lsquo;02
Lyin&amp;rsquo; awake intent on following you
Animated graphics didn&amp;rsquo;t stop you coming through
Oh-a-oh

They took the credit for all your bad poetry
Rewritten in 140 characters for free
And now I understand the Web 2 point 0 scene

Oh-a-oh
I faved your selfies
Oh-a-oh
What can you tell me?

Twitter hearts killed the favoriting star
Twitter hearts killed the favoriting star

On my phone, held in my palm
We can&amp;rsquo;t unplug, we&amp;rsquo;ve grown too calm
Whoa!
Oh-aoh-oh-oh-oh
Oh-aoh-oh-oh-oh

And now we meet-up in an invite-only Slack
Push-notified, but seems so long since you&amp;rsquo;ve been back
And when you&amp;rsquo;re lonely you can blame it all on @jack

Oh-a-oh
You were the first one
Oh-a-oh
You were the last one

Twitter hearts killed the favoriting star
Twitter hearts killed the favoriting star

On my phone, held in my palm
We can&amp;rsquo;t unplug, we&amp;rsquo;ve grown too calm
Too calm!

Oh-aoh-oh-oh-oh
Oh-aoh-oh-oh-oh

Alright

Twitter hearts killed the favoriting star
Twitter hearts killed the favoriting star
On my phone, held in my palm
We can&amp;rsquo;t unplug, we&amp;rsquo;ve grown too calm

Semantics changed and broke your heart
So put all the blame on pixel art

You are&amp;hellip; the favoriting star
Twitter hearts killed the favoriting star
Twitter hearts killed that favoriting star, yes, it did
&lt;/pre&gt;</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/10/jamietheignorantamerican-go-forth-and-educate/"/>
		<updated>2015-10-28T00:36:45Z</updated>
		<id>https://blog.izs.me/2015/10/jamietheignorantamerican-go-forth-and-educate/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://jamietheignorantamerican.tumblr.com/post/72154890106&quot;&gt;jamietheignorantamerican&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Go Forth and Educate Yourselves!&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://thesocietypages.org/&quot;&gt;http://thesocietypages.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ensemble-rd.com/en&quot;&gt;http://www.ensemble-rd.com/en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.everyday-democracy.org/en/index.aspx&quot;&gt;http://www.everyday-democracy.org/en/index.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.stophate.us/racism/&quot;&gt;http://www.stophate.us/racism/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.victimsofcrime.org/home&quot;&gt;http://www.victimsofcrime.org/home&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Racism&quot;&gt;http://en.wikipedia.org/wiki/Racism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.communitychangeinc.org/&quot;&gt;http://www.communitychangeinc.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/White_privilege&quot;&gt;http://en.wikipedia.org/wiki/White_privilege&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ted.coe.wayne.edu/ele3600/mcintosh.html&quot;&gt;http://ted.coe.wayne.edu/ele3600/mcintosh.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.whiteprivilegeconference.com/white_privilege.html&quot;&gt;http://www.whiteprivilegeconference.com/white_privilege.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I’d also highly recommend watching the Jane Elliot Brown-eye/Blue-eye experiments, which can be found here:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=VeK759FF84s&quot;&gt;http://www.youtube.com/watch?v=VeK759FF84s&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=-pv8mCHbOrs&quot;&gt;http://www.youtube.com/watch?v=-pv8mCHbOrs&lt;/a&gt; (Part 1)&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=neEVoFODQOE&quot;&gt;http://www.youtube.com/watch?v=neEVoFODQOE&lt;/a&gt; (Part 2 - Has very important points on Reverse Racism and how it doesn’t exist, and it also dismantles the “We All Bleed Red” mentality.)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=6MYHBrJIIFU&quot;&gt;http://www.youtube.com/watch?v=6MYHBrJIIFU&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/10/micdotcom-watch-bernie-sanders-what-a/"/>
		<updated>2015-10-15T21:21:24Z</updated>
		<id>https://blog.izs.me/2015/10/micdotcom-watch-bernie-sanders-what-a/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://micdotcom.tumblr.com/post/131154905020&quot;&gt;micdotcom&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h2&gt;Watch: &lt;b&gt;&lt;a href=&quot;http://mic.com/articles/126737/after-the-debate-bernie-sanders-helped-save-msnbc-s-andrea-mitchell-from-a-reporter-crush?utm_source=policymicTBLR&amp;amp;utm_medium=main&amp;amp;utm_campaign=social&quot;&gt;Bernie Sanders, what a mensch.&lt;/a&gt;&lt;/b&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Phases of Database Love</title>
		<link href="https://blog.izs.me/2015/10/phases-of-database-love/"/>
		<updated>2015-10-15T17:36:20Z</updated>
		<id>https://blog.izs.me/2015/10/phases-of-database-love/</id>
		<content type="html">&lt;h3&gt;Infatuation&lt;/h3&gt;
&lt;p&gt;This database is just what I&amp;rsquo;ve been looking for!  It has all the features I need!  It&amp;rsquo;s open source, actively maintained, and the documentation is so extensive!&lt;/p&gt;
&lt;p&gt;This is the most fun I&#39;ve had since putting together that gokart as a kid!&lt;/p&gt;
&lt;p&gt;I can&amp;rsquo;t wait to put it into production! &amp;lt;3 &amp;lt;3 &amp;lt;3&lt;/p&gt;
&lt;h3&gt;Self Doubt&lt;/h3&gt;
&lt;p&gt;Hm.  Well, the first approach to building my app with this thing didn&amp;rsquo;t quite go as I&amp;rsquo;d expected, but that&amp;rsquo;s just because I didn&amp;rsquo;t fully understand its advanced model.  There sure is a lot of documentation, but I don&amp;rsquo;t understand most of it.  Some people in the IRC channel scolded me for thinking in terms of queries, and they&amp;rsquo;re probably right.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve checked out some books, and I&amp;rsquo;m reading a lot about the finer points on the internet.  Everyone using this thing is really smart, so I&amp;rsquo;m sure they&amp;rsquo;ve thought this through.&lt;/p&gt;
&lt;p&gt;Now that I am starting to get it, though, I see that I was going about my app all wrong.  Once I rewrite it in the complete opposite shape I had before, it&amp;rsquo;ll be great.&lt;/p&gt;
&lt;h3&gt;Codependency&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s in production.  My app is holding up, but it takes a few more servers than I would&amp;rsquo;ve hoped.  At this point, I&amp;rsquo;ve worked around so many of this thing&amp;rsquo;s issues that I can&amp;rsquo;t easily migrate off of it, but each new version that comes out seems to make things a little better.&lt;/p&gt;
&lt;p&gt;A few of the APIs are kinda confusing, but I know how they work, and I&amp;rsquo;ve mostly forgotten SQL in favor of its fancy DSL thing.  I can kind of work out what the crash dumps mean now, so that&amp;rsquo;s good.&lt;/p&gt;
&lt;p&gt;This is fine.  I am ok with how things are proceeding.&lt;/p&gt;
&lt;h3&gt;Rage&lt;/h3&gt;
&lt;p&gt;Fuck this thing.  I&amp;rsquo;m spending all my money on servers and all my time on debugging bullshit.  I never had this problem with my last database.  Someone remind me what the fuck was so bad about SQL again?  This &amp;ldquo;community&amp;rdquo; here is just a bunch of neckbeards beating up on hapless n00bs, and I can&amp;rsquo;t figure out which group is more annoying.  The docs are garbage, they&amp;rsquo;re a year out of date, and no one has time to edit them, because the first team (which has fucked off doing YET ANOTHER DATABASE now!  in HASKELL because apparently erlang isn&amp;rsquo;t exotic enough these days!) was so overly enthusiastic about their fucking math project that they wrote more about this ugly baby than the combined works of shakespeare and the gutenberg bible put together, so the docs are highly available, not even remotely consistent, and completely fucking partitioned.  Issues in GitHub say to post them into the project Jira, and bugs in Jira are closed for being assigned to the wrong Story, so I spend half my time tracking down a core maintainer to send a patch to.  I&amp;rsquo;m running a cobbled-together patch-floating garbage barge that sinks every time there&amp;rsquo;s an update.&lt;/p&gt;
&lt;p&gt;Fuck this thing.  Never again.  I&amp;rsquo;d stop maintaining it and rebuild it all from scratch if I could afford the downtime.&lt;/p&gt;
&lt;h3&gt;Familial Acceptance&lt;/h3&gt;
&lt;p&gt;Ok.  I&amp;rsquo;ve rewritten half the app as an SOA, and I&amp;rsquo;m just storing data in the database now.  It&amp;rsquo;s still the main source of truth, but the records all get piped over to a SQL relational database that I can actually run queries against.  It has one or two really nice features, and I&amp;rsquo;m using those.  As long as you ignore most of the API, and never read the docs, it&amp;rsquo;s not so bad.&lt;/p&gt;
&lt;p&gt;Kinda like that one weird uncle who gets too drunk and rants about the second amendment, but is ok as long as you just meet in public and keep it short.  We all have our faults.  Uncle Bob&amp;rsquo;s a pretty nice guy, overall.  Helped me build a gokart once.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/10/so-my-original-goal-was-to-portray-a-society-that/"/>
		<updated>2015-10-14T04:57:37Z</updated>
		<id>https://blog.izs.me/2015/10/so-my-original-goal-was-to-portray-a-society-that/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;So, my original goal was to portray a society that genuinely did not care about gender. Using a single pronoun for everyone was just one part of that, but the more I played with it, the more interesting the effect was. Ultimately, of course, using “she” for everyone doesn’t actually convey gender neutrality, and I realized that pretty quickly. But I think if I’d chosen to use a gender neutral pronoun—e, or sie, or zie, or any of the others—it would have produced an interesting effect, but it would have lost the way that “she” automatically goes straight to the reader’s perceptions. No, that’s not the best way to say it. I mean, the very long familiarity long-time English speakers have with the pronouns “he” and “she” means that we react to them without actually thinking much about it. We don’t stop to ask ourselves what they mean, they just go right in and trigger a particular set of associations, almost automatically, unconsciously. By using “she” for everyone, I get (for many, but of course not all readers) the effect, once those associations are triggered, of undermining or questioning them, in a very basic way, a sort of… experiential way. It’s one thing to tell someone about the masculine default, and have them understand the idea. It’s another thing to actually demonstrate how it works on your reader. But it only works (for the readers it worked for, because of course it didn’t work for everyone) because we parse those pronouns so thoughtlessly.&lt;/p&gt;
&lt;p&gt;The various gender neutral pronouns don’t have that long familiarity for most of us. The effect I mention above, which quite a few readers have explicitly commented on and appreciated, would have been lost if I’d used one of them. It was a trade-off, I think. I can’t blame folks who wish I’d used a gender neutral pronoun instead, of course, and I’m hoping to see those pronouns used more so that they become more generally familiar. I’m seeing singular “they” for known people (instead of the nebulous “don’t know who this might actually be” use of singular they) used well in short fiction lately, and I’ve been really happy to see it. But myself, for this particular project, I think the effect that I got, at least with a sizable number of readers, was worth the trade-off.&lt;/p&gt;
&lt;p&gt;So, in some ways I succeeded. In other ways I didn’t. But the result was interesting and gave a lot of people something to think about and discuss, and I’m glad of that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.tor.com/blogs/2014/10/sleeps-with-monsters-ann-leckie-answers-eight-questions?utm_source=exacttarget&amp;amp;utm_medium=-na&amp;amp;utm_term=tordotcom&amp;amp;utm_content=-na_readblog_BlogPost&amp;amp;utm_campaign=Tor.comBookCoverage&quot;&gt;Ann Leckie on the use of “she” in &lt;i&gt;Ancillary Justice&lt;/i&gt; and &lt;i&gt;Ancillary Sword&lt;/i&gt;&lt;/a&gt; (via &lt;a href=&quot;http://existentialcrisisfactory.tumblr.com/&quot; class=&quot;tumblr_blog&quot;&gt;existentialcrisisfactory&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Ann Leckie is so rad.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>National Coming Out Day</title>
		<link href="https://blog.izs.me/2015/10/national-coming-out-day/"/>
		<updated>2015-10-11T15:18:51Z</updated>
		<id>https://blog.izs.me/2015/10/national-coming-out-day/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://amaditalks.tumblr.com/post/130945796468/national-coming-out-day&quot; class=&quot;tumblr_blog&quot;&gt;amaditalks&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Some points to consider:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;being out is &lt;b&gt;never an obligation&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;being out is not an indicator of pride, courage, strength, or anything other than a person’s decision to be out&lt;/li&gt;
&lt;li&gt;being out is often a major risk, and coming out and staying out is often a mark of privilege to which not everyone has access&lt;/li&gt;
&lt;li&gt;being out isn’t always universal, a person can be out to some people and not others, or in some places not others&lt;/li&gt;
&lt;li&gt;consequently, never assume that because someone is out to you, they’re out to &lt;b&gt;anyone&lt;/b&gt; else&lt;/li&gt;
&lt;li&gt;and, it should go without saying, never ever out anyone&lt;/li&gt;
&lt;li&gt;lastly, the language of “coming out” belongs to gender and sexual minorities, and there is never a time for people to “come out” as anything else, including as an “ally” to LGBTQ people – no appropriating&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>how to apologize</title>
		<link href="https://blog.izs.me/2015/09/how-to-apologize/"/>
		<updated>2015-09-16T20:09:48Z</updated>
		<id>https://blog.izs.me/2015/09/how-to-apologize/</id>
		<content type="html">&lt;p&gt;&lt;i&gt;I wrote this in the context of company policies at &lt;a href=&quot;https://www.npmjs.com/&quot;&gt;npm, Inc.&lt;/a&gt;, but since writing, I&amp;rsquo;ve seen a bunch of examples of profoundly bad apologies, so I&amp;rsquo;m publishing it here in the hopes that someone out in the world can get a little better at this important life skill.&lt;/i&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Sometimes, we&amp;rsquo;ll do the wrong thing, or make a bad choice, and a Bad
Thing will happen that harms someone in some way, making it so that
their needs are not met.&lt;/p&gt;
&lt;p&gt;In this case, whether they&amp;rsquo;re a customer, user, employee, teammate, or
anything else, the right thing to do is to apologize.&lt;/p&gt;
&lt;p&gt;Do not squander this opportunity to express an understanding of
another&amp;rsquo;s needs in crystal clear writing!&lt;/p&gt;
&lt;p&gt;Apologies need to have exactly 3 parts:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;A Bad Thing happened, and it sucked for you.  Here’s a clear
explanation of exactly why it sucked for you (what needs you had,
and why they were not met.)&lt;/li&gt;
&lt;li&gt;The Bad Thing happened as a result of something we did.  Here’s a clear explanation of what we did that let it happen.&lt;/li&gt;
&lt;li&gt;Here is what we are doing to make sure the Bad Thing never happens
again, and if possible, to correct the damage done by the Bad
Thing.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The bit about how we feel bad, the &amp;ldquo;I&amp;rsquo;m sorry&amp;rdquo; which usually takes
center stage of an apology, is often not strictly necessary, and if
present, should always come &lt;em&gt;after&lt;/em&gt; the three items above.&lt;/p&gt;
&lt;p&gt;I tend to steer away from any attempts to make apologies &amp;ldquo;sincere&amp;rdquo;,
since sincerity is easily faked, and thus abundant and of low value.
Strong feelings of regret do not help me know my data is more secure
today than it was yesterday.  A fig for your &amp;ldquo;feelings&amp;rdquo;. Wallowing in
sorrow makes it about the apologizer more than the apology.&lt;/p&gt;
&lt;p&gt;The first part shows that we understand what the Bad Thing was, and we
understand the needs that went unmet as a result of the Bad Thing.
This acknowledgement is a fundamental thing that people need when they
are wronged.  Just getting this right can sometimes repair the
relationship, and is already more than most companies and people can
manage.  But it&amp;rsquo;s only 1/3 of the apology.&lt;/p&gt;
&lt;p&gt;The second part shows that we are not trying to avoid responsibility
for the Bad Thing.  IANAL, and there may be cases where responsibility
comes with some liability.  However, in purely emotional interpersonal
points, accepting responsibility is generally regarded as a sign of
confidence and power.  It doesn&amp;rsquo;t &lt;em&gt;feel&lt;/em&gt; that way, but it&amp;rsquo;s
&lt;em&gt;perceived&lt;/em&gt; that way.&lt;/p&gt;
&lt;p&gt;The third part puts actions to words, and makes us accountable.  Never
ask for someone to trust you again; an apology is not the place for
that.  Simply explain what &lt;em&gt;specific actions&lt;/em&gt; are being taken (verb, owner,
timeline, budget, criteria), and let them make up their own mind.  If
it actually would prevent the Bad Thing, and if the effect is
externally visible, then you&amp;rsquo;ll either earn their trust or you won&amp;rsquo;t.
But in the moment, you&amp;rsquo;ll display confidence and strength by being
transparent.&lt;/p&gt;
&lt;h3 id=&quot;some-things-that-should-never-occur-in-an-apology&quot;&gt;Some things that should &lt;strong&gt;never&lt;/strong&gt; occur in an apology:&lt;/h3&gt;
&lt;p&gt;Before sending/publishing, scan for any of the following, and delete
them.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;It was kinda your fault that the Bad Thing happened.  If you hadn&amp;rsquo;t
been doing some other thing, it wouldn&amp;rsquo;t have happened.&lt;/li&gt;
&lt;li&gt;There was no way anyone could have avoided causing the Bad Thing,
so really, it’s not our fault.&lt;/li&gt;
&lt;li&gt;We hope the Bad Thing never happens again (but &amp;ldquo;hoping&amp;rdquo; is the
extent of what we’re doing about it.)&lt;/li&gt;
&lt;li&gt;A Bad Thing MIGHT have happened, maybe, I mean, if it did, we
apologize, but if not, then we don’t.  (For example, &amp;ldquo;we apologize
&lt;em&gt;if&lt;/em&gt; this caused you &lt;em&gt;any&lt;/em&gt; inconvenience&amp;rdquo; vs &amp;ldquo;we apologize for the
inconvenience&amp;rdquo;.)&lt;/li&gt;
&lt;li&gt;HOW AWFUL ARE WE!  WOE, WOE UNTO US UNWORTHY SOULS WHO HAVE
BESMIRCHED THE GOOD GRACES AND LEGACY OF YOUR TRUST AND GOODWILL!
I HEAP DIRT UPON MYSELF, YOUR GRACE! SHAME! SHAME! I KISS THE HEMS
OF YOUR GARMENTS, KNOWING THAT I AM UNWORTHY OF ANY &amp;ndash; well, you
get the idea.&lt;/li&gt;
&lt;li&gt;Any expectation, hope, or request for forgiveness.  Best to just
not mention it.  They&amp;rsquo;ll forgive you or they won&amp;rsquo;t, but asking
makes it no more or less likely, and dilutes the potency of the
core apology itself.&lt;/li&gt;
&lt;li&gt;Any judgement of any kind.  Especially, scan the word &amp;ldquo;should&amp;rdquo;,
anything implying goodness/badness, degrees of wrongness, etc.
It&amp;rsquo;s not about who&amp;rsquo;s &amp;ldquo;at fault&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;When in doubt, anything that isn&amp;rsquo;t part of the 3 core items should
usually be removed.  Short focused apologies are better than long
verbose ones.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Intent Out, Reality In</title>
		<link href="https://blog.izs.me/2015/08/intent-out-reality-in/"/>
		<updated>2015-08-14T00:59:56Z</updated>
		<id>https://blog.izs.me/2015/08/intent-out-reality-in/</id>
		<content type="html">&lt;p&gt;Many organizations have an org chart that looks something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2015/08/intent-out-reality-in/org-chart-hierarchy.png&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2015/08/intent-out-reality-in/org-chart-hierarchy.png&quot; width=&quot;100%&quot; alt=&quot;traditional hierarchy upside-down tree chart&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;At the top is the CEO and the board.  Below that are the other C-level executives, then the VPs and Directors, and at the bottom, the individual contributors.&lt;/p&gt;
&lt;p&gt;People draw charts like this because it feels satisfying to put the people with more power higher up.  It gives us all a warm feeling of safety to know that the people at the &amp;ldquo;top&amp;rdquo; have a clear view of the terrain, and are steering the ship in the best direction possible.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s clear, when looking at a chart like this, that being higher &amp;ldquo;up&amp;rdquo; the chart is better.  The best engineer becomes the king of their team, and then the best team-king becomes the King of Engineering (aka CTO).&lt;/p&gt;
&lt;p&gt;I think a better metaphor is something like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2015/08/intent-out-reality-in/org-chart-circles.png&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2015/08/intent-out-reality-in/org-chart-circles.png&quot; alt=&quot;circular org chart, CEO and board in the middle, ICs on the outside&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Leadership sits in the middle.  They don&amp;rsquo;t have a &amp;ldquo;high level view&amp;rdquo;. In fact, their view of reality is the &lt;em&gt;worst&lt;/em&gt; of anyone.  They do have the best view of the interactions between the teams, and the highest degree of access to confidential information internal to the organization.  They maintain the culture and facilitate the inter-team activities.&lt;/p&gt;
&lt;p&gt;(Note that the board is locked in the center with the CEO, but without even a connection to anything else.)&lt;/p&gt;
&lt;p&gt;Individual contributors in any given team have extremely detailed, timely, and accurate information about their section of reality. Engineers know the reality of what the software can do.  Sales and support know what customers are asking for.  However, they tend to have little insight into what things look like on the other side of the org.  When they turn around and look back in at the org, they see their manager, and maybe a few interactions in neighboring teams. They necessarily rely on the management infrastructure to inform them about the broader organization.&lt;/p&gt;
&lt;p&gt;A healthy organization moves from its center, and responds to input from its edges.  This requires two extremely important communication flows:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Intent flows out.&lt;/li&gt;
&lt;li&gt;Reality flows in.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;When in a leadership position, people will follow you.  They can&amp;rsquo;t help it.  It&amp;rsquo;s how we&amp;rsquo;re wired.  This is very dangerous.&lt;/p&gt;
&lt;p&gt;When a leader starts telling their organization what to do, this destroys intent-based leadership.  If the leader is wrong about the facts on the ground (which &lt;em&gt;of course&lt;/em&gt; they often will be, since they can&amp;rsquo;t see it!), then this will lead to two types of disasters:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;My leader is foolish, and I am enlightened (losing faith in the organization)&lt;/li&gt;
&lt;li&gt;My leader is enlightened, and I am foolish (losing faith in oneself)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Both of these are disasters because they break the &amp;ldquo;intent out, reality in&amp;rdquo; model.  People at the edges will stop sharing their experience if they stop trusting it, because they don&amp;rsquo;t want to let on that they don&amp;rsquo;t know what they&amp;rsquo;re doing.  If they stop trusting the organization as a whole, then it&amp;rsquo;s only a matter of time before they&amp;rsquo;re out, and in the meantime, they&amp;rsquo;re not going to be working at full potential.&lt;/p&gt;
&lt;p&gt;Intent-based leadership is like muscle memory.  If your neocortex had to direct every single body part individually, you&amp;rsquo;d never be able to talk or walk, let alone ride a bike or drive a car.  Instead, your neocortex says &amp;ldquo;I want a snack.  Go to the kitchen.&amp;rdquo; and a bunch of sub-systems handle the various sub-tasks more or less on their own.&lt;/p&gt;
&lt;p&gt;This requires a high degree of trust and practice.  Practice leads to competence, and competence over time builds trust.  When trust is lost, the information flows get blocked.  This leads to an increasing failure rate, blame games start, and it gets harder and harder to regain footing.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Of course, in reality, organizations don&amp;rsquo;t exist in 2-dimensional space, and lateral communication is extremely important.  But avoiding balkanization is a subject for another day.  The goal of this post is to make a point about leadership and hierarchy.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The best book I&amp;rsquo;ve found about intent-based leadership is &lt;a href=&quot;http://smile.amazon.com/gp/product/1591846404&quot;&gt;Turn The Ship Around&lt;/a&gt; by &lt;a href=&quot;https://twitter.com/ldavidmarquet&quot;&gt;David Marquet&lt;/a&gt;.  I highly recommend it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/08/huffingtonpost-watch-this-comedian-skewer/"/>
		<updated>2015-08-08T01:36:38Z</updated>
		<id>https://blog.izs.me/2015/08/huffingtonpost-watch-this-comedian-skewer/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://huffingtonpost.tumblr.com/post/126132469464/watch-this-comedian-skewer-anti-abortion&quot; class=&quot;tumblr_blog&quot;&gt;huffingtonpost&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;h2&gt;&lt;b&gt;&lt;a href=&quot;http://huff.to/1MSEwza&quot;&gt;Watch This Comedian Skewer Anti-Abortion Logic&lt;/a&gt;&lt;/b&gt;&lt;/h2&gt;Cameron Esposito for president.&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>The Phonetic Troll Alphabet</title>
		<link href="https://blog.izs.me/2015/07/the-phonetic-troll-alphabet/"/>
		<updated>2015-07-17T17:43:53Z</updated>
		<id>https://blog.izs.me/2015/07/the-phonetic-troll-alphabet/</id>
		<content type="html">&lt;p&gt;A - Affect&lt;br /&gt;
B - Bog&lt;br /&gt;
C - Chew&lt;br /&gt;
D - Daby&lt;br /&gt;
E - Effect&lt;br /&gt;
F - Fam&lt;br /&gt;
G - Gebra&lt;br /&gt;
H - Happle&lt;br /&gt;
I - IoT (pronounced &amp;ldquo;yot&amp;rdquo;)&lt;br /&gt;
J - Japple&lt;br /&gt;
K - Kapple&lt;br /&gt;
L - Elephant&lt;br /&gt;
M - Mancy&lt;br /&gt;
N - Nary&lt;br /&gt;
O - Oliphant&lt;br /&gt;
P - Pog&lt;br /&gt;
Q - Queue&lt;br /&gt;
R - Armor&lt;br /&gt;
S - Shrank&lt;br /&gt;
T - Tog&lt;br /&gt;
U - Underwear&lt;br /&gt;
V - Vebra&lt;br /&gt;
W - Eww&lt;br /&gt;
X - Xi&lt;br /&gt;
Y - Yacht&lt;br /&gt;
Z - Zat&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>npm v3′s approach to node_modules</title>
		<link href="https://blog.izs.me/2015/07/npm-v3s-approach-to-nodemodules/"/>
		<updated>2015-07-15T20:53:15Z</updated>
		<id>https://blog.izs.me/2015/07/npm-v3s-approach-to-nodemodules/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/124163734223/npm-v3-s-approach-to-node-modules&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p data-orig-width=&quot;350&quot; data-orig-height=&quot;263&quot; class=&quot;tmblr-full&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2015/07/npm-v3s-approach-to-nodemodules/tumblr_inline_nrbp5rwCYP1s0m7nr_500.gif&quot; data-orig-width=&quot;350&quot; data-orig-height=&quot;263&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;by &lt;a href=&quot;https://twitter.com/codedependant&quot;&gt;@codedependant&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Inclusiveness vs. safety in online spaces</title>
		<link href="https://blog.izs.me/2015/07/inclusiveness-vs-safety-in-online-spaces/"/>
		<updated>2015-07-13T05:54:48Z</updated>
		<id>https://blog.izs.me/2015/07/inclusiveness-vs-safety-in-online-spaces/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/123946065740/inclusiveness-vs-safety-in-online-spaces&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A combination of events at &lt;a href=&quot;http://ift.tt/1Hrgl2V&quot;&gt;Reddit&lt;/a&gt; and &lt;a href=&quot;http://ift.tt/1Jm3NeW&quot;&gt;LGBTQ in Tech Slack&lt;/a&gt; spurred me into a tweet storm about online spaces:
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;/p&gt;&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;The tragedy of all online community spaces is that the goals of “inclusive” and “safe” are, at the extreme, mutually exclusive goals.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620389392549482497&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;If you keep including people you will eventually end up with people in the same space who cannot stand each other and will not get along.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620389549026357249&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;At some point you have to exclude someone. You get to pick if it’s the people feeling unsafe, or the people making them feel unsafe.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620389829344235520&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;And *that’s not always an obvious choice*. Somebody’s “reasonable topic of discussion” is *always*, eventually, somebody’s threat trigger.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620390353267339264&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;I’ve run online communities for 20 years and I have learned that there is not even an approximation of a consensus of “reasonable”.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620390948040654848&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;This is why online communities fragment. Let them do it. It’s the only viable solution to the existence of mutually incompatible people.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620391267453644800&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Define your space clearly. Let in anyone who shares your reality. Be honest that people who don’t share it will be excluded. Say why.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620391633641541632&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; data-conversation=&quot;none&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Don’t wring your hands about free speech. You are under no obligation to let people say things you hate. They can go elsewhere, and will.&lt;/p&gt;— Laurie Voss (@seldo) &lt;a href=&quot;https://twitter.com/seldo/status/620391856078086144&quot;&gt;July 13, 2015&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;
from Seldo.Com Feed &lt;a href=&quot;http://ift.tt/1RsODha&quot;&gt;http://ift.tt/1RsODha&lt;/a&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>I Am The Very Model Of A Modern Package Manager</title>
		<link href="https://blog.izs.me/2015/07/i-am-the-very-model-of-a-modern-package-manager/"/>
		<updated>2015-07-07T18:02:00Z</updated>
		<id>https://blog.izs.me/2015/07/i-am-the-very-model-of-a-modern-package-manager/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/123473871255/i-am-the-very-model-of-a-modern-package-manager&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;One of the most amazing parts of working at npm is the passion of our userbase. People &lt;a href=&quot;https://m2.behance.net/rendition/pm/16725633/disp/427850735f13a8a6201bf8385865a5b9.png&quot;&gt;make&lt;/a&gt; &lt;a href=&quot;https://www.dropbox.com/s/jxtqp7he67msrz9/Slide10.jpg?dl=0&quot;&gt;fan&lt;/a&gt; &lt;a href=&quot;http://siliconangle.com/files/2012/01/coronation.png&quot;&gt;art&lt;/a&gt;. A fan &lt;a href=&quot;https://twitter.com/itsJonQ/status/476424460338094080&quot;&gt;invented&lt;/a&gt; our &lt;a href=&quot;https://dl.dropboxusercontent.com/u/547671/GIFs/npm-wombat-naked.png&quot;&gt;mascot&lt;/a&gt;. This stuff just happens.&lt;/p&gt;
&lt;p&gt;Yesterday at lunch, we got into a run of punny song titles based on musicals, leading to a series of tweets about &lt;a href=&quot;https://twitter.com/search?q=%23npmthemusical&amp;amp;src=typd&quot;&gt;npm the musical&lt;/a&gt;. By late that evening, what landed in our inbox? Full lyrics to one of the songs, courtesy of the astonishingly creative &lt;a href=&quot;https://twitter.com/revin&quot;&gt;Revin Guillen&lt;/a&gt;. Not only is it a catchy song, it’s a surprisingly thorough overview of npm’s features and functionality. We are blown away.&lt;/p&gt;
&lt;h2&gt;I Am The Very Model Of A Modern Package Manager&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;(To the tune of &lt;a href=&quot;https://www.youtube.com/watch?v=zSGWoXDFM64&amp;amp;feature=youtu.be&amp;amp;t=51s&quot;&gt;I Am The Very Model Of A Modern Major General&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I am the very model of a modern package manager&lt;br /&gt;
I’ve information current, deprecated in my cache-ager&lt;br /&gt;
I know the code you write has other modules (“mod-you-uhls”) it depends on&lt;br /&gt;
And I collect it all for you from first the moment you log on&lt;/p&gt;
&lt;p&gt;My registry with calculations teeming mathematical&lt;br /&gt;
Dependencies relationshipped by edges linked quite graph-ical&lt;br /&gt;
The versions, stars, and issues, bugs all published for the world to see&lt;br /&gt;
With many cheerful links to source control for the reposit&#39;ry&lt;/p&gt;
&lt;p&gt;&lt;em&gt;With many cheerful links to source control for the reposit&#39;ry&lt;/em&gt;&lt;br /&gt;&lt;em&gt;With many cheerful links to source control for the reposit&#39;ry&lt;/em&gt;&lt;br /&gt;&lt;em&gt;With many cheerful links to source control for the reposiposit&#39;ry&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’m very good at testing, tagging, publishing your libraries&lt;br /&gt;
I find the dupes and de- the dupes and you can rebuild all of these&lt;br /&gt;
In short, in matters JavaScript, dependency, and modular&lt;br /&gt;
I am the very model of a modern package manager&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In short, in matters JavaScript, dependency, and modular&lt;/em&gt;&lt;br /&gt;&lt;em&gt;It is the very model of a modern package manager&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I know your repo’s history, can shrinkwrap all the deps you need&lt;br /&gt;
I answer all the queries, many millions served today indeed&lt;br /&gt;
I quote the docs to you when asked, or open them in Chrome at least&lt;br /&gt;
I’m active all the time, in time zones all the way from west to east&lt;/p&gt;
&lt;p&gt;I can uninstall, unlink, unpublish, unstar, or just &lt;code&gt;un&lt;/code&gt;&lt;br /&gt;
I know your login name and I can &lt;code&gt;whoami&lt;/code&gt; for everyone&lt;br /&gt;
My interface is quick and you can write instructions easily&lt;br /&gt;
Abbreviate commands so they’re as terse as ‘r’, ’s’, &amp;lsquo;i’, and &#39;c’&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Abbreviate commands so they’re as terse as &#39;r’, ’s’, &#39;i’, and &#39;c’&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Abbreviate commands so they’re as terse as &#39;r’, ’s’, &#39;i’, and &#39;c’&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Abbreviate commands so they’re as terse as &#39;r’, ’s’, &#39;i’, and &#39;i’ and &#39;c’&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then I can run-script all the things, lifecycle hooks I can perform&lt;br /&gt;
And tell you all about a package: &lt;code&gt;view&lt;/code&gt; &#39;f you want me to inform&lt;br /&gt;
In short, in matters JavaScript, dependency, and modular&lt;br /&gt;
I am the very model of a modern package manager&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In short, in matters JavaScript, dependency, and modular&lt;/em&gt;&lt;br /&gt;&lt;em&gt;It is the very model of a modern package manager&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In fact when I know what is meant by “version” or (heh) “verison”&lt;br /&gt;
When I can give you scripts to help your shell do tab comp-uh-letion&lt;br /&gt;
When certain variables are all there in the environment&lt;br /&gt;
I enter “plumbing mode”; my output’s based upon the arguments&lt;/p&gt;
&lt;p&gt;When I have learnt what progress has been made by &lt;code&gt;npm upgrade&lt;/code&gt;&lt;br /&gt;
Or &lt;code&gt;npm update&lt;/code&gt;, when identical operations made&lt;br /&gt;
In short, when registry’s upgraded underneath transparentlyj&lt;br /&gt;
You’ll say a better package manager had never ran à &lt;a href=&quot;https://twitter.com/ceejbot&quot;&gt;ceej&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You’ll say a better package manager had never ran à ceej&lt;/em&gt;&lt;br /&gt;&lt;em&gt;You’ll say a better package manager had never ran à ceej&lt;/em&gt;&lt;br /&gt;&lt;em&gt;You’ll say a better package manager had never ran à ran â ceej&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;For my packager&#39;il knowledge, though I’m plucky and adventury&lt;br /&gt;
Has really really taken off since funding came in ventury&lt;br /&gt;
But still in matters JavaScript, dependency, and modular&lt;br /&gt;
I am the very model of a modern package manager&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But still in matters JavaScript, dependency, and modular&lt;/em&gt;&lt;br /&gt;&lt;em&gt;It is the very model of a modern package manager&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/07/u6QOPA/"/>
		<updated>2015-07-06T22:45:02Z</updated>
		<id>https://blog.izs.me/2015/07/u6QOPA/</id>
		<content type="html">&lt;p&gt;💖💛💚💙💜💖&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/07/kimchicuddles-how-many-partners-is-enough/"/>
		<updated>2015-07-03T19:58:04Z</updated>
		<id>https://blog.izs.me/2015/07/kimchicuddles-how-many-partners-is-enough/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://kimchicuddles.com/post/123041603900/how-many-partners-is-enough-support-kimchi-get&quot; class=&quot;tumblr_blog&quot;&gt;kimchicuddles&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;How many partners is enough?&lt;/p&gt;&lt;p&gt;Support Kimchi + get original artwork!&lt;br /&gt;&lt;a href=&quot;https://www.patreon.com/kimchicuddles&quot;&gt;https://www.patreon.com/kimchicuddles&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/06/greenatlas-you-dont-say-media-double/"/>
		<updated>2015-06-25T16:04:06Z</updated>
		<id>https://blog.izs.me/2015/06/greenatlas-you-dont-say-media-double/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://greenatlas.tumblr.com/post/122119329555/you-dont-say-media-double-standards-about-black&quot; class=&quot;tumblr_blog&quot;&gt;greenatlas&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;h2&gt;&lt;b&gt;You Don’t Say: Media Double Standards&lt;/b&gt;&lt;/h2&gt;&lt;p&gt;&lt;b&gt;About Black Protesters&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;“Wild animals burning buildings down”&lt;/p&gt;&lt;p&gt;“Who acts that way towards a police officer?”&lt;/p&gt;&lt;p&gt;&lt;b&gt;About White Looters&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;“Young people danced on a flipped over car”&lt;/p&gt;&lt;p&gt;“It’s so tough to lose and unfortunately the ugly side that we sometimes see in sports”&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/06/and-we-all-grew-socialjusticeprincesses-get/"/>
		<updated>2015-06-20T16:52:55Z</updated>
		<id>https://blog.izs.me/2015/06/and-we-all-grew-socialjusticeprincesses-get/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://and-we-all-grew.tumblr.com/post/106351458689/socialjusticeprincesses-get-fucking&quot;&gt;and-we-all-grew&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://socialjusticeprincesses.tumblr.com/post/106298068312/get-fucking-vaccinated&quot;&gt;socialjusticeprincesses&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;get fucking vaccinated&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is the best infographic yet&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/06/graceful-restart-requested-louie-trust-the/"/>
		<updated>2015-06-17T05:52:52Z</updated>
		<id>https://blog.izs.me/2015/06/graceful-restart-requested-louie-trust-the/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://graceful-restart-requested.tumblr.com/post/117600767083/louie&quot; class=&quot;tumblr_blog&quot;&gt;graceful-restart-requested&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Louie.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Trust the ouch.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Sponsoring Captioning at JSConf 2015</title>
		<link href="https://blog.izs.me/2015/05/sponsoring-captioning-at-jsconf-2015/"/>
		<updated>2015-05-29T15:56:43Z</updated>
		<id>https://blog.izs.me/2015/05/sponsoring-captioning-at-jsconf-2015/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/120056493625/sponsoring-captioning-at-jsconf-2015&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Last year, shortly after returning from JSConf 2014, where npm had sponsored the coffee, I pinged Chris Williams on IRC:&lt;/p&gt;
&lt;pre&gt;19:07 -!- voodootikigod is away: Auto-away
19:07 isaacs: First of all, jsconf was amazing and awesome, as always
19:07 isaacs: I hope that you&#39;re taking some time to decompress :)
19:07 isaacs: Check this out:
              &lt;a href=&quot;http://composition.al/blog/2014/05/31/your-next-conference-should-have-real-time-captioning/&quot;&gt;http://composition.al/blog/2014/05/31/your-next-conference-should-have-real-time-captioning/&lt;/a&gt;
19:08 isaacs: If you look into this for next JSConf, npm will sponsor it.
19:10 isaacs: we&#39;ll probably sponsor anyway, of course :)  but i mean, having CARTs
              in the talks is something that I&#39;d personally want to try to help make
              happen, so if there&#39;s anything I can do to help with that specifically,
              i&#39;d love to chat about it
19:10 isaacs: no rush, no reply necessary.  just keep in mind for next year :)
              thanks again for helping us be a part of it.&lt;/pre&gt;
&lt;p&gt;Auditory accessibility is an important issue for me personally.  My partner has a severe hearing loss, and at the risk of sounding like someone who discovered feminism when they had daughters, things &lt;em&gt;do&lt;/em&gt; change when an issue affects someone close to you.&lt;/p&gt;
&lt;p&gt;In the last 6 and a half years, I’ve become very aware of a lot of little things that had been invisible to me before.  Restaurants that are dark, or seating arrangements that make one person back-lit, or where a flickering candle makes it impossible to see a speaker’s lips.  I’ve even learned a bit of ASL, enough to have a halfway decent conversation when talking is impossible.&lt;/p&gt;
&lt;p&gt;Hotels put handles in their bathtubs because people with various physical disabilities need them&lt;small style=&quot;font-size:90%&quot;&gt;&lt;a href=&quot;https://blog.izs.me/2015/05/sponsoring-captioning-at-jsconf-2015/#accessibility-fn-1&quot; id=&quot;accessibility-fn-1-return&quot;&gt;[1]&lt;/a&gt;&lt;/small&gt;.  In many places, these accessibility accommodations are required by law.&lt;/p&gt;
&lt;p&gt;Needed or not, almost everyone who takes a bath in a hotel will use these handles to get out of the tub.  Accessibility accommodations may only be required by a small number of people, but in most cases, they improve the experience for the majority as well.&lt;/p&gt;
&lt;p&gt;When I watch tv or movies, and captions aren’t present (for example, in most movie theaters and many online services), I really feel like something is missing.  My hearing is a bit better than average, but I occasionally tune out for a second or get distracted, and the text makes up the difference.  The words at the bottom of the screen are like the cognitive equivalent of the bathtub handles.  Some people absolutely need them, but &lt;em&gt;everyone&lt;/em&gt; uses them when they’re there.&lt;/p&gt;
&lt;p&gt;At &lt;a href=&quot;http://www.alterconf.com/sessions/sfoakland-ca&quot;&gt;AlterConf in Oakland&lt;/a&gt;, &lt;a href=&quot;http://stenoknight.com/&quot;&gt;Mirabai Knight&lt;/a&gt; provided captioning services in real time over a web connection, and it was truly awesome.  If you get the chance to go to an AlterConf, I highly recommend it.  There was also ASL interpretation and basically every sort of accessibility accommodation possible.&lt;/p&gt;
&lt;p&gt;That was the first time I’d ever experienced the ease of subtitles along with a live talk.  It was so much easier to pay attention and follow the speakers’ ideas.  I can only imagine the difference between struggling to catch every other word and speech-read across the room and behind a microphone, vs being able to just &lt;strong&gt;read the words&lt;/strong&gt; that the person actually said.&lt;/p&gt;
&lt;p&gt;When Chris Williams reached out to me again in March 2015, I pointed him towards Ashe Dryden, who made the referral to Mirabai Knight.  npm, Inc. footed the bill.  Chris told me that they probably wouldn’t be able to have a separate screen for captions, but they’d be able to make a nifty little webpage that would live-stream captions to peoples’ laptops and phones.&lt;/p&gt;
&lt;p&gt;Since the presentation rooms are pretty large at JSConf, this made the captions a lot more visible for more people, and also meant that the captions could be streamed outside the presentation room.  You can check it out in your browser, if you manage to read this before the conference is over:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://2015.jsconf.us/t/track_a.html&quot;&gt;http://2015.jsconf.us/t/track_a.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://2015.jsconf.us/t/track_b.html&quot;&gt;http://2015.jsconf.us/t/track_b.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;There were quite a few unexpected benefits as well:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;Unexpected feature of transcription service is FOMO-free restroom breaks &lt;a href=&quot;https://twitter.com/hashtag/jsconf?src=hash&quot;&gt;#jsconf&lt;/a&gt;&lt;/p&gt;— Joel Dart (@joeldart) &lt;a href=&quot;https://twitter.com/joeldart/status/603565261732581376&quot;&gt;May 27, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;p&gt;And &lt;em&gt;of course&lt;/em&gt; &lt;a href=&quot;http://npm.im/jsconf-2015-stream&quot;&gt;this&lt;/a&gt; happened right away:&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;stream text transcriptions from &lt;a href=&quot;https://twitter.com/jsconf&quot;&gt;@jsconf&lt;/a&gt;
via the command line!
&lt;/p&gt;&lt;p&gt;npm i -g jsconf-2015-stream&lt;/p&gt;
&lt;p&gt;jsconf-2015-stream a
or
jsconf-2015-stream b&lt;/p&gt;— Sam Saccone (@samccone) &lt;a href=&quot;https://twitter.com/samccone/status/603615639870304256&quot;&gt;May 27, 2015&lt;/a&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;p&gt;I hope that this becomes a regular fixture at tech conferences around the world, along with other ways to make our community spaces open to more people.  Accessibility broadens our communities, and it makes things better and more inviting for everyone.&lt;/p&gt;
&lt;blockquote class=&quot;twitter-tweet&quot; lang=&quot;en&quot;&gt;&lt;p lang=&quot;en&quot; dir=&quot;ltr&quot;&gt;it was amazing to see the different ways live transcription added to the &lt;a href=&quot;https://twitter.com/hashtag/jsconf?src=hash&quot;&gt;#jsconf&lt;/a&gt; experience for *everyone*&lt;/p&gt;— adam j. sontag (@ajpiano) &lt;a href=&quot;https://twitter.com/ajpiano/status/603687838215974913&quot;&gt;May 27, 2015&lt;/a&gt;&lt;/blockquote&gt;
&lt;script async=&quot;&quot; src=&quot;https://platform.twitter.com/widgets.js&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;&lt;hr /&gt;&lt;p id=&quot;accessibility-fn-1&quot;&gt;&lt;small style=&quot;font-size:90%&quot;&gt;1: I didn’t make up the analogy about bathtub handles being good for everyone, including those that don’t strictly need them.  But, I can’t find the original source.  Everything I can think of googling leads me to a thousand sites selling bathtub hardware.  If you know the source, please help! &lt;a href=&quot;https://blog.izs.me/2015/05/sponsoring-captioning-at-jsconf-2015/#accessibility-fn-1-return&quot;&gt;return&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/04/queennymeria-needle-was-robb-and-bran-and/"/>
		<updated>2015-04-27T06:19:52Z</updated>
		<id>https://blog.izs.me/2015/04/queennymeria-needle-was-robb-and-bran-and/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://queennymeria.tumblr.com/post/117480314421&quot;&gt;queennymeria&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;div&gt;&lt;small&gt;Needle was Robb and Bran and Rickon, her mother and her father, even Sansa. Needle was Winterfell’s grey walls, and the laughter of its people. Needle was the summer snows, Old Nan’s stories, the heart tree with its red leaves and scary face, the warm earthy smell of the glass gardens, the sound of the north wind rattling the shutters of her room. Needle was Jon Snow’s smile. &lt;/small&gt;&lt;/div&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/04/yelling-about-feet/"/>
		<updated>2015-04-22T03:45:54Z</updated>
		<id>https://blog.izs.me/2015/04/yelling-about-feet/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/04/this-is-a-picture-of-my-friend-becky-she-used-to/"/>
		<updated>2015-04-20T22:26:33Z</updated>
		<id>https://blog.izs.me/2015/04/this-is-a-picture-of-my-friend-becky-she-used-to/</id>
		<content type="html">&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a picture of my friend Becky. She used to be a happy, popular girl until one night she snorted marijuana at a party. She died instantly. Please, don’t do marijuana. It’s the most dangerous drug out there. Please don’t wind up like Becky.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;pretty sure that’s Taylor Swift&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;no its becky&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/04/FjiGbQ/"/>
		<updated>2015-04-13T23:53:39Z</updated>
		<id>https://blog.izs.me/2015/04/FjiGbQ/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Letter to Marshall Rosenberg</title>
		<link href="https://blog.izs.me/2015/03/letter-to-marshall-rosenberg/"/>
		<updated>2015-03-05T22:16:37Z</updated>
		<id>https://blog.izs.me/2015/03/letter-to-marshall-rosenberg/</id>
		<content type="html">&lt;p&gt;I am sad to learn that Marshall Rosenberg, creator of &lt;a href=&quot;http://smile.amazon.com/Nonviolent-Communication-Language-Marshall-Rosenberg/dp/1892005034&quot;&gt;Non-Violent Communication&lt;/a&gt;, had &lt;a href=&quot;http://www.cnvc.org/marshall-rosenberg-passed-life-saturday-february-7th-2015&quot;&gt;passed away last month&lt;/a&gt;.  He had a big impact on my life, and I had hoped to one day meet him if possible.&lt;/p&gt;
&lt;p&gt;Now that definitely won&amp;rsquo;t happen.  It makes me sadder than I would have expected.  I don&amp;rsquo;t usually get upset about celebrities or other strangers dying.&lt;/p&gt;
&lt;p&gt;I wrote him a letter a few years ago, and thought I&amp;rsquo;d share it.  He didn&amp;rsquo;t write back (I didn&amp;rsquo;t expect him to), and I wonder if he ever saw it and appreciated the impact he had on me or on Node and JavaScript.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Dear Marshall Rosenberg,&lt;/p&gt;
  &lt;p&gt;I am writing to thank you for Nonviolent Communication, and to tell you about the effect it has had on my community recently.  I hope that you will find this interesting and rewarding.  I am sure that you are very busy, so no reply is necessary or expected, but if you would like to share any reactions you have, I would be very happy to hear from you.&lt;/p&gt;
  &lt;p&gt;I am a software developer, working as a project lead on an open source software product.  &amp;ldquo;Open source&amp;rdquo; is software where the source code is given away freely, and where users often submit bug-fixes and enhancements back to the project.  Some of us are paid to work on it full time, but the project depends on the continual input from the broader community.&lt;/p&gt;
  &lt;p&gt;As you might expect, this involves a lot of people communicating with one another, frequently when they do not already have a pre-existing relationship.  As a project lead, I often find myself in situations where some people want a certain feature to be done one way, and others want it done another way.  Or, in many other cases, a user may request a feature, but lack the full understanding of why implementing such a feature might be a bad idea.  The challenge is to educate them, and perhaps say &amp;ldquo;no&amp;rdquo; to their request, in such a way that you don&amp;rsquo;t lose a potential helper.&lt;/p&gt;
  &lt;p&gt;Modern software development, it turns out, is a very social activity.  However, software development typically does not attract people with any innate knack for social interaction.  Many of us (myself included) are introverted, nerdy, and a not gifted at empathy.  We all know that &amp;ldquo;being nice&amp;rdquo; is important, but most of us lack the skills to know &lt;em&gt;how&lt;/em&gt; to do that.  As a result, software development communities tend to be rather unfriendly, despite everyone &amp;ldquo;trying&amp;rdquo; to do the right thing.&lt;/p&gt;
  &lt;p&gt;As I progressed in my career, I increasingly found that the skills that got me here are not the ones I need to excel.  I became a leader of a popular project because of my skills with computers, but suddenly I found myself in a position where I needed to manage conflict and listen to people!&lt;/p&gt;
  &lt;p&gt;My partner is a therapist, and turned me on to your book.  I can&amp;rsquo;t overstate how helpful it&amp;rsquo;s been.  You have broken down a surprisingly challenging subject into a system that is simple enough to actually remember when it&amp;rsquo;s needed.  It &lt;em&gt;seems&lt;/em&gt; like it should be something we all just know how to do.  When everything is comfortable and everyone feels safe, it usually is.  But the minute we disagree, or feel threatened, our good sense goes out the window.&lt;/p&gt;
  &lt;p&gt;I have found that NVC has been incredibly useful in my line of work.  Technical skills are easy enough to come by, but being able to really listen to a frustrated user is a bit like having magic powers.  I still wouldn&amp;rsquo;t say that my communication skills are the greatest, but the change has been profound.&lt;/p&gt;
  &lt;p&gt;Recently, at a conference in Ireland, I gave a talk about creating compassionate communities in tech, and NVC factored heavily into it.  I literally told people that if there&amp;rsquo;s only one thing they take away from my talk, they should buy your book and practice it.  I&amp;rsquo;ve given several technical talks, and some management/community related stuff, but this really hit a chord.  If you are interested, you can check it out here: &lt;a href=&quot;https://blog.izs.me/2015/03/letter-to-marshall-rosenberg/index.html&quot;&gt;./index.html&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;I keep seeing new people on the web mentioning this talk, and how they&amp;rsquo;ve gotten started with NVC recently.  The ripples continue outward.&lt;/p&gt;
  &lt;p&gt;I am personally grateful for all that you&amp;rsquo;ve done, because it has helped me improve as a technologist and a leader.  Thank you for bringing NVC into the world.&lt;/p&gt;
  &lt;p&gt;&amp;ndash;
  Isaac Z. Schlueter&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Will (@wbinnssmith) at Atlassian explains why they use npm for front-end packaging</title>
		<link href="https://blog.izs.me/2015/02/will-wbinnssmith-at-atlassian-explains-why-they/"/>
		<updated>2015-02-17T08:23:46Z</updated>
		<id>https://blog.izs.me/2015/02/will-wbinnssmith-at-atlassian-explains-why-they/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/111251950175/will-wbinnssmith-at-atlassian-explains-why-they&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;More and more people are using npm to do frontend stuff, and npm is very excited about this.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/02/hunstantonlies-this-has-fucked-with-my-mind/"/>
		<updated>2015-02-17T08:12:39Z</updated>
		<id>https://blog.izs.me/2015/02/hunstantonlies-this-has-fucked-with-my-mind/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://hunstantonlies.tumblr.com/post/111091106243/this-has-fucked-with-my-mind&quot; class=&quot;tumblr_blog&quot;&gt;hunstantonlies&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This has fucked with my mind&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/02/i-am-16-im-dancing-to-my-favorite-pop-song-at-my/"/>
		<updated>2015-02-13T16:10:54Z</updated>
		<id>https://blog.izs.me/2015/02/i-am-16-im-dancing-to-my-favorite-pop-song-at-my/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;I am 16. I’m dancing to my favorite pop song at my friends birthday party when a boy whose name I do not even know comes over and slaps my ass. My face flushes with redness and I sit down for the rest of the night avoiding the eyes of everyone in the room.&lt;/p&gt;
&lt;p&gt;Later, I ask him why he thought it was okay to invade my body without my consent. He says it was a joke.&lt;/p&gt;
&lt;p&gt;I don’t laugh.&lt;/p&gt;
&lt;p&gt;I am 12. Every girl in my grade is dragged to the school’s auditorium, where we are told that ‘dressing like sluts’ in ninety degree will not be tolerated, and that we will get two detentions if anyone finds our clothing distracting. &lt;/p&gt;
&lt;p&gt;Later, I find out that, while we were being lectured on our own bodies, all of the boys stayed in their homerooms and watched a movie, because ‘It’s natural for boys to get aroused, the girls are the ones that have to cover up, they’re causing a problem and taking away from the education of others.’ &lt;/p&gt;
&lt;p&gt;I don’t understand any of it.&lt;/p&gt;
&lt;p&gt;I am 7.  I stand up at bat in gym class and blatantly miss the hollow plastic ball that is thrown in my direction. The whole class bursts out laughing. ‘You hit like a girl,’ one of the boys hollers to me.&lt;/p&gt;
&lt;p&gt;Later, I ask my female gym teacher why hitting ‘like a girl’ is a bad thing. She smiles at me sympathetically as she says ‘Honey, it just is.’&lt;/p&gt;
&lt;p&gt;I don’t smile back.&lt;/p&gt;
&lt;p&gt;I am a girl, and since the day I was born, my gender has become synonymous to weakness, incapability, and inadequacy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;And that isn’t fucking okay.&lt;/b&gt;&lt;/i&gt;&lt;br /&gt; (via &lt;a href=&quot;http://laamode.tumblr.com/&quot; class=&quot;tumblr_blog&quot;&gt;laamode&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/01/hey-buzzfeed-i-like-a-lot-of-the-stuff-you-guys/"/>
		<updated>2015-01-23T16:48:02Z</updated>
		<id>https://blog.izs.me/2015/01/hey-buzzfeed-i-like-a-lot-of-the-stuff-you-guys/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Hey Buzzfeed. I like a lot of the stuff you guys do, but I&#39;ve noticed something lately that makes me (and I assume a lot of other people) question whether or not to read your website. It seems like a disproportionate number of your articles and videos cater to women and so-called &amp;quot;feminists&amp;quot;. This very blog recently posted a picture that mocked the new and popular #Meninist activist movement. Do you REALLY want your readers to think you support so-called &amp;quot;feminist&amp;quot; ideology?
-- &lt;em&gt;Anonymous&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;https://buzzfeed.tumblr.com/post/108874060812/hey-buzzfeed-i-like-a-lot-of-the-stuff-you-guys&quot;&gt;buzzfeed&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Yes. Unequivocally yes.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Oh, Anonymous, you crazy ol&amp;rsquo; shitbird.  Up to your old tricks again.&lt;/p&gt;
&lt;p&gt;So much lol @ &amp;ldquo;so-called &amp;quot;feminist&amp;rdquo; ideology&amp;quot;.  Scare quotes ftw.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/01/unamusedsloth-so-many-things-to-ponder-in-bear/"/>
		<updated>2015-01-23T07:56:37Z</updated>
		<id>https://blog.izs.me/2015/01/unamusedsloth-so-many-things-to-ponder-in-bear/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://unamusedsloth.tumblr.com/post/84081781310/so-many-things-to-ponder-in-bear-life&quot; class=&quot;tumblr_blog&quot;&gt;unamusedsloth&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;So many things to ponder in bear life.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/01/UFRb2g/"/>
		<updated>2015-01-21T08:34:10Z</updated>
		<id>https://blog.izs.me/2015/01/UFRb2g/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>A quick and dirty annotation of &quot;Why Women Shouldn&#39;t Code&quot;</title>
		<link href="https://blog.izs.me/2015/01/a-quick-and-dirty-annotation-of-why-women/"/>
		<updated>2015-01-17T01:39:36Z</updated>
		<id>https://blog.izs.me/2015/01/a-quick-and-dirty-annotation-of-why-women/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://negativitysandwiches.com/post/108299473795/a-quick-and-dirty-annotation-of-why-women&quot; class=&quot;tumblr_blog&quot;&gt;jennschiffer&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;i&gt;The following are my quick and rough responses &lt;a href=&quot;https://t.co/BrbavMn5jd&quot; target=&quot;_blank&quot;&gt;to this post&lt;/a&gt; as I shoveled wonton soup into my mouth and talked to other women developers about how we are tired of people writing about whether we are doing the right thing or not as women in tech.&lt;/i&gt; &lt;blockquote&gt;&lt;div&gt;&lt;b&gt;Why Women Shouldn’t Code&lt;/b&gt;&lt;/div&gt;&lt;/blockquote&gt;
This title should&amp;hellip;&lt;/div&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2015/01/emmafrosticle-i-hate-this-asshole-but-i-love/"/>
		<updated>2015-01-14T06:38:10Z</updated>
		<id>https://blog.izs.me/2015/01/emmafrosticle-i-hate-this-asshole-but-i-love/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://emmafrosticle.tumblr.com/post/106215659809/i-hate-this-asshole-but-i-love-this-asshole&quot;&gt;emmafrosticle&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;i hate this asshole but i love this asshole&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Maple Old Fashioned Pecan Pie</title>
		<link href="https://blog.izs.me/2015/01/maple-old-fashioned-pecan-pie/"/>
		<updated>2015-01-01T22:51:00Z</updated>
		<id>https://blog.izs.me/2015/01/maple-old-fashioned-pecan-pie/</id>
		<content type="html">&lt;p&gt;&lt;img src=&quot;https://pbs.twimg.com/media/B6TFsJvCIAAsKEn.jpg:large&quot; alt=&quot;pecan pie&quot; width=&quot;100%&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Slightly altered from &lt;a href=&quot;http://www.simplyrecipes.com/recipes/pecan_pie/&quot;&gt;Simply Recipes - Pecan Pie&lt;/a&gt;.  This uses maple syrup instead of corn syrup, and I made sure to fill it with just so many pecans.  Also, orange zest and whiskey.  Because why not?&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;1 9-inch pie shell, frozen (freeze for half an hour if fresh).  I also like to butter the pie dish before putting the crust in. Because butter makes things good.&lt;/li&gt;
&lt;li&gt;3 cups pecans, coarsely chopped (save a few whole pecan halves to create a decoration on the surface of the pie if you want)&lt;/li&gt;
&lt;li&gt;Another cup of pecans.  Just&amp;hellip; so many pecans.  Don&amp;rsquo;t skimp.&lt;/li&gt;
&lt;li&gt;3 eggs, slightly beaten&lt;/li&gt;
&lt;li&gt;1 cup maple syrup&lt;/li&gt;
&lt;li&gt;&amp;frac12; cup brown sugar&lt;/li&gt;
&lt;li&gt;1 Tbsp molasses&lt;/li&gt;
&lt;li&gt;4 Tbsp butter, melted&lt;/li&gt;
&lt;li&gt;Another Tbsp of butter&lt;/li&gt;
&lt;li&gt;&amp;frac12; teaspoon salt  (Unless the butter is salted, then skip, or use less)&lt;/li&gt;
&lt;li&gt;2 teaspoon vanilla&lt;/li&gt;
&lt;li&gt;1 Tbsp Bourbon or Rye whiskey&lt;/li&gt;
&lt;li&gt;&amp;frac12; tsp or so orange zest (I just zested most of one orange.  Didn&amp;rsquo;t actually measure it.  Life is short.)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Preheat oven to 350°F. In a small bowl mix together the eggs, brown sugar, corn syrup, molasses, melted butter, vanilla, salt, orange zest, and whiskey until smooth and consistent texture and color.  (The butter will tend to separate out a bit.)&lt;/p&gt;
&lt;p&gt;Fill the frozen pie shell with pecans.  Put the more chopped pecans at the bottom, and make sure to have plenty of pecan halves on the top.  Pat them down flat as you put them in, so that you don&amp;rsquo;t have big gaps.&lt;/p&gt;
&lt;p&gt;Stir the filling a little if it&amp;rsquo;s separated.&lt;/p&gt;
&lt;p&gt;Pour the filling over the pecans.  Don&amp;rsquo;t worry about burying the pecans, they will rise to the surface.&lt;/p&gt;
&lt;p&gt;If you wanna get fancy, spread some unchopped pecans over the top in a decorative way. Just dip them below the wet filling and let them rise again so they get coated with the filling.&lt;/p&gt;
&lt;p&gt;Make sure that any exposed pecans have a good coating of filling.&lt;/p&gt;
&lt;p&gt;Melt the other Tbsp of butter, and brush over the inside edge of the exposed crust.  Then pour any remaining over the top.  Waste no butter.&lt;/p&gt;
&lt;p&gt;Bake at 350°F for 30 minutes.&lt;/p&gt;
&lt;p&gt;After 30 minutes tent the pie loosely with aluminum foil to prevent the crust and pecans from getting too browned. Bake for another 40 to 50 minutes until the filling has set. The pie should be just barely wiggly in the center.&lt;/p&gt;
&lt;p&gt;Remove from oven and let cool completely, about 1 hour.&lt;/p&gt;
&lt;p&gt;Note that the pie will be puffed up a bit when you first take it out of the oven, it will settle as it cools.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/12/new-years-is-the-holiday-where-we-celebrate/"/>
		<updated>2014-12-30T01:29:00Z</updated>
		<id>https://blog.izs.me/2014/12/new-years-is-the-holiday-where-we-celebrate/</id>
		<content type="html">&lt;p&gt;New Years’ is the holiday where we celebrate things that we resolve to do (and probably won’t), as well as learnings from the previous year.&lt;/p&gt;
&lt;p&gt;I’d like to thank &lt;a href=&quot;https://twitter.com/hotdogsladies&quot;&gt;Merlin Mann&lt;/a&gt;, who’s been a source of a lot of wisdom for me.  Here are three important points that I’ve learned from him which have served me well in 2014 and I hope to apply more in 2015.&lt;/p&gt;
&lt;h3&gt;2. Growing up is about becoming the sort of hypocrite you can live with&lt;/h3&gt;
&lt;p&gt;Hypocrisy is simply unavoidable.  The only truly consistent people are calculators and psychopaths, and you don’t want to be either of those.  Living means growing, and growing means that you’re constantly discovering ways in which you used to be wrong and holes in the rules and principles that guided you.&lt;/p&gt;
&lt;p&gt;Maturity is about recognizing that context matters, and imperfection is not criminal.  Failure is allowed.  That’s how we can…&lt;/p&gt;
&lt;h3&gt;3. Find more interesting things to be afraid of&lt;/h3&gt;
&lt;p&gt;It was cute in high school to be afraid that the popular kid wouldn’t like you, but maybe 30 years is enough time to be done playing that game.&lt;/p&gt;
&lt;p&gt;I had a really hard time giving up on being afraid of the same old things.  It wasn’t until I started actively seeking out &lt;em&gt;new&lt;/em&gt; things to be afraid of that I was able to move past them.&lt;/p&gt;
&lt;p&gt;Funny how that works.&lt;/p&gt;
&lt;p&gt;But the most important thing, the #1 thing, &amp;ldquo;step zero&amp;rdquo; in the parlance of our times, which is so much deeper than it sounds:&lt;/p&gt;
&lt;h3&gt;1. Keep Moving and Get Out of The Way&lt;/h3&gt;
&lt;p&gt;Sound advice for proper civics behavior, whether you are talking about supermarket aisles or career paths.  &lt;i&gt;Credit where credit’s due, I believe this was coined by John Roderick, not Merlin.  But John said it on &lt;a href=&quot;http://www.merlinmann.com/roderick/&quot;&gt;a podcast with Merlin&lt;/a&gt;, so, whatever, partial credit.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Keep moving.  Do new things.  Poke your head up from your own little rut, and learn to recognize the tools and resources you have.  Chances are, you’re not powerless, and everyone else is just as confused as you are.&lt;/p&gt;
&lt;p&gt;Get out of the way.  For most of the folks out there, it’s not about you.  They’re doing their own things, and if you’re in the way, you’re the asshole.  So don’t do that.  Especially as privileged visible people, it’s important for us to support, while letting other people tell their own stories with their own voices.&lt;/p&gt;
&lt;p&gt;Everything good I’ve done so far in life has been this.  The more you can keep moving and get out of the way, the more you can enable and encourage those around you, making their lives better and fuller and more efficient.  You can do your part, and avoid stopping anyone else from doing theirs, which is usually the biggest help you can give them.&lt;/p&gt;
&lt;p&gt;Or at least you can get out of their fucking way.  They have their own vegetables to pick out.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/12/x7UhGg/"/>
		<updated>2014-12-28T18:55:54Z</updated>
		<id>https://blog.izs.me/2014/12/x7UhGg/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Io.js</title>
		<link href="https://blog.izs.me/2014/12/iojs/"/>
		<updated>2014-12-08T18:00:00Z</updated>
		<id>https://blog.izs.me/2014/12/iojs/</id>
		<content type="html">&lt;p&gt;A lot of people have asked me lately about io.js and its place among Node Forward, the Advisory Board, and npm.&lt;/p&gt;
&lt;p&gt;This is my own personal point of view.  However, I have shared early drafts of this post with the io.js technical committee to ensure that it&amp;rsquo;s at least a reasonable approximation of how the team sees things.&lt;/p&gt;
&lt;h3&gt;What is io.js?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/iojs/io.js&quot;&gt;Io.js&lt;/a&gt; is a collaborative fork of &lt;a href=&quot;https://github.com/joyent/node&quot;&gt;joyent/node&lt;/a&gt;.  Io.js is created by Fedor Indutny, a long-time active node core team member responsible for some of the most important parts of the Node.js runtime.&lt;/p&gt;
&lt;p&gt;Io.js continues the work that was previously being done by Node Forward in the &lt;code&gt;node-forward/node&lt;/code&gt; repository.  We hope to merge with the original Node.js project at some point in the future.&lt;/p&gt;
&lt;h3&gt;What is Node Forward?&lt;/h3&gt;
&lt;p&gt;Node Forward is an effort by Node.js core contributors, community members, and corporate interests, united in the desire to improve the Node.js project.&lt;/p&gt;
&lt;p&gt;On July 11, Mikeal Rogers created a private &lt;code&gt;node-forward&lt;/code&gt; repository under his personal GitHub account to discuss the future direction of Node.js.  Many of us felt that it was time to pursue a consensus-seeking contributor-governed process for the project, in a neutral foundation.&lt;/p&gt;
&lt;h3&gt;What is &amp;ldquo;node-forward/node&amp;rdquo;?&lt;/h3&gt;
&lt;p&gt;After a month in Mikeal&amp;rsquo;s private node-forward repository, the discussion was moved to the &lt;a href=&quot;https://github.com/node-forward&quot;&gt;Node Forward&lt;/a&gt; organization in August, where it could be continued in public.  The Node Forward organization included a (GitHub fork-button-style) &amp;ldquo;fork&amp;rdquo; of Node.js at &lt;a href=&quot;https://github.com/node-forward&quot;&gt;node-forward/node&lt;/a&gt;, created with the express intent of merging changes with the joyent/node repository.&lt;/p&gt;
&lt;p&gt;At that time, Mikeal wrote:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;The first goal of the foundation is to house core development at a neutral organization that can support Node. &lt;em&gt;Nobody&lt;/em&gt; prefers that work to be released as a fork and we will continue to work with Joyent to make them a member and even a leader of this foundation. Joyent may decide that the best thing for Node is to continue their own work in parallel to the work other contributors are taking under the foundation in a symbiotic manner that has propelled projects like Linux and BSD. In that case the contributors in the TC are committed to releasing as a &amp;ldquo;fork&amp;rdquo; although they &lt;strong&gt;do not&lt;/strong&gt; find it preferable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the Node Forward repository, the core contributors involved in this effort formed a Technical Committee (TC), and came to consensus on governance process and broad technical direction.  The TC consists of 6 of the &lt;a href=&quot;https://github.com/joyent/node/graphs/contributors&quot;&gt;top 8 Node.js core contributors&lt;/a&gt;.  (Ryan Dahl has no current involvement with Node.js.  TJ Fontaine was invited but declined to participate.)&lt;/p&gt;
&lt;h3&gt;Does Node Forward compete with Joyent or Node.js?&lt;/h3&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;Joyent is a corporation that provides container infrastructure as a service solutions, including the Joyent Container Service, the Manta data storage and analytics platform, and the SmartDataCenter orchestration system.  In 2010, Joyent purchased the Node.js copyright and trademark from Node&amp;rsquo;s original author, Ryan Dahl.&lt;/p&gt;
&lt;p&gt;Node Forward is a group of community members and core committers who want to continue to work on improving Node.js as effectively as possible, using open self-governance in a neutral community foundation.&lt;/p&gt;
&lt;p&gt;The goal of Node Forward is to work with Joyent and the rest of the Node.js community in order to improve Node.js.  We respect Joyent&amp;rsquo;s significant investment in Node.js over the years, and we believe that a combined effort is beneficial to Joyent and to Node.&lt;/p&gt;
&lt;h3&gt;What is the Joyent Node Advisory Board?&lt;/h3&gt;
&lt;p&gt;On August 13, Joyent&amp;rsquo;s CEO Scott Hammond called to speak with me about the direction of Node.js.  He indicated that he was also speaking to many other Node business, technical, and community leaders.&lt;/p&gt;
&lt;p&gt;On September 26, he held a meeting to discuss the creation of an advisory board.  He said he wanted to address the issues surrounding the Node project, and the board would be a way to get that process started.&lt;/p&gt;
&lt;p&gt;The first official meeting of the Advisory Board occurred on October 23.&lt;/p&gt;
&lt;p&gt;More information about the Joyent Node Advisory Board can be found &lt;a href=&quot;http://nodejs.org/about/advisory-board/&quot;&gt;on Joyent&amp;rsquo;s website&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Why was node-forward/node made private?&lt;/h3&gt;
&lt;p&gt;On October 9th (that is, after the initial bootstrapping meeting and before the first official Advisory Board meeting), Scott Hammond called Mikeal Rogers and told him that the node-forward/node repository was a violation of &lt;a href=&quot;http://trademarks.justia.com/852/62/node-js-85262623.html&quot;&gt;Joyent&amp;rsquo;s trademark on Node.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Hammond expressed that he saw this as a sign of bad faith, undermining his efforts in the creation of an advisory board.  We agreed to make the repository private in order to show our commitment to working with Joyent on improving Node.js.&lt;/p&gt;
&lt;p&gt;I brought up the issue in the third Joyent Node Advisory Board meeting on November 20.  Scott Hammond reiterated that it is a violation of Joyent&amp;rsquo;s trademark to release code &amp;ldquo;based on Joyent Node.js which is also called node&amp;rdquo;, and that he intended to ensure that their trademark was protected &amp;ldquo;by any and all legal means&amp;rdquo;.  He requested that we choose a name other than &amp;ldquo;node&amp;rdquo; if we make this project public.&lt;/p&gt;
&lt;p&gt;By that time, there was also clear indication of forward progress at the JNAB meetings.  We had taken steps towards a consensus-based open governance model not dictated by any one corporation.  There had been several discussions of relaxing use of the &amp;ldquo;Node.js&amp;rdquo; trademark by businesses providing products related to Node.  There was a clearer understanding of the role that the community might play in future Advisory Board meetings.&lt;/p&gt;
&lt;p&gt;I am optimistic that the JNAB meetings will continue to be productive.&lt;/p&gt;
&lt;h3&gt;Why was &lt;a href=&quot;https://github.com/iojs/io.js&quot;&gt;io.js&lt;/a&gt; created?&lt;/h3&gt;
&lt;p&gt;On November 26, Fedor Indutny, an extremely prolific Node.js core contributor, and an active participant in Node Forward, decided that he would create a fork of Node.js with a different name, so that the technical work started in Node Forward could continue in public without violating Joyent&amp;rsquo;s trademark.&lt;/p&gt;
&lt;p&gt;The Technical Committee that had previously been working on node-forward/node decided to move to the &lt;a href=&quot;https://github.com/iojs/io.js&quot;&gt;io.js&lt;/a&gt; repository.  The other non-technical discussion repositories remain on the &lt;a href=&quot;https://github.com/node-forward&quot;&gt;Node Forward&lt;/a&gt; organization at this time.&lt;/p&gt;
&lt;h3&gt;Does io.js compete with Joyent or Node.js?&lt;/h3&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;The intent of io.js is to provide a space for the Node core team to continue to do the work of improving Node.&lt;/p&gt;
&lt;p&gt;Io.js continues the efforts of Node Forward.  We are committed to making forward progress and serving the Node.js community, both in technical and non-technical issues.&lt;/p&gt;
&lt;p&gt;The work being done in the Joyent Node Advisory Board appears to be heading towards shared goals for the good of the Node community.  I expect that this will continue.&lt;/p&gt;
&lt;p&gt;The Node community as whole is endeavoring to make a change.  The transformation is in progress and we expect to come out better for it.  io.js is an ingredient in the process of change, a spark.  The future is large, and we continue exploring it.&lt;/p&gt;
&lt;h3&gt;What are the goals of io.js?&lt;/h3&gt;
&lt;p&gt;In no particular order:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Continuous integration&lt;/li&gt;
&lt;li&gt;100% passing tests as a normal state of affairs&lt;/li&gt;
&lt;li&gt;Strict SemVer-compliant versioning&lt;/li&gt;
&lt;li&gt;Contributor ownership, outside of corporate control&lt;/li&gt;
&lt;li&gt;Transparent consensus-seeking governance&lt;/li&gt;
&lt;li&gt;Weekly releases&lt;/li&gt;
&lt;li&gt;Supported versions of V8&lt;/li&gt;
&lt;li&gt;Active development&lt;/li&gt;
&lt;li&gt;Predictable roadmap&lt;/li&gt;
&lt;li&gt;Community engagement&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Assuming the Joyent Node Advisory Board continues to make progress towards these goals, we expect to merge the projects in the future.&lt;/p&gt;
&lt;h3&gt;What is npm&amp;rsquo;s position on Node forks?&lt;/h3&gt;
&lt;p&gt;npm is the package manager for JavaScript.  We support all nodes that are widely used in the JavaScript community, and do not recommend or prefer any of them over any other.&lt;/p&gt;
&lt;p&gt;Node&amp;rsquo;s community has always been its best feature.  With over 100,000 modules today, covering a breathtaking array of use cases, used every day by millions of developers around the world, it is clear that the primary value Node provides is a small core enabling userland innovation.&lt;/p&gt;
&lt;p&gt;npm remains committed to its mission of reducing friction for all JavaScript developers.&lt;/p&gt;
&lt;h3&gt;Will npm be renaming to &amp;ldquo;ipm&amp;rdquo; since it&amp;rsquo;s the io.js package manager?&lt;/h3&gt;
&lt;p&gt;No.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;npm&amp;rdquo; does not stand for Node Package Manager.  It is &lt;a href=&quot;https://docs.npmjs.com/misc/faq#if-npm-is-an-acronym-why-is-it-never-capitalized-&quot;&gt;officially&lt;/a&gt; an abbreviation for &amp;ldquo;npm is not an acronym&amp;rdquo;.  We do enjoy &lt;a href=&quot;https://github.com/npm/npm-expansions&quot;&gt;novel pun-making&lt;/a&gt; though.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;i&gt;Edit 2014-12-11 – At the decision of the last TC meeting, it&amp;rsquo;s &amp;ldquo;io.js&amp;rdquo; or &amp;ldquo;Io.js&amp;rdquo; when capitalized, but not &amp;ldquo;IO.js&amp;rdquo;.&lt;/i&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/11/seldo-i-just-have-something-in-my-eye-shut/"/>
		<updated>2014-11-30T20:59:10Z</updated>
		<id>https://blog.izs.me/2014/11/seldo-i-just-have-something-in-my-eye-shut/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/103902480430/i-just-have-something-in-my-eye-shut-up&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I just have something in my eye. Shut up.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://peek-a-dillo.tumblr.com/post/102877526548/reddit-user-hemeyou-was-left-overwhelmed-by&quot;&gt;peek-a-dillo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Reddit user HeMeYou was left “overwhelmed” by advice from online strangers after accidentally discovering his son might be gay&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The 38-year-old father posed the question to Reddit after finding Google searches on his son’s iPad suggesting he wanted to come out.&lt;/p&gt;
&lt;p&gt;He said: “I found out my 13 y/o son is gay… He hasn’t told me, but I want to support him. What can I do?”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I’m 38, and a single dad to my 13 year old son, 14 in four months. The other day I asked my son if I could borrow his iPad and he gave it to me.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;After my first attempt at Google searching something I noticed that he forgot to delete his history as a lot of the search terms were along the lines of “I’m gay what now?” etc…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I love him regardless of which gender he loves, in fact when I was slightly older than him I had a few flings with guys, which he doesn’t know about, so I am 100% supportive.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;He has seemed slightly down recently, as in, he isn’t as cheerful as he once was, and I desperately want to tell him that I love him regardless of which sexuality he is.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What are my options? Should I wait for him to tell me? Or should I make a few hints at it?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I’m worried that if I don’t hint at it, that he will be worried about something that he really doesn’t have to be worried about… if that makes sense.&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Thanks.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Shortly after, he received a flood of supportive messages, with many users offering advice based on their own experiences.&lt;/p&gt;
&lt;p&gt;One user posted: “Google ‘how to tell my son I will love and support him no matter what’ and leave it in his search history.”&lt;/p&gt;
&lt;p&gt;Another said: “Let him come out on his own terms, just make sure he knows that you’ll support him and you don’t have a problem with it.”&lt;/p&gt;
&lt;p&gt;The father, who wished to remain anonymous, told Buzzfeed the response to his post was “overwhelmingly helpful and kind.”&lt;/p&gt;
&lt;p&gt;A few days later, HeMeYou posted an update on what he ended up doing:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I started off with talking about general media with him, for instance I mentioned how awesome it was that Tim Cook (CEO of Apple) came out as being gay and I asked him what he thought about it and I was completely expecting him to give a typical teenager response like “yeah.. its good” or something like that but he actually gave me a detailed response which I absolutely loved because for the first time in a good while I’ve actually held a conversation with my son that felt really… rewarding.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I also wanted to talk to him about how I’ve noticed that he’s not been acting as cheerful as he usually has and I sort of gave the cliche spiel of “I love you no matter what and I just want to see you be happy” but I didn’t get much of a response that time apart from “yeah I know..”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The next day as I picked him up from school I thought I’d ask him about any crushes he has, and I wanted to make sure I didn’t say a gender when I asked him, so instead of ‘he’ or ‘she’ I used ‘they’ etc.. Here is that conversation as I remember it…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Me: So, do you have a crush on anyone?&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Son: Uhm… no..m..maybe..&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Me: Ohhh so who is the lucky person?&lt;/em&gt;&lt;br /&gt;&lt;em&gt; At this point he sort of looked at me slightly confused, I’m not 100% sure why, but I’m assuming it is because I said “lucky person” rather than “lucky girl”.&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Son: Just someone from my french class…&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Me: Oh yeah… so what do you like about them?&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Son: Just.. stuff..&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Me: Okay.. but.. like what?&lt;/em&gt;&lt;br /&gt;&lt;em&gt; Son: I donno they’re just kinda funny I guess…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;At this point I dropped the conversation but just before I did I told him “Well, whoever it is, they should be so lucky to have you as a boyfriend..” and while I didn’t see it, I certainly felt as though he was rolling his eyes at my cheesy comments.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;At the dinner table the same day, while we were eating we had a couple minutes of silence, not much was heard apart from the cutlery and my son finally said “I actually wanted to tell you something in the car, but I was afraid you’d get in an accident..”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I looked up from my plate and looked at him straight in the eyes… I could see he was thinking about something and all I could think of was “OMG this is it…”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;He said “Dad..” with a couple seconds of silence “..I’m gay”.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;I looked at him and couldn’t help myself from smiling, and I told him “____, you know I love you so much… right?” and I got up and gave him a huge hug.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;He even started to cry on my shoulder and because of that I couldn’t help myself but shed a couple tears.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Concluding his post, he said: “After dinner and after he finished his homework we both lay in our pyjamas on the sofa, while I was watching the Cooking Channel and he was playing on his iPad.&lt;/p&gt;
&lt;p&gt;“I had my arm around him and he was leaning his head on my chest, and all I could think of was that I’m the happiest father on earth right now.”&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Complicity with Abuse: 101-level Information Social Justice Hobbyists are Dangerously Ignorant Of</title>
		<link href="https://blog.izs.me/2014/11/complicity-with-abuse-101-level-information/"/>
		<updated>2014-11-29T16:54:39Z</updated>
		<id>https://blog.izs.me/2014/11/complicity-with-abuse-101-level-information/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://days.maybemaimed.com/post/68488432751/complicity-with-abuse-101-level-information&quot; class=&quot;tumblr_blog&quot;&gt;maymay&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Before you claim to be effective in any kind of systemic anti-abuse work, you need to understand the concept of &lt;em&gt;complicity.&lt;/em&gt; Thankfully, it’s not a very hard concept to understand. Even better, there’s a very simple test for whether or not you actually understand it as deeply as I think you need&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>&quot;Code of conduct thoughts&quot; with Anon Mous</title>
		<link href="https://blog.izs.me/2014/11/code-of-conduct-thoughts-with-anon-mous/"/>
		<updated>2014-11-18T01:48:00Z</updated>
		<id>https://blog.izs.me/2014/11/code-of-conduct-thoughts-with-anon-mous/</id>
		<content type="html">&lt;blockquote&gt;
  &lt;p&gt;On Sun, Nov 16, 2014 at 11:52 AM, Anon Mous wrote:&lt;/p&gt;
  &lt;p&gt;Hi Isaac&lt;/p&gt;
  &lt;p&gt;I was going to put this on the GH thread but it has been locked, so I wanted to send it to you.&lt;/p&gt;
  &lt;p&gt;Before I begin this comment I want to make clear a few things. I do think harassment happens in tech every day, it falls on socially marginalised groups overwhelmingly, and it needs to stop. I think that CoC&amp;rsquo;s are a good thing for a community and agree with everything in &lt;a href=&quot;http://www.ashedryden.com/blog/codes-of-conduct-101-faq#coc101why&quot;&gt;here&lt;/a&gt;. I&amp;rsquo;m commenting anonymously because I don&amp;rsquo;t feel safe to say this attached to my real identity.&lt;/p&gt;
  &lt;p&gt;The CoC defines the rights and responsibilities of all members of the community. One of the rights of members is to not feel threatened, and if they do then to have a safe way to report that. The section on Addressing Grievances covers what someone can do if they feel they&amp;rsquo;ve been unfairly accused of violating the CoC. This strikes a good balance in the case where the violation of the CoC has been brought to the organisers, evaluated, and then that person has been talked to about their behaviour.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;However&lt;/strong&gt; this doesn&amp;rsquo;t cover the case where someone has also or only talked about the event in social media and the person has been harassed by a crowd on social media. By the time that the organisers have had a chance to look at the facts and make a decision, punishment may have already been meted out.&lt;/p&gt;
  &lt;p&gt;I don&amp;rsquo;t know what the answer is, but I think it&amp;rsquo;s worth talking about the rights of the accused and the responsibilities of the reporter. In particular, should the reporter refrain from using social media to talk about the person or their actions, instead waiting until the organisers have had a chance to look into the claims?&lt;/p&gt;
  &lt;p&gt;I&amp;rsquo;m not sure that social media is always the right place for talking about these incidents, particularly when they have just happened. Additionally I think that often the intent of posting these incidents on social media is at least in part to damage the person they are accusing.&lt;/p&gt;
  &lt;p&gt;I don&amp;rsquo;t want to create a gag order, and I don&amp;rsquo;t know what the right answer is here. I&amp;rsquo;m aware that marginalised groups are at an extreme power imbalance when making reports, and I wouldn&amp;rsquo;t want to put anything in place that would make a marginalised person feel unsafe in attending an event, or reporting an incident. Perhaps we decide to be silent on this, leaving it up to the judgement of the person reporting it. If that is the case, then it still deserves to be discussed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;On 18 November 2014 11:22, Isaac Schlueter wrote:&lt;/p&gt;
  &lt;p&gt;Well, Mx. Mous, I think that you bring up a relevant point, but not one that is new or should direct any different course of action.&lt;/p&gt;
  &lt;p&gt;Essentially, you are saying that the blowback against an accused harasser on social media channels may be disproportionate to their actions, and in particular, may make the jobs of project administrators more difficult as a result.&lt;/p&gt;
  &lt;p&gt;This is a relevant concern.  However, let&amp;rsquo;s dig in one step deeper, and look at the root.&lt;/p&gt;
  &lt;p&gt;Abused people lash out on social media when they have no other outlet, or when other outlets are unlikely to be productive.  The best way we can address this is to make sure that victims of abuse are confident that their grievances will be addressed by the community admins.&lt;/p&gt;
  &lt;p&gt;It is a myth that victims love or seek it out publicity.  Look at the actual effects that so-called &amp;ldquo;professional victims&amp;rdquo; have to look forward to.  No one would go through that if they had any other reasonable choice.  It is only a sense of justice that tends to compel them to make their abuse public for the good of others who might benefit from the warning.&lt;/p&gt;
  &lt;p&gt;If we say &amp;ldquo;THOU SHALT NOT SPEAK OF THIS ON SOCIAL MEDIA&amp;rdquo;, as one of the rules of the CoC, then what we are &lt;em&gt;actually&lt;/em&gt; saying is, &amp;ldquo;As project administrators, we believe that you will be so dissatisfied by relying on us that you will have no other choice than to take the fight into the public; furthermore, we are unwilling to be held accountable for our actions in public, so we have added this caveat to absolve ourselves of responsibility if you escalate this issue.&amp;rdquo;&lt;/p&gt;
  &lt;p&gt;In fact, rather than ensuring that victims of abuse pursue the &amp;ldquo;proper&amp;rdquo; channels for their grievances, this sort of rule will tend to &lt;em&gt;increase&lt;/em&gt; the likelihood of a public flamewar, which in practice tends to harm victims more than abusers.&lt;/p&gt;
  &lt;p&gt;The best course of action is thus to clearly communicate that we will support victims of abuse and harassment, so much so that we are willing and eager to receive any feedback in public or private about how can do this better.&lt;/p&gt;
  &lt;p&gt;If we do that, and leave it up to the best judgement of abuse victims how they go public, we will tend to find that almost no one opts to heap additional abuse and scrutiny on themselves.&lt;/p&gt;
  &lt;p&gt;With your permission, I would like to post your question and this response publicly, because this is a common question.  I will not include the email headers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;On Mon, Nov 17, 2014 at 5:15 PM, Anon Mous wrote:&lt;/p&gt;
  &lt;p&gt;Hi Isaac&lt;/p&gt;
  &lt;p&gt;Thanks for this. You&amp;rsquo;re totally right and I agree with you. I had some of these ideas floating around but you linked them together for me. I&amp;rsquo;m happy for you to post this question and response publicly.&lt;/p&gt;
  &lt;p&gt;Thanks, Mx Mous&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/11/andywarnercomics-in-honor-of-day-of-the-dead/"/>
		<updated>2014-11-04T16:17:32Z</updated>
		<id>https://blog.izs.me/2014/11/andywarnercomics-in-honor-of-day-of-the-dead/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://andywarnercomics.tumblr.com/post/101623276094/in-honor-of-day-of-the-dead-heres-a-repost-of-my&quot;&gt;andywarnercomics&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In honor of Day of the Dead, here’s a repost of my comic about the San Francisco Columbarium and the man who spent 26 years restoring it.&lt;/p&gt;
&lt;p&gt;This comic originally appeared on Medium at &lt;em&gt;The Nib&lt;/em&gt;. &lt;a href=&quot;https://medium.com/@andycomics/&quot;&gt;Go check out my other work there.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/thevoiceinthevoid-swedebeast/"/>
		<updated>2014-10-28T15:15:19Z</updated>
		<id>https://blog.izs.me/2014/10/thevoiceinthevoid-swedebeast/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://thevoiceinthevoid.tumblr.com/post/101152343733/swedebeast-gothbone666-our-entire-world&quot; class=&quot;tumblr_blog&quot;&gt;thevoiceinthevoid&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://swedebeast.tumblr.com/post/99676500355/gothbone666-our-entire-world-history&quot;&gt;swedebeast&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://gothbone666.tumblr.com/post/68183526100/our-entire-world-history-nailed-things-which&quot;&gt;gothbone666&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Our entire world history nailed.&lt;/p&gt;
&lt;p&gt;Things which remain consistant - Sex, death and war.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Exactly&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;this is the greatest thing I have seen on tumblr.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I had to have this&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A modern classic.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The human disgrace.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/child-mom-can-you-tell-me-a-bedtime-story-me/"/>
		<updated>2014-10-26T17:22:18Z</updated>
		<id>https://blog.izs.me/2014/10/child-mom-can-you-tell-me-a-bedtime-story-me/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Child&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mom, can you tell me a bedtime story?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Me&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Of course. &lt;em&gt;clears throat&lt;/em&gt; Boy toy named Troy used to live in Detroit. Big dope dealer money, he was getting some coins. Was in shootouts with the law, but he live in a palace. Bought me Alexander McQueen, he was keeping me stylish.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/i-have-been-hit-three-of-these-ways-this-is-why/"/>
		<updated>2014-10-17T14:04:21Z</updated>
		<id>https://blog.izs.me/2014/10/i-have-been-hit-three-of-these-ways-this-is-why/</id>
		<content type="html">&lt;p&gt;I have been hit three of these ways. This is why we take the lane. Because our lives literally depend on it. &lt;/p&gt;&lt;p&gt;When you complain that cyclists shouldn&amp;rsquo;t be riding in the middle of the lane, you are suggesting that they should be killed.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/merlin-indefensible-i-dont-know-how/"/>
		<updated>2014-10-15T22:35:21Z</updated>
		<id>https://blog.izs.me/2014/10/merlin-indefensible-i-dont-know-how/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/273685587/indefensible-i-dont-know-how-anybody-with-a&quot; class=&quot;tumblr_blog&quot;&gt;merlin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://indefensible.me/post/273605615/i-dont-know-how-anybody-with-a-remotely-high-profile&quot; class=&quot;tumblr_blog&quot;&gt;indefensible&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;I don’t know how anybody with a remotely high profile on the internet stops themselves from climbing to the top of a tall building to pick people off with a marksman’s rifle….&lt;br /&gt;&lt;br /&gt;
  […]&lt;br /&gt;&lt;br /&gt;
  It’s been a small dirty window to internet fame.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thing is: the internet’s made of IP addresses, opinions, and assholes. It’s what’s there. That’s the basic equipment.&lt;/p&gt;
&lt;p&gt;A short course on surviving the web:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/273685587/indefensible-i-dont-know-how-anybody-with-a&quot;&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/pb-and-marceline-is-one-of-the-most-poignant-love/"/>
		<updated>2014-10-08T22:19:00Z</updated>
		<id>https://blog.izs.me/2014/10/pb-and-marceline-is-one-of-the-most-poignant-love/</id>
		<content type="html">&lt;p&gt;PB and Marceline is one of the most poignant love stories in modern fiction.  Beautifully told, through hints and so much left unsaid.&lt;/p&gt;
&lt;p&gt;Poor Finn.  He thinks she&amp;rsquo;s talking about him.  He has no idea.&lt;/p&gt;
&lt;p&gt;That last gif.  Wow, that gets me.  Maybe Princess Bubblegum&amp;rsquo;s &lt;em&gt;first sentient action&lt;/em&gt; was to save Marceline&amp;rsquo;s life in the aftermath of the Mushroom War.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/espruen-an-alternate-universe-where-bruce-wayne/"/>
		<updated>2014-10-08T05:14:13Z</updated>
		<id>https://blog.izs.me/2014/10/espruen-an-alternate-universe-where-bruce-wayne/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://espruen.tumblr.com/post/56289516787/an-alternate-universe-where-bruce-wayne-died&quot; class=&quot;tumblr_blog&quot;&gt;espruen&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;An alternate universe where Bruce Wayne died instead of his parents. Causing his father Thomas Wayne to become Batman and his mother Martha to go insane and become the Joker.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/motivatedslacker-iwill-climb-on-top-of-you-in/"/>
		<updated>2014-10-07T18:52:00Z</updated>
		<id>https://blog.izs.me/2014/10/motivatedslacker-iwill-climb-on-top-of-you-in/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://motivatedslacker.tumblr.com/post/45755108362/iwill-climb-on-top-of-you-in-the-night-and-settle&quot; class=&quot;tumblr_blog&quot;&gt;motivatedslacker&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;iwill climb on top of you in the night and settle like a tiny rain cloud&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Sauce: &lt;a href=&quot;http://www.okcupid.com/profile/sunday93?cf=profile&quot;&gt;http://www.okcupid.com/profile/sunday93?cf=profile&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/roses-are-pretty/"/>
		<updated>2014-10-01T18:55:49Z</updated>
		<id>https://blog.izs.me/2014/10/roses-are-pretty/</id>
		<content type="html">&lt;p&gt;Roses are pretty.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/10/nyxweaver-grandtrilobyte-eleshnorn/"/>
		<updated>2014-10-01T18:52:13Z</updated>
		<id>https://blog.izs.me/2014/10/nyxweaver-grandtrilobyte-eleshnorn/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://nyxweaver.tumblr.com/post/97074592914/grandtrilobyte-eleshnorn-nyxweaver&quot;&gt;nyxweaver&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://grandtrilobyte-eleshnorn.tumblr.com/post/97074430278/nyxweaver-sarkhan-volkswagen-nyxweaver&quot;&gt;grandtrilobyte-eleshnorn&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://nyxweaver.tumblr.com/post/97074345194/sarkhan-volkswagen-nyxweaver-abzan-houses&quot;&gt;nyxweaver&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://sarkhan-volkswagen.tumblr.com/post/97074307181/nyxweaver-abzan-houses-nyxweaver-yall&quot;&gt;sarkhan-volkswagen&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://nyxweaver.tumblr.com/post/97074252209/abzan-houses-nyxweaver-yall-remember-that&quot;&gt;nyxweaver&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://abzan-houses.tumblr.com/post/97073401154/nyxweaver-yall-remember-that-game-in&quot;&gt;abzan-houses&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://nyxweaver.tumblr.com/post/97073363399/yall-remember-that-game-in-elementary-school&quot;&gt;nyxweaver&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;y’all remember that game in elementary school where each person would say one word and the next person would say a word etc so it’d create a cohesive story? let’s do that:&lt;/p&gt;
&lt;p&gt;Two&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thousand&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;men&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ate&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;their&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;dicks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;well playtime is over you’re all grounded&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>When @izs is summoned to a GitHub issue bikeshedding npm features</title>
		<link href="https://blog.izs.me/2014/09/when-izs-is-summoned-to-a-github-issue/"/>
		<updated>2014-09-26T19:16:32Z</updated>
		<id>https://blog.izs.me/2014/09/when-izs-is-summoned-to-a-github-issue/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/98475772803/when-izs-is-summoned-to-a-github-issue-bikeshedding&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;figure class=&quot;tmblr-full&quot; data-orig-height=&quot;240&quot; data-orig-width=&quot;320&quot; data-orig-src=&quot;./tumblr_ncdguxBfPd1stn6klo1_400.gif&quot;&gt;&lt;img alt=&quot;image&quot; src=&quot;https://66.media.tumblr.com/9d946525d89ffdbf9b567296693f2f0c/tumblr_inline_pcguvvqbTI1qzgxun_540.gif&quot; data-orig-height=&quot;240&quot; data-orig-width=&quot;320&quot; data-orig-src=&quot;./tumblr_ncdguxBfPd1stn6klo1_400.gif&quot; /&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;by anonymous&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/sanity-schmanity-picking-up-accents-its-not/"/>
		<updated>2014-09-25T03:48:59Z</updated>
		<id>https://blog.izs.me/2014/09/sanity-schmanity-picking-up-accents-its-not/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://sanity-schmanity.tumblr.com/post/98345738643/picking-up-accents-its-not-weird-have-you&quot; class=&quot;tumblr_blog&quot;&gt;sanity-schmanity&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;div class=&quot;post_title&quot;&gt;&lt;strong&gt;Picking up accents: it’s not weird.&lt;/strong&gt;&lt;/div&gt;
&lt;div class=&quot;post_body&quot;&gt;
&lt;p&gt;Have you ever been talking with someone from another state or country and caught yourself accidentally picking up bits of their accent? Turns out &lt;em&gt;it’s normal:&lt;/em&gt;&lt;/p&gt;
&lt;blockquote class=&quot;xkit-colorquotes-border-item&quot;&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;An experiment with lip-reading has found that the brain subconsciously tries to copy the speech patterns of total strangers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Researchers who made the discovery believe accent mimicry is part of the brain’s in-built urge to ‘empathise and affiliate’ with other people. And we don’t even need to hear them saying the words out loud.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So researchers at the University of California did an experiment where they had volunteers watch a silent video of a face saying a bunch of simple words. They gave the volunteers a choice of two words and asked them to say which one they thought the face in the video had said. And look:&lt;/p&gt;
&lt;blockquote class=&quot;xkit-colorquotes-border-item&quot;&gt;
&lt;p&gt;&lt;em&gt;&amp;quot;They were not asked to either imitate or impersonate the talker, just say what the word was. &lt;/em&gt;&lt;em&gt;But amazingly, the tests showed they were more likely to repeat the word in exactly the same accent used by the speaker rather than their own accent.”&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.dailymail.co.uk/news/article-1300949/You-subconsciously-try-mimic-accent-person-speaking-researchers-find.html&quot;&gt;Read more here.&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/meadows-mommy-apersnicketylemon/"/>
		<updated>2014-09-25T02:39:51Z</updated>
		<id>https://blog.izs.me/2014/09/meadows-mommy-apersnicketylemon/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://meadows-mommy.tumblr.com/post/97575694451/apersnicketylemon-revolutioninabox-a&quot; class=&quot;tumblr_blog&quot;&gt;meadows-mommy&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://apersnicketylemon.tumblr.com/post/88987989827/revolutioninabox-a-pro-life-group-in-lansing&quot;&gt;apersnicketylemon&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://revolutioninabox.tumblr.com/post/88980009365/a-pro-life-group-in-lansing-michigan-says-fetal&quot;&gt;revolutioninabox&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A pro-life group in Lansing, Michigan says fetal models have helped save a baby from a late-term abortion. Officials with 40 Days for Life in Lansing posted a picture of a set of fetal models that it says helped changed a woman’s mind about having an abortion.“ I showed the 30-week model to a late-term mom who left the clinic and DID NOT have an abortion. Praise God!” the group wrote.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Literally none of these except the final one is anatomically correct. You literally have a minuturized born infant model as your 12 weeks ant 8 weeks fetus, this is BLATANT misinformation and lies.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Additionally abortions at 30 weeks? Aren’t legal ANYWHERE in the world unless the fetus is already fucking dead or cannot survive outside the uterus on it’s own. You didn’t save ANYTHING, or else you are lying about gestational age OR they weren’t actually going for an abortion or you made the whole story up.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;This is propaganda, misinformation and lies, it’s disgusting and it doesn’t actually help your movement. This is (among the reasons) why pro choicers think pro liars are full of shit, and refuse to respect you or your movement. &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;FUCK YOU FOR SPREADING MISINFORMATION ABOUT ABORTIONS&amp;gt; NOT YOUR UTERUS NOT YOUR GODDAMN CHOICE&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;^&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/fini-mun-dude-check-out-this-shark/"/>
		<updated>2014-09-19T15:17:55Z</updated>
		<id>https://blog.izs.me/2014/09/fini-mun-dude-check-out-this-shark/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://fini-mun.tumblr.com/post/97380865824/dude-check-out-this-shark&quot;&gt;fini-mun&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dude check out this shark&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/safe-and-sound/"/>
		<updated>2014-09-16T00:38:00Z</updated>
		<id>https://blog.izs.me/2014/09/safe-and-sound/</id>
		<content type="html">&lt;p&gt;Capital Cities - Safe And Sound (Official Video)&lt;/p&gt;
&lt;p&gt;Last year, Marisa and I went to Italy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not usually exposed to whatever is playing on the radio.  Basically everywhere we went in Italy had MTV (or whatever channel it is that plays music videos) on a television.&lt;/p&gt;
&lt;p&gt;And every one of them was playing &amp;ldquo;Safe and Sound&amp;rdquo;.  Every cab, every car that drove by, every bar, every cafe.  For those three weeks, this song was on repeat for me.  I&amp;rsquo;ve never experienced anything like that in the US.  Having travelled a bit, few things feel as profoundly &amp;ldquo;foreign&amp;rdquo; to me as &amp;ldquo;being assaulted by a constant repetition of the current US pop hit&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I heard it in the background in a restaurant today, and I was back there.&lt;/p&gt;
&lt;p&gt;It is raining, just a little, not a lot like the other day, when we were on our way here on the train.  I am sitting in a cafe in Manarola.  Marisa is at the counter ordering a cafe for herself, a doppio for me, and a pastry to share.  I watch a group of germans franks and brits suddenly gather in the street holding signs awkwardly asking each other where to go, and just as abruptly depart after their guide.  Marisa sits down next to me and we chat about where to hike today.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/09/safe-and-sound/1920px-1_manarola_evening_2012.jpg&quot; width=&quot;100%&quot; alt=&quot;manarola&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This song will always taste like Italy to me.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/oatmeal-hey-bro-you-got-the-time-yeah/"/>
		<updated>2014-09-14T20:00:42Z</updated>
		<id>https://blog.izs.me/2014/09/oatmeal-hey-bro-you-got-the-time-yeah/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://oatmeal.tumblr.com/post/97076381806/hey-bro-you-got-the-time-yeah-its-hang&quot; class=&quot;tumblr_blog&quot;&gt;oatmeal&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;ldquo;Hey bro, you got the time?&amp;quot; &lt;br /&gt;&lt;br /&gt;&amp;quot;Yeah, it’s … hang on.  Just a sec.  God fucking damnit. &amp;quot; &lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/birdandmoon-dating-isnt-easy-no-matter-who/"/>
		<updated>2014-09-14T19:59:16Z</updated>
		<id>https://blog.izs.me/2014/09/birdandmoon-dating-isnt-easy-no-matter-who/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://birdandmoon.com/dating.html&quot;&gt;birdandmoon&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dating isn’t easy, no matter who you are. &lt;a href=&quot;https://www.youtube.com/watch?v=-h8I3cqpgnA&quot;&gt;This is a great Attenborough clip about wasps and orchids&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/raygorartshit-bisexual-frustration-everyone-is/"/>
		<updated>2014-09-14T19:58:04Z</updated>
		<id>https://blog.izs.me/2014/09/raygorartshit-bisexual-frustration-everyone-is/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://raygorartshit.tumblr.com/post/95491797525/bisexual-frustration-everyone-is-hot-and-im&quot;&gt;raygorartshit&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bisexual Frustration: Everyone is Hot and I’m Really Bad at Handling It - my autobiography&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/saga-just-keeps-on-breaking-my-heart/"/>
		<updated>2014-09-14T18:10:05Z</updated>
		<id>https://blog.izs.me/2014/09/saga-just-keeps-on-breaking-my-heart/</id>
		<content type="html">&lt;p&gt;Saga just keeps on breaking my heart.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/rnayablanca-little-miss-sunshine-script-gifs/"/>
		<updated>2014-09-14T17:35:08Z</updated>
		<id>https://blog.izs.me/2014/09/rnayablanca-little-miss-sunshine-script-gifs/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://rnayablanca.tumblr.com/post/33543847927/little-miss-sunshine-script-gifs-dwaynes&quot; class=&quot;tumblr_blog&quot;&gt;rnayablanca&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;small&gt;Little Miss Sunshine &lt;a href=&quot;http://mayablanca.tumblr.com/tagged/scriptgifs&quot;&gt;Script + Gifs&lt;/a&gt;: Dwayne’s Colorblindness&lt;/small&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Postmodern geekdom as simulated ethnicity</title>
		<link href="https://blog.izs.me/2014/09/postmodern-geekdom-as-simulated-ethnicity/"/>
		<updated>2014-09-14T06:30:00Z</updated>
		<id>https://blog.izs.me/2014/09/postmodern-geekdom-as-simulated-ethnicity/</id>
		<content type="html">&lt;p&gt;Wow.  Fascinating breakdown of the origin, development, and nature of the “geek” in popular culture, from R. Crumb to Frank Miller to The Dude.  &lt;a href=&quot;https://blog.izs.me/2014/09/postmodern-geekdom-as-simulated-ethnicity/index.html&quot;&gt;Go read it.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/09/postmodern-geekdom-as-simulated-ethnicity/geek-venn.jpg&quot; alt=&quot;venn diagram&quot; width=&quot;100%&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The tl;dr is that the “geek” is a “simulated ethnicity”, assumed to tell a melodramatic story of triumph over adversity that lends credibility and moral authority to an otherwise unremarkable and unsympathetic member of the privileged class, who still vies for success within a traditional misogynistic, patriarchal, homophobic paradigm.&lt;/p&gt;
&lt;p&gt;Absolutely love this bit at the end:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;What of the female geek? For the geek conceit to play out in its most misogynistic form, she must be missing. … [The female non-geek character] is elevated for her lack of geekiness because she is required to act as the reward the geek or “nice guy” feels entitled to in traditional patriarchal narratives. There is a missing character: the true geek female counterpart … who is loved for her brains and not for looks … This missing character lays bare the misogyny of geek melodrama.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Yep.  “Laid bare” is right.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2014/09/postmodern-geekdom-as-simulated-ethnicity/index.html&quot;&gt;Go read it.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/some-newtype-bullshit-every-part-of-this-is/"/>
		<updated>2014-09-14T03:05:02Z</updated>
		<id>https://blog.izs.me/2014/09/some-newtype-bullshit-every-part-of-this-is/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://some-newtype-bullshit.tumblr.com/post/97274916000/every-part-of-this-is-wrong&quot;&gt;some-newtype-bullshit&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;EVERY PART OF THIS IS WRONG&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You can pretty much milk anything with nipples&lt;br /&gt;&lt;img src=&quot;https://blog.izs.me/2014/09/some-newtype-bullshit-every-part-of-this-is/tumblr_ls6hobRDul1qdkp30o1_500.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/09/to-increase-their-capacity-for-consumption/"/>
		<updated>2014-09-14T02:57:19Z</updated>
		<id>https://blog.izs.me/2014/09/to-increase-their-capacity-for-consumption/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;To increase their capacity for consumption, consumers must never be allowed to rest. They need to be kept forever awake and on the alert, constantly exposed to new temptations and so remain in a state of never wilting excitation – and also, indeed, a state of perpetual suspicion and steady disaffection&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Zygmunt Bauman, &lt;a href=&quot;http://smile.amazon.com/Globalization-Human-Consequences-Themes-Century-ebook/dp/B00E6OVZEQ&quot;&gt;Globalization: The Human Consequences&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why I&#39;m not a &quot;gamer&quot;</title>
		<link href="https://blog.izs.me/2014/09/why-im-not-a-gamer/"/>
		<updated>2014-09-01T22:13:55Z</updated>
		<id>https://blog.izs.me/2014/09/why-im-not-a-gamer/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://pattheflip.tumblr.com/post/96390223113/why-im-not-a-gamer&quot; class=&quot;tumblr_blog&quot;&gt;pattheflip&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I decided to sit out for most of the last month or so of games internet misogyny shit, opting instead of signal boost the good people willing to jump into the fray themselves. There is one thing I wanted to write a short note about, though — the identity of “gamer” and why I haven’t used it myself&amp;hellip;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/seldo-nateswinehart-being-good-to-each-other/"/>
		<updated>2014-08-30T20:03:38Z</updated>
		<id>https://blog.izs.me/2014/08/seldo-nateswinehart-being-good-to-each-other/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/96182166715/nateswinehart-being-good-to-each-other-is-so&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://nateswinehart.tumblr.com/post/96003256367/being-good-to-each-other-is-so-important-guys&quot;&gt;nateswinehart&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Being good to each other is so important, guys.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;An important PSA.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/deansdamnation-thespyandthesoldier/"/>
		<updated>2014-08-22T02:36:53Z</updated>
		<id>https://blog.izs.me/2014/08/deansdamnation-thespyandthesoldier/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://deansdamnation.tumblr.com/post/91792604563/thespyandthesoldier-weight-a-second-me-too&quot;&gt;deansdamnation&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://thespyandthesoldier.tumblr.com/post/86316370202/weight-a-second-me-too-arya-me-tooooo-this&quot;&gt;thespyandthesoldier&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://weight-a-second.tumblr.com/post/72615183875/me-too-arya-me-tooooo&quot;&gt;weight-a-second&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;me too, Arya, me tooooo&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This whole scene is golden.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;you could hear arya going through puberty&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/kateceratops-people-are-giving-wilson-money-to/"/>
		<updated>2014-08-22T00:11:17Z</updated>
		<id>https://blog.izs.me/2014/08/kateceratops-people-are-giving-wilson-money-to/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://kateceratops.tumblr.com/post/95390791380/people-are-giving-wilson-money-to-thank-him-for&quot; class=&quot;tumblr_blog&quot;&gt;kateceratops&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;People are giving Wilson money to thank him for killing an unarmed black teenager. Please report this to GoFundMe, as it violates their Terms of Service and they get 5% of the tens of thousands of dollars being donated. &lt;a href=&quot;http://www.gofundme.com/mvc.php?route=contact/form&amp;amp;pid=500_When_should_I_report_a_campaign&quot;&gt;Click to report.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The “Support Officer Wilson” page url: &lt;a href=&quot;http://www.gofundme.com/supportofficerwilson&quot;&gt;http://www.gofundme.com/supportofficerwilson&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is my message, in case you want to copy and paste:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Your Terms of Service prohibit “items that promote… hate, racial intolerance, or the financial exploitation of a crime.” Take a look at the comments that come with the donations on this page and tell me that doesn’t violate your terms. “Support Officer Wilson” is a thin veil for people rewarding Wilson for killing a black kid.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>I don&#39;t see race</title>
		<link href="https://blog.izs.me/2014/08/i-dont-see-race/"/>
		<updated>2014-08-11T17:20:00Z</updated>
		<id>https://blog.izs.me/2014/08/i-dont-see-race/</id>
		<content type="html">&lt;p&gt;A few times recently, when discussing privilege and systemic oppression with well-meaning intellectuals, I&amp;rsquo;ve heard this phrase or some variant of it:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Race doesn&amp;rsquo;t exist.  It&amp;rsquo;s not a real thing.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an argument to be made that, from a biological point of view, there&amp;rsquo;s really no substantial difference between what we might call a &amp;ldquo;white person&amp;rdquo; and a &amp;ldquo;black person&amp;rdquo;.  Stepping outside of relatively recent Euro-American culture, these specific terms might not even be meaningful, to the extent that they ever were.&lt;/p&gt;
&lt;p&gt;However, this is a very reductionist way of looking at the situation in absence of some extremely relevant context.&lt;/p&gt;
&lt;p&gt;First of all, skin tone, body type, and other physical characteristics are frequently used as markers of inclusion in a particular cultural group, &lt;em&gt;even if the person themselves does not identify with that cultural group&lt;/em&gt;.  A dark skinned man from Pointe Noire may have basically no cultural overlap with a dark skinned man from Oakland, whereas I might have a lot of cultural overlap with him, since we live in the same city and speak the same language.  However, many members of our society would put those two in one group, and me in another.  This is relevant; ignoring its relevance isn&amp;rsquo;t rational.&lt;/p&gt;
&lt;p&gt;If your &amp;ldquo;race is fake&amp;rdquo; idea is a thought technology that helps you place a bright red &amp;ldquo;irrational&amp;rdquo; flag on any ideas that pop up that might have some racist influence, then fine.&lt;/p&gt;
&lt;p&gt;But if &amp;ldquo;race is fake&amp;rdquo; is used as a &amp;ldquo;get out of this conversation free&amp;rdquo; card to avoid even discussing the systemic oppression of American people with the physical characteristics typical of people from west Africa who were sold into slavery (to pick one example of many), then you&amp;rsquo;re just using your liberalism as a pass to be intellectually lazy about context.&lt;/p&gt;
&lt;p&gt;Human cognition is practically built on laziness.  So, if I had to bet, I&amp;rsquo;d guess that any time you say &amp;ldquo;race isn&amp;rsquo;t a real thing&amp;rdquo;, it&amp;rsquo;s just a way to be lazy.  (Of course, I&amp;rsquo;m not going to bother collecting evidence, or even actually betting, because laziness.)&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&amp;ldquo;I don&amp;rsquo;t see race&amp;rdquo; always reminds me of &lt;a href=&quot;https://www.youtube.com/watch?v=vEnpT8UiV_w&quot;&gt;the &amp;ldquo;pilot&amp;rdquo; conversation in Pulp Fiction&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;I think her biggest deal was she starred in a pilot.&lt;br /&gt;
  &amp;ldquo;Pilot&amp;rdquo;, what&amp;rsquo;s a &amp;ldquo;pilot&amp;rdquo;?&lt;br /&gt;
  Well, you know the shows on TV?&lt;br /&gt;
  I don&amp;rsquo;t watch TV.&lt;br /&gt;
  Yeah, but, you are aware that there&amp;rsquo;s an invention called television, and on this invention they show shows, right?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here&amp;rsquo;s how I&amp;rsquo;d like to start responding to inappropriate use of &amp;ldquo;race isn&amp;rsquo;t real&amp;rdquo;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;discussing a code of conduct which lists &amp;ldquo;race&amp;rdquo; and &amp;ldquo;ethnicity&amp;rdquo; as attributes explicitly protected from harassment&lt;/em&gt;&lt;br /&gt;&lt;a href=&quot;http://mail-archives.apache.org/mod_mbox/couchdb-dev/201408.mbox/%3CCAP-cCyQEGqTh1SVCKtKB9%2B8okpM4whm6gdk%3DOOuUZ7mptX_YYA%40mail.gmail.com%3E&quot;&gt;As for diversity, I don&amp;rsquo;t recognize the notion of race (which doesn&amp;rsquo;t exist)&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yeah, but, you are aware that there is a social invention called &amp;ldquo;race&amp;rdquo;, and that this invention is frequently a basis for harassment and discrimination, right?&lt;/p&gt;
&lt;p&gt;And yes, of course, it would be a &lt;em&gt;much better&lt;/em&gt; society if everyone also didn&amp;rsquo;t recognize the notion of race (which doesn&amp;rsquo;t exist).  But by not recognizing the effect that &amp;ldquo;race&amp;rdquo; has in systemic oppression, you are not recognizing the notion of broken social systems (which certainly &lt;em&gt;do&lt;/em&gt; exist).&lt;/p&gt;
&lt;p&gt;Be the change you want to see in the world.  But also be aware that that&amp;rsquo;s almost certainly not enough, and ignoring systemic oppression is a privilege not granted to those who are being oppressed.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Note: &lt;code&gt;s/race/gender/g&lt;/code&gt; in this post, and it&amp;rsquo;s basically the same.  Except I&amp;rsquo;d argue that gender exists, but not in the rigid binary that our culture insists.  Ie, &amp;ldquo;gender&amp;rdquo; is a real thing; our cultural paradigm of &amp;ldquo;woman&amp;rdquo; or &amp;ldquo;man&amp;rdquo; probably isn&amp;rsquo;t.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;And yes, if you grew up on this planet, you &lt;strong&gt;do&lt;/strong&gt; see race.  What you don&amp;rsquo;t see is yourself seeing it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/51DuEg/"/>
		<updated>2014-08-07T16:32:51Z</updated>
		<id>https://blog.izs.me/2014/08/51DuEg/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Unikitty</title>
		<link href="https://blog.izs.me/2014/08/unikitty/"/>
		<updated>2014-08-07T02:30:53Z</updated>
		<id>https://blog.izs.me/2014/08/unikitty/</id>
		<content type="html">&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/08/unikitty/tumblr_inline_n9x04sbu8i1qzgxun.gif&quot; alt=&quot;business business business&quot; /&gt;&lt;img src=&quot;https://blog.izs.me/2014/08/unikitty/tumblr_inline_n9x05iovpt1qzgxun.gif&quot; alt=&quot;numbers numbers&quot; /&gt;&lt;img src=&quot;https://blog.izs.me/2014/08/unikitty/tumblr_inline_n9x0779an21qzgxun.gif&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;https://blog.izs.me/2014/08/unikitty/tumblr_inline_n9x088LFfN1qzgxun.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Every new startup CEO can relate, I&amp;rsquo;m sure.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/redunderwear-turbomun-there-was-a-glitch-on/"/>
		<updated>2014-08-05T01:54:43Z</updated>
		<id>https://blog.izs.me/2014/08/redunderwear-turbomun-there-was-a-glitch-on/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://redunderwear.tumblr.com/post/80176948778&quot;&gt;redunderwear&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://turbomun.tumblr.com/post/79924021480/there-was-a-glitch-on-my-phone-when-i-scrolled&quot;&gt;turbomun&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;THERE WAS A GLITCH ON MY PHONE WHEN I SCROLLED DOWN THIS POST AND IM SHITTING&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;rob liefeld’s final form&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/politicallyincorrectwalrus-i-love-the-term/"/>
		<updated>2014-08-04T06:20:16Z</updated>
		<id>https://blog.izs.me/2014/08/politicallyincorrectwalrus-i-love-the-term/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://politicallyincorrectwalrus.tumblr.com/post/90627871675/i-love-the-term-partners-are-we-dating-are-we&quot;&gt;politicallyincorrectwalrus&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;i love the term “partners”&lt;br /&gt; are we dating?&lt;br /&gt; are we robbing a bank?&lt;br /&gt; do we run a legal firm?&lt;br /&gt; are we the dedicated detectives who investigate these vicious felonies and are members of an elite squad known as the special victims unit?&lt;br /&gt; who knows.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/kaibii-toronjas-i-just-saw-this-on-facebook/"/>
		<updated>2014-08-04T06:14:46Z</updated>
		<id>https://blog.izs.me/2014/08/kaibii-toronjas-i-just-saw-this-on-facebook/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://kaibii.tumblr.com/post/93521115857/toronjas-i-just-saw-this-on-facebook-o-m-g&quot;&gt;kaibii&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://toronjas.tumblr.com/post/93482328680/i-just-saw-this-on-facebook-o-m-g&quot;&gt;toronjas&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I JUST SAW THIS ON FACEBOOK&lt;br /&gt; O M G&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;jesus wants in on a threesome&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/08/huffposttv-by-m7781-via-deviantart/"/>
		<updated>2014-08-02T18:37:56Z</updated>
		<id>https://blog.izs.me/2014/08/huffposttv-by-m7781-via-deviantart/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://huffposttv.tumblr.com/post/93522585046/by-m7781-via-deviantart&quot; class=&quot;tumblr_blog&quot;&gt;huffposttv&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;By &lt;a href=&quot;http://m7781.deviantart.com/art/professor-x-hodor-468510578&quot;&gt;M7781 via DeviantArt &lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/07/a-little-bi-furious-bisexual-community/"/>
		<updated>2014-07-31T15:46:44Z</updated>
		<id>https://blog.izs.me/2014/07/a-little-bi-furious-bisexual-community/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://a-little-bi-furious.tumblr.com/post/93387615961/bisexual-community-ihaventfinishedyet&quot; class=&quot;tumblr_blog&quot;&gt;a-little-bi-furious&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://bisexual-community.tumblr.com/post/92208469327/ihaventfinishedyet-note-the-real-piper-of&quot;&gt;bisexual-community&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://ihaventfinishedyet.tumblr.com/post/91463521312&quot;&gt;ihaventfinishedyet&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://blog.izs.me/2014/07/a-little-bi-furious-bisexual-community/tumblr_inline_n8k2xzi6Tv1qahhba.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt; Note: &lt;a href=&quot;http://www.lstylegstyle.com/stories/feature/the-real-piper-of-orange-is-the-new-black/&quot; title=&quot;The REAL Piper of Orange is the New Black&quot;&gt;The REAL Piper of Orange is the New Black&lt;/a&gt; has clearly stated, &lt;em&gt;&amp;ldquo;Well, you know, I’m &lt;a href=&quot;http://bialogue-group.tumblr.com/post/41072060103/what-is-bisexuality&quot;&gt;bisexual&lt;/a&gt; so, I’m a part of the gay community.”&lt;/em&gt; Additionally she has pointed out that she came out at &lt;em&gt;&amp;quot;either 18 or 19&amp;rdquo;&lt;/em&gt;, and &lt;em&gt;&amp;ldquo;had relationships with many, many women before I met Nora and after I met Nora.&amp;rdquo;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So viewers should be aware that it was a &lt;em&gt;&amp;ldquo;creative decision&amp;rdquo;&lt;/em&gt; of the shows writers, producers + NetFlix to &lt;a href=&quot;http://en.wikipedia.org/wiki/Bisexual_erasure&quot; title=&quot;Bisexual Erasure&quot;&gt;minimize and erase&lt;/a&gt; the character’s actual + stated bisexuality by never using the &lt;em&gt;&amp;ldquo;B-Word&amp;rdquo;&lt;/em&gt;, turning her instead into a &lt;a href=&quot;http://tvtropes.org/pmwiki/pmwiki.php/Main/BisexualityTropes&quot; title=&quot;Bisexual Tropes&quot;&gt;tired bisexual trope&lt;/a&gt;. This should not be viewed as at all realistic.&lt;/small&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;IRL &lt;a href=&quot;http://en.wikipedia.org/wiki/Piper_Kerman&quot; title=&quot;Piper Kerman&quot;&gt;Piper Kerman&lt;/a&gt; is a strong, interesting, out bisexual women in a different gender marriage, who participates in her LGBT Community and works hard for Prison Reform.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Holy crap I was reading reviews of her book and everybody was saying she described herself as an “ex-lesbian” too and I didn’t know until now that she actually said &lt;a href=&quot;http://www.lstylegstyle.com/stories/feature/the-real-piper-of-orange-is-the-new-black/&quot;&gt;&amp;ldquo;well, you know, I’m bisexual so, I’m a part of the gay community&amp;rdquo;&lt;/a&gt;, oh my fucking god!&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/07/ripelypine-my-favourite-part-of-shakespeare/"/>
		<updated>2014-07-31T15:41:39Z</updated>
		<id>https://blog.izs.me/2014/07/ripelypine-my-favourite-part-of-shakespeare/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://ripelypine.tumblr.com/post/75847972464/my-favourite-part-of-shakespeare-plays-is-the&quot;&gt;ripelypine&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;my favourite part of shakespeare plays is the person at the end that is like “see how these people fucked everything up. don’t do this. look at this fuckery. look at it. fuck this. fuck everything.”&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>#</title>
		<link href="https://blog.izs.me/2014/07/tqY7gg/"/>
		<updated>2014-07-30T00:34:16Z</updated>
		<id>https://blog.izs.me/2014/07/tqY7gg/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://ministryofgifs.org/post/92859858147&quot; class=&quot;tumblr_blog&quot;&gt;ministryofgifs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2014/07/tqY7gg/b2Du7lU.gif&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2014/07/tqY7gg/b2Du7lU.gif&quot; class=&quot;inline-tweet-media&quot; alt=&quot;image&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blog.izs.me/2014/07/tqY7gg/b2Du7lU.gif&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/07/magnoliapearl-konistehdump-70sscifiart/"/>
		<updated>2014-07-24T22:00:29Z</updated>
		<id>https://blog.izs.me/2014/07/magnoliapearl-konistehdump-70sscifiart/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://magnoliapearl.tumblr.com/post/92676612324/konistehdump-70sscifiart-almost-there-i&quot;&gt;magnoliapearl&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://konistehdump.tumblr.com/post/91300054003/70sscifiart-almost-there-i-wish&quot;&gt;konistehdump&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://70sscifiart.tumblr.com/post/91274379207/almost-there&quot;&gt;70sscifiart&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Almost there&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wish&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;kind of true though&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Supreme Being</title>
		<link href="https://blog.izs.me/2014/07/supreme-being/"/>
		<updated>2014-07-18T00:46:55Z</updated>
		<id>https://blog.izs.me/2014/07/supreme-being/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&amp;quot;Enterprise Replicator&amp;quot; should be the name of a service so we can make &#39;tea, earl grey, hot&#39; jokes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oh, also, we should use promises for it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ceej&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Really?  I&#39;m surprised to hear you say that.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah… and I know you all like bluebird, but we should use Q for this.  More powerful.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;bencoe&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I see what you did there.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Delusional Pets</title>
		<link href="https://blog.izs.me/2014/07/delusional-pets/"/>
		<updated>2014-07-17T21:24:00Z</updated>
		<id>https://blog.izs.me/2014/07/delusional-pets/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rockbot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I know you said no dogs, but can we pleeeeeeeease have a platypus-friendly office!?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I don&#39;t know.  Our office is pretty dry.  They need water.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rockbot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;That&#39;s why we&#39;d get a tank!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Isn&#39;t it also like, super cold here for them?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rockbot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;They&#39;re nocturnal!  So it&#39;d just come out at night.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Why not just &lt;em&gt;imagine&lt;/em&gt; a platypus being here when you&#39;re home at night?  This isn&#39;t a pet-friendly office, but it&#39;s &lt;em&gt;definitely&lt;/em&gt; a delusion-friendly office.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rockbot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Really?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah, have you &lt;em&gt;seen&lt;/em&gt; the spreadsheets and graphs we show investors?  This is a startup, it&#39;s practically nothing &lt;em&gt;but&lt;/em&gt; delusions!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>On privilege and power</title>
		<link href="https://blog.izs.me/2014/06/on-privilege-and-power/"/>
		<updated>2014-06-24T17:13:26Z</updated>
		<id>https://blog.izs.me/2014/06/on-privilege-and-power/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/89771181045/on-privilege-and-power&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;There is a thing about privilege and power that I don’t think we say often enough, whether the conversation is about gay marriage, or women in tech, or any of the dozens of other places the battle for equality is being fought.&lt;/p&gt;
&lt;p&gt;The objection of the privileged when people demand equality is basically “but this will make me less powerful!” It’s often expressed as “this is trampling my rights!” or “reverse discrimination!” or other phrases that sound like they might be reasonable but aren’t. Campaigners for equality often respond along the lines of “giving us equal rights doesn’t take yours away. Giving us power doesn’t diminish yours.”&lt;/p&gt;
&lt;p&gt;But honestly, that’s not true. Power is a relative measure. If I get more, you have less. If your rights include excluding me from places, then including me takes that right away. We gain nothing by denying this.&lt;/p&gt;
&lt;p&gt;So here’s the thing we should say more clearly: &lt;strong&gt;yes, this will make you less powerful. Yes, we are taking some of your rights away. That’s okay. You are too powerful, and you have more rights than you deserve.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;And then at least we can stop having this circular argument.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>For #RoeAt40, all of my favorite pro-choice resources</title>
		<link href="https://blog.izs.me/2014/06/for-roeat40-all-of-my-favorite-pro-choice/"/>
		<updated>2014-06-20T03:12:24Z</updated>
		<id>https://blog.izs.me/2014/06/for-roeat40-all-of-my-favorite-pro-choice/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://stfuconservatives.tumblr.com/post/41219876133&quot;&gt;stfuconservatives&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As my long-time readers know, abortion is an issue I’m very passionate about. So passionate that I have a bookmarks folder simply labeled “Abortion” that has about 75 links in it. For your edification, some of my favorite response to pro-life ignorance:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;“Banning&amp;hellip;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/06/chryswatchesgot-chrys-watches-got-x/"/>
		<updated>2014-06-20T03:05:54Z</updated>
		<id>https://blog.izs.me/2014/06/chryswatchesgot-chrys-watches-got-x/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://chryswatchesgot.tumblr.com/post/89310769191/chrys-watches-got-x&quot; class=&quot;tumblr_blog&quot;&gt;chryswatchesgot&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Chrys Watches GoT [&lt;a href=&quot;http://chryswatchesgot.tumblr.com/&quot;&gt;x&lt;/a&gt;]&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/06/OVmQ/"/>
		<updated>2014-06-20T02:42:44Z</updated>
		<id>https://blog.izs.me/2014/06/OVmQ/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>LG_T</title>
		<link href="https://blog.izs.me/2014/06/lgt/"/>
		<updated>2014-06-11T17:28:00Z</updated>
		<id>https://blog.izs.me/2014/06/lgt/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bisexual_erasure&quot;&gt;Erasure&lt;/a&gt; is a complicated subject.&lt;/p&gt;
&lt;p&gt;I was born onto a bed of privilege.  I&amp;rsquo;m of white European descent, and my immigrant ancestors came over the ocean long enough ago that my parents could speak the exact same dialect as the teachers at my well-funded suburban public school.  They both had graduate degrees, and our home was full of books.  I was encouraged towards intellectual pursuits.&lt;/p&gt;
&lt;p&gt;My dad ran his own company when I was growing up.  We weren&amp;rsquo;t super rich, but we never went hungry.  By virtue of that business, I played with computers from an early age, and learned the basics of strategy and sales as far back as I can remember.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t abused or disabled.  In fact, for an extremely nerdy kid, I didn&amp;rsquo;t even get picked on all that much.&lt;/p&gt;
&lt;p&gt;On top of that, I&amp;rsquo;m &lt;a href=&quot;http://en.wikipedia.org/wiki/Cisgender&quot;&gt;cismale&lt;/a&gt; and straight.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;I knew that I was a straight boy, because I liked girls.  A lot.  Boy, oh, boy, girls were great.&lt;/p&gt;
&lt;p&gt;My TV education on human sexuality was clear.  There are 5 sharply defined categories.  Lesbians, straight girls, girls who liked to fool around with other girls sometimes but are actually straight (aka &amp;ldquo;bi&amp;rdquo; or &amp;ldquo;AWESOME&amp;rdquo;), gay men, and straight men.  Straight men go with women, and gay men don&amp;rsquo;t.  So obviously, I was straight.&lt;/p&gt;
&lt;p&gt;And just as obvious as my straightness, I knew that some of our culture&amp;rsquo;s beliefs about straight people were off base.  Straight men are also attracted to men.  As a straight guy, any argument to the contrary was obviously wrong, because I knew from my own experience.  I&amp;rsquo;d had full-on crushes on male friends of mine, which was clearly a normal thing for normal straight people to do, as evidenced by me, a normal straight person doing it.&lt;/p&gt;
&lt;p&gt;They said in vicious teasing that boys who liked boys were gay, but I knew that I wasn&amp;rsquo;t gay, because gay boys don&amp;rsquo;t like girls.  Therefore straight boys also like boys sometimes, and the people doing the teasing are just misguided or something.  But I feared the teasing, so I didn&amp;rsquo;t point out their error.&lt;/p&gt;
&lt;p&gt;I always felt like it would be an easy thing to &amp;ldquo;switch teams&amp;rdquo;, and be gay if I wanted to.  The fascination with the &amp;ldquo;born this way&amp;rdquo; meme in queer activism never made sense to me.  Of &lt;em&gt;course&lt;/em&gt; we have a choice in the gender we pursue, doesn&amp;rsquo;t everyone?  Isn&amp;rsquo;t choice great?&lt;/p&gt;
&lt;p&gt;I never did switch, because I didn&amp;rsquo;t want to be gay.  That would mean I&amp;rsquo;d have to give up dating women, which I enjoyed.&lt;/p&gt;
&lt;p&gt;Heterosexuality carries the privilege of not having to explain why I&amp;rsquo;m inviting someone out on a date.  You&amp;rsquo;re a woman, I&amp;rsquo;m a man, we just follow the script that society has handed us.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easy to remain only partly visible.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;It took an embarrassingly long time to stop erasing, and become ok with calling myself &amp;ldquo;bisexual&amp;rdquo;, even in my own mind.&lt;/p&gt;
&lt;p&gt;The realization didn&amp;rsquo;t come in High School when my crush on another boy had me following him around like a weird giddy puppy.  Or in college, when I first kissed a boy. Or the second or third time that boy and I made out.&lt;/p&gt;
&lt;p&gt;The scales started to lift from my eyes when I had a conversation with a good friend about the movie &amp;ldquo;Troy&amp;rdquo;, well into my 20&amp;rsquo;s.&lt;/p&gt;
&lt;p&gt;He said, &amp;ldquo;That movie was kind of boring.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I was shocked, and then I realized he was talking about the plot.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Well&amp;hellip; I didn&amp;rsquo;t really pay attention to the plot, tbh.  That movie&amp;rsquo;s just lots of Brad Pitt being gorgeous and half-naked.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;You&amp;rsquo;re not as straight as you think you are.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Yeah, like you&amp;rsquo;re not attracted to guys sometimes.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Nope.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Not ever?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Not ever.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Not even Brad Pitt?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Not even a little.  You&amp;rsquo;re bi, dude.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Huh.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I figured he was fucking with me.  But a lot of things did start to make sense.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;My life since then has been significantly more interesting.&lt;/p&gt;
&lt;p&gt;I tried on the label like a new pair of shoes, awkward, and uncertain.&lt;/p&gt;
&lt;p&gt;Like a good nerd, I dove into the research, but found it surprisingly lacking.  &lt;a href=&quot;http://www.amazon.com/Bi-Men-Coming-Every-Which/dp/1560236159/&quot;&gt;Bi Men Coming Out Every Which Way&lt;/a&gt; was a great read.  I learned about how pervasive the erasure of male bisexuality is, even among academic studies of LGBT culture.  It&amp;rsquo;s as if the B isn&amp;rsquo;t there.  A man who has sex with men is gay.  If he then has sex with a woman, he&amp;rsquo;s &amp;ldquo;closeted&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;But how can it be a closet if you go into it and out of it repeatedly, with lovers and families on both sides?  That&amp;rsquo;s not a closet, it&amp;rsquo;s a room with a revolving door.&lt;/p&gt;
&lt;p&gt;The idea that bisexuality might exist is news &lt;a href=&quot;http://www.nytimes.com/2014/03/23/magazine/the-scientific-quest-to-prove-bisexuality-exists.html?_r=0&quot;&gt;worthy of the New York Times&lt;/a&gt;, even.&lt;/p&gt;
&lt;p&gt;Privilege is hard to give up.  I can&amp;rsquo;t overstate how &lt;em&gt;easy&lt;/em&gt; it is being straight in public, just letting people think whatever they want.  But in the years since I&amp;rsquo;ve come out to myself, this bugs me more and more.&lt;/p&gt;
&lt;p&gt;When meeting a new person, I try to say &amp;ldquo;partner&amp;rdquo; rather than &amp;ldquo;girlfriend&amp;rdquo;, and sometimes even &amp;ldquo;they&amp;rdquo; rather than &amp;ldquo;she&amp;rdquo;.  The shape of my lover&amp;rsquo;s body is no business of theirs, after all.&lt;/p&gt;
&lt;p&gt;But when I slip, and drop her name, or use female pronouns (which, to be fair, she &lt;em&gt;does&lt;/em&gt; use, female as she is), I can&amp;rsquo;t help but wonder if they&amp;rsquo;re relieved to find out that I&amp;rsquo;m not gay, or perhaps just relieved to know which mold I fit into.&lt;/p&gt;
&lt;p&gt;I find myself resenting being cast in a mold at all.  Even if I say &amp;ldquo;partner&amp;rdquo;,
and they assume I&amp;rsquo;m gay, part of me feels so put upon by that idea.  And then here I am making assumptions about what assumptions someone else might be making.  It&amp;rsquo;s a vicious cycle, and there is no escape from the hypocrisy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve tried since then not to make assumptions about others&amp;rsquo; sexual preferences.  Yet despite my best intentions, I consistently find myself mentally putting people in the &amp;ldquo;straight&amp;rdquo; or &amp;ldquo;gay&amp;rdquo; buckets once I find out the gender of their significant other.&lt;/p&gt;
&lt;p&gt;The habit of bi erasure is silent and pervasive.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;The first time I kissed a boy was almost a dare.  In a dorm room, sitting around drinking, as you do.  The two girls, roommates, said to the 5 of us boys that they&amp;rsquo;d both wondered what it would be like to kiss a girl.  But, they said, they&amp;rsquo;re not lesbians, so they wanted to do it in front of people, so that it wouldn&amp;rsquo;t get too serious, or go too far.&lt;/p&gt;
&lt;p&gt;You can imagine the reaction.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;YES, LADIES, YOU HAVE OUR ATTENTION, PLEASE PROCEED&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Afterwards, one of them remarked, &amp;ldquo;See, that&amp;rsquo;s why women are better.  Guys would never be secure enough to do something like that.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;He and I both replied, &amp;ldquo;Bullshit,&amp;rdquo; and before I knew it, sparks were flying.  The other 3 boys in the room were shocked, making the socially required homophobic anguish sounds.  I barely remember them being there.  I&amp;rsquo;d been looking all day for an excuse to touch him.  It ended too fast, but endures in my mind to this day.&lt;/p&gt;
&lt;p&gt;What a shock it was when I learned, 14 years later, that he has a boyfriend now!  I don&amp;rsquo;t know why it should&amp;rsquo;ve been a surprise.  Back then, making out just seemed like a thing straight friends did with each other once in a while.&lt;/p&gt;
&lt;p&gt;Again and again, I catch myself being surprised like that.  I try to remember that, in fact, a significant portion of men are bisexual, perhaps even a majority, depending on how we decide to define things.  I try to yank my thinking out of the mold, but it frequently slips back.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t notice erasure until you stop doing it.&lt;br /&gt;
And then you don&amp;rsquo;t notice when you start again.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;I&amp;rsquo;ve been told by people in the LGBT community that &amp;ldquo;bisexual isn&amp;rsquo;t a real thing&amp;rdquo;, that I&amp;rsquo;m &amp;ldquo;actually straight&amp;rdquo; because I&amp;rsquo;m with a woman, or even, &amp;ldquo;men aren&amp;rsquo;t bisexual, just closeted.&amp;rdquo;  Bi-curious is code for &amp;ldquo;about to leave the closet&amp;rdquo;.  &amp;ldquo;Bi now, gay later.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I have taken to referring to gay and straight people as &amp;ldquo;monosexuals&amp;rdquo;.  I respond by explaining that they&amp;rsquo;re just going through a phase.  Once they meet the right &lt;em&gt;person not of their stated preferred gender&lt;/em&gt;, they&amp;rsquo;ll grow out of it and realize that they&amp;rsquo;re &lt;em&gt;actually&lt;/em&gt; bi.&lt;/p&gt;
&lt;p&gt;But I know, that old &amp;ldquo;everyone&amp;rsquo;s bi&amp;rdquo; story is just another way to push us into the background. If we&amp;rsquo;re not nonexistent, we&amp;rsquo;re unremarkable. Either way, nothing to see here. Move along. &lt;/p&gt;
&lt;p&gt;Or worse, if we are visible, we&amp;rsquo;re sex objects. Dating gay men confirmed every awful thing I&amp;rsquo;ve heard (and, let&amp;rsquo;s be honest, perpetuated) about how straight men treat bi women.  Qv the &amp;ldquo;bi for male pleasure&amp;rdquo; meme implicit in my first gay kiss experience.  They&amp;rsquo;re happy to fuck the &lt;abbr title=&quot;straight-acting gay&quot;&gt;SAG&lt;/abbr&gt;, but anything more than sex is off the table.  We can&amp;rsquo;t be trusted, after all.  We&amp;rsquo;re tourists.  Unicorns.  We don&amp;rsquo;t exist.&lt;/p&gt;
&lt;p&gt;&lt;abbr title=&quot;lesbian gay something trans&quot;&gt;LG_T&lt;/abbr&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Maybe the strangest part about growing up a closeted bisexual is that I&amp;rsquo;ve been practicing dating girls since puberty.  I&amp;rsquo;m &lt;em&gt;very&lt;/em&gt; good at it.  Confident.  Respectful.  Sensitive.  Witty.  Hungry and giving.  It&amp;rsquo;s not talent or PUA bullshit, and there isn&amp;rsquo;t any one weird trick.  It&amp;rsquo;s the result of many years of conscientious practice, with loving patient teachers who were learning from me as well; the occasional broken heart that didn&amp;rsquo;t kill me, even when I felt like it was trying to.&lt;/p&gt;
&lt;p&gt;But my experience with men is still so elementary.  Men and women are different!  Turns. Out.  I am 13 all over again, confused and stumbling, sending the wrong signals, and reading every situation backwards.  And they are grown men with adult expectations who very reasonably want a peer, not an apprentice.  So that&amp;rsquo;s been tricky.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t have it nearly so rough as the newly-out &amp;ldquo;baby gays&amp;rdquo;, celibate well into adulthood. At least I&amp;rsquo;ve had &lt;em&gt;some&lt;/em&gt; relationships, enough to learn that the emotional bruises heal. My heart goes out to them.&lt;/p&gt;
&lt;p&gt;At first, I was very careful about who I told. I didn&amp;rsquo;t want to draw scandal or trolling to my online communities.  I didn&amp;rsquo;t want the drama.  I still fear the schoolyard teasing.&lt;/p&gt;
&lt;p&gt;Mostly, I didn&amp;rsquo;t want anyone else telling me how to feel about something I was only beginning to accept myself.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Eventually, I&amp;rsquo;ve come to see my queerness less as a &amp;ldquo;thing&amp;rdquo; to be disclosed, and more as just another part of my private life.  Something that friends probably know, and strangers probably don&amp;rsquo;t, no more scandalous or secret than my address or my allergy to shellfish.&lt;/p&gt;
&lt;p&gt;I envy kids growing up today, as the sharp lines between straight and gay finally begin to blur in the cultural consciousness. Straight boys in love today might explore that feeling, without suffering an identity crisis.  I wish those lines would blur faster.  I wish it was a big deal because love is awesome, instead of being a big deal because of the genders and stated identities of the actors.&lt;/p&gt;
&lt;p&gt;My home is technology.  This is My Culture, rotten though it can be at times.  As a privileged and visible person in it, I feel obligated to try to make it a little better in the ways I can.  That&amp;rsquo;s why I&amp;rsquo;ve decided to publicly tell this story, so that my presence can add weight to the claim that bisexual men exist.&lt;/p&gt;
&lt;p&gt;Maybe this can also be a reminder of the multitude of other things we casually erase from the people around us.  There are so many ways we make our friends invisible, unwittingly nudging them into a corner that denies important parts of their identities, by perpetuating memes we don&amp;rsquo;t even notice.&lt;/p&gt;
&lt;p&gt;Erasure isn&amp;rsquo;t healthy.  And we are all unaware that we do it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/06/teamfreesnuggles-sansa-has-been-waiting-for/"/>
		<updated>2014-06-11T06:52:21Z</updated>
		<id>https://blog.izs.me/2014/06/teamfreesnuggles-sansa-has-been-waiting-for/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://teamfreesnuggles.tumblr.com/post/87554437167/sansa-has-been-waiting-for-this-day-for-four-god&quot; class=&quot;tumblr_blog&quot;&gt;teamfreesnuggles&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;sansa has been waiting for this day for &lt;em&gt;four god damn seasons&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Grunt, Gulp, Broccoli</title>
		<link href="https://blog.izs.me/2014/06/grunt-gulp-broccoli/"/>
		<updated>2014-06-08T16:41:05Z</updated>
		<id>https://blog.izs.me/2014/06/grunt-gulp-broccoli/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/82300463325/grunt-gulp-broccoli&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/06/grunt-gulp-broccoli/tumblr_inline_n0hs1roiKF1s3cs22.gif&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;ldquo;Make: it work.&amp;rdquo; &amp;lt;rimshot&amp;gt;&lt;/p&gt;
&lt;p&gt;(I kid, I kid.  Those libs are cool and useful for a lot of things.)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/06/markruffalo-effervescent-cloudwalker/"/>
		<updated>2014-06-07T04:53:59Z</updated>
		<id>https://blog.izs.me/2014/06/markruffalo-effervescent-cloudwalker/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://markruffalo.tumblr.com/post/87970086810/effervescent-cloudwalker-hashtagpropaganja&quot; class=&quot;tumblr_blog&quot;&gt;markruffalo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://effervescent-cloudwalker.tumblr.com/post/78076503839/hashtagpropaganja-thekhoolhaus-perspective&quot; class=&quot;tumblr_blog&quot;&gt;effervescent-cloudwalker&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://hashtagpropaganja.tumblr.com/post/77898037563/thekhoolhaus-perspective-love-this&quot; class=&quot;tumblr_blog&quot;&gt;hashtagpropaganja&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://thekhoolhaus.tumblr.com/post/77442127004/perspective&quot; class=&quot;tumblr_blog&quot;&gt;thekhoolhaus&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Perspective&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Love this&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So weird&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;awesome!&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Re: Maven is like my girlfriend</title>
		<link href="https://blog.izs.me/2014/06/re-maven-is-like-my-girlfriend/"/>
		<updated>2014-06-05T16:16:00Z</updated>
		<id>https://blog.izs.me/2014/06/re-maven-is-like-my-girlfriend/</id>
		<content type="html">&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/06/re-maven-is-like-my-girlfriend/tumblr_inline_n6pd6oUQGg1qzgxun.jpg&quot; alt=&quot;Maven is like my girlfriend; Looks beautiful; Complains a lot; Demands my attention; Interrupts me while I&#39;m working; Doesn&#39;t play well with my other friends&quot; /&gt;&lt;/p&gt;
&lt;p&gt;First of all: wow, misogyny.  As Rick Scott &lt;a href=&quot;https://twitter.com/shadowspar/status/474542211288137728&quot;&gt;put it&lt;/a&gt;, this slide amounts to &amp;ldquo;Bitches. Amirite?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;https://twitter.com/peterc/status/474500361470742528&quot;&gt;few people&lt;/a&gt; have rushed to Doklovic&amp;rsquo;s defense, claiming, &amp;ldquo;Nono, you misunderstand; he wasn&amp;rsquo;t talking about girlfriends &lt;em&gt;as such&lt;/em&gt;.  Of course &lt;em&gt;that&lt;/em&gt; would be inappropriate!  No, he was complaining about &lt;em&gt;his specific&lt;/em&gt; girlfriend.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I spent too many years with a partner who used public humiliation, guilt, and intimidation to get their way.  They complained in public, in my presence, to our mutual friends that I didn&amp;rsquo;t make enough money, while spending it all buying those friends drinks.  This partner told people that dating a nerd is worth all the downsides because they don&amp;rsquo;t have to have a job, and you never know, I might one day create the next Facebook and become a millionaire.  Then in private, when I told them those things really hurt, they&amp;rsquo;d tell me that it was just a joke, and I shouldn&amp;rsquo;t take things so seriously.  That my sensitivity is the reason why they have anxiety problems and can&amp;rsquo;t regulate their emotions without drugs and alcohol.&lt;/p&gt;
&lt;p&gt;My self-esteem hit rock bottom.  I was empty for years.  My family didn&amp;rsquo;t recognize me.  I lost most of my friends, and a valuable chunk of my twenties.&lt;/p&gt;
&lt;p&gt;Thankfully, I bounced back.&lt;/p&gt;
&lt;p&gt;All totaled, the divorce ended up costing over $80,000, and I consider it the best money I&amp;rsquo;ve ever spent.  Thank the universe there weren&amp;rsquo;t any kids or mortgages involved.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sharing this for sympathy.  I&amp;rsquo;ve lived very well since my divorce, and I&amp;rsquo;m lucky in more ways that anyone has a right to.  I had the real power the whole time, and just had to recognize it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sharing this so that you understand why, when someone shares a slide like this, proudly making a joke at the expense of their significant other, I am struck by blinding rage.  If this was about me, I would have dumped him via a public tweet.  If I&amp;rsquo;d been in the audience, there&amp;rsquo;s a good chance I would have ended up being kicked out of the event.&lt;/p&gt;
&lt;p&gt;Saying &amp;ldquo;Nono, this was about &lt;em&gt;his specific&lt;/em&gt; girlfriend, what&amp;rsquo;s the big deal?&amp;rdquo; is really no defense.  If his girlfriend is a real person, she has real feelings, and I sincerely hope that she has the strength to recognize the problems with this behavior and get out as soon as possible.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How to install node.js and npm on ubuntu 14.04</title>
		<link href="https://blog.izs.me/2014/06/how-to-install-nodejs-and-npm-on-ubuntu-1404/"/>
		<updated>2014-06-01T20:32:48Z</updated>
		<id>https://blog.izs.me/2014/06/how-to-install-nodejs-and-npm-on-ubuntu-1404/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/87521719450/how-to-install-node-js-and-npm-on-ubuntu-14-04&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The top result for “how to install node on ubuntu 14.04” is currently &lt;a href=&quot;https://www.digitalocean.com/community/articles/how-to-install-node-js-on-an-ubuntu-14-04-server&quot;&gt;this DigitalOcean article&lt;/a&gt;. Unfortunately, their first suggestion, installing via apt-get, will install an old version of node and a very old version of npm that cannot properly update itself (because of path differences). Their second suggestion is much better. Simply:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:chris-lea/node.js&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install nodejs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is &lt;strong&gt;all you need to do&lt;/strong&gt;. npm is bundled with node.js and will be installed automatically if you install this way. If you want to make sure you’ve got the very most recent release of npm, you can do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo npm install npm -g&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This step is optional. At the moment Chris Lea’s PPA will give you npm 1.4.9, which is recent enough to have no showstopper problems (the version that comes with apt, 1.3.10, is not terrible but has some known bugs).&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/ablogforants-bird-best-loading-gif-ever/"/>
		<updated>2014-05-28T07:39:15Z</updated>
		<id>https://blog.izs.me/2014/05/ablogforants-bird-best-loading-gif-ever/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://ablogforants.tumblr.com/post/86169721503/birt&quot;&gt;ablogforants&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;bird&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Best loading gif ever.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/bj%C3%B6rks-mystery-misandry/"/>
		<updated>2014-05-18T01:49:59Z</updated>
		<id>https://blog.izs.me/2014/05/bj%C3%B6rks-mystery-misandry/</id>
		<content type="html">&lt;p&gt;Björk&amp;rsquo;s mystery misandry. ❤️&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/boomerstarkiller67-star-trek-concept-art/"/>
		<updated>2014-05-18T01:42:49Z</updated>
		<id>https://blog.izs.me/2014/05/boomerstarkiller67-star-trek-concept-art/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://boomerstarkiller67.tumblr.com/post/83662000683/star-trek-concept-art-enterprise-interior-sets&quot;&gt;boomerstarkiller67&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Star Trek concept art, Enterprise interior sets - Mike Minor (1977)&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/fuckyeahsoulcaliburcreations-mega-man/"/>
		<updated>2014-05-15T22:02:55Z</updated>
		<id>https://blog.izs.me/2014/05/fuckyeahsoulcaliburcreations-mega-man/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://fuckyeahsoulcaliburcreations.tumblr.com/post/85853374764/mega-man&quot; class=&quot;tumblr_blog&quot;&gt;fuckyeahsoulcaliburcreations&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Mega Man&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/mynameisnatalee-tastefullyoffensive-the-new/"/>
		<updated>2014-05-14T14:17:31Z</updated>
		<id>https://blog.izs.me/2014/05/mynameisnatalee-tastefullyoffensive-the-new/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://mynameisnatalee.tumblr.com/post/85670903257/tastefullyoffensive-the-new-batman-logo&quot;&gt;mynameisnatalee&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://tumblr.tastefullyoffensive.com/post/85664842393/the-new-batman-logo-zacksnyder-drbrevin&quot;&gt;tastefullyoffensive&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The New Batman Logo [&lt;a href=&quot;https://twitter.com/ZackSnyder/status/466249462348644352&quot;&gt;@zacksnyder&lt;/a&gt;/&lt;a href=&quot;http://www.reddit.com/r/funny/comments/25hdrc/the_new_batman_logo/&quot;&gt;drbrevin&lt;/a&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OH MY GOD. THANK YOU.&lt;/p&gt;
&lt;p&gt;I seriously thought I was the only one seeing that.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/i-made-a-thing-to-help-you-understand-when-you/"/>
		<updated>2014-05-11T18:30:40Z</updated>
		<id>https://blog.izs.me/2014/05/i-made-a-thing-to-help-you-understand-when-you/</id>
		<content type="html">&lt;p&gt;I made a thing to help you understand when you should call technology &amp;ldquo;sexy&amp;rdquo; in tech blogs.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/05/carry-on-my-wayward-butt-ch0rdate/"/>
		<updated>2014-05-05T01:33:50Z</updated>
		<id>https://blog.izs.me/2014/05/carry-on-my-wayward-butt-ch0rdate/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://byke.co.vu/post/83749848202&quot;&gt;carry-on-my-wayward-butt&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://ch0rdate.tumblr.com/post/83716696970/chacha-again-sizvideos-who-needs-traffic&quot;&gt;ch0rdate&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://chacha-again.tumblr.com/post/83657928999/sizvideos-who-needs-traffic-lights-not-the&quot;&gt;chacha-again&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://sizvideos.tumblr.com/post/83605294526/who-needs-traffic-lights-not-the-drivers-in&quot;&gt;sizvideos&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://siz.io/s/wtf/v/meskel-square-addis-abeba?srctum&quot;&gt;&lt;strong&gt;&lt;em&gt;Who needs traffic lights? Not the drivers in Ethiopia - Video&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This made me so uncomfortable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;this honestly gives me anxiety just looking at it&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;im never driving again&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Void</title>
		<link href="https://blog.izs.me/2014/04/void/"/>
		<updated>2014-04-27T18:15:48Z</updated>
		<id>https://blog.izs.me/2014/04/void/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://probertson.tumblr.com/post/83661041853/void&quot; class=&quot;tumblr_blog&quot;&gt;probertson&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/04/void/10_void_animated.gif&quot; /&gt;&lt;br /&gt; by me and &lt;a href=&quot;http://cgcgcgcg.tumblr.com/&quot;&gt;Jacky&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/fakebjorkfacts/"/>
		<updated>2014-04-27T17:19:38Z</updated>
		<id>https://blog.izs.me/2014/04/fakebjorkfacts/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://fakebjorkfacts.tumblr.com/post/82249558613&quot; class=&quot;tumblr_blog&quot;&gt;fakebjorkfacts&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://shaquandabonquiqui.tumblr.com/post/82224010645/so-ive-been-watching-a-program-about-monkeys&quot;&gt; &lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/bjorkswig-fuckers/"/>
		<updated>2014-04-27T17:14:21Z</updated>
		<id>https://blog.izs.me/2014/04/bjorkswig-fuckers/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://fakebjorkfacts.tumblr.com/post/33744682978/bjorkswig-fuckers&quot;&gt;fakebjorkfacts&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Bjork invented the internet. &lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/adaytoromana-this-kinda-makes-me-uncomfortable/"/>
		<updated>2014-04-27T17:12:20Z</updated>
		<id>https://blog.izs.me/2014/04/adaytoromana-this-kinda-makes-me-uncomfortable/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://adaytoromana.tumblr.com/post/83780707755/this-kinda-makes-me-uncomfortable&quot; class=&quot;tumblr_blog&quot;&gt;adaytoromana&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;this kinda makes me uncomfortable &lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/skeletorislove-skeletor-affirmations-by/"/>
		<updated>2014-04-22T22:49:45Z</updated>
		<id>https://blog.izs.me/2014/04/skeletorislove-skeletor-affirmations-by/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skeletorislove.tumblr.com/post/80773504786/skeletor-affirmations-by-ghoulnextdoor-the&quot; class=&quot;tumblr_blog&quot;&gt;skeletorislove&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Skeletor Affirmations (by &lt;a href=&quot;https://www.flickr.com/photos/mlleghoul/13424919075/&quot;&gt;ghoulnextdoor&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&amp;ldquo;THE SKELETOR IN ME RECOGNIZES THE SKELETOR IN YOU.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Thanks to the folks at Pantheacon for this one :)&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/merlin-daveshumka-the-slowed-down-vocals/"/>
		<updated>2014-04-12T17:49:16Z</updated>
		<id>https://blog.izs.me/2014/04/merlin-daveshumka-the-slowed-down-vocals/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/82398447401/daveshumka-the-slowed-down-vocals-from-band-on&quot; class=&quot;tumblr_blog&quot;&gt;merlin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://daveshumka.tumblr.com/post/82397553901/the-slowed-down-vocals-from-band-on-the-run-over&quot; class=&quot;tumblr_blog&quot;&gt;daveshumka&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The slowed down vocals from “Band on the Run” over the sped up instruments from “Imagine.”&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;No words. This is magical.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>On Eich.</title>
		<link href="https://blog.izs.me/2014/04/on-eich/"/>
		<updated>2014-04-04T00:57:32Z</updated>
		<id>https://blog.izs.me/2014/04/on-eich/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://vowelboy.tumblr.com/post/81633637492/on-eich&quot; class=&quot;tumblr_blog&quot;&gt;vowelboy&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Reducing the Eich sitaution to an argument about “seeing things from a point of view” is rather facile.&lt;/p&gt;
&lt;p&gt;The man &lt;em&gt;actively&lt;/em&gt; contributed to an action that removed a (previously granted) set of rights / privileges from a certain group of people.&lt;/p&gt;
&lt;p&gt;He was appointed to a leadership position of an organisation that has an enormous presence in a community with a well-established standard for expectations of equality.&lt;/p&gt;
&lt;p&gt;That community rallied and made their voice clear: “This behavior is unacceptable from a leader in our community.”&lt;/p&gt;
&lt;p&gt;Rather than engaging with the community to build a bridge and address their concerns, Eich chose to step down.&lt;/p&gt;
&lt;p&gt;Eich was not “bullied out of a job.”&lt;/p&gt;
&lt;p&gt;This is not a case of being an innocent victim of an uncommonly held opinion. This is a case of a community not tolerating the &lt;em&gt;actions&lt;/em&gt; of one of its appointed leaders.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/laughingsquid-adventure-time-an-art-show/"/>
		<updated>2014-04-03T22:18:55Z</updated>
		<id>https://blog.izs.me/2014/04/laughingsquid-adventure-time-an-art-show/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://links.laughingsquid.com/post/81321624284/adventure-time-an-art-show-inspired-by-cartoon&quot; class=&quot;tumblr_blog&quot;&gt;laughingsquid&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://laughingsquid.com/adventure-time-an-art-show-inspired-by-cartoon-networks-animated-tv-series-at-gallery1988-west-in-los-angeles/&quot;&gt;Adventure Time, An Art Show Inspired by Cartoon Network’s Animated TV Series at Gallery1988 West in Los Angeles&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/04/vintagegal-metropolis-film-poster-by-werner/"/>
		<updated>2014-04-03T22:11:15Z</updated>
		<id>https://blog.izs.me/2014/04/vintagegal-metropolis-film-poster-by-werner/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://vintagegal.tumblr.com/post/80203276130&quot;&gt;vintagegal&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;sub&gt;Metropolis Film Poster by Werner Graul (1927) (&lt;a href=&quot;http://geekynerfherder.blogspot.com/2012/06/movie-poster-art-metropolis-1927.html&quot;&gt;via&lt;/a&gt;)&lt;/sub&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Sleep deprivation destroys us, especially at startups</title>
		<link href="https://blog.izs.me/2014/04/sleep-deprivation-destroys-us-especially-at/"/>
		<updated>2014-04-03T19:04:16Z</updated>
		<id>https://blog.izs.me/2014/04/sleep-deprivation-destroys-us-especially-at/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/81553767829/sleep-deprivation-destroys-us-especially-at-startups&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I am extremely proud of npm’s focus on regular, modest working hours for everyone.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/theghostofyourliess-mens-rights-activists/"/>
		<updated>2014-03-22T16:32:58Z</updated>
		<id>https://blog.izs.me/2014/03/theghostofyourliess-mens-rights-activists/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://theghostofyourliess.tumblr.com/post/46274373034/mens-rights-activists&quot;&gt;theghostofyourliess&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Men’s Rights Activists&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/being-an-expert-isnt-telling-other-people-what/"/>
		<updated>2014-03-22T04:32:18Z</updated>
		<id>https://blog.izs.me/2014/03/being-an-expert-isnt-telling-other-people-what/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Being an expert isn’t telling other people what you know.&lt;/strong&gt; It’s understanding what questions to ask, and flexibly applying your knowledge to the specific situation at hand. Being an expert means providing sensible, highly contextual direction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.codinghorror.com/are-you-an-expert/&quot;&gt;Are You An Expert?&lt;/a&gt; (via &lt;a href=&quot;http://www.kungfugrippe.com/&quot; class=&quot;tumblr_blog&quot;&gt;merlin&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/shevathegun-callmekitto-seraphatonin-um/"/>
		<updated>2014-03-22T04:09:01Z</updated>
		<id>https://blog.izs.me/2014/03/shevathegun-callmekitto-seraphatonin-um/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://shevathegun.tumblr.com/post/79952596987/callmekitto-seraphatonin-um-starfires&quot;&gt;shevathegun&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://callmekitto.tumblr.com/post/79922561690/seraphatonin-um-starfires-powers-are-fueled&quot;&gt;callmekitto&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://seraphatonin.tumblr.com/post/79918002262/um-starfires-powers-are-fueled-by-the-sun-thats&quot;&gt;seraphatonin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;um starfire’s powers are fueled by the sun that’s why she has to wear skimpy clothes&amp;rdquo; hey u know who else’s powers are fueled by the sun? superman. come on clark time for that toothfloss speedo chop chop&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;his nipples are covered by tiny capes&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;image&quot; src=&quot;https://blog.izs.me/2014/03/shevathegun-callmekitto-seraphatonin-um/tumblr_inline_n2meohz8J01ro9ys3.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;truth, justice, and the american way&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/moosestielsaya-this-gif-makes-more-sense-now/"/>
		<updated>2014-03-15T18:11:49Z</updated>
		<id>https://blog.izs.me/2014/03/moosestielsaya-this-gif-makes-more-sense-now/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://moosestielsaya.tumblr.com/post/78774913878/this-gif-makes-more-sense-now&quot;&gt;moosestielsaya&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;https://blog.izs.me/2014/03/moosestielsaya-this-gif-makes-more-sense-now/tumblr_m6iv87xNfw1qdlh1io1_400.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This gif makes more sense now&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/joshuamaysart-illuminated-path-a-fixture-in/"/>
		<updated>2014-03-14T01:03:48Z</updated>
		<id>https://blog.izs.me/2014/03/joshuamaysart-illuminated-path-a-fixture-in/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://joshuamaysart.tumblr.com/post/74302410599/illuminated-path&quot; class=&quot;tumblr_blog&quot;&gt;joshuamaysart&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Illuminated Path&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A fixture in the &lt;a href=&quot;http://www.npmjs.com/&quot;&gt;npm, Inc.&lt;/a&gt; office.  As soon as we have some more furniture and stuff, we&amp;rsquo;ll figure out where best to hang it. &amp;lt;3 &lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/valkyriesvagina-oh-god-what-have-i-done/"/>
		<updated>2014-03-10T01:18:00Z</updated>
		<id>https://blog.izs.me/2014/03/valkyriesvagina-oh-god-what-have-i-done/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://valkyriesvagina.tumblr.com/post/78836866283/oh-god-what-have-i-done&quot;&gt;valkyriesvagina&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Oh god what have I done!?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img width=&quot;500&quot; src=&quot;https://blog.izs.me/2014/03/valkyriesvagina-oh-god-what-have-i-done/Octocat.png&quot; alt=&quot;octocat&quot; /&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>JavaScript Capital</title>
		<link href="https://blog.izs.me/2014/03/javascript-capital/"/>
		<updated>2014-03-07T20:35:00Z</updated>
		<id>https://blog.izs.me/2014/03/javascript-capital/</id>
		<content type="html">&lt;p&gt;This is a transcript of a conversation I had via IM with Mikeal Rogers in April of 2010:&lt;/p&gt;
&lt;dl class=&quot;chat&quot;&gt;&lt;dt class=&quot;odd person1&quot;&gt;Mikeal:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;you should all move to Oakland&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;me:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;hahah&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Mikeal:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;we&amp;rsquo;ll turn this in to the javascript capital of CA&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;me:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;if you only knew the kind of draw that actually is&amp;hellip;&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;me:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;like, actual nice neighborhoods and SUN, and close to sf? hells yes.&lt;/dd&gt;
&lt;dt class=&quot;even person1&quot;&gt;Mikeal:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;i really love Oakland&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Mikeal:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;the food is amazing&lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;Today, indeed, &lt;a href=&quot;https://localwiki.org/oakland/javascript&quot;&gt;it is&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/3/"/>
		<updated>2014-03-02T21:17:05Z</updated>
		<id>https://blog.izs.me/2014/03/3/</id>
		<content type="html">&lt;p&gt;&amp;lt;3&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2014/03/siperslue-lol-the-dudes-face-as-he-realizes/"/>
		<updated>2014-03-01T22:17:06Z</updated>
		<id>https://blog.izs.me/2014/03/siperslue-lol-the-dudes-face-as-he-realizes/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://siperslue.tumblr.com/post/72832029013/lol-the-dudes-face-as-he-realizes-he-is-no-match&quot;&gt;siperslue&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;LOL, the dude’s face as he realizes he is no match against Lesbian Satan!  &lt;em&gt;All Hail Lesbian Satan&lt;/em&gt;!&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Raquel Vélez Joins npm, Inc.</title>
		<link href="https://blog.izs.me/2014/01/raquel-v%C3%A9lez-joins-npm-inc/"/>
		<updated>2014-01-28T00:16:00Z</updated>
		<id>https://blog.izs.me/2014/01/raquel-v%C3%A9lez-joins-npm-inc/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/74774825040/raquel-velez&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I am super excited to welcome Raquel “&lt;a href=&quot;https://twitter.com/rockbot&quot;&gt;@rockbot&lt;/a&gt;&amp;ldquo; Vélez to the team at npm, Inc.&lt;/p&gt;
&lt;p&gt;Raquel was one of our first picks as an early hire.  We were thrilled when she agreed to join, and it’s great to be able to publicly say so today :)&lt;/p&gt;
&lt;p&gt;We do still &lt;a href=&quot;http://blog.npmjs.org/jobs&quot;&gt;need more help&lt;/a&gt;, so if you were concerned that this means we’re all filled up, not to worry!  The fact that you might get to work with Raquel is just yet another reason to &lt;a href=&quot;http://blog.npmjs.org/jobs&quot;&gt;get in touch&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>The Next Phase of Node.js</title>
		<link href="https://blog.izs.me/2014/01/the-next-phase-of-nodejs/"/>
		<updated>2014-01-15T17:13:09Z</updated>
		<id>https://blog.izs.me/2014/01/the-next-phase-of-nodejs/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.npmjs.org/post/73419729585/the-next-phase-of-node-js&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Node’s growth has continued and accelerated immensely over the last few years.  More people are developing and sharing more code with Node and npm than I would have ever imagined.  Countless companies are using Node, and npm along with it.&lt;/p&gt;
&lt;p&gt;Over the last year, &lt;a href=&quot;https://github.com/tjfontaine&quot;&gt;TJ Fontaine&lt;/a&gt; has become absolutely essential to the Node.js project.  He’s been building releases, managing the test bots, &lt;a href=&quot;http://www.joyent.com/blog/walmart-node-js-memory-leak&quot;&gt;fixing nasty bugs&lt;/a&gt; and making decisions for the project with constant focus on the needs of our users.  He was responsible for an update to MDB to &lt;a href=&quot;http://www.slideshare.net/bcantrill/node-summit2013&quot;&gt;support running ::findjsobjects on Linux core dumps&lt;/a&gt;, and is working on a shim layer that will provide a stable C interface for Node binary addons.  In partnership with Joyent and The Node Firm, he’s helped to create a path forward for scalable issue triaging.  He’s become the primary point of contact keeping us all driving the project forward together.&lt;/p&gt;
&lt;p&gt;Anyone who’s been close to the core project knows that he’s been effectively leading the project for a while now, so we’re making it official.  Effective immediately, TJ Fontaine is the Node.js project lead.  I will remain a Node core committer, and expect to continue to contribute to the project in that role.  My primary focus, however, will be npm.&lt;/p&gt;
&lt;p&gt;At this point, npm needs work, and I am eager to deliver what the Node community needs from its package manager.  I am starting a company, npm, Inc., to deliver new products and services related to npm.  I’ll be sharing many more details soon about exactly how this is going to work, and what we’ll be offering.  For now, suffice it to say that everything currently free will remain free, and everything currently flaky will get less flaky.  Pursuing new revenue is how we can keep providing the npm registry service in a long-term sustainable way, and it has to be done very carefully so that we don’t damage what we’ve all built together.&lt;/p&gt;
&lt;p&gt;npm is what I’m most passionate about, and I am now in a position to give it my full attention.  I’ve done more than I could have hoped to accomplish in running Node core, and it’s well past time to hand the control of the project off to its next gatekeeper.&lt;/p&gt;
&lt;p&gt;TJ is exactly the leader who can help us take Node.js to 1.0 and beyond.  He brings professionalism, rigor, and a continued focus on inclusive community values and culture.  In the coming days, TJ will spell out his plans in greater detail.  I look forward to the places that Node will go with his guidance.&lt;/p&gt;
&lt;p&gt;Please join me in welcoming him to this new role :)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A member of our community is missing, help find him</title>
		<link href="https://blog.izs.me/2014/01/a-member-of-our-community-is-missing-help-find/"/>
		<updated>2014-01-11T17:47:26Z</updated>
		<id>https://blog.izs.me/2014/01/a-member-of-our-community-is-missing-help-find/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/72596728510/a-member-of-our-community-is-missing-help-find-him&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt; has been missing since Jan 1. Co-maintainer of npm and a long-term, valued member of the Node.js community, his absence is deeply felt by many of us.&lt;/p&gt;
&lt;p&gt;If you have any information, please contact Oakland PD: 510 238 3641 or P.I. Jim Vierra 415 999 5911.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2014/01/a-member-of-our-community-is-missing-help-find/tumblr_inline_mz1zubxT9C1s0m7nr.jpg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Luke, if you’re out there, please come back, we miss you!&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;More details and updates as they come in: &lt;a href=&quot;http://findluk.com/&quot;&gt;http://findluk.com&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>npm Blog!</title>
		<link href="https://blog.izs.me/2013/12/npm-blog/"/>
		<updated>2013-12-27T02:09:41Z</updated>
		<id>https://blog.izs.me/2013/12/npm-blog/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://npmjs.tumblr.com/post/71260064706/blog&quot; class=&quot;tumblr_blog&quot;&gt;npmjs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;This is the npm blog.  It is a tumblr.  Please enjoy it.&lt;/p&gt;
&lt;p&gt;—i&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>The Hazards of Consensus</title>
		<link href="https://blog.izs.me/2013/12/the-hazards-of-consensus/"/>
		<updated>2013-12-05T18:53:00Z</updated>
		<id>https://blog.izs.me/2013/12/the-hazards-of-consensus/</id>
		<content type="html">&lt;p&gt;The most long-term success tends to come from reducing, to the
greatest extent possible, the need for agreement and consensus.&lt;/p&gt;
&lt;p&gt;A simple micro-example of this is the lunch-time behaviors of two
different companies I&amp;rsquo;ve worked at: Joyent and The Startup.  (&amp;ldquo;The
Startup&amp;rdquo; shall remain nameless, because I hated it there, but I really
liked a lot of the people involved, and don&amp;rsquo;t want to accidentally
blame them for any of the badness.  It&amp;rsquo;s sad that it went the way it
did, but I am thankful for the experience I got out of it.)&lt;/p&gt;
&lt;p&gt;At Joyent, lunch happens at a reasonable hour.  (Since I am in the
office most often on Tuesday, it&amp;rsquo;s signaled with a &lt;a href=&quot;http://localwiki.net/sf/Tuesday_Noon_Siren&quot;&gt;warning klaxon&lt;/a&gt;.)
It is a leisurely 60 to 90 minute affair, where we socialize easily.
Subjects of conversation do touch on work quite a bit, of course, but
equally common are baseball, the politics of Crazy Town, what&amp;rsquo;s wrong
(and right) with Computer Science education (or tech in general), and
the latest Hacker News troll fountain.&lt;/p&gt;
&lt;p&gt;If we all happen to be in the mood for the same type of food, we&amp;rsquo;ll
sometimes go together.  However, more often than not, everyone gets
takeaway from a nearby spot, and we gather around a big round table.
If we start walking in the same direction, but then I want a sandwich
and you want a taco, we part ways, and meet back at the office.&lt;/p&gt;
&lt;p&gt;People come and go, extremely low-pressure.  We disagree more than we
agree, but we easily move on from disagreements and find a new subject
to toss around.  There is no governance or agreement, no hard
feelings.  Just a loose group of sovereigns who enjoy one another&amp;rsquo;s
company.&lt;/p&gt;
&lt;p&gt;Not only do we not have to all agree on the same thing for lunch, the
disagreement can often yield benefits for everyone.  If you get tired
of the same old offerings, and head out in a different direction, you
might find a new menu that becomes a crowd favorite.&lt;/p&gt;
&lt;p&gt;At The Startup, lunch was catered.  (We provide you lunch!  Hooray!
Come work here!)  The food wasn&amp;rsquo;t terrible, and I believe that it was
well-intentioned by the founders, but I&amp;rsquo;ve since come to view catered
lunch as a huge red flag at a company.  My coworkers ate fast, and only
discussed work, if they didn&amp;rsquo;t continue working at their desks while
they ate.  This was viewed as normal.&lt;/p&gt;
&lt;p&gt;One time I decided to leave the office and bring something back
(mostly because I just wanted a walk, having not seen the midday sun
for a week).  I asked a few of my teammates if they wanted to come
with me, and the answer was &amp;ldquo;Um, no, I probably shouldn&amp;rsquo;t&amp;hellip;&amp;rdquo;  When I
returned, no fewer than 5 people asked me nervously if I was ok, if
anything was wrong, where I went, what was going on.  It was SO weird.&lt;/p&gt;
&lt;p&gt;Something as simple as a sandwich wrapped in paper showed that I
wasn&amp;rsquo;t part of their unified tribe.  To make matters even worse, most
engineers there were in the office around 7:30 in the morning, stayed
for the catered dinner (!!), worked another few hours, and then stuck
around drinking beers in the office together until 23:00 or midnight.
Having bags under one&amp;rsquo;s eyes was a mark of pride.&lt;/p&gt;
&lt;p&gt;Maybe I&amp;rsquo;m just lazy, but I really only have about 5 solid hours of
focus in me on a given day, and those hours suffer considerably if I
don&amp;rsquo;t get the proper physical, mental, and emotional rest.  So, it was
not a great fit.  I quit after a few months.  A year (and 2 pivots)
later, they were sold for a fraction of what their investors had put
in, never having reached the general release of their product.&lt;/p&gt;
&lt;p&gt;But back to the lunches.  There&amp;rsquo;s an important point there.&lt;/p&gt;
&lt;p&gt;Human societies function best when they are structured in such a way
as to tolerate&amp;ndash;even &lt;em&gt;celebrate&lt;/em&gt;&amp;ndash;disagreement.  If the society can be
&lt;em&gt;improved&lt;/em&gt; by disagreement, then that&amp;rsquo;s even better.  It allows for
freedom, self-determination, experimentation, and a pervasive sense of
safety.  If you and I can disagree comfortably, then I don&amp;rsquo;t have to
worry that we might disagree, which means two things: I can be candid
with my honest opinions, and I can be open to yours.  I don&amp;rsquo;t have to
resist your opinions if I disagree, and I don&amp;rsquo;t have to guess your
reaction before I share mine.&lt;/p&gt;
&lt;p&gt;Of course, clearly some disagreements are &lt;em&gt;not&lt;/em&gt; tolerable.  If you and
I disagree about whether to put a knife in my chest, there&amp;rsquo;s no way we
can both get our way.  Designing groups that can benefit from
disagreement is non-trivial, and usually happens by accident.  In the
political space, this usually means some form of constitutional
democracy, but neither &amp;ldquo;constitutional&amp;rdquo; nor &amp;ldquo;democracy&amp;rdquo; will ensure a
healthy and inclusive culture or guarantee that experimentation will
be promoted.  Sometimes a limited dictator is safer than a powerful
voting bloc.&lt;/p&gt;
&lt;p&gt;With npm, I actively sought to design a software system in which we
could easily use one another&amp;rsquo;s Node.js modules, without having to
agree on which Node.js modules to use, or the best way to organize
them in our projects.&lt;/p&gt;
&lt;p&gt;I wish that I could claim credit for the &amp;ldquo;small modules&amp;rdquo; design
philosophy or the many best practices and popular resources that have
been created, but in truth, I can&amp;rsquo;t.  All of those things were
designed or discovered by other people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When everyone else is applying force, it&amp;rsquo;s best to reduce
friction.&lt;/strong&gt;  People were writing a lot of cool stuff, but having to
agree on conventions and techniques was putting sand in the gears.
The downsides of ceremony and dependency hell are very difficult to
appreciate ahead of time, and the choices that lead to that place
solve real problems early on.  With npm, I opted to &lt;em&gt;not&lt;/em&gt; solve some
problems so that I &lt;em&gt;could&lt;/em&gt; solve others.  By sticking to the rule of
&amp;ldquo;minimize the need for consensus&amp;rdquo;, we&amp;rsquo;ve found much more interesting
problems (like how to handle massive growth).&lt;/p&gt;
&lt;p&gt;The next time someone says that they like CoffeeScript, or that they
don&amp;rsquo;t like Promises, or whatever other arbitrary preference you
believe is &amp;ldquo;wrong&amp;rdquo;, instead of picking a fight with them, just be
thankful that they&amp;rsquo;re not the boss of you, and that you can like
different things, and still be friends.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Cinco Facetime Party Snoozer</title>
		<link href="https://blog.izs.me/2013/12/cinco-facetime-party-snoozer/"/>
		<updated>2013-12-02T18:13:00Z</updated>
		<id>https://blog.izs.me/2013/12/cinco-facetime-party-snoozer/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sure why not&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sounds good.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;im laughing at my desk and havent even watched the video yet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I love the cinco line of products&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I keep laughing and then all the people around me go silent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sure why not.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I understand.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thanks for coming.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I understand.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You know that all our conversations are ruined by that skit.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I can never talk to you again.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I understand.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thanks for coming.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Luke Arduini&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sure why not.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/11/yuireactions-the-rare-striped-izs-spotted-in/"/>
		<updated>2013-11-06T23:59:50Z</updated>
		<id>https://blog.izs.me/2013/11/yuireactions-the-rare-striped-izs-spotted-in/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://yuireactions.tumblr.com/post/66227603940/the-rare-striped-izs-spotted-in-the-wild-at&quot; class=&quot;tumblr_blog&quot;&gt;yuireactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;the rare striped @izs, spotted in the wild at #yuiconf&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/11/taranamgabata-did-u-know-theres-this-small/"/>
		<updated>2013-11-06T15:45:12Z</updated>
		<id>https://blog.izs.me/2013/11/taranamgabata-did-u-know-theres-this-small/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://taranamgabata.tumblr.com/post/53281999466/did-u-know-theres-this-small-rural-town-in-japan&quot;&gt;taranamgabata&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;did u know, there’s this small rural town in japan called obama.&lt;br /&gt;so there’s this girl in a 2007 drama who moved from the city to obama.&lt;br /&gt;and she hates it at first and blames the town for her misery.&lt;br /&gt;i kid u not. didn’t make this shit up.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Restart Node.js servers on domain errors: Sensible FUD</title>
		<link href="https://blog.izs.me/2013/11/restart-nodejs-servers-on-domain-errors-sensible/"/>
		<updated>2013-11-01T19:22:00Z</updated>
		<id>https://blog.izs.me/2013/11/restart-nodejs-servers-on-domain-errors-sensible/</id>
		<content type="html">&lt;p&gt;The Node.js documentation about the &amp;ldquo;domain&amp;rdquo; error handling module has a &lt;a href=&quot;http://nodejs.org/api/domain.html#domain_warning_don_t_ignore_errors&quot;&gt;strongly worded warning imploring you to shut down the process when a domain catches an error&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was recently asked for a more detailed explanation of why this is, and answered with the following &lt;a href=&quot;https://gist.github.com/isaacs/7269994&quot;&gt;gist&lt;/a&gt;.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/isaacs/7269994.js&quot;&gt;&lt;/script&gt;
&lt;p&gt;This principle is not unique to JavaScript, of course.  Any language with state, side effects, and exceptions that abandon local context without a way to resume at the throw site, will basically guarantee that unexpected exceptions cannot ever be handled in a way that lets the program proceed normally.  (This also applies, for example, to Ruby, Python, PHP, C++, and many other languages, though of course they&amp;rsquo;re going to have their own set of caveats and workarounds.)&lt;/p&gt;
&lt;p&gt;This is not &lt;em&gt;so&lt;/em&gt; bad if it&amp;rsquo;s a program that isn&amp;rsquo;t long-lived.  PHP scripts typically run to completion and then get cleaned up, so a missed exception is pretty meh.  Same with command line scripts.&lt;/p&gt;
&lt;p&gt;But in a server or some other sort of long-lived daemon, it&amp;rsquo;s completely unacceptable, and will nearly always lead to undesirable system behavior.&lt;/p&gt;
&lt;p&gt;Finish up what you&amp;rsquo;re doing, close the active connections or whatever, and GTFO.  Let the system start a new process.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the only responsible option.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Nudity and Nerdery, On “Not all guys are like that”</title>
		<link href="https://blog.izs.me/2013/10/nudity-and-nerdery-on-not-all-guys-are-like/"/>
		<updated>2013-10-21T22:01:00Z</updated>
		<id>https://blog.izs.me/2013/10/nudity-and-nerdery-on-not-all-guys-are-like/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nudityandnerdery.tumblr.com/post/63995327460/see-what-you-need-to-understand-is-that-not-all&quot; class=&quot;tumblr_blog&quot;&gt;nudityandnerdery&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;See, what you need to understand is that “Not all guys [are] like that” is never going to work. Because you’re answering an entirely different conversation than what women are actually saying.
&lt;/p&gt;&lt;p&gt;You think women are saying “Every man is a predator and a danger to me.” And you’re replying, “But I’m not like that.”
&lt;/p&gt;&lt;p&gt;But women aren’t saying that. They’re saying “There are too many situations where women have to worry about their safety,” and you’re saying “That’s not important.” They’re saying “Women are constantly told it’s their fault if something bad happens,” and you’re saying “Don’t worry about it.” They’re saying “Too often, women find their trust violated by men,” and you’re saying “But you should trust &lt;em&gt;me&lt;/em&gt;!”
&lt;/p&gt;&lt;p&gt;They’re saying “So many men have decided that what they want is more important than anything about a woman.” And you’re replying “I’m &lt;em&gt;exactly&lt;/em&gt; like that.”&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Duty Calling</title>
		<link href="https://blog.izs.me/2013/10/duty-calling/"/>
		<updated>2013-10-17T17:18:59Z</updated>
		<id>https://blog.izs.me/2013/10/duty-calling/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PEOPLE ARE WRONG ON THE INTERNET, MARCO.  WHAT SHOULD I DO??&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Marco Rogers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Just breathe. Remember your training. You&#39;ll be fine.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>On Patriarchy and Homophobia</title>
		<link href="https://blog.izs.me/2013/10/on-patriarchy-and-homophobia/"/>
		<updated>2013-10-16T18:20:09Z</updated>
		<id>https://blog.izs.me/2013/10/on-patriarchy-and-homophobia/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://medium.com/i-m-h-o/7d4070f7d608&quot;&gt;I wrote a thing on Medium.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/10/if-youre-a-boy-writer-its-a-simple-rule-youve/"/>
		<updated>2013-10-15T05:46:23Z</updated>
		<id>https://blog.izs.me/2013/10/if-youre-a-boy-writer-its-a-simple-rule-youve/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;If you’re a boy writer, it’s a simple rule: you’ve gotta get used to the fact that you suck at writing women and that the worst women writer can write a better man than the best male writer can write a good woman. And it’s just the minimum. Because the thing about the sort of heteronormative masculine privilege, whether it’s in Santo Domingo, or the United States, is you grow up your entire life being told that women aren’t human beings, and that women have no independent subjectivity. And because you grow up with this, it’s this huge surprise when you go to college and realize that, “Oh, women aren’t people who does my shit and fucks me.”&lt;/p&gt;
&lt;p&gt;And I think that this a huge challenge for boys, because they want to pretend they can write girls. Every time I’m teaching boys to write, I read their women to them, and I’m like, “Yo, you think this is good writing?” These motherfuckers attack each other over cliche lines but they won’t attack each other over these toxic representations of women that they have inherited… their sexist shorthand, they think that is observation. They think that their sexist distortions are insight. And if you’re in a writing program and you say to a guy that their characters are sexist, this guy, it’s like you said they fucking love Hitler. They will fight tooth and nail because they want to preserve this really vicious sexism in the art because that is what they have been taught.&lt;/p&gt;
&lt;p&gt;And I think the first step is to admit that you, because of your privilege, have a very distorted sense of women’s subjectivity. And without an enormous amount of assistance, you’re not even going to get a D. I think with male writers the most that you can hope for is a D with an occasional C thrown in. Where the average women writer, when she writes men, she gets a B right off the bat, because they spent their whole life being taught that men have a subjectivity. In fact, part of the whole feminism revolution was saying, “Me too, motherfuckers.” So women come with it built in because of the society. &lt;/p&gt;
&lt;p&gt;It’s the same way when people write about race. If you didn’t grow up being a subaltern person in the United States, you might need help writing about race. Motherfuckers are like ‘I got a black boy friend,’ and their shit sounds like Klan Fiction 101.&lt;/p&gt;
&lt;p&gt;The most toxic formulas in our cultures are not pass down in political practice, they’re pass down in mundane narratives. It’s our fiction where the toxic virus of sexism, racism, homophobia, where it passes from one generation to the next, and the average artist will kill you before they remove those poisons. And if you want to be a good artist, it means writing, really, about the world. And when you write cliches, whether they are sexist, racist, homophobic, classist, that is a fucking cliche. And motherfuckers will kill you for their cliches about x, but they want their cliches about their race, class, queerness. They want it in there because they feel lost without it. So for me, this has always been the great challenge.&lt;/p&gt;
&lt;p&gt;As a writer, if you’re really trying to write something new, you must figure out, with the help of a community, how can you shed these fucking received formulas. They are received. You didn’t come up with them. And why we need fellow artists is because they help us stay on track. They tell you, “You know what? You’re a bit of a fucking homophobe.” You can’t write about the world with these simplistic distortions. They are cliches. People know art, always, because they are uncomfortable. Art discomforts. The trangressiveness of art has to deal with confronting people with the real. And sexism is a way to avoid the real, avoiding the reality of women. Homophobia is to avoid the real, the reality of queerness. All these things are the way we hide from encountering the real. But art, art is just about that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Junot Diaz&lt;/strong&gt; speaking at Word Up Bookshop, 2012 (via &lt;a class=&quot;tumblr_blog&quot; href=&quot;http://clambistro.tumblr.com/&quot;&gt;clambistro&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Obscure Phonetic Alphabet</title>
		<link href="https://blog.izs.me/2013/10/the-obscure-phonetic-alphabet/"/>
		<updated>2013-10-10T19:00:31Z</updated>
		<id>https://blog.izs.me/2013/10/the-obscure-phonetic-alphabet/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://obscurephoneticalphabet.tumblr.com/post/63655852632/the-obscure-phonetic-alphabet&quot; class=&quot;tumblr_blog&quot;&gt;obscurephoneticalphabet&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A - Affect&lt;/p&gt;
&lt;p&gt;B - Becker&lt;/p&gt;
&lt;p&gt;C - Cistern&lt;/p&gt;
&lt;p&gt;D - Dot Tumblr Dot Com&lt;/p&gt;
&lt;p&gt;E - Effect&lt;/p&gt;
&lt;p&gt;F - Funicular&lt;/p&gt;
&lt;p&gt;G - Guzzler&lt;/p&gt;
&lt;p&gt;H - Herbs &lt;img alt=&quot;image&quot; src=&quot;https://blog.izs.me/2013/10/the-obscure-phonetic-alphabet/OiXNRdM.png&quot; title=&quot;because it&#39;s got a fucking H in it&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I - Insufferabilityism&lt;/p&gt;
&lt;p&gt;J - Jorts&lt;/p&gt;
&lt;p&gt;K - Klout&lt;/p&gt;
&lt;p&gt;L - Lupus&lt;/p&gt;
&lt;p&gt;M - Movember&lt;/p&gt;
&lt;p&gt;N - Nary&lt;/p&gt;
&lt;p&gt;O - Orkut&lt;/p&gt;
&lt;p&gt;P - Phonetic&lt;/p&gt;
&lt;p&gt;Q - Queue&lt;/p&gt;
&lt;p&gt;R - Are we still talking about this?&lt;/p&gt;
&lt;p&gt;S - Sendhil Ramamurthy&lt;/p&gt;
&lt;p&gt;T - Two Guys, A Girl, And A Pizza Place&lt;/p&gt;
&lt;p&gt;U - ¨&lt;/p&gt;
&lt;p&gt;V - Vandola&lt;/p&gt;
&lt;p&gt;W - Wrechjer&lt;/p&gt;
&lt;p&gt;X - Xi&lt;/p&gt;
&lt;p&gt;Y - Yggdrasil, from which Odin hung&lt;/p&gt;
&lt;p&gt;Z - Zaftig&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Designing APIs for Asynchrony</title>
		<link href="https://blog.izs.me/2013/08/designing-apis-for-asynchrony/"/>
		<updated>2013-08-23T23:06:00Z</updated>
		<id>https://blog.izs.me/2013/08/designing-apis-for-asynchrony/</id>
		<content type="html">&lt;p&gt;&lt;i&gt;New 2014-06-30: You can contain Zalgo with the &lt;a href=&quot;http://npm.im/dezalgo&quot;&gt;dezalgo module&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Some people asked me to explain what &lt;a href=&quot;http://lists.w3.org/Archives/Public/public-webapps/2013JulSep/0355.html&quot;&gt;I
meant&lt;/a&gt;
by &amp;ldquo;releasing Zalgo&amp;rdquo; in async APIs, so I thought I&amp;rsquo;d share
the following guidelines.&lt;/p&gt;
&lt;p&gt;Please follow all of these rules in your programs.  If you deviate
from them, you do so at the peril of your very sanity.&lt;/p&gt;
&lt;h3&gt;Get Over Your Provincial Boilerplate Preferences&lt;/h3&gt;
&lt;p&gt;Personally, I don&amp;rsquo;t actually care all that much about the whole
promises/callbacks/coroutines/generators debate.  It&amp;rsquo;s provably
trivial to turn any callback-taking API into a promise-returning API
or generator-yielding API or vice-versa.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m of the opinion that breaking functionality into small enough
chunks that your boilerplate doesn&amp;rsquo;t &lt;em&gt;matter&lt;/em&gt; is much more important
than &lt;em&gt;which&lt;/em&gt; boilerplate you decide tastes the yummiest.  In
JavaScript, we have first-class language support for passing functions
around, so I tend to use callbacks, simply because it requires no
extra &amp;ldquo;stuff&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s important to me is that an API be useful, performant, and easy to
reason about.  When I&amp;rsquo;m writing JavaScript, I care a lot about how
V8 is going to optimize it, and so try to choose patterns that it can
optimize nicely.  As of today, generators just aren&amp;rsquo;t first-class
enough, and Promises require an extra abstraction.  That may change
someday, but these principles probably will not.&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m going to say &amp;ldquo;callbacks&amp;rdquo; below, but you can mentally
substitute whatever thing you like.  The fundamental points are
equally relevant if you&amp;rsquo;re using threads, or gotos, or any other
abstraction or language for doing things asynchronously and
controlling what the computer does next.&lt;/p&gt;
&lt;p&gt;Note that all of this &lt;em&gt;also&lt;/em&gt; applies if your asynchronous API &amp;ldquo;looks
synchronous&amp;rdquo;.  Even if you design a thing so that I do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;x = foo();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and it&amp;rsquo;s completely agnostic at authoring time whether &lt;code&gt;foo()&lt;/code&gt; spins
on CPU or yields while it awaits a network response, being able to
reason about the program means that I need to be able to know whether
&lt;em&gt;other&lt;/em&gt; parts of the program will be running while I&amp;rsquo;m waiting for
&lt;code&gt;foo()&lt;/code&gt; to return a value to be put into &lt;code&gt;x&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So, even if the &lt;em&gt;syntax&lt;/em&gt; is the same (which has its benefits as well
as its drawbacks, of course), the &lt;em&gt;semantics&lt;/em&gt; must be crisply defined.&lt;/p&gt;
&lt;p&gt;Or else Zalgo is released.&lt;/p&gt;
&lt;h3&gt;Do Not Release Zalgo&lt;/h3&gt;
&lt;p&gt;Warning: Before proceeding any further, &lt;a href=&quot;http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/&quot;&gt;go read this excellent essay
by
Havoc&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t read &lt;a href=&quot;http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/&quot;&gt;Havoc&amp;rsquo;s post on
callbacks&lt;/a&gt;,
then you will perhaps be tempted to make silly arguments that make no
sense, and demand justification for things that have been established
beyond any reasonable doubt long ago, or tell me that I&amp;rsquo;m overstating
the issue.&lt;/p&gt;
&lt;p&gt;Have you &lt;a href=&quot;http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/&quot;&gt;read Havoc&amp;rsquo;s post on
callbacks&lt;/a&gt;?
Yes?  Ok.&lt;/p&gt;
&lt;p&gt;If you didn&amp;rsquo;t, shame on you. &lt;a href=&quot;http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/&quot;&gt;Go read
it.&lt;/a&gt;
If you still haven&amp;rsquo;t, I&amp;rsquo;ll sum up:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you have an API which takes a callback,&lt;br /&gt;and &lt;em&gt;sometimes&lt;/em&gt; that callback is called immediately,&lt;br /&gt;and &lt;em&gt;other times&lt;/em&gt; that callback is called at some point in the future,&lt;br /&gt;then you will render any code using this API impossible to reason
about, and cause the release of &lt;a href=&quot;http://knowyourmeme.com/memes/zalgo&quot;&gt;Zalgo&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Needless to say, releasing Zalgo onto unsuspecting users is extremely
inappropriate.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not the case that function-taking APIs must always call the
function asynchronously.  For example, &lt;code&gt;Array.prototype.forEach&lt;/code&gt; calls
the callback immediately, before returning.  &lt;em&gt;But then it never calls
it again.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nor is it the case that function-taking APIs must always call the
function synchronously.  For example, &lt;code&gt;setTimeout&lt;/code&gt; and friends call
the callback after the current run-to-completion.  &lt;em&gt;But they always
return before calling the callback.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In other words, to avoid the release of Zalgo, exactly one of the
following must be true:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;var after = false;
callbackTaker(function() {
  assert(after === true);
});
after = true;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OR:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;var after = false;
callbackTaker(function() {
  assert(after === false);
});
after = true;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and in no case can you ever have a function where exactly one of these
assertions is not guaranteed.&lt;/p&gt;
&lt;h4&gt;What about internal functions in my library that are not exposed?&lt;/h4&gt;
&lt;p&gt;Well, ok, but you&amp;rsquo;re releasing Zalgo in your internal library.  I
don&amp;rsquo;t recommend it.  Zalgo usually finds a way to sneak His Dark͝
Tend̴r̡i҉ls out into the world.&lt;/p&gt;
&lt;h4&gt;What if I suspect that a function might try to release Zalgo?&lt;/h4&gt;
&lt;p&gt;This is a great question.  For example, perhaps you let users supply
your library with a callback-taking function, and you worry that they
might be incompetent or careless, but want to ensure that &lt;em&gt;your&lt;/em&gt;
library does its best to keep Th͏e Da҉rk Pońy Lo͘r͠d HE ́C͡OM̴E̸S contained
appropriately.&lt;/p&gt;
&lt;p&gt;Assuming that your platform has an event loop or some other kind of
abstraction that you can hang stuff on, you can do something like
this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;function zalgoContainer(cbTaker, cb) {
  var sync = true;
  cbTaker(cbWrap);
  sync = false;

  function cbWrap(er, data) {
    if (sync)
      process.nextTick(function() {
        cb(er, data);
      });
    else
      cb(er, data);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This uses Node&amp;rsquo;s synthetic deferral function: &lt;code&gt;process.nextTick&lt;/code&gt;,
which runs the supplied callback at the end of the current
run-to-completion.  You can also use &lt;code&gt;setImmediate&lt;/code&gt;, but that&amp;rsquo;s
slightly slower.  (Yes, yes, it&amp;rsquo;s named badly; &lt;code&gt;setImmediate&lt;/code&gt; is
slightly &lt;em&gt;less&lt;/em&gt; &amp;ldquo;immediate&amp;rdquo; and more &amp;ldquo;next&amp;rdquo; than &lt;code&gt;nextTick&lt;/code&gt;, but this
is an accident of history we cannot correct without a time machine.)&lt;/p&gt;
&lt;h4&gt;But isn&amp;rsquo;t it faster to just call the callback right away?&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/&quot;&gt;Go read Havoc&amp;rsquo;s blog post.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Moving on.&lt;/p&gt;
&lt;h3&gt;Avoid Synthetic Deferrals&lt;/h3&gt;
&lt;p&gt;I know what you&amp;rsquo;re thinking: &lt;i&gt;&amp;ldquo;But you just told me to use
&lt;code&gt;nextTick&lt;/code&gt;!&amp;rdquo;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;And yes, it&amp;rsquo;s true, you should use synthetic deferrals when the only
alternative is releasing Zalgo.  However, these synthetic deferrals
should be treated as a code smell.  They are a sign that your API
might not be optimally designed.&lt;/p&gt;
&lt;p&gt;Ideally, you should know whether something is going to be immediately
available, or not.  Realistically, you should be able to take a pretty
decent guess about whether the result is going to be immediately
available &lt;em&gt;most of the time&lt;/em&gt;, or not, and then follow this handy
guide:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;If the result is usually available right now, and performance
matters a lot:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Check if the result is available.&lt;/li&gt;
&lt;li&gt;If it is, return it.&lt;/li&gt;
&lt;li&gt;If it is not, return an error code, set a flag, etc.&lt;/li&gt;
&lt;li&gt;Provide some Zalgo-safe mechanism for handling the error case
and awaiting future availability.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Here&amp;rsquo;s an silly example to illustrate the pattern:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;var isAvailable = true;
var i = 0;
function usuallyAvailable() {
  i++;
  if (i === 10) {
    i = 0;
    isAvailable = false;
    setTimeout(function() {
      isAvailable = true;
      if (waiting.length) {
        for (var cb = waiting.shift();
             cb;
             cb = waiting.shift()) {
          cb();
        }
      }
    });
  }
&lt;p&gt;return isAvailable ? i : new Error(&#39;not available&#39;);
}&lt;/p&gt;
&lt;p&gt;function waitForAvailability(cb) {
// Could also defer this and just call it,
// but it is avoidable, which is the point.
if (isAvailable)
throw new Error(&amp;quot;hey, dummy, check first!&amp;quot;);
waiting.push(cb);
}&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;In this case, when the user calls &lt;code&gt;usuallyAvailable()&lt;/code&gt; they&amp;rsquo;ll get
a number between 0 and 9, 90% of the time.  It&amp;rsquo;s on the caller to
check the return value, see if it means that they have to wait,
etc.&lt;/p&gt;
&lt;p&gt;This makes the API a bit trickier to use, because the caller has
to know to detect the error state.  If it&amp;rsquo;s very rare, then
there&amp;rsquo;s a chance that they might get surprised in production the
first time it fails.  This is a communication problem, like most
API design concerns, but if performance is critical, it &lt;em&gt;may&lt;/em&gt; be
worth the hit to avoid artificial deferrals in the common cases.&lt;/p&gt;
&lt;p&gt;Note that this is functionally equivalent to
&lt;code&gt;O_NONBLOCK/EWOULDBLOCK/poll&lt;/code&gt; pattern.  You try to do a thing,
and if it is not available right now, it raises an error, and you
wait until it IS available, and then try again.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If the result is usually available right now, but performance
doesn&amp;rsquo;t matter all that much&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  For example, the function might only be called a few times at
  startup, etc.&lt;/p&gt;
&lt;p&gt;  In this case, just follow the &amp;ldquo;result is usually not available
  right now&amp;rdquo; approach.&lt;/p&gt;
&lt;p&gt;  Note that performance actually does matter much more often than
  you probably realize.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If the result is usually not available right now&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Take a callback.&lt;/li&gt;
&lt;li&gt;Artificially defer the callback if the data is available right
now.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Here&amp;rsquo;s an example:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;var cachedValue;
function usuallyAsync(cb) {
  if (cachedValue !== undefined)
    process.nextTick(function() {
      cb(cachedValue);
    });
  else
    doSomeSlowThing(function(result) {
      cb(cachedValue = result);
    });
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The basic point here is that &amp;ldquo;async&amp;rdquo; is not some magic mustard you
smear all over your API to make it fast.  &lt;strong&gt;Asynchronous APIs do
not go faster.  They go slower.&lt;/strong&gt;  However, they prevent &lt;em&gt;other&lt;/em&gt; parts
of the program from having to wait for them, so &lt;em&gt;overall&lt;/em&gt; program
performance can be improved.&lt;/p&gt;
&lt;p&gt;Note that this applies to not just callbacks, but also to Promises and
any other control-flow abstractions.  If your API is frequently
returning a Promise for a value that you know &lt;em&gt;right now&lt;/em&gt;, then either
you are leaving performance on the table, or your Promise
implementation releases H̵͘͡e ̡wh́o͠ ̶Prom̀͟͝i̴s̀es̀ o҉̶nl̨͟y̧ ̛̛m̴͠͝a̡̛͢d̡n̴̡e͝s̸s͠,
T̢҉̸h̴̷̸̢ȩ͡ ͘͠N͢͢e͏͏͢͠z̛͏͜p̸̀̕͠ȩ́͝͝r҉̛́͠d̴̀i̴̕҉͞a̴̡͝͠n̢͜͟͢͟ ̶̴̢͝h̷̕͠í̸̧̛͜v̶̢͢͡e̕͡-̸̀͝m̷͜i̛͘͞ņ̛͘͟҉d̶̶̡̧͜ ̷̛͞o̵̢͘͟͞f̶̢̀͢͢ ̶̧͟͡c̕͝h̶̀͘͘à͏o҉̴́͢s̸͘͘͝͞.̨͢͞.&lt;/p&gt;
&lt;p&gt;So, don&amp;rsquo;t do that.&lt;/p&gt;
&lt;h3&gt;Pick a Pattern and Stick With It&lt;/h3&gt;
&lt;p&gt;This really cannot be overstated.  Like the question of callbacks vs
Promises vs whatever, the specific pattern that you choose doesn&amp;rsquo;t
matter very much.  What &lt;em&gt;does&lt;/em&gt; matter very much is that you stick to
that pattern with ruthless consistency.  The pattern should cover how
a user interacts with your API, and how errors are communicated.&lt;/p&gt;
&lt;p&gt;In Node.js, the callback pattern is:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Async functions take a single callback function as their final
argument.&lt;/li&gt;
&lt;li&gt;That callback is called in the future with the first argument set
to an &lt;code&gt;Error&lt;/code&gt; object in the case of failure, and any additional
results as the subsequent arguments.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Why have the callback as the last argument?  Why make Error the first
arg?  It doesn&amp;rsquo;t really matter very much.  Ostensibly, making the
callback the last arg is because&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;doSomething(a, b, c, d, function(er) {
  ...
})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;scans a bit better than:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-javascript&quot;&gt;doSomething(function(er) {
  ...
}, a, b, c)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and putting the error first is so that it&amp;rsquo;s always in the same place.&lt;/p&gt;
&lt;p&gt;There were other choices that could have been made.  But the important
thing was just to pick one, and move forward with it.  This
consistency makes it much less difficult to convert Node APIs into
other sorts of aync patterns, and greatly reduces the communication
required to tell a user how to use a Node.js callback-taking API.
 &lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/08/neil-gaiman-wordsthatfit-sandandglass/"/>
		<updated>2013-08-15T14:55:11Z</updated>
		<id>https://blog.izs.me/2013/08/neil-gaiman-wordsthatfit-sandandglass/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://neil-gaiman.tumblr.com/post/58252249211/wordsthatfit-sandandglass-jessica-williams&quot;&gt;neil-gaiman&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://wordsthatfit.tumblr.com/post/58241533989/sandandglass-jessica-williams-proposes-applying&quot;&gt;wordsthatfit&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://sandandglass.tumblr.com/post/58218206040/jessica-williams-proposes-applying-new-yorks-stop&quot;&gt;sandandglass&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Jessica Williams proposes applying New York’s Stop and Frisk policy to Wall Street bankers. &lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This all day.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Oh yes.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Money and Open Source</title>
		<link href="https://blog.izs.me/2013/08/money-and-open-source/"/>
		<updated>2013-08-07T21:08:41Z</updated>
		<id>https://blog.izs.me/2013/08/money-and-open-source/</id>
		<content type="html">&lt;p&gt;I wrote a thing on Medium.  Go &lt;a href=&quot;https://medium.com/open-source-life/d44a1953749c&quot;&gt;read it&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>TVTropes.com</title>
		<link href="https://blog.izs.me/2013/08/tvtropescom/"/>
		<updated>2013-08-01T21:29:17Z</updated>
		<id>https://blog.izs.me/2013/08/tvtropescom/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;actually I understand that society is like brimming over with misunderstandings of the past, if a time traveler came like he could not help but see them nonstop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;actually half of tvtropes covers these&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;fuck you don&#39;t mention that site i&#39;m not allowed to visit that site fuck you and your fucking temptations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;sorry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i just have to summon a revulsion reaction whenever fucking tvtropes is mentioned&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;otherwise, it&#39;s &amp;quot;good bye afternoon&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;it&#39;slike wikipedia but 10 times worse&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;yeah, The Dung Ages&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;basically the entire setting of Holy Grail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;although some people call that filth &amp;quot;England&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;hahaha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;like for all I know they just went outside and shot scenes and England is always overcast and muddy and everybody is covered in filth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;oh man I loaded the page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jason Smith&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;tvtropes is ten times worse than wikipedia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Jason Smith disconnected&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>WTF is EMFILE and why does it happen to me</title>
		<link href="https://blog.izs.me/2013/07/wtf-is-emfile-and-why-does-it-happen-to-me/"/>
		<updated>2013-07-30T00:15:00Z</updated>
		<id>https://blog.izs.me/2013/07/wtf-is-emfile-and-why-does-it-happen-to-me/</id>
		<content type="html">&lt;p&gt;By &lt;a href=&quot;https://twitter.com/maxogden/status/361995189205741568&quot;&gt;request&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The error code &lt;code&gt;EMFILE&lt;/code&gt; means that a process is trying to open too many files.  Unix systems have a max number of file descriptors that may be assigned, also known as the &lt;code&gt;MAX_OPEN&lt;/code&gt; value.  On OS X, the default is 256, which is pretty low for many modern programs that do a lot of file system writing and reading.&lt;/p&gt;
&lt;p&gt;This max value can be read or modified using the &lt;code&gt;ulimit -n&lt;/code&gt; command.  Since I&amp;rsquo;ve bumped up the MAX_OPEN ulimit value to &lt;code&gt;2560&lt;/code&gt; on my system, here&amp;rsquo;s what my laptop reports:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2560
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These ulimit values are important!  You don&amp;rsquo;t want runaway programs to accidentally open way too many files, and take up unnecessary resources on your program by accident.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://npmjs.org/&quot;&gt;npm&lt;/a&gt;, being a package manager, opens a lot of files, often more than 256 at a single time.  In order to get around this limitation, there are two options:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Always be very careful to not open too many files.&lt;/li&gt;
&lt;li&gt;Handle &lt;code&gt;EMFILE&lt;/code&gt; errors by queuing the &lt;code&gt;open&lt;/code&gt; operation, and then attempting it again once a file closes.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The only way to reliably do #2, however, is by monkey-patching Node&amp;rsquo;s &lt;code&gt;fs&lt;/code&gt; module, which is exactly what the &lt;a href=&quot;https://npmjs.org/package/graceful-fs&quot;&gt;graceful-fs&lt;/a&gt; module does.  A really interesting collision of bugs in npm, graceful-fs, and lockfile, led it to ignore certain open operations, and so you could easily get into cases where the script could not reasonably handle these problems.  Basically, it would open a lockfile to reserve a specific tar operation, and then not have any file descriptors left to actually &lt;strong&gt;do&lt;/strong&gt; the tar unpack operation!  Also, graceful-fs was not actually monkey-patching with a queue, but instead trying to do some fancy clever back-off stuff, which just wasn&amp;rsquo;t as solid.&lt;/p&gt;
&lt;p&gt;Graceful-fs 2.0 and lockfile 0.4 contain the fixes for their relevant parts of this flub up.  The latest version of npm 1.3 has all the fixes.&lt;/p&gt;
&lt;p&gt;At this point, no matter HOW small your &lt;code&gt;ulimit -n&lt;/code&gt; value is, &lt;code&gt;graceful-fs&lt;/code&gt; will prevent it from ever raising an &lt;code&gt;EMFILE&lt;/code&gt; error.  Of course, it does this at the expense of making &lt;code&gt;open&lt;/code&gt; operations potentially take longer.  I&amp;rsquo;m planning on exploring using a slightly smarter monkey-patch, so that it only will enqueue open operations that have some kind of special flag or other opt-in switch.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>node_modules</title>
		<link href="https://blog.izs.me/2013/07/nodemodules/"/>
		<updated>2013-07-29T23:49:09Z</updated>
		<id>https://blog.izs.me/2013/07/nodemodules/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/56791389899/node-modules&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;img alt=&quot;image&quot; src=&quot;https://blog.izs.me/2013/07/nodemodules/Ho7X0W0.gif&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Submitted by &lt;a href=&quot;https://twitter.com/shamakry&quot;&gt;@shamakry&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>001 Pickles</title>
		<link href="https://blog.izs.me/2013/07/001-pickles/"/>
		<updated>2013-07-09T04:34:40Z</updated>
		<id>https://blog.izs.me/2013/07/001-pickles/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://mr-pi.tumblr.com/post/54975095803/001-pickles&quot; class=&quot;tumblr_blog&quot;&gt;mr-pi&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;An inaugural chat.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://us-east.manta.joyent.com/isaacs/public/mr-pi/001-pickles.m4a&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://us-east.manta.joyent.com/isaacs/public/mr-pi/001-pickles.m4a&quot;&gt;https://us-east.manta.joyent.com/isaacs/public/mr-pi/001-pickles.m4a&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Raccoons</title>
		<link href="https://blog.izs.me/2013/07/raccoons/"/>
		<updated>2013-07-08T20:44:28Z</updated>
		<id>https://blog.izs.me/2013/07/raccoons/</id>
		<content type="html">&lt;dl class=&quot;chat&quot;&gt;&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    &lt;img style=&quot;width:100%&quot; src=&quot;https://66.media.tumblr.com/tumblr_lpzz7uqpCm1qzrsh7o1_500.jpg&quot; /&gt;&lt;/dd&gt;
&lt;dt class=&quot;even person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   see
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    how can you hate them
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   i grew up with them
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    you&amp;rsquo;re like the naive boy who thinks the pretty girl must be nice, because she is pretty.
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   i know she kills kittens and plays in garbage.
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    &lt;img style=&quot;width:100%&quot; src=&quot;https://blog.izs.me/2013/07/raccoons/AJB61sT.jpg&quot; /&gt;&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;i assume that they then proceeded to drown the hellspawn, before it could grow into a full-sized monster.
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    it&amp;rsquo;s the only moral choice.
&lt;/dd&gt;
&lt;dt class=&quot;even person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   the moral choice would be give him a cupcake
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    and perhaps some pizza
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   you are blinded by the cute.
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    and the awesome
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   i&amp;rsquo;d think that an aussie would understand animals being evil, since you are from the island where Nature Wants To Kill You
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    they steal floormats
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   did i ever tell you about the time that raccoons broke into my car, and shat on the seats?
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    i&amp;rsquo;m not joking.
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   they actually did this.
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    what did you do to annoy them
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   oh, i don&amp;rsquo;t know, i lived in connecticut and parked my car in my driveway
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    they took some stinky raw chicken from the garbage, used their claws to push down my car windows (permanently breaking the window roll-down mechanism), tore up my seats, and shat right on the dashboard.  then left the chicken bones in the car.
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   they&amp;rsquo;re not cute when they&amp;rsquo;re shitting in your car and getting rotten chicken juice all over the damn place.
&lt;/dd&gt;
&lt;dt class=&quot;odd person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    they were still there the next morning, just chillin
&lt;/dd&gt;
&lt;dt class=&quot;even person2&quot;&gt;Isaac Schlueter:&lt;/dt&gt;
&lt;dd class=&quot;even&quot;&gt;   and SUPER PISSED that i wanted them to leave.
&lt;/dd&gt;
&lt;dt class=&quot;odd person1&quot;&gt;Jared W:&lt;/dt&gt;
&lt;dd class=&quot;odd&quot;&gt;    Seems reasonable&lt;/dd&gt;
&lt;/dl&gt;
</content>
	</entry>
	
	<entry>
		<title>NodeConf 2013</title>
		<link href="https://blog.izs.me/2013/07/nodeconf-2013/"/>
		<updated>2013-07-06T18:19:55Z</updated>
		<id>https://blog.izs.me/2013/07/nodeconf-2013/</id>
		<content type="html">&lt;p&gt;For the last 4 years, NodeConf has been a groundbreaking and
innovative community conference unlike any other.  I&amp;rsquo;ve been
impressed and honored to be a part of it every time.&lt;/p&gt;
&lt;p&gt;One of Mikeal&amp;rsquo;s goals with running conferences, and his approach to
open source in general, is to make the entire community more
egalitarian and welcoming.  That&amp;rsquo;s why there&amp;rsquo;s always been an “opening
party” rather than a “speakers dinner”; &lt;em&gt;all&lt;/em&gt; the attendees hang out
together, there is no “speakers lounge”.  Yes, there are celebrities
in any community, the visible people who are highly engaged with the
core technology and help keep the wheels turning.  But the entire
community feels unwelcoming and strange when those people are treated
as a separate class of untouchables.  We&amp;rsquo;re all just humans.&lt;/p&gt;
&lt;p&gt;Nowhere is this more apparent than at Walker Creek Ranch.  This was my
third time at the place in as many years.  The last two years,
Mikeal&amp;rsquo;s arranged a NodeConf Summer Camp there, which was like a
scaled down unconference-style meeting of people who came and
discussed where the core of Node would go next.  Without much of an
agenda, it was very free-form, and the comfortable setting allowed for
some intense debates about stuff ranging from putting zlib in core, to
domains, to the needs of our Stream interface, and so on.&lt;/p&gt;
&lt;p&gt;Walker Creek Range is magical.  In the woods, we&amp;rsquo;re all animals.
We&amp;rsquo;re all of the same tribe, all on the same team.  When you jump in a
lake with someone, or sit under a tree, or make smores by a campfire,
you are bonded in a way that email and IRC can never achieve.  There
are no podiums or stages.  You don&amp;rsquo;t need to save your seat or worry
about someone running off with your bag (where would they go?)&lt;/p&gt;
&lt;p&gt;When Mikeal said he was going to just do a single conference this
year, instead of a traditional NodeConf and then a separate NodeConf
Summer Camp, and that it&amp;rsquo;d be at Walker Creek Ranch, I told him it was
a great idea.  When he told me that I&amp;rsquo;d have to teach the same class 8
times, I winced.  I told him, “Sure.  I&amp;rsquo;ll do that.  I don&amp;rsquo;t think
you&amp;rsquo;ll find 7 other people who will, though.”  That is because I can be cynical.&lt;/p&gt;
&lt;p&gt;Time and again, this community surprises me, and Mikeal surprises me.
Not only did he find plenty of people to staff all the 8 sessions, he
somehow managed to trick everyone into actually attending every
session, even though I&amp;rsquo;m sure many of them came in thinking that most
of these sessions would be way over their heads.&lt;/p&gt;
&lt;p&gt;So, enough gushing.  Here&amp;rsquo;s what was in the How To Node Core session
that I led with Bert Belder, who was a tremendous help.&lt;/p&gt;
&lt;h2&gt;How To Node Core&lt;/h2&gt;
&lt;p&gt;As people walked in, it&amp;rsquo;s important to remember that they usually had
no idea what session &amp;ldquo;6&amp;rdquo; was going to be.  Also, because the schedules
were randomized, they weren&amp;rsquo;t seeing the same people that they&amp;rsquo;d met
in their previous sessions.  Strangers!  Surprises!  Oh no!&lt;/p&gt;
&lt;p&gt;When they saw me and Bert in there, and the first slide up on the
projector, a few people took a noticeable gulp, like they accidentally
signed up for Calc 3, but should have been in Algebra 1.  &lt;strong&gt;This is
exactly the reaction that we were hoping for.&lt;/strong&gt;  The &lt;em&gt;point&lt;/em&gt; of
NodeConf this year, the goal, was to expose people, in an accessible
hands-on way, to something that they never would have thought that
they could do.&lt;/p&gt;
&lt;p&gt;(Of course, a few people saw which session it was, and were not
fazed, since a bunch of people at the conference had already landed
pull requests before.)&lt;/p&gt;
&lt;p&gt;Here are the slides:&lt;/p&gt;
&lt;div style=&quot;width: 100%; position: relative; overflow: hidden; padding: 0; padding-top: 83%;&quot;&gt;&lt;iframe src=&quot;https://www.slideshare.net/slideshow/embed_code/key/fbRfeJwiLk8iX3&quot; width=&quot;427&quot; height=&quot;356&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot; style=&quot;border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%; position: absolute; width: 100%; height: 100%; top: 0; left: 0; box-sizing: border-box; margin: 0;&quot; allowfullscreen=&quot;&quot;&gt; &lt;/iframe&gt;&lt;/div&gt; &lt;div style=&quot;margin-bottom:5px&quot;&gt; &lt;strong&gt; &lt;a href=&quot;https://www.slideshare.net/slideshow/how-tonodecore/23878251&quot; title=&quot;How to-node-core&quot; target=&quot;_blank&quot;&gt;How to-node-core&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href=&quot;https://www.slideshare.net/IsaacSchlueter&quot; target=&quot;_blank&quot;&gt;IsaacSchlueter&lt;/a&gt;&lt;/strong&gt; &lt;/div&gt;
&lt;p&gt;The first thing we did was make sure that everyone had the Node.js
source code checked out, and could build it.  Typically there were 3
or 4 people who needed help getting to this step, and Bert would run
around for the first few minutes with USB sticks getting people up and
running.&lt;/p&gt;
&lt;p&gt;A few people noticed the &amp;ldquo;nodeconf2013&amp;rdquo; branch in the github repo
already, so they had all the examples and source code already written.&lt;/p&gt;
&lt;p&gt;When I got to the &amp;ldquo;example&amp;rdquo; portions in the slides, I&amp;rsquo;d stop and do
the Substack-style &lt;code&gt;vim *.*&lt;/code&gt; and then use &lt;code&gt;:next&lt;/code&gt; and &lt;code&gt;:prev&lt;/code&gt; to move
between files.&lt;/p&gt;
&lt;p&gt;The first example was &lt;a href=&quot;https://gist.github.com/isaacs/5938171&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The second was &lt;a href=&quot;https://gist.github.com/isaacs/5938207&quot;&gt;this&lt;/a&gt;.  For
many people at the conference, this was their first ever experience
editing a C++ file, and compiling the program with their changes.&lt;/p&gt;
&lt;p&gt;And &lt;a href=&quot;https://gist.github.com/isaacs/5938185&quot;&gt;here&lt;/a&gt; are the diffs for
the exercise.  Not everyone finished it, and many probably implemented
it somewhat differently, but the exploration was the point of the
work, not the destination.&lt;/p&gt;
&lt;h2&gt;Takeaways&lt;/h2&gt;
&lt;p&gt;The results were very encouraging.  A lot of people mentioned that
they&amp;rsquo;d always felt like Node Core is this really intimidating thing,
and never even bothered to look under the hood to see how it was all
wired together.  They were genuinely surprised to find out that Node&amp;rsquo;s
internal modules are very much like a plain old Node program, with
&lt;code&gt;require()&lt;/code&gt; and everything.&lt;/p&gt;
&lt;p&gt;Also, ironically, I found that when I went &lt;em&gt;faster&lt;/em&gt;, there were
&lt;em&gt;fewer&lt;/em&gt; people who fell behind.  I don&amp;rsquo;t know if the energy of the
speaker makes them feel more motivated, or if the fear of being left
behind makes them pay more attention, or what.  But when I slowed down
to let people catch up, they fell behind worse, which surprised me.&lt;/p&gt;
&lt;p&gt;If you ever want to run an event like this, the value of having another set of hands there really cannot be overstated.  Without Bert running around to keep people following along, it never would have went as smoothly as it did.  I did most of the talking, but he was absolutely essential.&lt;/p&gt;
&lt;p&gt;All in all, I think we had a big effect on many peoples&amp;rsquo; level of
intimidation about contributing to Node core.  The first step is to
realize that you can do it, so it&amp;rsquo;s worth trying.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Generosity</title>
		<link href="https://blog.izs.me/2013/07/generosity/"/>
		<updated>2013-07-01T04:31:11Z</updated>
		<id>https://blog.izs.me/2013/07/generosity/</id>
		<content type="html">&lt;p&gt; &lt;a href=&quot;https://twitter.com/johnroderick&quot; target=&quot;_blank&quot;&gt;John Roderick&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I do believe that being generous— tipping bellmen, and the guy that opens the door for your taxi— handing him some money, even though it’s clear to all parties involved that he’s not performed very much of a service— opening the door for you is not a thing that costs a dollar. Except it does cost a dollar, because that is what we have agreed. He opened the door for you, you hand him a dollar. That is part of the social contract, and to preserve that dollar for yourself is to live in a world where you are not fully embracing the social contract and are therefore not going to prosper by definition.
&lt;/p&gt;&lt;p&gt;Learning that lesson, that money is fake, money is absolutely fake, and to treat it like it’s real, and to preserve it like it matters is to miss the point of it entirely. That is not to say that you should be wanton with it. You should count it, and you should know what it represents, but it is just a symbolic thing.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/06/fuckyeahdementia-obama-getting-lucky/"/>
		<updated>2013-06-25T15:35:20Z</updated>
		<id>https://blog.izs.me/2013/06/fuckyeahdementia-obama-getting-lucky/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://fuckyeahdementia.com/post/53774820760/obama-getting-lucky&quot; class=&quot;tumblr_blog&quot;&gt;fuckyeahdementia&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;obama getting lucky&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Trying to pin down Isaac&#39;s coding style</title>
		<link href="https://blog.izs.me/2013/05/trying-to-pin-down-isaacs-coding-style/"/>
		<updated>2013-05-29T00:11:00Z</updated>
		<id>https://blog.izs.me/2013/05/trying-to-pin-down-isaacs-coding-style/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://nodejsreactions.tumblr.com/post/51550344296/trying-to-pin-down-isaacs-coding-style&quot; class=&quot;tumblr_blog&quot;&gt;nodejsreactions&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2013/05/trying-to-pin-down-isaacs-coding-style/tumblr_inline_mni72fy6W81qz4rgp.gif&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is my new favorite tumblr.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Curiosity and The Practice</title>
		<link href="https://blog.izs.me/2013/05/curiosity-and-the-practice/"/>
		<updated>2013-05-06T20:44:00Z</updated>
		<id>https://blog.izs.me/2013/05/curiosity-and-the-practice/</id>
		<content type="html">&lt;p&gt;All too often, people do good things for the wrong reasons, and find it&amp;rsquo;s not sustainable.  Compare the differences between these statements:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;I want to develop software.&lt;br /&gt;
  I want to be a software developer.&lt;/p&gt;
  &lt;p&gt;I want to write a novel.&lt;br /&gt;
  I want to be a novelist.&lt;/p&gt;
  &lt;p&gt;I want to do yoga.&lt;br /&gt;
  I want to be a yogi.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The first statement is &amp;ldquo;I want to do a thing&amp;rdquo;, and the second is &amp;ldquo;I want to be a person &lt;em&gt;who has done&lt;/em&gt; a thing&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve written your first story, or software program, or done to your first yoga session, that box is checked, and you&amp;rsquo;re done.  Where is the motivation to continue The Practice?&lt;/p&gt;
&lt;p&gt;There is no way to maintain velocity without lightness, and there is no way to maintain lightness without curiosity.&lt;/p&gt;
&lt;p&gt;Curiosity is not a state of &amp;ldquo;wanting to be curious&amp;rdquo;, but rather a state of &amp;ldquo;wanting to find out&amp;rdquo;. There is a tremendous difference!  &amp;ldquo;Wanting to be&amp;rdquo; is attainment of status, whereas &amp;ldquo;wanting to do&amp;rdquo; is desire and motion.&lt;/p&gt;
&lt;p&gt;These days, I try to catch myself saying &amp;ldquo;I want to be XYZ&amp;rdquo;, and instead translate that into what it really means.  Sometimes, I find that it quickly disabuses me of a mistaken desire.&lt;/p&gt;
&lt;p&gt;If you want to be a writer, write.  That&amp;rsquo;s all that it takes, but it takes that forever, so if you don&amp;rsquo;t want to write, perhaps reevaluate your desire to be a writer.&lt;/p&gt;
&lt;p&gt;If you want to be a programmer, program.  That&amp;rsquo;s all that it takes, but it takes that forever, so if you don&amp;rsquo;t want to program, perhaps reevaluate your desire to be a programmer.&lt;/p&gt;
&lt;p&gt;If you want to be a yogi, do yoga.  That&amp;rsquo;s all that it takes, but it takes that forever, so if you don&amp;rsquo;t want to do yoga, perhaps reevaluate your desire to be a yogi.&lt;/p&gt;
&lt;p&gt;Often, when we say, &amp;ldquo;I want to be XYZ&amp;rdquo;, what we actually mean is not &amp;ldquo;I want to do the thing that XYZ does&amp;rdquo;, but rather, &amp;ldquo;I want the respect and self-esteem that comes with the skills that come from doing what XYZ does.&amp;rdquo;  I want people to read something, and admire it, and then admire me because of it.  I want people to use software, and recognize that I create it, and think I&amp;rsquo;m smart.  I want people to think I&amp;rsquo;m spiritual and wise, and admire my healthy body and calmness.&lt;/p&gt;
&lt;p&gt;I want other people to wish they could be me.&lt;/p&gt;
&lt;p&gt;They all find the frightening reality that there is no end to be attained.  You will never finish writing all the software, or all the words, or find that you&amp;rsquo;ve learned all that yoga practice can teach you.  If your goal is at the end, you will find only discouragement and disappointment, and no amount of duty or discipline will keep you on the path.&lt;/p&gt;
&lt;p&gt;So the writer buys a beret, and a moleskine, and sits in cafes sipping espresso.  The programmer wears an appropriately nerdy T-shirt, and plays video games, and says snarky things on Hacker News.  The yogi puts on stretchy pants and carries a rubber mat around.  If any of them do attain some shred of the respect they crave, they know in their heart that it is empty, and it never satisfies the longing.&lt;/p&gt;
&lt;p&gt;On the other hand, if your goal is the continual curious fire of &amp;ldquo;Oh, neat!  What&amp;rsquo;s next!?&amp;rdquo;, then each challenge along the path only makes you hungrier for more, and every step is light.  The challenge becomes not &amp;ldquo;How do I stay motivated?&amp;rdquo; but rather, &amp;ldquo;How do I keep my motivation in check, so that it does not consume me entirely?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Even, upon reading this, if you find yourself thinking &amp;ldquo;I want to be curious&amp;rdquo;, stop and unpack that!  Don&amp;rsquo;t just be a person who was curious once, and got the merit badge!  Be actively curious right now, in the present, and let that fire keep you going!&lt;/p&gt;
&lt;p&gt;So, what is it you&amp;rsquo;d like to learn?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Unix Philosophy and Node.js</title>
		<link href="https://blog.izs.me/2013/04/unix-philosophy-and-nodejs/"/>
		<updated>2013-04-18T15:45:00Z</updated>
		<id>https://blog.izs.me/2013/04/unix-philosophy-and-nodejs/</id>
		<content type="html">&lt;p&gt;At TxJS the other day, I gave a talk where I mentioned that the Unix Philosophy is a crucial part of the patterns, opinions, and culture of Node.js.  As usual, I made my &lt;a href=&quot;https://www.slideshare.net/IsaacSchlueter/nodejs-patterns-and-opinions&quot;&gt;slides available online&lt;/a&gt; well in advance of the talk video being available.&lt;/p&gt;
&lt;p&gt;For some reason, this brief mention of &amp;ldquo;Unix Philosophy&amp;rdquo; set off a few peoples&amp;rsquo; ire.  Since I had only 25 minutes, and every slide could probably be its own talk entirely, I was rather light on elaboration.  Chances are, the video won&amp;rsquo;t add all that much context.  But the goal was to pique conversation, so maybe that&amp;rsquo;s a success if it invites criticism.  After all, uninformed trolling is just an invitation for education, so I thought I&amp;rsquo;d explain.&lt;/p&gt;
&lt;p&gt;Eric S. Raymond collected a few of the best explanations of the Unix Philosophy in his book, &lt;a href=&quot;http://www.catb.org/esr/writings/taoup/html/ch01s06.html&quot;&gt;The Art Of Unix Programming&lt;/a&gt;.  He elaborates on 17 specific principles, but my favorite formulation of the Unix Philosophy is the terse explanation from Doug McIlroy as quoted by Salus in &lt;em&gt;A Quarter Century of Unix&lt;/em&gt;:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;This is the Unix philosophy:&lt;/p&gt;
  &lt;p&gt;Write programs that do one thing and do it well.&lt;/p&gt;
  &lt;p&gt;Write programs to work together.&lt;/p&gt;
  &lt;p&gt;Write programs to handle text streams, because that is a universal interface.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;McIlroy&amp;rsquo;s slightly longer original 4-point formulation is this:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;(i) Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features.&lt;/p&gt;
  &lt;p&gt;(ii) Expect the output of every program to become the input to another, as yet unknown, program. Don&amp;rsquo;t clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don&amp;rsquo;t insist on interactive input.&lt;/p&gt;
  &lt;p&gt;(iii) Design and build software, even operating systems, to be tried early, ideally within weeks. Don&amp;rsquo;t hesitate to throw away the clumsy parts and rebuild them.&lt;/p&gt;
  &lt;p&gt;(iv) Use tools in preference to unskilled help to lighten a programming task, even if you have to detour to build the tools and expect to throw some of them out after you&amp;rsquo;ve finished using them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mike Gancarz, who worked on the X Window System, summed up the Unix Philosophy in 9 points:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;ol&gt;&lt;li&gt;Small is beautiful.&lt;/li&gt;
  &lt;li&gt;Make each program do one thing well.&lt;/li&gt;
  &lt;li&gt;Build a prototype as soon as possible.&lt;/li&gt;
  &lt;li&gt;Choose portability over efficiency.&lt;/li&gt;
  &lt;li&gt;Store data in flat text files.&lt;/li&gt;
  &lt;li&gt;Use software leverage to your advantage.&lt;/li&gt;
  &lt;li&gt;Use shell scripts to increase leverage and portability.&lt;/li&gt;
  &lt;li&gt;Avoid captive user interfaces.&lt;/li&gt;
  &lt;li&gt;Make every program a filter.&lt;/li&gt;
  &lt;/ol&gt;&lt;/blockquote&gt;
&lt;p&gt;That last point really resonates with something that Ryan Dahl has often said, &amp;ldquo;Every program is a proxy.&amp;rdquo;  The first 3 are basically &lt;a href=&quot;http://substack.net/&quot;&gt;James Halliday&lt;/a&gt;&amp;rsquo;s rules for living.&lt;/p&gt;
&lt;p&gt;All too often, people get hung up on the wrong aspects of the Unix Philosophy, and miss the forest for the trees.  The Unix Philosophy is not about a specific implementation, or anything that is necessarily unique to any Unix operating system or program.  It&amp;rsquo;s not about file descriptors, pipes, sockets, or signals.  Those sorts of complaints are like saying that someone is not a buddhist unless they speak &lt;a href=&quot;http://en.wikipedia.org/wiki/Pali&quot;&gt;Pali&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unix Philosophy is an outlook for software development, not any specific technical development in software.  It is an ideal to reach for, and perhaps ironically, it is an ideal that instructs us to occasionally eschew idealism in favor of practicality.&lt;/p&gt;
&lt;p&gt;In Node, the basic building block that people share and interact with is not a binary on the command line, but rather a module loaded in by &lt;code&gt;require()&lt;/code&gt;.  The universal interface &lt;em&gt;is&lt;/em&gt; a text stream, but it&amp;rsquo;s a JavaScript Stream object, rather than a stdio pipe.  (The stdio pipes are of course represented by JavaScript streams, because that is our universal interface, so what else &lt;em&gt;would&lt;/em&gt; we use?)&lt;/p&gt;
&lt;p&gt;So, in terms of Node.js, here&amp;rsquo;s how I&amp;rsquo;d express the Unix Philosophy.  Alas, I am no McIlroy, and I lack the time or skill to write this any shorter.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Write modules that do one thing well.  Write a new module rather than complicate an old one.&lt;/p&gt;
  &lt;p&gt;Write modules that encourage composition rather than extension.&lt;/p&gt;
  &lt;p&gt;Write modules that handle data Streams, because that is the universal interface.&lt;/p&gt;
  &lt;p&gt;Write modules that are agnostic about the source of their input or the destination of their output.&lt;/p&gt;
  &lt;p&gt;Write modules that solve a problem you know, so you can learn about the ones you don&amp;rsquo;t.&lt;/p&gt;
  &lt;p&gt;Write modules that are small.  Iterate quickly.  Refactor ruthlessly.  Rewrite bravely.&lt;/p&gt;
  &lt;p&gt;Write modules quickly, to meet your needs, with just a few tests for compliance.  Avoid extensive specifications.  Add a test for each bug you fix.&lt;/p&gt;
  &lt;p&gt;Write modules for publication, even if you only use them privately.  You will appreciate documentation in the future.&lt;/p&gt;
  &lt;hr /&gt;&lt;p&gt;Working is better than perfect.&lt;/p&gt;
  &lt;p&gt;Focus is better than features.&lt;/p&gt;
  &lt;p&gt;Compatibility is better than purity.&lt;/p&gt;
  &lt;p&gt;Simplicity is better than anything.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The Unix Philosophy is an ideology of pragmatism.  It is about balancing the twin needs of writing &lt;em&gt;good&lt;/em&gt; software, and writing &lt;em&gt;any software at all&lt;/em&gt;.  It&amp;rsquo;s a practical set of advice for trading a moderate increase in development cost for a much larger reduction in maintenance costs.&lt;/p&gt;
&lt;p&gt;In the real world, we are faced with the completely unfair constraint of being human while writing programs and while debugging them, and none of these costs can ever be reduced to zero.  This ideology is contextual, and can be applied at all levels of the stack.  It is an open acknowledgement that we are actually not smart enough to know how to write the software we need the first time around, because we usually can only fully understand our problems once we have finished solving them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;None of these rules are sacrosanct!&lt;/strong&gt;  In fact, in many cases, they can be at odds, or even completely contradictory.  However, if we keep our units of programming small, with simple universal interfaces, we can find leverage the piecemeal structure as a quality ratchet, swapping out clumsy parts as we go along.&lt;/p&gt;
&lt;p&gt;Nothing about the Unix Philosophy explicitly relates to a culture of software sharing.  However, it should be no mystery that it comes from the software community where we argue at length about the best &lt;em&gt;way&lt;/em&gt; to make our programs properly Free.  Software that is developed according to these principles is easier to share, reuse, repurpose, and maintain.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Free as in Hugs Licence</title>
		<link href="https://blog.izs.me/2013/04/free-as-in-hugs-licence/"/>
		<updated>2013-04-18T15:25:40Z</updated>
		<id>https://blog.izs.me/2013/04/free-as-in-hugs-licence/</id>
		<content type="html">&lt;p&gt;Copyright &amp;copy; &lt;code&gt;__AUTHOR_NAME__&lt;/code&gt; (&amp;ldquo;Author&amp;rdquo;) and Contributors&lt;/p&gt;
&lt;p&gt;All rights reserved.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Free as in Hugs&amp;rdquo; License&lt;/p&gt;
&lt;p&gt;Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users of this software are permitted to offer to hug the Author
or Contributors, free of charge or obligation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;THIS SOFTWARE AND ANY HUGS ARE PROVIDED BY THE AUTHOR AND CONTRIBUTORS
&amp;ldquo;AS IS&amp;rdquo; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ANYONE BE HELD
LIABLE FOR ACTUAL HUGS.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
LONELINESS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
DON&amp;rsquo;T BE CREEPY.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Internet is Eating Me: To A Fishstick Dying Young</title>
		<link href="https://blog.izs.me/2013/04/the-internet-is-eating-me-to-a-fishstick-dying/"/>
		<updated>2013-04-11T19:55:46Z</updated>
		<id>https://blog.izs.me/2013/04/the-internet-is-eating-me-to-a-fishstick-dying/</id>
		<content type="html">&lt;p&gt;Omg.  This is just so so good.  Thank you so much, Jimmy Marks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://jimmymarks.tumblr.com/post/47709399840/to-a-fishstick-dying-young&quot; class=&quot;tumblr_blog&quot;&gt;jimmymarks&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;As we near the inevitable conclusion of You Look Nice Today, my feelings become too much to bear. And when that happens, you get poetry. What follows is my lament for one of the greatest podcasts of all time.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>On Chasing the Right &quot;Zero&quot;</title>
		<link href="https://blog.izs.me/2013/04/on-chasing-the-right-zero/"/>
		<updated>2013-04-10T18:09:21Z</updated>
		<id>https://blog.izs.me/2013/04/on-chasing-the-right-zero/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/47631308074/chasing-the-right-zero&quot; class=&quot;tumblr_blog&quot;&gt;merlin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not to be all “Merlin Mann” or anything, but, maybe somebody will find this useful.&lt;/p&gt;
&lt;p&gt;I was recently asked to talk about how I think about the infamous &lt;em&gt;Inbox Zero&lt;/em&gt; these days, and here’s what I said:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/47631308074/chasing-the-right-zero&quot;&gt;Read More&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>My Foolish π Call of Duty</title>
		<link href="https://blog.izs.me/2013/04/my-foolish-%CF%80-call-of-duty/"/>
		<updated>2013-04-04T17:05:00Z</updated>
		<id>https://blog.izs.me/2013/04/my-foolish-%CF%80-call-of-duty/</id>
		<content type="html">&lt;p&gt;A few days ago, I broke my Twitter.&lt;/p&gt;
&lt;p&gt;Let me explain.&lt;/p&gt;
&lt;p&gt;I saw &lt;a href=&quot;https://twitter.com/scienceporn/status/319234414360010752&quot;&gt;this
tweet&lt;/a&gt;
which links to &lt;a href=&quot;http://pic.twitter.com/5V0zC47WR2&quot;&gt;this image&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Knowing that &lt;a href=&quot;http://en.wikipedia.org/wiki/Normal_number&quot;&gt;normal
numbers&lt;/a&gt; are not
necessarily the same as &lt;a href=&quot;http://en.wikipedia.org/wiki/Irrational_number&quot;&gt;irrational
numbers&lt;/a&gt;, I thought,
&amp;ldquo;Oh!  How interesting, there must be some proof that π is normal!  I
wonder if they have a link, because I&amp;rsquo;d love to read it!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The image, of course, presumes that an infinite
&lt;a href=&quot;http://en.wikipedia.org/wiki/Pseudorandom&quot;&gt;pseudorandom&lt;/a&gt; sequence of
digits will contain every digit.  (That is, that any irrational number
will be normal in base-10, so long as it contains every digit.)&lt;/p&gt;
&lt;p&gt;Foolishly, perhaps, I
&lt;a href=&quot;https://twitter.com/izs/status/319235048823992320&quot;&gt;replied&lt;/a&gt;, and in
the last few days, I&amp;rsquo;ve been getting about 10 responses per day
saying, roughly, &lt;strong&gt;DURRR!!! DONT YOU KNOW INFINITE MEANS HAS EVERY
NUMBER LIKE THE MONKEYS WRITE SHAKE SPEAR?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As a simple proof, consider a number, very close to π, but different
in the respect that any time a &lt;code&gt;41&lt;/code&gt; appears, it is replaced by &lt;code&gt;14&lt;/code&gt;.
Let&amp;rsquo;s call it P.  It would start
3.1&lt;b&gt;14&lt;/b&gt;59265358979323846264338327950288&lt;b&gt;14&lt;/b&gt;971
and continue on forever.&lt;/p&gt;
&lt;p&gt;If π is indeed normal in base 10, then clearly P would not be.
Because any digit sequence that goes &lt;code&gt;41&lt;/code&gt; would instead go &lt;code&gt;14&lt;/code&gt;, so
you could never find the first 4 digits of π within the digits of P.&lt;/p&gt;
&lt;p&gt;But P is also infinite, irrational, and pseudorandom.  It would
contain exactly the same ratio of digits as π does, but &lt;em&gt;not&lt;/em&gt; have
every combination.&lt;/p&gt;
&lt;p&gt;For the first few days, I explained this over and over again.  Since
then, I&amp;rsquo;ve simply accepted that my &amp;ldquo;replies&amp;rdquo; tab on Twitter is
temporarily useless.&lt;/p&gt;
&lt;p&gt;As it turns out, π has &lt;a href=&quot;http://www.lbl.gov/Science-Articles/Archive/pi-random.html&quot;&gt;NOT been proven to be
normal&lt;/a&gt;,
though it passes all known tests for normality, meaning that it has
not been proven to &lt;strong&gt;not&lt;/strong&gt; be normal either.  The same is true of
&lt;code&gt;log(2)&lt;/code&gt;, &lt;code&gt;e&lt;/code&gt;, the square root of 2, and many other natural constants.
What makes matters worse, there is not (yet?) any proof that these
things can or cannot be proven, so it may be a wild goose chase as
infinitely irrational as π itself!&lt;/p&gt;
&lt;p&gt;As one might expect, &lt;a href=&quot;http://www.youtube.com/watch?v=uXoh6vi6J5U&quot;&gt;Vi Hart covered this math question in the most
entertaining fashion
possible&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If there was a proof that π is normal, then this would be a
groundbreaking mathematical insight of historic proportions.&lt;/p&gt;
&lt;p&gt;It saddens me deeply that the internet is so full of fools who think
that such a revolution has not only already occurred, but is obvious
and foolish to even wonder about.&lt;/p&gt;
&lt;p&gt;Sigh.  Duty calls.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://xkcd.com/386/&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2013/04/my-foolish-%CF%80-call-of-duty/duty_calls.png&quot; title=&quot;What do you want me to do?  LEAVE?  Then they&#39;ll keep being wrong!&quot; alt=&quot;&#39;Are you coming to bed?&#39; &#39;I can&#39;t. This is important.&#39; &#39;What?&#39; &#39;Someone is WRONG on the internet&#39;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Wis and Int</title>
		<link href="https://blog.izs.me/2013/04/wis-and-int/"/>
		<updated>2013-04-01T18:19:00Z</updated>
		<id>https://blog.izs.me/2013/04/wis-and-int/</id>
		<content type="html">&lt;p&gt;When I was younger, in my teens and early 20s, I&amp;rsquo;m sure I had a higher IQ than I do now.  I could remember phone numbers months after hearing them once.  I could compute an 18% tip split 5 ways, in my head in a matter of seconds.  I could read highly involved and technical code or philosophy or science, and recall it perfectly.  I could remember every line from movies I&amp;rsquo;d seen once, or all the lyrics of songs I&amp;rsquo;d heard only a few times on the radio.&lt;/p&gt;
&lt;p&gt;Back then, I thought that I could think my way out of any problem.  I figured that the existing solutions were clearly not sufficient, because problems continued to exist.  I was definitely smart enough to do this, because I&amp;rsquo;d never met anyone smarter than me (only people with more experience).  My imagination was limitless, or so I thought, and I could not imagine a problem I couldn&amp;rsquo;t solve, so QED it was only a matter of time and persistence.&lt;/p&gt;
&lt;p&gt;Luckily for me, I had enough persistence to eventually build up a small bit of wisdom, because in the last 10 or 15 years, a lot of that raw computational brain power has slipped away.  I don&amp;rsquo;t miss it, really.  I have to look things up more often, and I use a calculator.  I have to write down phone numbers, and my calendar is not in my head until I look at it each day.&lt;/p&gt;
&lt;p&gt;The feeling of omniscience was pretty awesome, but I&amp;rsquo;m wise enough now to know that it was a mirage in the first place, and that I was a fool to think it was anything but an obstacle.  It was like cocaine, keeping me moving faster, and thinking more highly of myself than was appropriate.  I wasn&amp;rsquo;t really happy; I was just distracted.  As the high of youth wears off a bit more each year, I realize how much I wasted that velocity.  If I&amp;rsquo;d started then on the work I&amp;rsquo;m doing now, I&amp;rsquo;d be so much further ahead!&lt;/p&gt;
&lt;p&gt;Wisdom is not intelligence.  In the long run, it&amp;rsquo;s much more important.  For a software developer, or just any rational human being, intelligence gets you in the door, but its purpose is to become the raw material of wisdom.&lt;/p&gt;
&lt;p&gt;Take note, clever youngsters:  You will slow down.  You are going to be noticeably less smart in 10 years.  Set yourself up with good habits now.  Be persistent, be calm, be careful.  Develop instincts and compassion.  Flinch towards the dark spots.  The hard part is recognizing that there&amp;rsquo;s anything you need to learn.&lt;/p&gt;
&lt;p&gt;We do our societies and our children a disservice by glorifying intellect and achievement, when in fact it is persistence and compassion that make all the difference in life.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Promises</title>
		<link href="https://blog.izs.me/2013/04/promises/"/>
		<updated>2013-04-01T17:47:17Z</updated>
		<id>https://blog.izs.me/2013/04/promises/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;if we had first-class promises in the language, and they had deterministic flow-control properties, and were optimized by the VM, I&#39;d be all about them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;mikeal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;what if your mother and father had never met?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/03/alex-and-william-have-only-known-each-other-for-a/"/>
		<updated>2013-03-27T16:14:58Z</updated>
		<id>https://blog.izs.me/2013/03/alex-and-william-have-only-known-each-other-for-a/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Alex and William have only known each other for a few months and shouldn’t rush into a serious commitment.&lt;/p&gt;
&lt;p&gt;Greg is probably in it for Brian’s money.&lt;/p&gt;
&lt;p&gt;Wendy claims she loves Margaret, but she hasn’t put her feelings for Julia behind her.&lt;/p&gt;
&lt;p&gt;Lisa is too career driven for an emotionally needy person like Amy.&lt;/p&gt;
&lt;p&gt;Tim is a whore.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mcsweeneys.net/articles/arguments-against-gay-marriage&quot;&gt;Arguments Against Gay Marriage.&lt;/a&gt; (via &lt;a href=&quot;http://seldo.tumblr.com/&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Complex System Knowledge is Not Transferrable</title>
		<link href="https://blog.izs.me/2013/03/complex-system-knowledge-is-not-transferrable/"/>
		<updated>2013-03-12T18:57:00Z</updated>
		<id>https://blog.izs.me/2013/03/complex-system-knowledge-is-not-transferrable/</id>
		<content type="html">&lt;p&gt;Imagine if someone were to say something like:&lt;/p&gt;
&lt;p&gt;&amp;gt; Node uses async I/O so that it can read files faster.&lt;/p&gt;
&lt;p&gt;While many of the &lt;em&gt;words&lt;/em&gt; in this sentence are sensible, and perhaps even somewhat close to the truth, there are several glaring errors with it:&lt;/p&gt;
&lt;p&gt;First of all, Node doesn&amp;rsquo;t use AIO. It uses nonblocking I/O for sockets and pipes, but for files, it uses a thread pool.&lt;/p&gt;
&lt;p&gt;More subtly, doing fs operations in a worker thread does not make them faster.  Since we&amp;rsquo;re usually limited by the system&amp;rsquo;s fs response anyway, adding the overhead of threads and callbacks makes those operations strictly &lt;em&gt;slower&lt;/em&gt; than doing them synchronously.&lt;/p&gt;
&lt;p&gt;The point of using an event loop and doing fs operations in a thread pool is so that your &lt;em&gt;server&amp;rsquo;s&lt;/em&gt; latency is not affected (as much).  The speed of the fs operation itself is presumably less important than making sure that the server can continue to service requests in the meantime.&lt;/p&gt;
&lt;p&gt;If someone said this, and a knowledgeable Node user was around to hear it, the speaker would be promptly corrected.&lt;/p&gt;
&lt;p&gt;Now imagine that the person saying this was a very highly educated lawyer, with many years of experience in IP law, international copyright litigation, trademarks, and patents.&lt;/p&gt;
&lt;p&gt;Do you have any &lt;em&gt;more&lt;/em&gt; belief in their clearly false statement?  Do you now think, &amp;ldquo;Well, this guy&amp;rsquo;s a &lt;strong&gt;lawyer&lt;/strong&gt; after all, and he&amp;rsquo;s dealt with some pretty hairy IP and technology issues, so he probably does know a thing or two about technology.&amp;rdquo;  Or do you start to think &lt;em&gt;less&lt;/em&gt; of him, and his craft?&lt;/p&gt;
&lt;p&gt;My fellow programmers, this is what you sound like when you make authoritative-sounding claims about trademark, copyright, and patent law.&lt;/p&gt;
&lt;p&gt;Not only is it more complicated than you probably realize, the complications differ from place to place and from situation to situation.  The law is a giant software program with legacy code going back literally &lt;em&gt;thousands&lt;/em&gt; of years, and the hardware it runs on is &lt;em&gt;human brains&lt;/em&gt;, which are &lt;a href=&quot;http://lesswrong.com/&quot;&gt;notoriously buggy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am so glad IANAL.  Software that runs on computers is so much easier to reason about.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Everyone has a Price</title>
		<link href="https://blog.izs.me/2013/03/everyone-has-a-price/"/>
		<updated>2013-03-12T17:06:00Z</updated>
		<id>https://blog.izs.me/2013/03/everyone-has-a-price/</id>
		<content type="html">&lt;p&gt;Got this email this morning:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;From: Andrew
To: i@izs.me
Subject: Have a minute to talk about npmjs.org?

Hello,

We have a client interested in npmjs.org. Would you
consider selling the site?

Please let me know a day, time and phone number
you could speak about this possibility and we&#39;ll try
to make it work on our end.

I look forward to speaking with you.

Regards,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;My reply:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;From: Isaac Schlueter
To: Andrew

I will sell npmjs.org for USD $1,000,000,000.00.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Just so you know.  If npmjs.org ever suddenly turns into some random e-commerce site or something, and I&amp;rsquo;m nowhere to be found, it&amp;rsquo;s because I&amp;rsquo;m crazy rich now and give zero fucks.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>User Feedback</title>
		<link href="https://blog.izs.me/2013/03/user-feedback/"/>
		<updated>2013-03-11T04:56:55Z</updated>
		<id>https://blog.izs.me/2013/03/user-feedback/</id>
		<content type="html">&lt;p&gt;Sometimes a request is much less interesting than the motivation &lt;em&gt;behind&lt;/em&gt; the request, which the requestor might not even fully understand.&lt;/p&gt;
&lt;p&gt;Sometimes people demand a giraffe, when really, they just need a ladder, or better yet, they need things to not be up so high.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&amp;ldquo;There are &lt;b&gt;ZERO&lt;/b&gt; giraffes in here and that makes me &lt;b&gt;ANGRY&lt;/b&gt;!  Fix it!!&amp;rdquo;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Yes, this is unreasonable.  But if you don&amp;rsquo;t try to hear past it, then you&amp;rsquo;ll only see an unreasonable demand.  Marking it with your judgement, it is easy to dismiss.  Bozo bit is flipped, end of story.&lt;/p&gt;
&lt;p&gt;Worse yet, if you &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; dismiss the request, you may find yourself negotiating their giraffe down to a horse, or a dog, which isn&amp;rsquo;t helpful at all! You&amp;rsquo;ll resent their need for a pet, and they&amp;rsquo;ll resent your unwillingness to provide a minion to fetch things off of high shelves.&lt;/p&gt;
&lt;p&gt;You might perhaps never realize that you could have trivially made the ladders more easy to find, while planning renovations to lower the shelves, so that ladders would not be necessary.&lt;/p&gt;
&lt;p&gt;You might be so distracted by the request for a large African mammal, that you never see that they didn&amp;rsquo;t want a pet in the first place.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why No directories.lib in Node (the less snarky, too-long-for-twitter version)</title>
		<link href="https://blog.izs.me/2013/02/why-no-directorieslib-in-node-the-less-snarky/"/>
		<updated>2013-02-27T17:41:00Z</updated>
		<id>https://blog.izs.me/2013/02/why-no-directorieslib-in-node-the-less-snarky/</id>
		<content type="html">&lt;p&gt;This question comes up in Node occasionally:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Node peoples&amp;hellip; is there any way to specify a root directory for my
  npm package so that I don&amp;rsquo;t need require(&amp;ldquo;mypackage/lib/foo&amp;rdquo;)?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;— &lt;a href=&quot;https://twitter.com/wycats/status/306570718102048768&quot;&gt;wycats&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;In other words, you have a package directory structure like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./package.json
./README.md
./test/some-tests.js
./lib/main.js  &amp;lt;-- this is the package.json &quot;main&quot;
./lib/some-other-module.js
./lib/util/a-utility-module.js
./lib/etc....
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, let&amp;rsquo;s say that this package&amp;rsquo;s name is &lt;code&gt;foo&lt;/code&gt;.  You want to be able
to use foo&amp;rsquo;s &lt;code&gt;some-other-module.js&lt;/code&gt; file, outside of foo.&lt;/p&gt;
&lt;p&gt;The way to do this in node is do write:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var blah = require(&#39;foo/lib/some-other-module.js&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;What &lt;abbr title=&quot;and everyone else who requests this, of course&quot;&gt;Yehuda&lt;/abbr&gt;
would like to see is:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var blah = require(&#39;foo/some-other-module.js&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &amp;ldquo;how&amp;rdquo; here is simple: If you want a module in the root of your
package namespace, put the file in the root of your package folder.
It&amp;rsquo;s a 1:1 mapping, so it&amp;rsquo;s not hard to figure out how to get that
result.&lt;/p&gt;
&lt;h3&gt;But I don&amp;rsquo;t want to have so many files in the root of my package folder&lt;/h3&gt;
&lt;p&gt;Ok.  &lt;a href=&quot;http://howfuckedismydatabase.com/nosql/&quot; title=&quot;I believe I did, Bob&quot;&gt;So don&amp;rsquo;t have so many files in
the root of your package folder.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you must export multiple modules from a single package, then you
have a choice:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Use an extra 4 characters in your &lt;code&gt;require()&lt;/code&gt; statements, or&lt;/li&gt;
&lt;li&gt;Just don&amp;rsquo;t have so many exports.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Many of us would suggest that &lt;strong&gt;in general&lt;/strong&gt; you may want to consider
if those things actually are a part of the &amp;ldquo;foo&amp;rdquo; package, or if they
belong in a dependency, with their own tests, name, version, etc.&lt;/p&gt;
&lt;p&gt;I am not personally so die-hard about &amp;ldquo;one package = one file&amp;rdquo;.
Occasionally there are internal things, and it&amp;rsquo;s not so bad.  But, &lt;strong&gt;in
general&lt;/strong&gt;, I &lt;strong&gt;tend&lt;/strong&gt; to be of the opinion that if a module requires
its own individual unit tests, it probably should be its own package,
if only so that I can think of it as a separate thing and give it the
attention it clearly deserves.  If I&amp;rsquo;m intending it to be used outside
of the main package, then it &lt;strong&gt;most likely&lt;/strong&gt; needs its own tests, and
I&amp;rsquo;ll package it up and make it a dep.&lt;/p&gt;
&lt;p&gt;Note all the weasel words in the above paragraph!  There are lots of
exceptions to this rule.  But they don&amp;rsquo;t fit on twitter, and in fact,
even the weasel words put my response way over 140 characters, and
so with the qualifications stripped out, it looks like a capricious
religion, unbound to factual realities of the imperfect world in which
real software development happens.&lt;/p&gt;
&lt;p&gt;The world being imperfect as it is, you may well find yourself in a
state where you have multiple exports, and you don&amp;rsquo;t have the time or
inclination to split them up into separate packages.  Sometimes the
Inappropriate Intimacy smell is less bad than the alternatives, it&amp;rsquo;s
true.  Sometimes it&amp;rsquo;s just a simple business decision; sometimes it&amp;rsquo;s
less important to make it work right, than to make it work right now.&lt;/p&gt;
&lt;p&gt;In that case, put &lt;code&gt;&quot;lib/&quot;&lt;/code&gt; in your &lt;code&gt;require()&lt;/code&gt; statement.  It&amp;rsquo;s not
that hard, really.&lt;/p&gt;
&lt;h3&gt;But &lt;abbr title=&quot;see what i did there?&quot;&gt;WHY, cats&lt;/abbr&gt;?&lt;/h3&gt;
&lt;p&gt;The argument to &lt;code&gt;require()&lt;/code&gt; maps directly to a file path.  If it
doesn&amp;rsquo;t start with &lt;code&gt;./&lt;/code&gt; or &lt;code&gt;../&lt;/code&gt; and isn&amp;rsquo;t absolute (ie, starts with a
&lt;code&gt;/&lt;/code&gt; on unix, or any of a half dozen weird things on windows), then
node finds the closest &lt;code&gt;node_modules&lt;/code&gt; folder with a thing by that
name, and that&amp;rsquo;s the prefix.  But everything after the prefix is just
a direct filename.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;(Aside: For historical reasons we do make the filename extension
optional, which is a deeply regrettable accident of history that I
would not repeat, given the chance.)&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s look at the benefits, and the costs.&lt;/p&gt;
&lt;h4&gt;Aesthetics&lt;/h4&gt;
&lt;p&gt;The first benefit is removing 4 extra chars in some of the lines at
the top of some files.  This is rather small.  Even if you have 100
requires at the top of a module (which is very very many), and every
single one of them is diving into some other package&amp;rsquo;s guts, you&amp;rsquo;re
still talking about pushing the average line &lt;em&gt;length&lt;/em&gt; out by 4 chars.
It&amp;rsquo;s not adding extra lines; it&amp;rsquo;s not pushing the line length out that
much.&lt;/p&gt;
&lt;p&gt;If you cannot accept that, then put the files in the root of your
package.  If &lt;strong&gt;that&lt;/strong&gt; is too ugly, well, then weigh the ugliness of
file clutter against the ugliness of lines that are 4 whole characters
longer.&lt;/p&gt;
&lt;p&gt;The fact that this seems ugly is actually great, in my opinion.  &lt;strong&gt;You
usually shouldn&amp;rsquo;t be writing programs like this.&lt;/strong&gt;  Packages should be
exporting an interface that is designed for a purpose, and you should
be using them for that purpose.  This is basic software design.&lt;/p&gt;
&lt;p&gt;Doing an ugly thing should look ugly.  There may be reasons to do the
ugly thing, of course, and no one is saying that you&amp;rsquo;re a bad person
for doing it, but the ugliness of the code should be a thing that you
notice, so that you can avoid ignoring the ugliness of the design.
There is a reason we evolved to find plump brightly colored fruit more
appealing than wrinkled moldy fruit.  There is a reason we evolved to
be more able to ignore pleasure than pain.&lt;/p&gt;
&lt;p&gt;In other words, your aesthetics are trying to help you.  Saying &amp;ldquo;it&amp;rsquo;s
ugly&amp;rdquo; is an argument &lt;em&gt;against&lt;/em&gt; adding this feature, not for it.&lt;/p&gt;
&lt;h4&gt;(Alleged) Portability&lt;/h4&gt;
&lt;p&gt;Let&amp;rsquo;s say that you want to have something like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./lib/node/module.js
./lib/browser/module.js
./lib/ringo/module.js
./lib/narwhal/module.js
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then, I want to say &amp;ldquo;Node should use &lt;code&gt;lib/node&lt;/code&gt;, Ringo should use
&lt;code&gt;lib/ringo&lt;/code&gt;, and the browser should use &lt;code&gt;lib/browser&lt;/code&gt;, so when I do
&lt;code&gt;require(&#39;foo/module.js&#39;)&lt;/code&gt;, I get the right one for my environment.&lt;/p&gt;
&lt;p&gt;First of all, that&amp;rsquo;s very trivial to do without making the mapping of
require arguments to filenames any more complicated.  Create a file
like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// module.js
switch(getPlatform()) {
  case &#39;node&#39;:
    module.exports = require(&#39;./node/module.js&#39;);
    break;
  case &#39;ringo&#39;:
    module.exports = require(&#39;./ringo/module.js&#39;);
    break;
  case &#39;narwhal&#39;:
    module.exports = require(&#39;./narwhal/module.js&#39;);
    break;
  default:
    module.exports = require(&#39;./browser/module.js&#39;);
    break;
}

// This can of course be simplified.
// Usually something like this is sufficient:
// if (typeof window === &#39;object&#39;)
//   return module.exports = require(&#39;./browser.js&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you find yourself doing this a lot, maybe ask yourself if you&amp;rsquo;re
using the best abstractions, or maybe trying to make something
portable that is fundamentally platform-specific.  Maybe try
supporting fewer platforms.&lt;/p&gt;
&lt;p&gt;Or, maybe, just do the ugly thing, and let it be ugly, and accept that
it&amp;rsquo;s a net benefit in your case.  But if your request is &amp;quot;Make
platform-specific module behavior forking less ugly&amp;rdquo;, then we&amp;rsquo;re back
to aesthetics, and my answer is, &amp;ldquo;Ew.  No.  That&amp;rsquo;s gross, and it
should look gross.&amp;rdquo;&lt;/p&gt;
&lt;h3&gt;Priorities&lt;/h3&gt;
&lt;p&gt;The cost of adding this feature is that the mapping from your
&lt;code&gt;require()&lt;/code&gt; statements to the actual file with the code in it, is more
complicated.&lt;/p&gt;
&lt;p&gt;Yes, it&amp;rsquo;s &amp;ldquo;only one extra file to look in&amp;rdquo;.  But &amp;ldquo;looking in files&amp;rdquo;
isn&amp;rsquo;t the hard part.  The hard part is remembering which packages
mapped in which ways, and thus knowing where to follow the train of
logic, when you&amp;rsquo;re juggling a bunch of other peoples&amp;rsquo; code in your
head for the first time, while trying to debug a problem as fast as
possible because it&amp;rsquo;s preventing actual human beings from doing what
they are trying to do, and they give exactly zero fucks about the
ugliness of your &lt;code&gt;require()&lt;/code&gt; statements.&lt;/p&gt;
&lt;p&gt;Adding &amp;ldquo;one extra file to look in&amp;rdquo; doubles the number of files to look
in, and much more than doubles the cognitive overhead of debugging
problems in code you didn&amp;rsquo;t write.&lt;/p&gt;
&lt;p&gt;Debugging problems in code you &lt;em&gt;did&lt;/em&gt; write is pretty easy.  That&amp;rsquo;s not
what I&amp;rsquo;m talking about.  I&amp;rsquo;m talking about the case where &lt;strong&gt;I&amp;rsquo;m&lt;/strong&gt;
debugging &lt;strong&gt;your&lt;/strong&gt; code, because I&amp;rsquo;m using your module in my website,
and my website is misbehaving.&lt;/p&gt;
&lt;p&gt;If this seems like a trivial complaint, then you have either never
been in this situation, or you are smarter than I am.  Either way,
consider yourself blessed, because it&amp;rsquo;s a shitty situation, and I&amp;rsquo;ve
been in it, and I&amp;rsquo;m not smart enough for it to be trivially solved,
and I wrote most of the code that did all this shit.&lt;/p&gt;
&lt;p&gt;Few remember, because the node community was about 1/100th the size at
the time, but npm used to support this feature (and also the &amp;ldquo;modules&amp;rdquo;
hash, which allowed arbitrary mapping of module names to files, and
was significantly worse.)  Even fewer people were actually running
production sites at the time in Node, and of those that were, most
just wrote everything from scratch, because there was much less of an
ecosystem to draw on.&lt;/p&gt;
&lt;p&gt;Ryan and I were among the people building things in Node at Joyent,
and trying to actually Do The Right Thing, and use npm and the
community module ecosystem in the way it was intended.  The first time
we had to debug something like this, where &lt;abbr title=&quot;I don&#39;t  remember which ones, sorry&quot;&gt;a few modules&lt;/abbr&gt; actually used
&lt;code&gt;directories.lib&lt;/code&gt;, we both were convinced that it was a terrible idea,
and had to go.&lt;/p&gt;
&lt;p&gt;Around that time, we started conceiving the module system for Node
v0.4, which is what we have now.  We moved the &lt;code&gt;node_modules&lt;/code&gt; lookup
stuff into node core, and stripped out the module hash and
directories.lib features from npm.  Moving &lt;code&gt;node_modules&lt;/code&gt; lookup into
core meant that npm could stop using symlinks and shims all over the
place to implement isolated deps.&lt;/p&gt;
&lt;p&gt;Again, if you think that this cost is not relevant, then I have
nothing but respect and blessings for you.  Either you&amp;rsquo;re much better
at this stuff than I am, or you&amp;rsquo;ve suffered less of the hell of other
peoples&amp;rsquo; bugs.  Either way, mad props.&lt;/p&gt;
&lt;p&gt;Making the node module system any more complicated than it is will
make my life noticeably worse, and I don&amp;rsquo;t think I am alone in this.
As I am in a position to prevent that reduction in Node quality of
life, and as that is my job, I will prevent it.&lt;/p&gt;
&lt;p&gt;The Node module system is
&lt;a href=&quot;http://nodejs.org/api/documentation.html#documentation_stability_index&quot;&gt;frozen&lt;/a&gt;
for a reason.  It will not change to add new features, ever.  It&amp;rsquo;s
done, and not open for discussion.&lt;/p&gt;
&lt;h3&gt;Addendum:&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;@izs Would like to hear more about why omitting the filename
  extension in require statements was a mistake.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;— &lt;a href=&quot;https://twitter.com/jimmycuadra/status/306835283700224000&quot;&gt;jimmycuadra&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Answer:&lt;/p&gt;
&lt;p&gt;It quadruples the number of &lt;code&gt;stat(2)&lt;/code&gt; calls, makes the 1:1 mapping
more vague, and complicates implementation. Slower, greater
complexity, etc.&lt;/p&gt;
&lt;p&gt;However, the cost of removing this feature is nowhere near the benefit
of not having it, so it stays for backwards compatibility.  C&#39;est la vie.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>38&quot;</title>
		<link href="https://blog.izs.me/2013/02/38/"/>
		<updated>2013-02-11T01:06:32Z</updated>
		<id>https://blog.izs.me/2013/02/38/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;David Fried&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;38&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;the circumference of a whale&#39;s penis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;David Fried&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;the amount of snow milford, ct got&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Also: &lt;a href=&quot;http://en.wikipedia.org/wiki/Blue_whale_penis&quot;&gt;http://en.wikipedia.org/wiki/Blue_whale_penis&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;gt; 12 * Math.PI&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;37.69911184307752&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/01/now-this-is-a-story/"/>
		<updated>2013-01-23T00:51:58Z</updated>
		<id>https://blog.izs.me/2013/01/now-this-is-a-story/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2013/01/du1SzQ/"/>
		<updated>2013-01-16T02:33:44Z</updated>
		<id>https://blog.izs.me/2013/01/du1SzQ/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>git-rebase</title>
		<link href="https://blog.izs.me/2012/12/git-rebase/"/>
		<updated>2012-12-10T19:05:00Z</updated>
		<id>https://blog.izs.me/2012/12/git-rebase/</id>
		<content type="html">&lt;p class=&quot;small&quot;&gt;Edit: You should probably also read &lt;a href=&quot;http://sandofsky.com/blog/git-workflow.html&quot;&gt; Understanding the Git Workflow&lt;/a&gt;.  Much more succinct explanation of the point that I dance around a lot below.  Almost as if we&amp;rsquo;d had roughly the same ideas, but he squashed the messages more eloquently ;)&lt;/p&gt;
&lt;p&gt;A &lt;a href=&quot;http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/&quot;&gt;recent article on git-merge vs git-rebase&lt;/a&gt; kicked off a very interesting conversation on twitter the other day among a bunch of us nerds.&lt;/p&gt;
&lt;p&gt;It started with &lt;a href=&quot;https://twitter.com/polotek&quot;&gt;Marco&lt;/a&gt; saying&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Good article on merge vs. rebase. It&amp;rsquo;s pretty balanced, but I&amp;rsquo;m still firmly against rebase after reading. &lt;a href=&quot;http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/&quot;&gt;blog.sourcetreeapp.com/2012/08/21/mer…&lt;/a&gt;&lt;br /&gt;— Marco Rogers (@polotek) &lt;a href=&quot;https://twitter.com/polotek/status/277541092184965120&quot; data-datetime=&quot;2012-12-08T22:32:07+00:00&quot;&gt;December 8, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;A few of us objected.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/polotek&quot;&gt;polotek&lt;/a&gt; I wouldn’t recommend being “firmly” against rebase. That’s like being &amp;ldquo;firmly&amp;rdquo; against a particular coding style. Forest for trees.&lt;br /&gt;— Jason Smith (@_jhs) &lt;a href=&quot;https://twitter.com/_jhs/status/277621735241695232&quot; data-datetime=&quot;2012-12-09T03:52:34+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Then there were like a bazillion more replies back and forth, and it got too much for Twitter.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/techwraith&quot;&gt;techwraith&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/polotek&quot;&gt;polotek&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/rwaldron&quot;&gt;rwaldron&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/nexxylove&quot;&gt;nexxylove&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/oscargodson&quot;&gt;oscargodson&lt;/a&gt; I&amp;rsquo;ll reply in blog format. ENOSPC.&lt;br /&gt;— isaacs (@izs) &lt;a href=&quot;https://twitter.com/izs/status/277812898095566849&quot; data-datetime=&quot;2012-12-09T16:32:11+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So here I am writing a blog post now.&lt;/p&gt;
&lt;h3&gt;Git is an Editor&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m pretty sure I stole this line from someone, but I couldn&amp;rsquo;t find any reference earlier than &lt;a href=&quot;https://groups.google.com/d/msg/nodejs/xFfzu9XIBvY/414wq6ZbS8gJ&quot;&gt;mine&lt;/a&gt;, so maybe I made this up. It&amp;rsquo;s a way of thinking about git that I really like:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;cvs and svn are remote backups that you use to save your changes.&lt;br /&gt; git is an editor that you use to write your code&amp;rsquo;s biography.&lt;br /&gt;— isaacs (@izs) &lt;a href=&quot;https://twitter.com/izs/status/13997541348&quot; data-datetime=&quot;2010-05-14T21:07:58+00:00&quot;&gt;May 14, 2010&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;So my reply to Marco was:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/polotek&quot;&gt;polotek&lt;/a&gt; Git is an editor. &amp;ldquo;Firmly against rebase&amp;rdquo; is like being firmly against backspace.&lt;br /&gt;— isaacs (@izs) &lt;a href=&quot;https://twitter.com/izs/status/277656808959660032&quot; data-datetime=&quot;2012-12-09T06:11:56+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;I hope that some of the implication of that becomes clearer by the time I get to the end of this post.&lt;/p&gt;
&lt;h3&gt;&amp;ldquo;tidy&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;A lot of the discussion of git-rebase fixates on keeping the commit history &amp;ldquo;tidy&amp;rdquo;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/techwraith&quot;&gt;techwraith&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/izs&quot;&gt;izs&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/polotek&quot;&gt;polotek&lt;/a&gt; rebasing into a release branch is clean and tidy. You still have the data in your feature branch.&lt;br /&gt;— Emily Rose (@nexxylove) &lt;a href=&quot;https://twitter.com/nexxylove/status/277659451849330688&quot; data-datetime=&quot;2012-12-09T06:22:26+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/nexxylove&quot;&gt;nexxylove&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/techwraith&quot;&gt;techwraith&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/izs&quot;&gt;izs&lt;/a&gt; what does clean and tidy buy besides a sense of satisfaction?&lt;br /&gt;— Marco Rogers (@polotek) &lt;a href=&quot;https://twitter.com/polotek/status/277689191037538305&quot; data-datetime=&quot;2012-12-09T08:20:37+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;The workflow that everyone is discussing seems to be:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Working on a feature branch&lt;/li&gt;
&lt;li&gt;Make some commits&lt;/li&gt;
&lt;li&gt;The upstream branch changes (because someone else pushed to it) and now it&amp;rsquo;s time to merge it in.&lt;/li&gt;
&lt;li&gt;Do you &lt;code&gt;git pull --rebase&lt;/code&gt; (so that you pretend to have always been working on the changes) or &lt;code&gt;git pull&lt;/code&gt; the upstream (so that you get a merge commit)?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href=&quot;http://blog.sourcetreeapp.com/2012/08/21/merge-or-rebase/&quot;&gt;The article&lt;/a&gt; that started the conversation really only discussed this single use of rebase.&lt;/p&gt;
&lt;p&gt;However, rebase is much more versatile that this. &lt;strong&gt;Rebase is a tool that can be used to arbitrarily edit the commit history.&lt;/strong&gt; If that sounds &lt;em&gt;universally&lt;/em&gt; scary or bad, I&amp;rsquo;d argue that your understanding of &amp;ldquo;edit&amp;rdquo; and &amp;ldquo;history&amp;rdquo; are perhaps a bit limited.&lt;/p&gt;
&lt;h3&gt;Tidying Up History&lt;/h3&gt;
&lt;p&gt;Consider the following two stories:&lt;/p&gt;
&lt;h4&gt;Story 1&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;I ran out of milk.&lt;/p&gt;
  &lt;p&gt;I walked down Adams Street to Whole Foods so I could buy milk.&lt;/p&gt;
  &lt;p&gt;I mean, no, Whole Foods isn&amp;rsquo;t on Adams, it&amp;rsquo;s on Bay Place, so I
  walked down Bay Place to get to Whole Foods to buy milk.&lt;/p&gt;
  &lt;p&gt;Oh, but first, I had to walk down Grand Ave, then take a right on
  Bay Place, then parked my car&amp;ndash;shit.&lt;/p&gt;
  &lt;p&gt;I got in my car, drove down Grand Ave, took a right on Bay Place,
  parked my car at Whole Foods, and needed my wallet, so&amp;hellip; right, ok,
  so before I drove in my car, I got my wallet, drove to Whole Foods
  on Bay Place by going down Grand, and then bought some milk.&lt;/p&gt;
  &lt;p&gt;No, wait, I didn&amp;rsquo;t to whole foods, that&amp;rsquo;s right, because they&amp;rsquo;re
  crazy expensive.  I went to the Grand Lake Safeway.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;Story 2&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;I ran out of milk.&lt;/p&gt;
  &lt;p&gt;I drove to the Grand Lake Safeway and bought some milk.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This seems silly, but the benefit of a tool that can tidy up history is that &lt;em&gt;you get to write whatever crazy awful untidy history you want&lt;/em&gt;, while you&amp;rsquo;re experimenting and editing code, and then organize it later. When I&amp;rsquo;m actually writing code, my commit history looks a lot like Story 1.&lt;/p&gt;
&lt;p&gt;Typically I work on a &lt;code&gt;blahblah-feature-name-wip&lt;/code&gt; branch, and then rebase it down to a &lt;code&gt;blahblah-feature-name&lt;/code&gt; branch when I&amp;rsquo;ve got it into a working state and understand how it&amp;rsquo;s supposed to go. The &lt;code&gt;-wip&lt;/code&gt; branches are a godawful mess of &lt;code&gt;kinda working, except breaks all the fs tests&lt;/code&gt; commits, and &lt;code&gt;Revert &quot;kinda working, except...&quot;&lt;/code&gt; commits. The benefit of tidiness then, is that I can track my work in a more or less play-by-play fashion, and still end up with something readable.&lt;/p&gt;
&lt;p&gt;Is it better, then, to push all those play-by-play commits?&lt;/p&gt;
&lt;p&gt;What is the &lt;strong&gt;purpose&lt;/strong&gt; of a git history? Is it a forensic record of every edit to a file? Or is it a way for others to determine the &lt;em&gt;reason&lt;/em&gt; for those edits?&lt;/p&gt;
&lt;p&gt;My answer is: It&amp;rsquo;s both, depending on context.&lt;/p&gt;
&lt;p&gt;I keep the &lt;code&gt;-wip&lt;/code&gt; branch around for as long as the forensics are interesting. There&amp;rsquo;s a lot of times that I notice something is broken in the &amp;ldquo;real&amp;rdquo; feature branch, and think, &amp;ldquo;Oh, I could&amp;rsquo;ve sworn that was working yesterday.. what was I doing..?&amp;rdquo; At moments like those, the forensic record of my thoughts is invaluable.&lt;/p&gt;
&lt;p&gt;But if someone, years later, is looking at a bit of code that seems strange, and they run &lt;code&gt;git blame&lt;/code&gt; on the file, and track the edit back to &lt;code&gt;Revert &quot;Revert &quot;hmm this seems broken but it sorta works i dunno&quot;&quot;&lt;/code&gt; then they&amp;rsquo;ll be rightly upset with me for letting such useless garbage into the repository.&lt;/p&gt;
&lt;p&gt;One possible answer is: &amp;ldquo;Don&amp;rsquo;t write code like that.&amp;rdquo; Write a test for the feature, then write the code to make the test pass, and never make mistakes.&lt;/p&gt;
&lt;p&gt;The problem is that I&amp;rsquo;m not smart enough to not make mistakes and know exactly what code to write before I start writing it. Also, I enjoy the liberty of messing around, tracking every bit, and still sharing an elegant useful story with my future collaborators (including future-isaacs.)&lt;/p&gt;
&lt;h3&gt;Forensics - Platform vs Service&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s very interesting to me, but not at all surprising, that the people in this conversation that were most in favor of &amp;ldquo;merge only, never rebase&amp;rdquo; are generally working on a production web service (Yammer, most of them), and the people who favored rebase seemed to be working primarily on platforms (Node and npm in my case; JQuery Johnny5 and others in the case of Rick Waldron.) A few folks (mikeal, Jason Smith) work on both sorts of systems, and of course this breakdown is imprecise.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen a similar reaction to rebase-vs-merge in coworkers at Yahoo, Kakai, and Joyent. (Basically ever since I&amp;rsquo;ve been using git, and exposed to this sort of conversation.) People who spend most of their day debugging production issues want the history to be as detailed and &amp;ldquo;forensically accurate&amp;rdquo; as possible. People who spend most of their day debugging platforms or libraries tend to want the history to be the most &amp;ldquo;elegant story&amp;rdquo; possible.&lt;/p&gt;
&lt;p&gt;For the purpose of this discussion, &amp;ldquo;Yammer&amp;rdquo; is a service, and &amp;ldquo;node&amp;rdquo; is a platform. You install a platform and then build your program on it, and you install updates yourself. You use a service in production on someone else&amp;rsquo;s computers, and it is updated by other people. (From this point of view, &amp;ldquo;PaaS&amp;rdquo; is actually a Service, not a Platform. Pedants please direct all complaints to /dev/null.)&lt;/p&gt;
&lt;p&gt;There is of course some overlap in the concerns. I definitely do not want any changes whatsoever to the history of release branches in the &lt;a href=&quot;https://github.com/joyent/node&quot;&gt;joyent/node&lt;/a&gt;, even if it means the occasional messy revert. If something has gone out as a part of a release, then it is &lt;strong&gt;definitely&lt;/strong&gt; off-limits, and anyone who rebases that into some other shape will be ruthlessly punished (perhaps with the removal of commit access, if the infraction is repeated.)&lt;/p&gt;
&lt;p&gt;I think that this split comes down to a simple question: When encountering a new problem, are you likely to use &lt;code&gt;git-bisect&lt;/code&gt; to track it down, or are you going to revert to some known-good state and go from there?&lt;/p&gt;
&lt;h3&gt;Git&amp;rsquo;s Killer Feature: Bisect&lt;/h3&gt;
&lt;p&gt;If you have never used git bisect, then you don&amp;rsquo;t fully understand why git is useful. Git bisect is one of those tools that, once you use it, you realize that there is simply no way you could have ever debugged without it. And, the first time you try to bisect over a commit history littered with merge commits and reverts and broken states, you&amp;rsquo;ll see why &amp;ldquo;tidiness&amp;rdquo; is so powerful.&lt;/p&gt;
&lt;p&gt;For the uninitiated, here&amp;rsquo;s a run-down of what bisect does, in broad strokes:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;You run your tests, and realize &amp;ldquo;Oh, shit, it&amp;rsquo;s busted.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;You know that it was working yesterday (or whenever).&lt;/li&gt;
&lt;li&gt;You run &lt;code&gt;git bisect bad&lt;/code&gt;.  (Answer &amp;ldquo;yes&amp;rdquo; to the prompt.)&lt;/li&gt;
&lt;li&gt;You do &lt;code&gt;git checkout &amp;lt;known-good-state&amp;gt;&lt;/code&gt;.  (Run the test again
just to make sure that you&amp;rsquo;re not mis-remembering.)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;git bisect good&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Git will proceed to hop you to various commits, at which point you
run your test and do &lt;code&gt;git bisect good&lt;/code&gt; if it&amp;rsquo;s good, or &lt;code&gt;git bisect
bad&lt;/code&gt; if it&amp;rsquo;s bad.  (If necessary, you can also check out commits
manually, and mark them as good/bad.)&lt;/li&gt;
&lt;li&gt;Shockingly quickly, git tells you which commit was the first bad
one.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Because the &amp;ldquo;test&amp;rdquo; can be literally anything, I often use this to track down which commit in libuv broke something in node, if the node bisect shows that it was a &lt;code&gt;update libuv to deadbeef&lt;/code&gt; type of commit that is the culprit. I run the &lt;code&gt;git bisect&lt;/code&gt; in the libuv repo, and the &amp;ldquo;test&amp;rdquo; is putting the libuv code in node&amp;rsquo;s deps/uv folder, and running the node test.&lt;/p&gt;
&lt;p&gt;To make bisect even more interesting, you can add something like this to your &lt;code&gt;~/.gitconfig&lt;/code&gt; file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[alias]
  lg = log --graph --pretty=format:&#39;%Cred%h%Creset %C(yellow)%an%d%Creset %s %Cgreen(%cr)%Creset&#39; --date=relative
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then running &lt;code&gt;git lg&lt;/code&gt; will show you a very terse listing of the history, which shows all the bisect tags.&lt;/p&gt;
&lt;p&gt;As you can imagine, this works most efficiently when you have a relatively straightforward history. If you have messy back and forth play-by-play commits, where tests are breaking and un-breaking repeatedly, or the build is failing occasionally, then bisect is essentially worthless. Bisect can go over merge commits, but it becomes a lot less trivial to track what it&amp;rsquo;s doing, and I&amp;rsquo;ve found a lot of times the &amp;ldquo;first bad commit&amp;rdquo; is the merge commit, which is pretty much useless.&lt;/p&gt;
&lt;p&gt;Tidiness makes bisect even more powerful. I&amp;rsquo;d use git without bisect, because it&amp;rsquo;s the de facto standard of the open source world. But without bisect, I would love git half as much. If I could make bisect even more powerful by rubbing grease on my elbows, I&amp;rsquo;d do it.&lt;/p&gt;
&lt;p&gt;This is not about a sense of satisfaction. Tidiness is about taking 20 minutes to track down a bug, instead of taking all day.&lt;/p&gt;
&lt;h3&gt;Upstream Motion and Large Feature Branches&lt;/h3&gt;
&lt;p&gt;Occasionally you have a &amp;ldquo;Feature&amp;rdquo; branch that is really a major refactor of some sort, which cannot be accomplished in a single burst of coding. My most recent example is &lt;a href=&quot;https://github.com/joyent/node/compare/streams2&quot;&gt;streams2&lt;/a&gt;, which I&amp;rsquo;ve been working on for a few weeks. (There&amp;rsquo;s been a lot of input and feedback from many others, and the code has been used as a &lt;a href=&quot;https://npm.im/readable-stream&quot;&gt;userland module&lt;/a&gt;, so this isn&amp;rsquo;t a code-dump in progress.)&lt;/p&gt;
&lt;p&gt;In order to not end up in a state where we have a zillion conflicts to resolve, and to be able to bisect out problems, I&amp;rsquo;ve been continually rebasing streams2 on top of the upstream master branch.&lt;/p&gt;
&lt;p&gt;This is especially important when a change comes into the upstream master that breaks my feature branch, &lt;em&gt;but doesn&amp;rsquo;t break master&lt;/em&gt;. I&amp;rsquo;m not sure how I&amp;rsquo;d even go about testing that if I was merging master into streams2 (unless I were to merge each commit individually, which is kind of absurd).&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s how I found the source of the problem:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Check out master into a new &amp;ldquo;clean&amp;rdquo; workspace. (NB: I didn&amp;rsquo;t have to download anything again. I could just do &lt;code&gt;cd ..; git clone ./node ./node-clean&lt;/code&gt;, and then &lt;code&gt;git pull origin master&lt;/code&gt;, since &amp;ldquo;origin&amp;rdquo; is the &amp;ldquo;streams2&amp;rdquo; workspace.)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;git bisect bad&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check out master from 4 weeks ago, which I&amp;rsquo;m pretty sure worked. (Could have probably been a bit more conservative, but who cares? Bisect uses the magic of a binary search, so it&amp;rsquo;s probably just one extra test!)&lt;/li&gt;
&lt;li&gt;Just to make sure, in the first workspace, rebase streams2 onto that 4-week-old commit. (Because streams2 was already based on master, I did this via &lt;code&gt;git rebase -i &amp;lt;old-commit&amp;gt;&lt;/code&gt; and then deleted all the the lines that were above the first streams2 commit.) Sure enough, test passes fine.&lt;/li&gt;
&lt;li&gt;Back in the &amp;ldquo;clean&amp;rdquo; workspace, run &lt;code&gt;git bisect good&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Repeat step 4 in the &amp;ldquo;streams2&amp;rdquo; workspace, running &lt;code&gt;git bisect good&lt;/code&gt; or &lt;code&gt;git bisect bad&lt;/code&gt; in the &amp;ldquo;clean&amp;rdquo; workspace.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;rsquo;m sure that there was probably a simpler way to do this. Maybe even some argument to bisect to tell it to rebase onto the commit, or a shell script that&amp;rsquo;d do it all for me. But this worked, was fast, and totally got the job done. I don&amp;rsquo;t even know how I would have figured that out otherwise.&lt;/p&gt;
&lt;p&gt;(In this case, the culprit was a libuv update. Bisecting through libuv using the technique I described above tracked it down to a &lt;code&gt;remove libev&lt;/code&gt; mega-commit, so the moral of the story is that, even with great tools, dependencies suck sometimes.)&lt;/p&gt;
&lt;p&gt;Seriously. If you&amp;rsquo;re doing a big refactor that takes some time, and the upstream root is changing, how do you manage to find these kinds of issues? If I was merging in, all I&amp;rsquo;d know is that the merge commit made the test fail, but the test &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; fail on master. In this case it&amp;rsquo;s only the combination that is problematic.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know how to find or solve that sort of problem without rebase. I&amp;rsquo;m sure that there&amp;rsquo;s some way, because I vaguely remember handling these kinds of issues when I used CVS and SVN, but it&amp;rsquo;s all hazy now that I&amp;rsquo;m spoiled by bisect&amp;rsquo;s awesome mightiness and the power of a mutable history.&lt;/p&gt;
&lt;h3&gt;Taking Patches and &amp;ldquo;Ideal Workflows&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;As the maintainer of several open source projects, a few of which get a lot of outside contributions, I am faced with a choice:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Make every potential contributor follow the ideal workflow (for some value of &amp;ldquo;ideal&amp;rdquo;), and reject a lot of patches because they are &amp;ldquo;incorrect&amp;rdquo; in some trivial way.&lt;/li&gt;
&lt;li&gt;Be ok with using &lt;code&gt;git am&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt; occasionally.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That to me is a nobrainer. My approach to contributions is closer to the &amp;ldquo;email a patch&amp;rdquo; model than the &amp;ldquo;click the green merge button&amp;rdquo; approach. Having that many merge commits would fuck up my precious bisect, and I &lt;strong&gt;always&lt;/strong&gt; want to test the commit locally before pushing it live.&lt;/p&gt;
&lt;p&gt;This doesn&amp;rsquo;t mean that I don&amp;rsquo;t use github&amp;rsquo;s pull request features. On the contrary, I love them! They&amp;rsquo;re a great lightweight way to do discussion and code reviews, they integrate well with email, and when it&amp;rsquo;s ready to accept, I can do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl &lt;a href=&quot;https://github.com/joyent/node/pulls/12345.patch&quot;&gt;https://github.com/joyent/node/pulls/12345.patch&lt;/a&gt; | git am
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or to pull just one commit:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl &lt;a href=&quot;https://github.com/john-q-contributor/node/deadbeef00.patch&quot;&gt;https://github.com/john-q-contributor/node/deadbeef00.patch&lt;/a&gt; | git am
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Did the user have a long commit message that is in broken english and will be confusing later? No problem. &lt;code&gt;git rebase -i HEAD^&lt;/code&gt;, and reword it. Did they make some minor lint mistake? No matter. &lt;code&gt;make jslintfix &amp;amp;&amp;amp; gci -am &#39;lint fixup&#39;&lt;/code&gt; and then squash the commits together.  Did they put 3 features in one commit?  Easy, just do a &lt;code&gt;git rebase -i&lt;/code&gt;, mark the commit for editing, then split it up into 3.  They get credit for the work that they did, and I get a history that&amp;rsquo;s easy to read with a minimum of clutter.  In the most extreme case, I can even use &lt;code&gt;git format-patch&lt;/code&gt; to output a patch file, edit it manually, and then &lt;code&gt;git am&lt;/code&gt; that puppy.&lt;/p&gt;
&lt;p&gt;Rebase, am, and apply allow a project lead to be liberal in what they accept, and strict in what they send.&lt;/p&gt;
&lt;p&gt;Yes, this can all be abused.  So, don&amp;rsquo;t abuse it.  Great power great responsibility blah blah blah.  In fact it&amp;rsquo;s pretty easy to not fuck up, far easier than &lt;em&gt;actually&lt;/em&gt; writing perfect code or getting contributors to make perfect commits.  If you do mess it up, oh well, there are plenty of forks; just reset and start over.&lt;/p&gt;
&lt;h3&gt;It&amp;rsquo;s About History&lt;/h3&gt;
&lt;p&gt;It would be unreasonable to say that you should &lt;em&gt;always&lt;/em&gt; use rebase instead of merge. For example, we routinely merge node&amp;rsquo;s stable branch into master. Rebasing master onto the latest stable branch would destroy the history of all our previous unstable releases, and would be much harder to manage.&lt;/p&gt;
&lt;p&gt;In the case of that &amp;ldquo;big feature branch&amp;rdquo; for streams2, even if it ends up being a fast-forward due to being rebased onto the latest master, I&amp;rsquo;m going to merge it in with &lt;code&gt;--no-ff&lt;/code&gt; to &lt;em&gt;force&lt;/em&gt; a merge commit, so that it&amp;rsquo;s easy to pluck off if it turns out that the feature is actually crap.&lt;/p&gt;
&lt;p&gt;Git is a tool for managing content. There are a lot of ways to manage content. If something has been pushed live (or even &amp;ldquo;pushed upstream&amp;rdquo;) then you probably want to maintain forensic-level control over it.&lt;/p&gt;
&lt;p&gt;I think of &amp;ldquo;history&amp;rdquo; in terms of levels of granularity.&lt;/p&gt;
&lt;p&gt;Take for example, the assassination of Abraham Lincoln, an extremely relevant historical event in the history of the United States.&lt;/p&gt;
&lt;p&gt;At the lowest level of granularity, there&amp;rsquo;s a lot of first-hand data: the eye-witness accounts that were given to police at the scene, the notes from the doctors in the ambulance and at the hospital where Lincoln was rushed after being shot, the descriptions and reports of other forensic evidence at the scene, the writings of John Wilkes Booth and the testimony of his conspirators (who all failed in their missions, for various reasons). There&amp;rsquo;s also the context of the Civil War being in the process of ending (but that being in some dispute at the time). There&amp;rsquo;s the account of the Union soldiers who tracked Booth down to a barn, set it on fire, then shot him as he fled, and the account of John St. Helen, who claimed to actually be John Wilkes Booth, having escaped and lived under a pseudonym in Texas for years, before committing suicide.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t learn any of that in history class, because reading police reports makes it significantly more difficult to understand the story. &lt;em&gt;Some&lt;/em&gt; context is great, but reading 25 conflicting eye-witness reports is not actually that useful over a hundred years later. Sure, we keep them around, just in case, but what you really want to know is just &lt;em&gt;what actually happened&lt;/em&gt;. So, on top of those low-level accounts, we have various different accounts that go into different levels of detail, resolving and synthesizing the inconsistencies into a coherent story. At the highest level of history, you have the kids&amp;rsquo; book version: &amp;ldquo;Abraham Lincoln was the president during the Civil War. He abolished slavery, and then got shot in a theater.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;-wip&lt;/code&gt; branches are my version of the conflicting police reports. The feature branch is a tidied up version which is actually useful, but probably still too detailed for most people to want to parse through. The ChangeLog is the effective &amp;ldquo;what happened when&amp;rdquo; sort of history, and at the highest level, you&amp;rsquo;ll have a tweet from @nodejs that says &amp;ldquo;Version 0.9.5 Released - streams2 support!&amp;rdquo; with a link go to download it.&lt;/p&gt;
&lt;h3&gt;Git is an Editor&lt;/h3&gt;
&lt;p&gt;One objection to the &amp;ldquo;git is an editor&amp;rdquo; mindset is that it&amp;rsquo;s actually a database.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;@&lt;a href=&quot;https://twitter.com/izs&quot;&gt;izs&lt;/a&gt; @&lt;a href=&quot;https://twitter.com/polotek&quot;&gt;polotek&lt;/a&gt; Git isn&amp;rsquo;t an editor, it&amp;rsquo;s a database. It should keep a record of everything that happens with tracked files. Rebase loses data&lt;br /&gt;— Daniel Erickson (@TechWraith) &lt;a href=&quot;https://twitter.com/TechWraith/status/277658833772486657&quot; data-datetime=&quot;2012-12-09T06:19:59+00:00&quot;&gt;December 9, 2012&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Of course, the problem with that is that a text file can be a database also, and you still use an editor to edit it; and a database is just a fancy editor for manipulating and retrieving blocks of data off a disk, and provides some ways to manipulate that data that take advantage of its regularity.&lt;/p&gt;
&lt;p&gt;Many &amp;ldquo;databases&amp;rdquo; have mechanisms to delete data.  (In fact, all that I know of have something like this.)  Losing data is only a problem if you lose data that you care about; losing data that you &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; care about increases the overall understanding and makes the data that you &lt;em&gt;do&lt;/em&gt; care about easier to get to.&lt;/p&gt;
&lt;p&gt;Use the tools wisely.  Use the editor to tell a good story, the right kind of story that your application needs told.  If you need forensic details of every change to your production service, well good news, git can do that!  If you need a clear explanation of the reasoning behind features in your library, git is great for that, also.  Like a good editor, it can be used to tell a variety of different kinds of stories.  Like a good database, it gives you the tools to organize your data into the shape that is most useful to you.&lt;/p&gt;
&lt;p&gt;The backspace key is very dangerous.  You can delete an entire file with it!  But the trade-offs are worth the benefit.  For the same reason that you delete code rather than comment it out (because it&amp;rsquo;s in the git history, so why keep the clutter?) it&amp;rsquo;s also great to rebase work-in-progress branches into a good state for their final merge.  Some aspects of history are ok to lose.  In many situations, &lt;em&gt;not&lt;/em&gt; losing that bit of history makes the story harder to follow.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Lokaah Samastaah Sukhino Bhavantu</title>
		<link href="https://blog.izs.me/2012/11/lokaah-samastaah-sukhino-bhavantu/"/>
		<updated>2012-11-09T23:44:00Z</updated>
		<id>https://blog.izs.me/2012/11/lokaah-samastaah-sukhino-bhavantu/</id>
		<content type="html">&lt;p&gt;There&amp;rsquo;s a thing that my yoga teacher says after each class.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;We offer the benefit of our practice to all beings.  May they all be happy, free, and at peace.
  Lokaah Samastaah Sukhino Bhavantu.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;At the start of class, she asks us to &amp;ldquo;set the intention&amp;rdquo; of our practice, a thing or person or idea that we want to focus our positive energy on throughout the exercises.&lt;/p&gt;
&lt;p&gt;When I first started doing yoga, I felt a lot of resistance to the &amp;ldquo;woo woo&amp;rdquo; aspects of it.  I thought, &amp;ldquo;I&amp;rsquo;m coming here to exercise, and it&amp;rsquo;s a good work out, so putting up with a bit of hippie crap is not such a big deal, but really?  Not for me.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;We are not beings of light.  I can&amp;rsquo;t fix your car by sending good vibrations.  In fact, I can&amp;rsquo;t even send &amp;ldquo;vibrations&amp;rdquo; in any meaningful sense just by having thoughts.  Prayer doesn&amp;rsquo;t heal the sick, and can even make them worse, if they know about it.  People make really bad decisions sometimes because they buy into what is, at its root, a fairy tale.  Why not just interact with reality as it is?&lt;/p&gt;
&lt;p&gt;However, there&amp;rsquo;s a flaw in that approach.  We are not beings of light, sure, but neither are we innately rational.  The Practice is about stretching your entire being into a more powerful shape.  Minds work better when the body is fit, and bodies are highly responsive to the intention of their minds.&lt;/p&gt;
&lt;p&gt;Your brain is an organ.  Your mind is what this organ does.  Saying, &amp;ldquo;I&amp;rsquo;ll just do the exercise, but I&amp;rsquo;m not going to believe it&amp;rdquo; is like saying that you&amp;rsquo;re going to do a cardio workout, but you want to keep your pulse rate down.  If you make that a restriction, it will limit how far you can push yourself, and ultimately limit the benefit.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;woowoo&amp;rdquo; beings-of-pure-light mentality, and the &amp;ldquo;no woowoo&amp;rdquo; I&amp;rsquo;ll-just-do-the-physical-parts, are two sides of the same coin, a paradigm that the body and the mind are separate things that only interact over a modest communication channel, whereby the body gives information and the mind gives direction.  But these two different views of the human soul are much more intimately connected.  The body and the mind are not separate things that communicate, they are the &lt;em&gt;same&lt;/em&gt; thing, seen from different points of view.&lt;/p&gt;
&lt;p&gt;This year has been incredible for me.  Rewarding in so many ways, professionally, socially, intellectually, romantically, the list goes on.  But with these rewards have come profound challenges as well.  I am definitely not shy, but I have always been quite introverted.  I tend to keep a small number of friends, and am much more comfortable in 1-on-1 interactions than in groups.  I can barely manage to write a line of code in an office, always preferring to work alone in isolation.  Once upon a time, I&amp;rsquo;d dreamed of being nerd-famous, but I always thought it would be less&amp;hellip; &amp;ldquo;personal&amp;rdquo;, in some way.  Like I&amp;rsquo;d have a high-trafficked blog, and live in relative obscurity otherwise.&lt;/p&gt;
&lt;p&gt;Then Ryan left the helm of Node.js, and I find myself arbitering disputes and traveling to faraway countries where people want to tell me things and ask me things and watch me talk about things on a stage.  There&amp;rsquo;s all these&amp;hellip; &lt;em&gt;people&lt;/em&gt; with their &lt;em&gt;thoughts&lt;/em&gt; and &lt;em&gt;feelings&lt;/em&gt; and much of the time, they completely confuse me.  There is a constant low-level anxiety that I&amp;rsquo;m about to say the wrong thing, or forget the name of someone (who of course I know well online, and interact with easily via text!) or do some other thing that will insult everyone and let everyone see what a fraud I am, and how silly they all are to have put any stock in anything I have to say.&lt;/p&gt;
&lt;p&gt;This is why we Practice.  Breathe.  Stretch.  If it feels easy, push a little harder.  Breathe.  If it feels like too much, back off a little bit.  Breathe.  It&amp;rsquo;s not supposed to be fun all the time.  Breathe.&lt;/p&gt;
&lt;p&gt;As the &lt;a href=&quot;http://lesswrong.com/&quot;&gt;LessWrongers&lt;/a&gt; say, the times when you most need your skills are the times when you&amp;rsquo;re most likely to lose them.  Part of the Practice is learning to recognize distress, and come back to a place of balance.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure exactly when it happened, but I noticed today that I had changed my stance on the little prayer at the end of yoga class.  I actually say it along in my head now.  I do take a few moments to set my intention at the start of the class, and come back to it repeatedly.  Sometimes the intention is my partner, or a family member, or someone else that I am thinking about.  Sometimes it&amp;rsquo;s an exciting event coming up.  Sometimes it&amp;rsquo;s just a bug in Node that I know I&amp;rsquo;ll have to fix.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t care that Marisa will never be able to tell that I was &amp;ldquo;setting my intention&amp;rdquo; on her and our relationship while I was sweating in side-angle pose.  It won&amp;rsquo;t make my flight to Australia any smoother that I was sending positive energy into the future.  And most of the beings everywhere will not be any happier, freer, peaceful, or at ease, by virtue of me doing yoga.&lt;/p&gt;
&lt;p&gt;But it&amp;rsquo;s not about them.  Setting intention is like aligning the spine of your mind.  By focusing on &lt;em&gt;my&lt;/em&gt; sense of compassion, I make myself more able to respond gracefully to challenges in life, no matter what they are.  It is an exercise that strengthens the mental ability to listen to someone spit venom, and instead of spitting it back, think about how you might be able to understand why they feel so threatened, and how you can help that wound heal.&lt;/p&gt;
&lt;p&gt;And the actual workout is better.  We are social creatures, and our instincts are mostly involuntary.  By telling myself that I&amp;rsquo;m pushing my body for the benefit of all living beings, some primal sense of obligation wakes up muscles I didn&amp;rsquo;t know I had, and gives me the fortitude to breathe through the intensity of the situation.  Grit is something you can build, but you have to have a reason.  Once built up, it&amp;rsquo;s applicable all over.  It&amp;rsquo;s easier to trudge through godawful legacy code in node to fix bugs, and other things where others actually &lt;em&gt;do&lt;/em&gt; benefit from my desire to carry on.&lt;/p&gt;
&lt;p&gt;And this, ultimately, is what &amp;ldquo;extending the benefit of our practice to all living beings&amp;rdquo; really means, whether it&amp;rsquo;s yoga or meditation or rationalist practice or just working to get better at your job.  It means that the work isn&amp;rsquo;t just for ourselves.  It&amp;rsquo;s for the effect that we have in the world.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know all the things the future will bring.  I hope it stays great for as long as possible.  I hope that someone somewhere can cure aging and we can all live forever and do away with war and disease and car accidents.  But hopes and reality are not the same thing.  My best guess is that the future will bring age and sickness and sadness interspersed with the good stuff.  Eventually it will probably bring death.  When you&amp;rsquo;re in a knife fight, it&amp;rsquo;s too late to learn how to defend yourself.  Now is the time to practice diligently.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The People&#39;s Bailout</title>
		<link href="https://blog.izs.me/2012/11/the-peoples-bailout/"/>
		<updated>2012-11-09T04:49:17Z</updated>
		<id>https://blog.izs.me/2012/11/the-peoples-bailout/</id>
		<content type="html">&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://howtosharpenpencils.tumblr.com/post/35285338188/the-peoples-bailout&quot;&gt;howtosharpenpencils&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a long post but it’s about something pretty interesting so I hope you’ll indulge …&lt;br /&gt;&lt;br /&gt;Like many folks, Occupy Wall Street has been some doing good work in the aftermath of Hurricane Sandy, helping people on the ground.&lt;br /&gt;&lt;br /&gt;Now OWS is launching the &lt;a href=&quot;http://rollingjubilee.org/&quot; target=&quot;_blank&quot;&gt;ROLLING JUBILEE&lt;/a&gt;, a program that has been in&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Escaping Captivity: Social Apes making Software in the Wild</title>
		<link href="https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/"/>
		<updated>2012-10-18T10:15:55Z</updated>
		<id>https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/</id>
		<content type="html">&lt;p&gt;Here are the slides from the talk I just gave at &lt;a href=&quot;http://www.nodedublin.com/&quot;&gt;Node Dublin&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Click each slide to advance to the next, or just scroll normally.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-002&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Escaping Captivity: Social Apes making Software in the Wild  Isaac Z. Schlueter Node Dublin - 2012&quot; title=&quot;Escaping Captivity: Social Apes making Software in the Wild  Isaac Z. Schlueter Node Dublin - 2012&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.001.png&quot; id=&quot;ec-slide-001&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hi.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-003&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;This is not a typical conference talk&quot; title=&quot;This is not a typical conference talk&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.002.png&quot; id=&quot;ec-slide-002&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, first off, this is probably not the kind of talk you&amp;rsquo;d usually see at a tech conference.  Maybe it should be.  I mean, we&amp;rsquo;re all here because we have the technology in common, but I think the lesson of JSConf and NodeConf and the way that tech conferences have gone in the last few years in general is that these events are really about the community and node is not the typical tech community&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-004&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Node is not a typical technology community.&quot; title=&quot;Node is not a typical technology community.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.003.png&quot; id=&quot;ec-slide-003&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and node is not the typical tech community.  I&amp;rsquo;ve had the honor of being able to spend my days and nights working with this technology and the people who are passionate about it, and watch the community grow from basically just a handful of people up to the incredibly relevant thing it is today, and I believe that&amp;rsquo;s going to continue.&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s going to continue because I think that one day, the node community will be typical of the technology communities we have&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-005&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;This pattern will continue.&quot; title=&quot;This pattern will continue.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.004.png&quot; id=&quot;ec-slide-004&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;the node community will be typical of the technology communities we have.  This pattern will continue.&lt;/p&gt;
&lt;p&gt;In the next 30 minutes or so, I&amp;rsquo;d like to talk about some things that make the Node community so interesting, and why the patterns we&amp;rsquo;re developing here are going to inevitably be copied, extended, and built upon.&lt;/p&gt;
&lt;p&gt;It all comes down to human nature.&lt;/p&gt;
&lt;p&gt;Because you see, software communities are made of people&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-006&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Communities are made of Humans.&quot; title=&quot;Communities are made of Humans.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.005.png&quot; id=&quot;ec-slide-005&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;software communities are made of people, of human beings.  And what are humans?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-007&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Social Primates&quot; title=&quot;Social Primates&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.006.png&quot; id=&quot;ec-slide-006&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re the most socially active of the great apes.&lt;/p&gt;
&lt;p&gt;If you look at all the mammals, primates are some of the most social, and humans are the primates with the most interesting and complicated social interactions of any primates.  In fact, some anthropologists have made the case that human intelligence is really just there to support our incredible level of socializing.  In an evolutionary sense, our need for facebook made us smart enough to invent facebook.&lt;/p&gt;
&lt;p&gt;I have always liked reading and learning about anthropology, because it&amp;rsquo;s the study of what we are and where we came from, and really, everything we do, we do because humans do it, right?  Being a social primate means that we&amp;rsquo;re obsessed with humans, which is why you&amp;rsquo;re all listening to me yammer on like this.&lt;/p&gt;
&lt;p&gt;So, our story starts a little while ago,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-008&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;5 MYears ago:  Last common  Pan/Homo Ancestor&quot; title=&quot;5 MYears ago:  Last common  Pan/Homo Ancestor&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.007.png&quot; id=&quot;ec-slide-007&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, our story starts a little while ago&lt;/p&gt;
&lt;p&gt;About 5 million years ago, give or take, lived the last common ancestor that&amp;rsquo;s shared by the homo and pan genuses.  &amp;ldquo;Homo&amp;rdquo; as in &amp;ldquo;homo sapiens&amp;rdquo;, &amp;ldquo;homo neanderthalus&amp;rdquo;, etc. &amp;ndash; humans, basically; and &amp;ldquo;pan&amp;rdquo; as in chimps and bonobos.  That&amp;rsquo;s when we split off from one another&lt;/p&gt;
&lt;p&gt;5 Million years is not a very long time, from an evolution point of view.  In fact, it&amp;rsquo;s so recent, that some people have argued that pan and homo should really not be separate genuses, and we should rename chimps to &amp;ldquo;homo trogolodytus&amp;rdquo; and bonobos should be &amp;ldquo;homo paniscus&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;That is, we&amp;rsquo;re so closely related that we&amp;rsquo;re basically the third species of chimps along with those two, and have almost as much in common with them as they do with each other.  Their last common ancestor was only 1M years ago.  So, genetically speaking, they live in the same building, we live next door, and the other great apes are across town somewhere.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-009&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;250 KYears ago: Anatomically Modern Humans&quot; title=&quot;250 KYears ago: Anatomically Modern Humans&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.008.png&quot; id=&quot;ec-slide-008&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;About a quarter million years ago, we find the first anatomically modern humans.  That is, if you went back in time a quarter of a million years, and plucked some homo sapiens that was walking around, and teleported them through your time machine to today, they&amp;rsquo;d be just like you and me, minus a whole lot of technology, like JavaScript and iPhones and time machines.&lt;/p&gt;
&lt;p&gt;Also, you&amp;rsquo;d almost certainly see that they made their living, as it were, by looking for edible things in a forest; fruits, nuts, catching fish and insects, and hunting.  Until about 10,000 years ago, all humans had hunter-gatherer lifestyles, and a few societies today still do, but they&amp;rsquo;re much more rare, and there&amp;rsquo;s been a lot of interaction with them, so they&amp;rsquo;re not entirely indicative of our early origins, but we can still get some insights by observing them and how they live.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-010&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Hunt. Gather. Repeat.&quot; title=&quot;Hunt. Gather. Repeat.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.009.png&quot; id=&quot;ec-slide-009&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The key component of hunter-gatherer or &amp;ldquo;immediate return&amp;rdquo; societies is that they have to keep moving, and are fiercely egalitarian.  What that means is, &lt;em&gt;everything&lt;/em&gt; is shared.  Hunting is a group activity, and you don&amp;rsquo;t always catch something.  If I don&amp;rsquo;t share with you, then you don&amp;rsquo;t share with me, and we all die.  Also, everything they have has to be continually packed up and carried to a new place, so there&amp;rsquo;s really no &amp;ldquo;ownership&amp;rdquo; of anything.&lt;/p&gt;
&lt;p&gt;But, this isn&amp;rsquo;t just a big hippie love fest where we all share because we like each other; people who don&amp;rsquo;t share are shunned, and in some cases killed.  In that kind of society, there&amp;rsquo;s no room for selfishness, and so the group doesn&amp;rsquo;t tolerate it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-011&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;10 KYears ago: Agriculture&quot; title=&quot;10 KYears ago: Agriculture&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.010.png&quot; id=&quot;ec-slide-010&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, if you looked at the whole time that humans have been on this planet, you&amp;rsquo;d see that about 250 thousand years were spent wandering around, fishing, hunting, collecting bugs and nuts and fruits, and then, in the last 10,000 years, we suddenly stopped moving around, and started growing starchy plants.  We&amp;rsquo;d already domesticated certain animals, so really the shift is from hunter-gatherers, to nomadic herders, to farmers.  But in evolutionary terms, the change was dramatic and swift, and mostly one-way.&lt;/p&gt;
&lt;p&gt;And so, there was more food, and it was all in one place.  Clearly great, right?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-012&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Agriculture: Big changes&quot; title=&quot;Agriculture: Big changes&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.011.png&quot; id=&quot;ec-slide-011&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So there was a lot of food, and it was all in one place.  So this was clearly great, right?&lt;/p&gt;
&lt;p&gt;I mean, with a surplus of food, and the lack of any need to move around, you get societies growing very quickly, and other things show up as well:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-013&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Agriculture Pros: More calories, less moving around  Lower infant mortality  Trade → Writing, Math → Literature  Keeping stuff → technology, medicine, etc.&quot; title=&quot;Agriculture Pros: More calories, less moving around  Lower infant mortality  Trade → Writing, Math → Literature  Keeping stuff → technology, medicine, etc.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.012.png&quot; id=&quot;ec-slide-012&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, with the advent of agriculture, you get all this great stuff.  Because we weren&amp;rsquo;t moving around so much, you could keep more &amp;ldquo;stuff&amp;rdquo;.  Also, fewer babies died, so that&amp;rsquo;s great of course.&lt;/p&gt;
&lt;p&gt;And, since you had a surplus of food, you could trade it with other groups.  Trade meant that we needed a way to write stuff down, which led to writing down our stories that were previously only oral traditions, and this in general led to an explosion in the amount of technology, since each generation could more effectively build on what the previous generation had done.  However&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-014&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Agriculture Negs: More calories, but less nutrition  Population density → disease (zoological pathogens! yum!)  Inheritance → Hierarchical Ruling Class&quot; title=&quot;Agriculture Negs: More calories, but less nutrition  Population density → disease (zoological pathogens! yum!)  Inheritance → Hierarchical Ruling Class&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.013.png&quot; id=&quot;ec-slide-013&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, not all was wonderful in early farming societies, and in fact, there were a lot of problems.&lt;/p&gt;
&lt;p&gt;The first farming societies that we have records of, from Catal Huyuk and some other places, around 12,000 to 10,000 years ago, show people living basically right on top of one another.  They still had virtually no personal possessions.  However, these little &amp;ldquo;mound cities&amp;rdquo; grew really fast, and studies of the bones of the people who lived there showed that they starved less often than hunter-gatherers, but suffered from terrible malnutrition.  The average male height falls from about 200cm to about 160cm in the span of 10 generations or so, because being taller is a liability if you&amp;rsquo;re not getting adequate nutrition.&lt;/p&gt;
&lt;p&gt;Also, all those people living right on top of one another leads to an explosion in infectious diseases that were never much of a problem in the hunter-gatherer days.  Because we were living with our animals, you have zoological pathogens springing up, and so on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-015&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;HunterGatherer Negs: One bad season can kill you all.  Babies die pretty often.  Sorcerers can hex you: gotta kill them.  Might get accused of being a sorcerer: no legal system.&quot; title=&quot;HunterGatherer Negs: One bad season can kill you all.  Babies die pretty often.  Sorcerers can hex you: gotta kill them.  Might get accused of being a sorcerer: no legal system.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.014.png&quot; id=&quot;ec-slide-014&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I want to pause for a second here, and point out that being a hunter gatherer is not without it&amp;rsquo;s faults, either.  While most of the places people lived had plenty of fruits and nuts and bugs and animals, if there was a bad season, you just went hungry, and sometimes that meant that everybody died.  Especially, kids died a lot, which is why you hear stuff like the average life expectancy being only 30 years old; people lived a long time, but the infant mortality brought the average way down.&lt;/p&gt;
&lt;p&gt;Worst of all, there were sorcerers always casting hexes, and you gotta kill those fuckers, or else they might hex everybody.&lt;/p&gt;
&lt;p&gt;Even worse, if anyone claims you&amp;rsquo;re a sorcerer, you&amp;rsquo;re pretty much fucked, because there&amp;rsquo;s no legal system, and you&amp;rsquo;re just a couple dozen folks out in the woods, so&amp;hellip; yeah.  A legal system and science and that stuff, turns out those are pretty nice perks.&lt;/p&gt;
&lt;p&gt;But most interestingly, I think, is that two things show up shortly after the advent of farming, which weren&amp;rsquo;t present in Catal Huyuk and other very very early neolithic settlements: We started making shields and walls&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-016&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Shields and Walls&quot; title=&quot;Shields and Walls&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.015.png&quot; id=&quot;ec-slide-015&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;But most interestingly, I think, is that two things show up shortly after the advent of farming, which weren&amp;rsquo;t present in Catal Huyuk and other very very early neolithic settlements: We started making shields and walls&lt;/p&gt;
&lt;p&gt;In the remains of hunter-gatherers, there&amp;rsquo;s a lot of weaponry.  Really creative, gnarly looking things.  I mean, they had a lot of time to sit around, and no tv or anything, and their job was to try to kill shit, so they came up with these creative ways to do it.  You see these elaborate awesome spears, and bows and arrows, with flint arrow heads, and badass knives, and all sorts of other stuff.&lt;/p&gt;
&lt;p&gt;But you don&amp;rsquo;t see any &lt;em&gt;defensive&lt;/em&gt; artifacts until the Neolithic period, and there aren&amp;rsquo;t any fortifications.  Why is this important?&lt;/p&gt;
&lt;p&gt;Well, you don&amp;rsquo;t need a shield for &lt;em&gt;hunting&lt;/em&gt;, because animals don&amp;rsquo;t shoot back.  And there&amp;rsquo;s no need for a wall if you don&amp;rsquo;t need to protect something.  So, the advent of defenses shows us that humans started being offensive and violent with one another in a systematic way, just a short while after we started farming.&lt;/p&gt;
&lt;p&gt;When I first learned this, it seemed really strange to me.  After all, now there&amp;rsquo;s a surplus, why would that possibly make us want to fight?  You&amp;rsquo;d think that people would be more likely to fight when there isn&amp;rsquo;t enough to go around.&lt;/p&gt;
&lt;p&gt;I wanna back up the evolutionary chain just a bit, and check out that other fork in the road.  The story starts in Africa.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-017&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Gombe, 1960&quot; title=&quot;Gombe, 1960&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.016.png&quot; id=&quot;ec-slide-016&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gombe, to be exact.&lt;/p&gt;
&lt;p&gt;In 1960, Jane Goodall went into the jungle to study chimps in the wild.  We all pretty much take this for granted now, but at the time, very little was actually known about chimps.  Goodall spent some time traveling around in the jungle getting to know them.  She found them at that time to be &amp;ldquo;rather more peaceable&amp;rdquo; than human beings.  There were some scuffles and whatnot, especially between adolescent males, but for the most part, they all got along.  When one chimp found some food, they&amp;rsquo;d even call out for others to come and share it.&lt;/p&gt;
&lt;p&gt;So, for five years, Goodall traipsed around the jungle, and learned a lot.  Then, they wanted to get some more data, so they went back.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-018&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Gombe, 1965  Mahale, 1968&quot; title=&quot;Gombe, 1965  Mahale, 1968&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.017.png&quot; id=&quot;ec-slide-017&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And there were two more expeditions.  This time, though, in order to get more time interacting with the chimps, rather than follow them around through the woods, they handed out bananas at specific times, so that the chimps would come to the researchers.&lt;/p&gt;
&lt;p&gt;They found a very different sort of animal in these subsequent expeditions.  Whereas the chimps had previously been immediate-return foragers, now they could smell ripe fruit, but were unable to get to it or eat it.  They&amp;rsquo;d tear the boxes to shreds, and the researchers had to keep getting stronger and stronger locks to hide the bait food.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s more, the chimps started setting up patrols.  Groups of young males would circle the camp, and viciously attack any outsiders that tried to come near.  Previously, they&amp;rsquo;d worked together with other groups, but with the advent of bait food, they became fiercely territorial and antagonistic. And there was cannibalism, rape, every kind of atrocity, which had never been seen before.&lt;/p&gt;
&lt;p&gt;The takeaway from this, I think, is really interesting:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-019&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;When the food is  in once place,  chimps don&#39;t get along.  (including the tall hairless kind)&quot; title=&quot;When the food is  in once place,  chimps don&#39;t get along.  (including the tall hairless kind)&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.018.png&quot; id=&quot;ec-slide-018&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The takeaway from this, I think, is really interesting:&lt;/p&gt;
&lt;p&gt;When our food is all in one place, we don&amp;rsquo;t feel like we have to work together.  In fact, we feel like we have to keep other people &lt;em&gt;away&lt;/em&gt; from it, and hoard it.  Rather than making everyone get along better, a surplus actually seems to make us behave &lt;em&gt;worse&lt;/em&gt; towards one another.  We break up into teams, we get political and antagonistic, and generally anti-social.&lt;/p&gt;
&lt;p&gt;The data from these expeditions came under fire for influencing the chimp behavior with the research methods.  So, they sent out some more expeditions to observe the same tribes of chimps, but in the original &amp;ldquo;naturalistic&amp;rdquo; method.  What do you think they found?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-020&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Subsequent expeditions found that the changes were sticky.&quot; title=&quot;Subsequent expeditions found that the changes were sticky.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.019.png&quot; id=&quot;ec-slide-019&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No change.  Their level of aggression and anxiety wasn&amp;rsquo;t as high, because they didn&amp;rsquo;t have the stressor of the bananas in boxes teasing them all the time, but the chimps in the area were much more antagonistic towards outsiders than Jane Goodall had seen in her first visits.&lt;/p&gt;
&lt;p&gt;So, after the introduction of the bait food, they didn&amp;rsquo;t go back to being nice.  The changes were cultural.  This is similar to how a domesticated animal will stay domesticated, even once you release it back into the wild.&lt;/p&gt;
&lt;p&gt;In other words, for the last 10,000 years, ever since the neolithic revolution, we humans have been domesticated, and living in captivity.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-021&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;fast forward&quot; title=&quot;fast forward&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.020.png&quot; id=&quot;ec-slide-020&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fast forwarding to the present day, let&amp;rsquo;s look at the major revolutions that we&amp;rsquo;ve gone through, as a species:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-022&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Immediate return →  Agricultural →  Industrial →  Information&quot; title=&quot;Immediate return →  Agricultural →  Industrial →  Information&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.021.png&quot; id=&quot;ec-slide-021&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;we went through immediate-return hunter-gatherers, to an agricultural society.  Next we had the industrial revolution, and I&amp;rsquo;d argue that we&amp;rsquo;re still in the midst of the information revolution.  And really, you can probably make the case that the industrial revolution and the information revolution are part of the same thing:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-023&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Find it →  Grow it →  Use machines  to make it&quot; title=&quot;Find it →  Grow it →  Use machines  to make it&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.022.png&quot; id=&quot;ec-slide-022&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We went from finding our stuff, to growing our stuff, and the next step is using machines to do the work for us.  Our machines have gotten more and more interesting, and now we&amp;rsquo;re at a point where we even use machines to communicate with one another and to think.&lt;/p&gt;
&lt;p&gt;In order for something to be a revolution, it has to be disruptive.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-024&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Disrupt.&quot; title=&quot;Disrupt.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.023.png&quot; id=&quot;ec-slide-023&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In order for something to be a revolution, it has to be disruptive.&lt;/p&gt;
&lt;p&gt;Truly disruptive technology doesn&amp;rsquo;t just do something in a new way, it does something in such a way that the old ways of doing it no longer make sense, because the sort of scarcity that those techniques were designed around no longer exists.&lt;/p&gt;
&lt;p&gt;After farming, the hunter-gatherer lifestyle was forever gone.  Now that we&amp;rsquo;ve started down the road of the industrial revolution, we can&amp;rsquo;t turn back, ever.&lt;/p&gt;
&lt;p&gt;But in order for a disruption to happen, it has to tap into something fundamental in our nature, and come at the right time in history, when we&amp;rsquo;re ready to accept it.&lt;/p&gt;
&lt;p&gt;And disruption isn&amp;rsquo;t always great at first.  In fact, the bigger the disruption, the more things it probably ruins.&lt;/p&gt;
&lt;p&gt;We like to think of information technology as being disruptive, but I think we tend to overestimate how much of a revolution it&amp;rsquo;s been, and underestimate how much revolutionizing is still to come.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-025&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Traditional Model: Programmers work for a company.  Company decides what to build.  Big apps, specifications, process.  Proprietary source, IP protection.  Very little flexibility.&quot; title=&quot;Traditional Model: Programmers work for a company.  Company decides what to build.  Big apps, specifications, process.  Proprietary source, IP protection.  Very little flexibility.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.024.png&quot; id=&quot;ec-slide-024&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The shift from being a peasant farmer working for a nobleman, to a cog in a corporate machine, is really not that big of a difference.  And today, a lot of IT still works this way.  You work for a company, and that company basically calls all the shots.&lt;/p&gt;
&lt;p&gt;Until just the last few generations, the assumption for most people was that you&amp;rsquo;d work for the same company for most of your life, and that the company would build walls around the value you create, and use the controlled scarcity to exert some power and influence and make a profit.  But what happens when someone comes along and notices that the scarcity is imaginary, or invents something that makes it no longer scarce?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-026&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Ⓐ taco&quot; title=&quot;Ⓐ taco&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.025.png&quot; id=&quot;ec-slide-025&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m certainly not the first to remark that knowledge work has the potential to be a bit different, and in fact, really HAS to be approached differently than the traditional industrial model. (&lt;a href=&quot;http://blog.izs.me/post/23048895912/tacoconf-anarchism&quot;&gt;Anarchism for Fun and Profit&lt;/a&gt;, &lt;a href=&quot;http://blip.tv/jsconfar/isaac_z_schlueter-6193181&quot;&gt;Anarchy, Dictators, and Diplomacy: Leveraging Chaos in Open Source Communities&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Search the internets for &amp;ldquo;programmer anarchy&amp;rdquo; or &amp;ldquo;anarchy nodejs&amp;rdquo; and you&amp;rsquo;ll see a few other people talking about it, as well.  Definitely watch &lt;a href=&quot;http://www.infoq.com/presentations/Leaner-Programmer-Anarchy&quot;&gt;Fred George&amp;rsquo;s talk about Leaner Programmer Anarchy&lt;/a&gt;, it&amp;rsquo;s one of the best I&amp;rsquo;ve seen on the subject, with some fascinating before-and-after data showing how un-agile typical &amp;ldquo;agile&amp;rdquo; really is.&lt;/p&gt;
&lt;p&gt;The basic thesis of this point is that, the more freedom you give to your knowledge workers, the more they end up accomplishing.  Strict hierarchies do provide some useful features, but they&amp;rsquo;re a net loss in terms of overall productivity.  Practically by definition, programmers &amp;ndash; and all knowledge workers, really &amp;ndash; are heading into the unknown, and know more about it than their bosses, so why not just get rid of the whole concept of &amp;ldquo;boss&amp;rdquo; and &amp;ldquo;employee&amp;rdquo;, and let them do whatever they want?&lt;/p&gt;
&lt;p&gt;But this still assumes that we have a &amp;ldquo;company&amp;rdquo; owning and driving things.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-027&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Open Source&quot; title=&quot;Open Source&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.026.png&quot; id=&quot;ec-slide-026&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And certainly, a lot of open source projects have, to some degree, a company behind them.  Node is backed by Joyent, for example, and they own the name and the logo, etc.&lt;/p&gt;
&lt;p&gt;However, a lot of open source projects are managed in a somewhat weird way.  &lt;a href=&quot;http://smartos.org/2012/07/27/corporate-open-source-anti-patterns-doing-it-wrong/&quot;&gt;Bryan Cantrill did a talk at FISL called &amp;ldquo;Corporate Open Source Anti-Patterns&amp;rdquo;&lt;/a&gt;, that I highly recommend you check out.  It&amp;rsquo;s as if a lot of companies have heard that open source is great, and that communities can do a lot for your technology, but then proceed to do everything in their power to cripple and destroy the community around it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-028&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Open Development  Open Community  Open Innovation&quot; title=&quot;Open Development  Open Community  Open Innovation&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.027.png&quot; id=&quot;ec-slide-027&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s very difficult for most corporate cultures to come to grips with the idea that we actually get much more out of a technology community when we break down the walls, and give away as much as possible.&lt;/p&gt;
&lt;p&gt;Also, what I don&amp;rsquo;t think that many people really realize about Node is that, it&amp;rsquo;s not just a Joyent project.  In fact, most of the people working on it, don&amp;rsquo;t work at Joyent.  And, most of the value of Node is not in the node core project itself, but in the thousands of other modules people are creating and publishing in the npm registry.&lt;/p&gt;
&lt;p&gt;Of course, nothing about Node is really new.  Async IO is as old as the hills, and there&amp;rsquo;ve been plenty of other module systems and so on.  Node is an example of a lot of good ideas all falling together around the same time.  And now that it&amp;rsquo;s been done, I think we can&amp;rsquo;t help but continue it, and push it further.&lt;/p&gt;
&lt;p&gt;I want to go over what I think some of those ideas are, and how they relate back to all the stuff about farming and chimps.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-029&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Small Core  Noisy Userland&quot; title=&quot;Small Core  Noisy Userland&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.028.png&quot; id=&quot;ec-slide-028&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Node.js has a relatively small core set of functionality.  The general guideline is that node core contains everything that is strictly necessary to do network programming, and write userland modules.&lt;/p&gt;
&lt;p&gt;The structure and process for adding things to userland is much lower than is typical of programming language communities.  There&amp;rsquo;s plenty of room in npm for a variety of different competing implementations of things.  In fact, we&amp;rsquo;re probably the most prolific community of wheel-reinventors ever.&lt;/p&gt;
&lt;p&gt;And in the modules that people write, there&amp;rsquo;s a very open mentality.  There&amp;rsquo;s nothing stopping anyone from writing competing implementations of any module out there.  There&amp;rsquo;s no cabal that has to give permission to write new userland modules, and you don&amp;rsquo;t have to get anything into the core binary in order for it to be popular and useful.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s really interesting to me is just how much stress this seems to relieve.  In fact, since modules tend to be pretty small, there&amp;rsquo;s often a few different implementations of similar functionality.  Not only is this not a problem, it means that anyone can explore in any direction they want, so there&amp;rsquo;s this expansive feeling of elbow-room.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-030&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Code or GTFO&quot; title=&quot;Code or GTFO&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.029.png&quot; id=&quot;ec-slide-029&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fierce egalitarianism has shown itself in the modern-day &amp;ldquo;Code or GTFO&amp;rdquo; attitude.  Virtually no tolerance in the community for &amp;ldquo;planning to open source&amp;rdquo;.  Either share the code, or there&amp;rsquo;s nothing.  No one wastes any attention on non-existent programs, which is unfortunately typical in many software communities, especially world of traditional proprietary software.&lt;/p&gt;
&lt;p&gt;But here, anyone can work with anyone else, or in isolation.  When the pieces are cut up properly, I can reuse just &lt;em&gt;part&lt;/em&gt; of your program, without having to take the whole thing.&lt;/p&gt;
&lt;p&gt;Github has done a lot to make this better.  As Mikeal Rogers pointed out recently in his blog, there&amp;rsquo;s a whole generation gap between open source programmers, because github just makes it a different game now.&lt;/p&gt;
&lt;p&gt;By keeping userland vibrant, and core small, makes it feel like we&amp;rsquo;re all wandering this wilderness together, rather than wasting time fighting over who&amp;rsquo;s patch gets &amp;ldquo;blessed&amp;rdquo; and gets to go live in the castle.&lt;/p&gt;
&lt;p&gt;And, rather than having a pre-ordained structure, where you then go through and fill in the bits, this approach lends itself more easily to a pattern where you solve problems in reusable nuggets, unix-philosophy style, and then observe the structure that emerges.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-031&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Structure is emergent,  not primary.&quot; title=&quot;Structure is emergent,  not primary.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.030.png&quot; id=&quot;ec-slide-030&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Because, really, structure not NOT the primary piece of making a functional community, or a functional program.  (I mean functional as opposed to dysfunctional here, not like FP functional.)&lt;/p&gt;
&lt;p&gt;This was actually originally going to be the whole point of my talk, about how modular software can be built in a way that&amp;rsquo;s more exploratory, where the structure comes from the pieces you end up building, and how this is the main problem of thinking about programs as &amp;ldquo;object-oriented&amp;rdquo; or &amp;ldquo;functional&amp;rdquo; first and foremost, but it turned out to not be as interesting as chimps and cavemen.&lt;/p&gt;
&lt;p&gt;Because I realized that this &amp;ldquo;emergent structure&amp;rdquo; idea, which is one of the core principles of poststructuralism (inasmuch as there is such a thing, anyway), is also a really great way to look at our communities and how they get along with one another.  When we set out to build a structure, and then fill it in, it&amp;rsquo;s not just that we will build the wrong thing, it&amp;rsquo;s that we won&amp;rsquo;t notice we&amp;rsquo;ve built the wrong thing until too late, and won&amp;rsquo;t be able to easily fix it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-032&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Here comes everybody.  – Clay Shirky&quot; title=&quot;Here comes everybody.  – Clay Shirky&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.031.png&quot; id=&quot;ec-slide-031&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;How many people recognize this title?  Raise your hand if you&amp;rsquo;ve read this book.&lt;/p&gt;
&lt;p&gt;All of you who aren&amp;rsquo;t raising your hands right now, shame on you. If you are a professional internet person, &lt;a href=&quot;http://www.amazon.com/Here-Comes-Everybody-Organizations-ebook/dp/B0013TTKQC/&quot;&gt;download it right now&lt;/a&gt;, and start reading it today.  By the end of the forward, you&amp;rsquo;ll see why this dude&amp;rsquo;s my hero.&lt;/p&gt;
&lt;p&gt;A lot of the things that make Node what it is are the same basic principles that make &lt;em&gt;the internet&lt;/em&gt; what it is.  Node, and the open source collaboration we&amp;rsquo;re pushing, is the natural expression of the internet in a software platform, and it&amp;rsquo;s enabling us to do more interesting things on and with the internet.  It&amp;rsquo;s a cycle, a feedback loop.  And that&amp;rsquo;s why this pattern can only continue.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-033&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;This pattern  will continue.&quot; title=&quot;This pattern  will continue.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.032.png&quot; id=&quot;ec-slide-032&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why this pattern can only continue.&lt;/p&gt;
&lt;p&gt;It might sound far-fetched, but I think that this way of organizing ourselves, where we try to agree on as little as we absolutely need to, and then explore from there with the greatest degree of freedom possible, and then sort of see what structure happens naturally; it works so well because in some way, it speaks to our innermost longings for the things we gave up when we left the hunter-gatherer lifestyle; to the millions of years of evolution that made us who we are, before started trying to change it just a few millennia ago.&lt;/p&gt;
&lt;p&gt;Other software communities are starting to pick it up, with admin-free module deployment systems springing up for client-side javascript, for cordova plugins, for php, and so on.&lt;/p&gt;
&lt;p&gt;What we see with node is not the end of this journey.  It&amp;rsquo;s just the beginning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/#ec-slide-034&quot;&gt;&lt;img width=&quot;100%&quot; alt=&quot;Node is just the beginning.&quot; title=&quot;Node is just the beginning.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.033.png&quot; id=&quot;ec-slide-033&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;what you see with node is not the end of this journey.  It&amp;rsquo;s just the beginning.&lt;/p&gt;
&lt;p&gt;My hope is that, in 5 or 10 years, we look back on this and laugh about how stifling and restrictive the Nodejs model of collaboration was.  The core of node is still way too large if you ask me, and it&amp;rsquo;s a constant source of contention.&lt;/p&gt;
&lt;p&gt;How can we make it much smaller?  How can this open modular approach be applied to &amp;ldquo;serious&amp;rdquo; projects like an operating system or a VM?  I&amp;rsquo;m not sure.  But I think it can, and ultimately, it has to, if we want to keep seeing the kind of improvements and returns we&amp;rsquo;ve gotten used to.&lt;/p&gt;
&lt;p&gt;If the future is going to require us having new ideas, then we&amp;rsquo;ve got to figure out how to shape our communities such that we can actually have the space to do that innovation, and trust one another enough to cheer each other&amp;rsquo;s successes rather than feel threatened by one another.&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;100%&quot; alt=&quot;jifasnif.&quot; title=&quot;jifasnif.&quot; src=&quot;https://blog.izs.me/2012/10/escaping-captivity-social-apes-making-software-in/escaping-captivity.034.png&quot; id=&quot;ec-slide-034&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Thanks, enjoy the rest of the conference!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On Sexism in Tech</title>
		<link href="https://blog.izs.me/2012/10/on-sexism-in-tech/"/>
		<updated>2012-10-15T01:22:00Z</updated>
		<id>https://blog.izs.me/2012/10/on-sexism-in-tech/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;m not ever going to try to pretend that I&amp;rsquo;ve got any &amp;ldquo;disenfranchised&amp;rdquo; cred.  In all the ways that show, I&amp;rsquo;m a paradigm example of the ruling class.  But even I can see that Antirez&amp;rsquo;s &lt;a href=&quot;http://antirez.com/post/different-take-sexism-it.html&quot;&gt;recent post on sexism in tech&lt;/a&gt; is just amateurish and sad.  &lt;a href=&quot;http://blog.prettylittlestatemachine.com/blog/2012/10/14/antirez-on-sexism/&quot;&gt;Shanley&amp;rsquo;s response&lt;/a&gt; almost seems a bit &lt;em&gt;mean&lt;/em&gt; in how easily she tears into his non-arguments; it&amp;rsquo;s like watching a kitten tossed to a hungry pit bull.  I didn&amp;rsquo;t want to keep reading, but I couldn&amp;rsquo;t look away.  Bravo.&lt;/p&gt;
&lt;p&gt;Here are a few uncontroversial facts that men in tech ought to keep in mind:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Most men in tech claim that they are not sexist, and they believe that they are telling the truth.  They honestly think that they treat women equally, that they don&amp;rsquo;t see gender in the workplace, that they judge everyone based on their abilities, etc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nytimes.com/2012/09/30/opinion/sunday/the-myth-of-male-decline.html?pagewanted=2&amp;amp;_r=1&amp;amp;pagewanted=all&quot;&gt;Research&lt;/a&gt;
&lt;a href=&quot;http://cornellsun.com/section/news/content/2008/03/31/report-women-excluded-exec-positions&quot;&gt;has&lt;/a&gt;
&lt;a href=&quot;http://www.timeshighereducation.co.uk/story.asp?storycode=401046&quot;&gt;shown&lt;/a&gt;
&lt;a href=&quot;http://kar.kent.ac.uk/4384/&quot;&gt;that&lt;/a&gt;
&lt;a href=&quot;http://www.mendeley.com/research/sexism-beautyism-personnel-consultant-decision-making/&quot;&gt;humans&lt;/a&gt;
&lt;a href=&quot;http://www.highbeam.com/doc/1G1-172777358.html&quot;&gt;are&lt;/a&gt;
&lt;a href=&quot;http://antimisandry.com/discrimination-sexist-double-standards/my-gender-bending-resume-experiment-39580.html#axzz29K6sER2Z&quot;&gt;capable&lt;/a&gt;
&lt;a href=&quot;http://link.springer.com/article/10.1007/s11199-009-9640-6&quot;&gt;of being&lt;/a&gt;
&lt;a href=&quot;http://www.wellesleynewsonline.com/yale-study-shows-pervasive-sexism-in-hiring-practices-among-professors-1.2918203#.UHtaFmlQy9E&quot;&gt;sexist&lt;/a&gt;
&lt;a href=&quot;http://ideas.time.com/2012/10/04/womens-inhumanity-to-women/?goback=.gde_1774877_member_172689183&quot;&gt;without&lt;/a&gt;
&lt;a href=&quot;http://www.thefreelibrary.com/Implicit+gender+bias+in+the+legal+profession%3a+an+empirical+study.-a0253626406&quot;&gt;noticing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There are many many more men in the tech industry than women.&lt;/li&gt;
&lt;li&gt;Women do better in school than men, even in &lt;abbr title=&quot;Science Technology Engineering Mathematics&quot;&gt;STEM&lt;/abbr&gt; majors, and graduate in higher percentages than men.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;When faced with a mountain of evidence that I&amp;rsquo;m not capable of seeing something, saying &amp;ldquo;I don&amp;rsquo;t see it&amp;rdquo; is really not so compelling.  In fact, faced with that evidence, a reasonable person would probably stop and think, &amp;ldquo;Maybe I shouldn&amp;rsquo;t base my decisions on what I can and cannot notice.  Maybe I ought to be a bit more careful, or even &lt;em&gt;take active steps&lt;/em&gt; to correct the demonstrable bias.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know.  I&amp;rsquo;m just a white american man who had the benefit of lots of free education, and basically fell into a dream job.  Yeah, I had to sell some drugs to make ends meet in college, and some vacuum cleaners during the dot-com slump.  I&amp;rsquo;ve answered phones in tech support.&lt;/p&gt;
&lt;p&gt;But pretty much, it&amp;rsquo;s been an easy ride.  I&amp;rsquo;ve never had someone think &lt;em&gt;I&amp;rsquo;m not good at computers because of my gender&lt;/em&gt;.  I gotta think that just HAS to suck.  I realize that most sexism is not on purpose.  But that&amp;rsquo;s the problem.  The explicit chauvinism is easily corrected.  It&amp;rsquo;s the subtle subconscious mistakes that do the real lasting damage.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s why we talk about women in tech.  That&amp;rsquo;s why we try to get more women to speak at conferences about the work they&amp;rsquo;re doing.  That&amp;rsquo;s why we blog about it, and have events about it.  Because there clearly &lt;strong&gt;is&lt;/strong&gt; a bias.  It&amp;rsquo;s one that isn&amp;rsquo;t readily apparent otherwise.  And the way you correct biases isn&amp;rsquo;t by pretending they don&amp;rsquo;t exist.&lt;/p&gt;
&lt;p&gt;A very valid question is, &amp;ldquo;Why should we care?&amp;rdquo;  Maybe that&amp;rsquo;s what Antirez was trying, in a rather clumsy way, to get at.  What&amp;rsquo;s wrong with tech being composed almost entirely of men?  After all, we should be a meritocracy; what&amp;rsquo;s in your underwear shouldn&amp;rsquo;t matter, right?&lt;/p&gt;
&lt;p&gt;The reason we should care is that rational grownups don&amp;rsquo;t just shrug their shoulders when their biases cause hardships for other people.  Rational grownups try to see the world as it is (including themselves), and don&amp;rsquo;t make up excuses for facts.  We should care because a diversity of opinions benefits all of us, and our industry, and we&amp;rsquo;re subconsciously filtering people based on criteria that we claim does not matter.&lt;/p&gt;
&lt;p&gt;But mostly, we should care because there are humans being treated like shit, and we are part of the problem.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/10/via-w3cmemes/"/>
		<updated>2012-10-10T08:49:53Z</updated>
		<id>https://blog.izs.me/2012/10/via-w3cmemes/</id>
		<content type="html">&lt;p&gt;via &lt;a href=&quot;http://w3cmemes.tumblr.com/post/25228936127/learning-how-to-write-good-test-assertions-at&quot; class=&quot;tumblr_blog&quot;&gt;w3cmemes&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Thoughts on TypeScript</title>
		<link href="https://blog.izs.me/2012/10/thoughts-on-typescript/"/>
		<updated>2012-10-01T23:18:00Z</updated>
		<id>https://blog.izs.me/2012/10/thoughts-on-typescript/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;ve been through the paces quite a few times trying to optimize the hell out of very hot code. In the last few years, this has been mostly in V8, of course, but the basic principles are not too far off in different JS environments.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s important to not put too much weight in rules of thumb, and we programmers are particularly bad at that, given our tendencies towards abstraction. But that disclaimer out of the way, I&amp;rsquo;ve found very few exceptions to these two rules:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;If you have more than one of something, use a class; not a &amp;ldquo;plain old object&amp;rdquo;. I recently changed the &amp;ldquo;url&amp;rdquo; module in node-master, and made it twice as fast by replacing the plain {}-style objects with Url class instances.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Always put the same kinds of things in the same places. An array of numbers should only ever have numbers; an array of objects should always only have objects. If a FooBar object has a &amp;ldquo;foo&amp;rdquo; member, then set this.foo to &lt;em&gt;something&lt;/em&gt; in the constructor.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;It&amp;rsquo;s really nice writing code in a loosely typed language. Most of the time, these optimizations are not all that relevant, and when they are, the odd exception is probably fine, if it&amp;rsquo;s truly exceptional. But when you really care about maximizing speed, that flexibility can make it surprisingly tricky to track down all the deviations.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m probably not going to stop using Vim to write code any time soon. I&amp;rsquo;m probably never going to use Windows as my development environment. Code completion sort of annoys me, and I&amp;rsquo;ve usually turned it off when I had editors that did it. But I&amp;rsquo;m actually very excited about &lt;a href=&quot;http://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;d be a great idea to write up a TypeScript header file for the API surface in Node. Then, we could automatically test for API deviations, validate and flesh out our documentation, etc. Static typing &lt;em&gt;does&lt;/em&gt; confer some very relevant value. Typically it does so at the cost of flexibility, but this brings a lot of the benefits to JavaScript in an optional way, which is very powerful.&lt;/p&gt;
&lt;p&gt;Also, it&amp;rsquo;s not reinventing the language. It is JavaScript, mostly. Or JavaScript entirely, if you just write JS and have a separate declaration file, but with the benefits of linting that does more than whine about comma placement and indentation, and &lt;em&gt;actually finds subtle errors&lt;/em&gt; in your programs.&lt;/p&gt;
&lt;p&gt;There have been a lot of attempts to come up with ways to add type hints and API-auto-documentation to JavaScript. (JSDoc, YUIDoc, AS3/ES4, etc.) Most of those are not very compelling. The fact that Microsoft is doing this, and building products on top of it (which they will inevitably hope to make money on), is very encouraging. It says to me that this is going to be a real thing with real developers working on it, with budgets and timelines, and the whole bit. It&amp;rsquo;s somebody&amp;rsquo;s job.&lt;/p&gt;
&lt;p&gt;I had some suggestions that I passed along to the folks at Microsoft:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;It&amp;rsquo;d be &lt;em&gt;amazing&lt;/em&gt; if there was a way to automatically try to guess at the best types, given a set of JavaScript code. Writing a declaration file is insanely tedious. I don&amp;rsquo;t want to do it, and that&amp;rsquo;s a blocker to adoption. I know that this is a hard problem, and totally not what you&amp;rsquo;d expect in a first release, but hey, V8 is guessing types pretty good, so it must be possible. That would make me happy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It&amp;rsquo;d be nice to let it put run-time type-checking into exposed functions at the API surface. If this needed to be a dev flag or something, then that&amp;rsquo;s fine. I&amp;rsquo;d go ahead and let it in exported functions, though. We have a lot of that code in Node, and it&amp;rsquo;s tedious to write and maintain.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;hr /&gt;&lt;p&gt;ERRATA: V8 doesn&amp;rsquo;t guess types, it observes them and keeps a cache.  But hey, Microsoft has a few bucks, and some access to smart folks.  They should do this.  Also, I want a pony that poops rainbows and can always pick the optimum path between multiple destinations with ideally packed bags.  So there.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Prioritize</title>
		<link href="https://blog.izs.me/2012/09/prioritize/"/>
		<updated>2012-09-26T20:59:36Z</updated>
		<id>https://blog.izs.me/2012/09/prioritize/</id>
		<content type="html">&lt;p&gt;The word &amp;ldquo;prioritize&amp;rdquo; is the productivity guru equivalent of a war crime.&lt;/p&gt;
&lt;p&gt;Priorities are observed, not manufactured, not dictated.  You observe your priorities by observing what you are, in fact, here and now, in reality, actually doing, thinking, saying, and looking at.  It is a rolling average of your attention and actions.&lt;/p&gt;
&lt;p&gt;When tempted to say that you &amp;ldquo;need to prioritize&amp;rdquo; this or that, try replacing it with the word &amp;ldquo;do&amp;rdquo; or &amp;ldquo;think about&amp;rdquo; or &amp;ldquo;work on&amp;rdquo;.  Because that&amp;rsquo;s what you&amp;rsquo;re trying to avoid talking about.  &amp;ldquo;I need to &lt;strong&gt;do&lt;/strong&gt; this or that&amp;rdquo; is so much more powerful, and makes the trade-offs so much more obvious.  Doing something means not doing something else.  Making lists, sorting lists, etc. are occasionally very slightly helpful in the act of &lt;em&gt;doing&lt;/em&gt; something.  But if you&amp;rsquo;re spending a lot of time, attention, and effort &amp;ldquo;prioritizing&amp;rdquo;, then your priority is to fiddle around with lists, no matter what the lists say.&lt;/p&gt;
&lt;p&gt;And maybe that&amp;rsquo;s fine.  Maybe you&amp;rsquo;re a professional list fiddler, or maybe it&amp;rsquo;s a hobby you enjoy.  It&amp;rsquo;s certainly not any &lt;em&gt;more&lt;/em&gt; stupid that sudoku or farmville.  But don&amp;rsquo;t tell yourself you&amp;rsquo;re designing software, or creating a novel, or cleaning the house, or going on vacation.  If that&amp;rsquo;s not actually helping you get anything done, and you&amp;rsquo;re not setting out to fiddle with lists, then that&amp;rsquo;s a bad investment of time and attention, and probably won&amp;rsquo;t make you happy.&lt;/p&gt;
&lt;p&gt;If someone claims that they&amp;rsquo;re going to help me prioritize something, and they don&amp;rsquo;t mean that they&amp;rsquo;re going to actually help &lt;strong&gt;do&lt;/strong&gt; whatever it is we&amp;rsquo;re talking about, then I have literally no idea what they&amp;rsquo;re talking about.  So you&amp;rsquo;re going to vote up issues?  Put red markers on some things that &lt;em&gt;you&lt;/em&gt; care about, in the hopes that it&amp;rsquo;ll make &lt;em&gt;me&lt;/em&gt; care about them?  How red is red enough?  Maybe you could add some bold type.  That&amp;rsquo;ll really help.  Ooh, you&amp;rsquo;ve marked some as P1.  Great.  Not prioritized enough?  Try P0.  Ok, thanks.  I can feel the bugs closing already.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Prioritizing&amp;rdquo; in practice means trying to pretend that we can get more things done by moving our attention around in circles, without actually making the trade-offs in time and attention that lead to X getting done &lt;em&gt;at the expense of Y&lt;/em&gt;, and without actually adding resources (ie, getting &lt;em&gt;more actual people&lt;/em&gt; to help out &lt;em&gt;doing&lt;/em&gt; the thing that we&amp;rsquo;re talking about &amp;ldquo;prioritizing&amp;rdquo;.)  If the action of sorting a list isn&amp;rsquo;t actually helping get the bug closed, &lt;em&gt;then in what sense can it possibly be making it more of a priority?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked with a lot of terrible product managers and project managers in my career, and precious few that were really great.  The best one I ever had the pleasure of working with would come in on Monday with a sorted list of the bugs and features that he thought were the most important.  He&amp;rsquo;d say, &amp;ldquo;Let&amp;rsquo;s see how far down the list we can get.  If you think it&amp;rsquo;s sorted wrong, let me know.&amp;rdquo;  He communicated the &lt;em&gt;tradeoffs&lt;/em&gt; that he expected, and let &lt;em&gt;the people who do the work&lt;/em&gt; actually do the work.  Any time I had a question about why one thing was above another, he had an answer backed up by data and business objectives.  When we told him about the technical difficulty or ease of getting certain things done, he&amp;rsquo;d update his list based on the costs.  While we were working, he&amp;rsquo;d be reviewing our competitors features, getting feedback from users and advertisers, and analyzing log data.  He was a professional list-fiddler, and a &lt;em&gt;damn&lt;/em&gt; fine one.  I don&amp;rsquo;t think I ever heard him say the word &amp;ldquo;prioritize&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve also sat in 3-hour meetings where a bunch of people argue about T-shirt sizes and assign cards to tasks to epics with story points and oh for the love of god what are we doing with our lives?&lt;/p&gt;
&lt;p&gt;The word &amp;ldquo;prioritize&amp;rdquo; gives me flashbacks of every terrible sort of procrastination and make-work and pretend-work.&lt;/p&gt;
&lt;p&gt;If you agree with my view of priorities, and you don&amp;rsquo;t immediately recognize all this as a blatant parrotting of the ideas of Merlin Mann, then you ought to listen to the show that he and Dan Benjamin do, called &lt;a href=&quot;http://5by5.tv/b2w&quot;&gt;Back to Work&lt;/a&gt;.  This subject has bugged me in a deep way ever since I first got into software development, and I&amp;rsquo;ve heard similar horror stories from many different fields.  But before getting into the stuff that Merlin Mann has done, and especially Back to Work, I didn&amp;rsquo;t have nearly as much of a mental vocabulary for it.&lt;/p&gt;
&lt;p&gt;Thank you, Merlin and Dan, for giving voice to this fundamental problem with human nature.  Now that I&amp;rsquo;ve seen it, I can&amp;rsquo;t un-see it, and it&amp;rsquo;s &lt;strong&gt;everywhere&lt;/strong&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>To all Futurama fans.</title>
		<link href="https://blog.izs.me/2012/09/to-all-futurama-fans/"/>
		<updated>2012-09-15T16:15:25Z</updated>
		<id>https://blog.izs.me/2012/09/to-all-futurama-fans/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://theload.tumblr.com/post/28747692141/to-all-futurama-fans&quot; class=&quot;tumblr_blog&quot;&gt;theload&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Seymour waited for Fry for twelve years. Fry was frozen in 2000. That means this year, 2012, is the year Seymour dies.&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src=&quot;https://blog.izs.me/2012/09/to-all-futurama-fans/seymour.jpg&quot; alt=&quot;Seymour&quot; style=&quot;width:100%&quot; /&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/09/when-im-introspective-about-the-last-few-years-i/"/>
		<updated>2012-09-12T15:42:05Z</updated>
		<id>https://blog.izs.me/2012/09/when-im-introspective-about-the-last-few-years-i/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;When I’m introspective about the last few years I think the biggest mistake that we made, as a company, is betting too much on HTML5 as opposed to native… because it just wasn’t there. And it’s not that HTML5 is bad. I’m actually, on long-term, really excited about it. One of the things that’s interesting is we actually have more people on a daily basis using mobile Web Facebook than we have using our iOS or Android apps combined. So mobile Web is a big thing for us.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mark Zuckerberg @ &lt;a href=&quot;http://techcrunch.com/2012/09/11/mark-zuckerberg-our-biggest-mistake-with-mobile-was-betting-too-much-on-html5/&quot;&gt;Disrupt SF 2012&lt;/a&gt;. (via &lt;a href=&quot;http://blog.tobie.me/&quot; class=&quot;tumblr_blog&quot;&gt;tobie&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/09/maxeatinginplaces-max-eating-smores-at-node/"/>
		<updated>2012-09-07T18:21:43Z</updated>
		<id>https://blog.izs.me/2012/09/maxeatinginplaces-max-eating-smores-at-node/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://maxeatinginplaces.tumblr.com/post/30998235598/max-eating-smores-at-node-summer-camp&quot; class=&quot;tumblr_blog&quot;&gt;maxeatinginplaces&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Max eating s’mores at Node Summer Camp.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/09/yourmonkeycalled-i-have-been-to-the-mall-a-lot/"/>
		<updated>2012-09-06T16:01:07Z</updated>
		<id>https://blog.izs.me/2012/09/yourmonkeycalled-i-have-been-to-the-mall-a-lot/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://yourmonkeycalled.com/post/30947674856/i-have-been-to-the-mall-a-lot-lately&quot; class=&quot;tumblr_blog&quot;&gt;yourmonkeycalled&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;I have been to the mall a lot lately.&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Policy on Trolling</title>
		<link href="https://blog.izs.me/2012/08/policy-on-trolling/"/>
		<updated>2012-08-23T15:25:00Z</updated>
		<id>https://blog.izs.me/2012/08/policy-on-trolling/</id>
		<content type="html">&lt;p&gt;The policy in the #node.js irc channel is this:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;tl;dr&lt;/strong&gt; If you&amp;rsquo;re a dick, you get kicked out.  This is not negotiable.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Sexist, heteronormative, racist, and other offensive remarks are not allowed.  (Cursing is allowed, but never targeting another user, and never in a hateful or sexually explicit manner.)&lt;/li&gt;
&lt;li&gt;Remarks that make any of the ops go &amp;ldquo;Hm, that&amp;rsquo;s inappropriate&amp;rdquo;, whether on the above list or not: also not allowed.&lt;/li&gt;
&lt;li&gt;You get a warning.&lt;/li&gt;
&lt;li&gt;If the warning is not taken seriously, you &lt;em&gt;might&lt;/em&gt; get a second sterner warning in PM, if you&amp;rsquo;re lucky, and the op is feeling generous, and this is the first time.  But don&amp;rsquo;t count on that.&lt;/li&gt;
&lt;li&gt;If the warning is unheeded, you get kicked.&lt;/li&gt;
&lt;li&gt;If you come back and continue to make trouble, you get banned.&lt;/li&gt;
&lt;li&gt;If you contact the offended party, and are truly apologetic, and it was the first offense, and the op who banned you feels it&amp;rsquo;s appropriate, then you may get un-banned.&lt;/li&gt;
&lt;li&gt;If an op bans you, I&amp;rsquo;m definitely not going to unban you unless they agree it&amp;rsquo;s a good idea.&lt;/li&gt;
&lt;li&gt;If an op bans someone, and you think it was unjustified, take it up with that op, or with a different op, &lt;strong&gt;in private&lt;/strong&gt;.  Griping about bans in-channel is not tolerated, and will result in more bans.&lt;/li&gt;
&lt;li&gt;Ops are expected to be paragons of virtue.  If an op creates an inappropriate situation, they should expect much less leeway than standard users.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your free speech is not our problem.&lt;/strong&gt;  We recognize that this policy is a restrictive political stance.  That is the intent.  If you want a room with different rules, go create one.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;In the majority of cases, this is fine, and never requires anyone to be banned.  Most so-called trolls are immature boys (sometimes actual children, and sometimes just childish) who just need a grownup to tell them &amp;ldquo;no&amp;rdquo; from time to time, perhaps with a light wrist-slap.  A &lt;code&gt;/kick&lt;/code&gt; and a 2-minute ban to cool down is usually enough, if the warning didn&amp;rsquo;t do it.&lt;/p&gt;
&lt;p&gt;However, persistent trolling ruins communities.  No good can come of tolerating it.  In the node community, we are not afraid of losing a few kids who can&amp;rsquo;t manage to behave in a grown-up manner.  We&amp;rsquo;re more concerned with losing the people that those kids chase away.&lt;/p&gt;
&lt;p&gt;This policy does not depend on anyone&amp;rsquo;s agreement.  Your sexist remarks in our IRC channel is not protected speech.  The D in BDFL does not stand for &amp;ldquo;Democracy&amp;rdquo;.  Complaining about the ban will not get you unbanned.&lt;/p&gt;
&lt;p&gt;A similar policy exists in slightly modified form for NodeConf, the node mailing list, and so on.  It works.  &amp;ldquo;Don&amp;rsquo;t be a dick, or you&amp;rsquo;ll be kicked out, and crying about it will definitely not help.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I have been in a lot of online communities over the last 20 years.  I have never seen a community fall apart due to excessive banning of trolls, but almost all of them have fallen apart due to excessive trolling.  I&amp;rsquo;d strongly encourage any online community to adopt a similar policy.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;This policy and the accompanying justification is released under a &lt;a href=&quot;http://creativecommons.org/licenses/by/3.0/&quot;&gt;CC-By license&lt;/a&gt;.  In other words, you can use any or all of it for your project or community free of charge, with or without changes, for any commercial or non-commercial purpose, provided that you link back &lt;a href=&quot;http://blog.izs.me/post/30036893703/policy-on-trolling&quot;&gt;to this post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have chosen a very liberal license because I want people in the world to be nice to each other, and I believe that part of the way to get there is for more communities to have reasonably low tolerance for bad behavior.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;strong&gt;edit&lt;/strong&gt;  A prior version of this used the word &amp;ldquo;gentlemanly&amp;rdquo;, contrasting the distinctively boyish nature of most IRC trolling.  In my view, behaving in a &amp;ldquo;gentlemanly&amp;rdquo; manner means that one is respectful, despite being male and in the company of strangers; a definite challenge for many.  For various reasons, virtually every IRC troll in online communities is male.&lt;/p&gt;
&lt;p&gt;However, the term has connotations for many people implying a specific sort of politely dismissive and condescendingly sexist attitude; others felt that this colored the entire post in a gendered manner that made the underlying message less clear.&lt;/p&gt;
&lt;p&gt;That isn&amp;rsquo;t my intent, so I changed the term for clarity.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;2014-03-17 - Added rules 9 and 10.&lt;/p&gt;
&lt;p&gt;2014-10-02 - Changed &amp;ldquo;heterosexist&amp;rdquo; to &amp;ldquo;heteronormative&amp;rdquo;.  Added rule 11.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/08/srsly-github-please-stop-with-these/"/>
		<updated>2012-08-13T17:15:00Z</updated>
		<id>https://blog.izs.me/2012/08/srsly-github-please-stop-with-these/</id>
		<content type="html">&lt;p&gt;Srsly, github.  Please stop with these.&lt;/p&gt;
&lt;p&gt;There is no way to filter these messages except via the title.&lt;/p&gt;
&lt;p&gt;No listid header, the return address is &amp;ldquo;noreply@github.com&amp;rdquo;, no option on the github website to &amp;ldquo;Never ever send me a message to tell me about the repo I just created myself because apparently I forgot because I have Alzheimer&amp;rsquo;s or something so I need a reminder about the repo I just created&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;And yet I do not have Alzheimer&amp;rsquo;s, yet, as far as I know, and I do get a crazy-making amount of email via github, and it is my job, so I can&amp;rsquo;t simply throw away all of it.&lt;/p&gt;
&lt;p&gt;Hence, the filter.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Beliefs</title>
		<link href="https://blog.izs.me/2012/08/beliefs/"/>
		<updated>2012-08-09T05:52:00Z</updated>
		<id>https://blog.izs.me/2012/08/beliefs/</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t believe everything you hear.&lt;/strong&gt;  You will by default.  It takes a lot of effort to un-believe it once you hear it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t believe everything you think.&lt;/strong&gt;  You already do.  That&amp;rsquo;s why you think it.  It takes a lot of effort to un-believe it once you think it.  Many thoughts are demonstrably false, yet we have them anyway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t believe you know everything you know.&lt;/strong&gt;  You already do.  That&amp;rsquo;s why you think you know it.  You have to not just un-believe it, but un-know it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Beliefs are sneaky.&lt;/strong&gt; Beliefs don&amp;rsquo;t look like beliefs; they just look like the world. When you&amp;rsquo;re in the kitchen, you don&amp;rsquo;t say &amp;ldquo;I believe I am in the kitchen&amp;rdquo;.  You say, &amp;ldquo;I am in the kitchen.&amp;rdquo;  Un-believing is like un-seeing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t believe everything you say.&lt;/strong&gt; This is the hardest of all.  Our past selves hold our integrity hostage.  Do not negotiate with terrorists.  Shoot the hostage.&lt;/p&gt;
&lt;p&gt;Every belief must pay rent, constantly, or be evicted.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Hoarders</title>
		<link href="https://blog.izs.me/2012/08/hoarders/"/>
		<updated>2012-08-04T01:47:01Z</updated>
		<id>https://blog.izs.me/2012/08/hoarders/</id>
		<content type="html">&lt;p&gt;One day in #libuv&amp;hellip;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; ...
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm http 200 &lt;a href=&quot;https://registry.npmjs.org/blitline&quot;&gt;https://registry.npmjs.org/blitline&lt;/a&gt;
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm http 200 &lt;a href=&quot;https://registry.npmjs.org/blitz&quot;&gt;https://registry.npmjs.org/blitz&lt;/a&gt;
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm http 200 &lt;a href=&quot;https://registry.npmjs.org/blitzLib&quot;&gt;https://registry.npmjs.org/blitzLib&lt;/a&gt;
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm http 200 &lt;a href=&quot;https://registry.npmjs.org/blade&quot;&gt;https://registry.npmjs.org/blade&lt;/a&gt;
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm ERR!
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm ERR! Additional logging details can be found in:
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm ERR!     D:&#92;te&#92;npm-debug.log
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; npm ERR! not ok code 0
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; ???
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; ^-- &lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt;: no error message and no log :-(
&lt;a href=&quot;https://npmjs.org/profile/tjfontaine&quot;&gt;tjfontaine&lt;/a&gt; is it not in d:&#92;temp&#92; ?
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; no
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; wtf?
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; &lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt;: what version of npm?
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; 1.4.46
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; 1.1.46?
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; 1.1.46
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; ahem
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; is there a ./npm-debug.log file you can share?
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; &lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt;: nope
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; weird..
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; what&#39;d you run?
&lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt; &lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt;: npm install &lt;a href=&quot;https://npmjs.org/package/hoarders&quot;&gt;hoarders&lt;/a&gt;
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; BWAHAHAHahahah
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; ok.
&lt;a href=&quot;https://npmjs.org/profile/isaacs&quot;&gt;isaacs&lt;/a&gt; i&#39;ll get right on that ;)
&lt;a href=&quot;https://npmjs.org/profile/mmalecki&quot;&gt;mmalecki&lt;/a&gt; &lt;a href=&quot;https://npmjs.org/profile/piscisaureus&quot;&gt;piscisaureus&lt;/a&gt;: can&#39;t repro&lt;/code&gt;&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>TJ Holowaychuk: Components</title>
		<link href="https://blog.izs.me/2012/07/tj-holowaychuk-components/"/>
		<updated>2012-07-25T16:28:19Z</updated>
		<id>https://blog.izs.me/2012/07/tj-holowaychuk-components/</id>
		<content type="html">&lt;p&gt;For the most part, I agree with what TJ says, and I think that there are some great ideas in his post.  &lt;a href=&quot;http://tjholowaychuk.com/post/27984551477/components&quot;&gt;Go read it.&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;A component can be not just JavaScript, but CSS, images, fonts or other resources, or a component may be any combination of these. This is the main idea that I want to sell, we need to broaden modularity beyond just JavaScript source.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes.  However, they should have the same level of modularity and order that we&amp;rsquo;ve been able to get with JavaScript packages using npm and Node.js.  It&amp;rsquo;s a much stickier problem, because the deployment environment is so much more hostile.&lt;/p&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;The classic battle between DOM manipulation libraries such as jQuery and MooTools serve as an obvious example of fragmentation. Even if one is more popular than the other this doesn’t mean we don’t have a problem. Have you ever seen a great jQuery plugin and thought to yourself “damn! I’m using MooTools!” or perhaps the other way around? That highlights the problem right there, we should have no “jQuery plugins”, no “Dojo modules”, just simply “components” that we can all consume.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To a certain extent, this is inescapable.  Even if we say, &amp;ldquo;Use AMD&amp;rdquo; or &amp;ldquo;Use CommonJS require()&amp;rdquo; or whatever else, there&amp;rsquo;s always going to be some level of segmentation.  Hell, &lt;em&gt;even within node&lt;/em&gt; there are modules that only work with Express, and so on.&lt;/p&gt;
&lt;p&gt;The point that I think TJ is getting at is that we should squeeze down the size of our components until they are very minimal, so that different systems can consume them and turn them into other sorts of things if they want.  YUI can wrap them in a YUI widget, jQuery can have some thing that turns them into a jQuery-UI thing, etc.&lt;/p&gt;
&lt;p&gt;The next step is to make the segmentation explicit, and make the different segments able to interoperate to the greatest degree possible.  I think we&amp;rsquo;ve succeeded at this in Node, but as I mentioned above, it&amp;rsquo;s an easier problem there than in the browser.  The component approach that TJ describes is very promising.&lt;/p&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;Components could have a “component.json” much like the commonjs package.json, or we can simply extend package.json. This would of course act as the package manifest, letting the world know if it has stylesheets, templates, scripts, images and so on. I believe we should avoid the minimal gains of magical auto-globbing of files, we can just simply list these and avoid unnecessary complexity and I/O.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It should be package.json.  I think &amp;ldquo;styles&amp;rdquo; should be spelled &amp;ldquo;css&amp;rdquo; and &amp;ldquo;templates&amp;rdquo; should be spelled &amp;ldquo;html&amp;rdquo;.  Otherwise I think we&amp;rsquo;d soon see stylus and less files in &amp;ldquo;styles&amp;rdquo;, and mustache and jade and markdown in &amp;ldquo;templates&amp;rdquo;.  Maybe that&amp;rsquo;s ok.  It&amp;rsquo;s a bikeshed we can paint later.&lt;/p&gt;
&lt;p&gt;The unnecessary complexity of globbing is not such a big deal, really, but it should be left out of any &amp;ldquo;spec&amp;rdquo; that we try to get people to use.  npm does this for a few things, and it&amp;rsquo;s pretty easy.  It can be a step that&amp;rsquo;s performed at publish-time for convenience relatively easily, so that the data is ready at install-time.&lt;/p&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;Require fragmentation&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In keeping with the spirit of &amp;ldquo;minimal components consumed in multiple ways&amp;rdquo;, I think that the Node-style require() and module.exports is the way to go.  It&amp;rsquo;s demonstrably easy to convert to other patterns, and is intuitive and easy to use.  As TJ points out, the feature-detection required to use AMD and other things is just utter bullshit.&lt;/p&gt;
&lt;p&gt;If you are going to be &amp;ldquo;installing&amp;rdquo; components and expecting them to Just Work in some fashion, then you&amp;rsquo;ve already taken on some tooling.  Best to just bite the bullet and have the tool do this part as well.&lt;/p&gt;
&lt;hr /&gt;&lt;blockquote&gt;
  &lt;p&gt;Delivering components&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I disagree with TJ here, and think that using the npm registry is actually the best way to go.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Any other system will have to run into and solve the same exact problems that the npm registry already has to solve.&lt;/li&gt;
&lt;li&gt;User management, package ownership, and namespace collisions are already taken care of.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s pretty fast, since you&amp;rsquo;re just fetching content, not the full history.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s a lot of reusable code for interacting with it programmatically, and as npm matures and pieces are factored out of it, this will only get better.  Node is the obvious choice for a tool to fetch and build client-side components.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;One complaint about using the npm registry is that it&amp;rsquo;s &amp;ldquo;confusing&amp;rdquo; that some packages are only going to be useful for client-side, etc.  However, this isn&amp;rsquo;t really that big of a concern.&lt;/p&gt;
&lt;p&gt;If a component system uses the &lt;code&gt;main&lt;/code&gt; field for its JS entry point, and consumes the Node-style require() syntax, then there&amp;rsquo;s not a huge difference between a Node module and a client-side component.  Why not just let people use them this way?  If I only want to use the JS bits, why can&amp;rsquo;t I just do that in Node as well as in the browser?  Of course, the vast majority of modules cannot be shared, but so what?  People just won&amp;rsquo;t share those.&lt;/p&gt;
&lt;p&gt;Users already ignore many thousands of modules without any trouble.  However, if it really is a problematic issue (and I am not convinced that it really is), then the package.json format is infinitely extensible.  TJ brings up the example of &lt;code&gt;debug&lt;/code&gt; and &lt;code&gt;debug-component&lt;/code&gt;.  But if the module works on both sides, why not just let it be the same thing?  If some sort of tagging is needed, then write a tool that uses something, and start using it.&lt;/p&gt;
&lt;p&gt;Browserify and ender already exist, and have proven that this approach is effective.&lt;/p&gt;
&lt;p&gt;Another advantage of using the main npm registry is that the namespace is shallow.  So, there is no chance of having a component named &amp;ldquo;foo&amp;rdquo; that is very different from the node module named &amp;ldquo;foo&amp;rdquo;, causing confusion for users.  It can make it a bit trickier to come up with names, but it also encourages each package/module/component to have a name that doesn&amp;rsquo;t refer to something else.&lt;/p&gt;
&lt;p&gt;If the central registry is problematic, then using the same code as the npm registry, at a different URL and with a different database, is also an option worth considering.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Data is a singular noun</title>
		<link href="https://blog.izs.me/2012/07/data-is-a-singular-noun/"/>
		<updated>2012-07-23T16:18:12Z</updated>
		<id>https://blog.izs.me/2012/07/data-is-a-singular-noun/</id>
		<content type="html">&lt;blockquote&gt;
  &lt;p&gt;When you read in the middle of a sentence ‘&amp;hellip;the data are analysed by&amp;hellip;’, you stumble: your subconscious grammatical consistency checks raise an alarm! – you have misparsed them (yes, like that). You automatically go back to the beginning for another go, more carefully this time, but realise, too late, that you are simply reading the work of an author in his weddings-and-funerals suit, writing as he would never speak.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://purl.org/nxg/note/singular-data&quot;&gt;This article&lt;/a&gt; is a great example of how we ought to think about grammatical issues.&lt;/p&gt;
&lt;p&gt;People often say that such-and-such is the &amp;ldquo;correct&amp;rdquo; way to use a word, because of some historical baggage or technical analysis of the structure of language, without realizing that &lt;em&gt;that&amp;rsquo;s not how people talk&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Others recognize that this is silly, and declare that grammatical discussions are pointless.  There&amp;rsquo;s probably more gained than lost by making such a declaration, but nevertheless, it is not optimal, as it throws the baby out with bathwater that is easily drained.&lt;/p&gt;
&lt;p&gt;There is much to be gained by making our writing clear.  Whether it&amp;rsquo;s an essay or a tweet or an invitation to a party, the goal is usually to communicate some idea.  Claiming the linguistic high-ground of &amp;ldquo;correctness&amp;rdquo;, while referring to a set of rules that do not describe the current language, is akin to wearing a funny costume.  This has a place in satire, but in most contexts, it is distracting and condescending to write in this way.&lt;/p&gt;
&lt;p&gt;Linguistic descriptivism is not &amp;ldquo;anything goes&amp;rdquo;.  We humans have a set of grammatical parsing rules &lt;em&gt;already&lt;/em&gt; in our brains, and we use them constantly.  &amp;ldquo;Anything goes&amp;rdquo; isn&amp;rsquo;t descriptive!&lt;/p&gt;
&lt;p&gt;The goal of any grammatical rule should be to help us write with a minimum of distracting complexity,  so that our message is more easily understood by our actual readers.  Rules that are implied only by the history or structure of words, but which are not actually used in practice, have no place in our language.&lt;/p&gt;
&lt;p&gt;People do not take you more seriously if you wear a top hat, monocle, and tuxedo.  If you&amp;rsquo;re not &amp;ldquo;proper english gentry guy&amp;rdquo;, don&amp;rsquo;t do it; and if you are, don&amp;rsquo;t be surprised that your persona gets in the way of your message.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/07/seldo-seriously-you-guys-jurassic-bark-is-the/"/>
		<updated>2012-07-13T16:40:49Z</updated>
		<id>https://blog.izs.me/2012/07/seldo-seriously-you-guys-jurassic-bark-is-the/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/27029720593/seriously-you-guys-jurassic-bark-is-the-one&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Seriously you guys, Jurassic Bark is the one episode of Futurama I can’t re-watch. It’s the saddest thing ever committed to video.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://iamyourcanadianboyfriend.com/post/27018698800/a-tv-show-finishes-and-my-wife-turns-to-me-and&quot;&gt;atsween&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A TV show finishes and my wife turns to me and says, “Oh, that was sad. I’m even tearing up a little!”&lt;/p&gt;
&lt;p&gt;I say, “As sad as &lt;a href=&quot;http://en.m.wikipedia.org/wiki/Jurassic_Bark&quot;&gt;Fry’s dog&lt;/a&gt;?”&lt;/p&gt;
&lt;p&gt;And now she’s sobbing.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>7 Surprising Ways to Speed Up Your Site!!!</title>
		<link href="https://blog.izs.me/2012/07/7-surprising-ways-to-speed-up-your-site/"/>
		<updated>2012-07-11T18:10:00Z</updated>
		<id>https://blog.izs.me/2012/07/7-surprising-ways-to-speed-up-your-site/</id>
		<content type="html">&lt;p&gt;These are my optimization tips for JavaScript.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Do less IO.  (Fewer, smaller HTTP reqs.  But mostly just fewer.)&lt;/li&gt;
&lt;li&gt;Do slow operations in ways that don&amp;rsquo;t block user interaction.  (Aka &amp;ldquo;async&amp;rdquo; or &amp;ldquo;cheating&amp;rdquo;.)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Write smaller programs.&lt;/strong&gt;  Cut unnecessary features.  Most software latency and bugs come from code, so use less of that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile before you optimize&lt;/strong&gt;, or go blind from pointless bit twiddling masturbation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Profile your actual app with actual data.&lt;/strong&gt;  Microbenchmarks are often inapplicable.&lt;/li&gt;
&lt;li&gt;Write code that you can read and understand.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t believe anything you read on the internet about speeding up your site &lt;strong&gt;until you have verified it for yourself, in the context of your app&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	
	<entry>
		<title>On ES 6 Modules</title>
		<link href="https://blog.izs.me/2012/06/on-es-6-modules/"/>
		<updated>2012-06-26T04:25:00Z</updated>
		<id>https://blog.izs.me/2012/06/on-es-6-modules/</id>
		<content type="html">&lt;p&gt;&lt;i&gt;Note: This was written quite some time ago.  The current ES6 Module specification has changed a lot since then, and many of my complaints have been addressed.  Treat this essay as a piece of history.  &lt;a href=&quot;https://blog.izs.me/2012/06/on-es-6-modules/#module-essay&quot;&gt;click here to acknowledge this caveat and read the essay.&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;div id=&quot;module-essay&quot; class=&quot;hidden-content&quot;&gt;
&lt;p&gt;A few things have rubbed me the wrong way about the current Modules and
Module Loader specification.  I regret that I have not been very clear
about what exactly my objections are, and worse still, I have not been
very clear about what I think a better direction would be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yes, this will be sent to ES-Discuss as a proper discussion
proposal.&lt;/strong&gt; This blog post is phase three of getting my ideas in order.
(The first being &amp;ldquo;get annoyed that current proposals don&amp;rsquo;t fix the
problem&amp;rdquo;, and the second being &amp;ldquo;rant about it with friends and
colleagues on twitter and over tacos.&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;First of all, I want to put to rest any ideas that I&amp;rsquo;m a die-hard
JavaScript language conservative ideologue who will oppose any change
whatsoever.  I am well aware that what we have is lacking.  I would love
to see changes that make it easier to write JavaScript module systems,
and debug programs that use them.&lt;/p&gt;
&lt;p&gt;I believe that there is a place for new syntax, especially in cases
where it allows for optimizations in the implementation, ease of
reading, or run-time behavior that must occur before the program is
executed (that is, static analysis stuff.)  Parsing a plain-old
JavaScript AST is certainly possible, but it&amp;rsquo;s a bit unfortunate.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;module-problems&quot;&gt;&lt;/a&gt;We&amp;rsquo;ve spent a few years now doing modules in JavaScript.  The claim that
&amp;ldquo;JavaScript needs modules&amp;rdquo; is thus somewhat misguided: JavaScript needs
&lt;strong&gt;better&lt;/strong&gt; modules.  Leaving aside Node.js for the moment, modular
systems in JavaScript generally:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Impose boilerplate restrictions on the programmer.  This is ugly and
error-prone, and there is no easy way to catch many of these errors
early.&lt;/li&gt;
&lt;li&gt;Are not inter-operable with code that uses a different module system
(or none at all).&lt;/li&gt;
&lt;li&gt;Either require that all modules be present in the page at the start,
or delay the execution of the program unacceptably.  (No one does
sync XHR.  I&amp;rsquo;m talking about r.js/AMD and the YUI3 seed file here.)&lt;/li&gt;
&lt;li&gt;Leaks internal implementation details in unfortunate ways, so that
users are sometimes surprised when behavior violates intuitions.&lt;/li&gt;
&lt;li&gt;Do not isolate global leakage, making a missing &lt;code&gt;var&lt;/code&gt; a felony, when
it shouldn&amp;rsquo;t even be a misdemeanor.  (At best, they wrap in a
function.)&lt;/li&gt;
&lt;li&gt;To varying degrees, line and column numbers are obscured.  (Sometimes
just the first line&amp;rsquo;s column; sometimes the stack traces are
completely meaningless.)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;All&lt;/strong&gt; of these problems are issues with Node.js as well!  We paper
over #3 by using a package manager and requiring that the modules in
your program are available on the disk at the start, but it&amp;rsquo;s still in
my opinion unacceptable.  We have the advantage of &amp;ldquo;startup time&amp;rdquo; and
&amp;ldquo;run time&amp;rdquo; separation, but really, &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags are a web browser&amp;rsquo;s
&amp;ldquo;startup time&amp;rdquo;, and the rest of the time is its &amp;ldquo;run time&amp;rdquo;.  Build
processes allow one to trade run-time delay (and complexity) for
up-front download size (and a simpler synchronous &lt;code&gt;require()&lt;/code&gt;), but
generally only by making the other problems worse.&lt;/p&gt;
&lt;p&gt;TC-39 has one chance to specify a Module system that can address each of
these issues, or allow host platforms to address them effectively.
Problems introduced here will be with us forever.  A half-way fix will
be prohibitively expensive to fix once it&amp;rsquo;s in use, so we&amp;rsquo;ll be stuck
with mistakes for some time (as we in Node.js are stuck with the
mistakes in our system.)&lt;/p&gt;
&lt;h2 id=&quot;the-good-in-the-current-spec&quot;&gt;The Good in the Current Spec&lt;/h2&gt;
&lt;p&gt;Though I think it has deep problems, there are very good parts in the
current spec:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;It clearly is &lt;em&gt;attempting&lt;/em&gt; to reach a module system that addresses
the needs of Node.js (and whatever on-device JavaScript platforms
succeed it), as well as those of browser-JavaScript authors and
platforms like RequireJS and Browserify.&lt;/li&gt;
&lt;li&gt;The issues around globals and scope are pretty solid.  I don&amp;rsquo;t have
much to complain about there.  Any changes to global behavior come
along with a pile of edge cases, but they&amp;rsquo;re pretty thorougly
evaluated and addressed.&lt;/li&gt;
&lt;li&gt;The goals of both the Module and Loader proposals had me pretty much
cheering.  It seems like TC-39 is actually interested in solving a
problem, and that gives me hope.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;More than anything, reading the spec makes it clear that the &lt;em&gt;problem&lt;/em&gt;
is fairly well understood.  However, the presented &lt;em&gt;solution&lt;/em&gt; seems to
be headed in the wrong direction.&lt;/p&gt;
&lt;h2 id=&quot;problems-with-the-current-spec&quot;&gt;Problems with the Current Spec&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not going to go through the issues that I have with the current
spec one by one.  It&amp;rsquo;s tedious and not the conversation we should be
having.  I&amp;rsquo;ll detail my alternative proposal below.&lt;/p&gt;
&lt;p&gt;However, there are a few points I&amp;rsquo;d like to highlight, because they are
issues that probably ought to be informed by the experience that I and
other module system authors and users can provide.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;strong&gt;It seems to be based on the assumption that nesting module systems is
a thing that people want.&lt;/strong&gt;  Historically, in Node, we&amp;rsquo;ve made several
API decisions based on the &lt;em&gt;explicitly stated requests&lt;/em&gt; to make the
module system more extensible and flexible.  In practice, none of the
supposed innovation panned out, and every one of those decisions was
a huge mistake that increased flexibility with no tangible benefit.&lt;/p&gt;
&lt;p&gt; People don&amp;rsquo;t want to write module systems.  People want to &lt;strong&gt;stop&lt;/strong&gt;
 writing module systems.  Once there&amp;rsquo;s a module system in place, it
 should be The module system, period.&lt;/p&gt;
&lt;p&gt; It bears repeating: &lt;strong&gt;no one wants to write a module system&lt;/strong&gt;.  A
 few of us take it on out of regrettable necessity.  Anyone who
 actually &lt;strong&gt;enjoys&lt;/strong&gt; writing module systems is too insane to be
 trusted.  The only rational position is to do the simplest necessary
 thing, and as quickly as possible get to the business of building
 real programs with it.  Optimize for that.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It puts too many things in JavaScript (as either API or syntax)
which belong in the host (browser/node.js).&lt;/strong&gt;  As I said, people
don&amp;rsquo;t actually want to write module systems in their JavaScript
programs.  They want to stop having to think about it.  Node&amp;rsquo;s module
system has been successful (as has require.js and browserify)
precisely because it requires a minimum amount of &lt;em&gt;thought&lt;/em&gt; on the
part of the user about the module system.  (It&amp;rsquo;s still way too much.)&lt;/p&gt;
&lt;p&gt; Adding features that add complexity with the goal of making it
 easier to have lots of module systems in JavaScript is a mistake.
 Typically we can enable extension more effectively by &lt;strong&gt;reducing&lt;/strong&gt;
 the scope of the specification, rather than by increasing it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It borrows syntax from Python that many Python users do not even
recommend using.&lt;/strong&gt;  The &lt;code&gt;import * from mod&lt;/code&gt; syntax is dated and
highly contentious in the Python community (as is &lt;code&gt;import com.foo.*&lt;/code&gt;
in Java), because it is a recipe for name collisions.  Learning from
real implementations is winful; but we should be avoiding their
mistakes, not copying them.&lt;/p&gt;
&lt;p&gt; Furthermore, &lt;code&gt;let&lt;/code&gt; already gives us destructuring assignment.  If
 a module exports a bunch of items, and we want several of them, then
 do &lt;code&gt;var {x,y,z} = import &#39;foo&#39;&lt;/code&gt; or some such.  This &lt;code&gt;import &amp;lt;x&amp;gt; from
 &amp;lt;module&amp;gt; as &amp;lt;blerg&amp;gt;&lt;/code&gt; is 100% unnecessary, adds nothing, and solves
 no problems.  It does not pay its utility bill.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It favors the &amp;ldquo;object bag of exported members&amp;rdquo; approach, rather
than the &amp;ldquo;single user-defined export&amp;rdquo; approach.&lt;/strong&gt;  Node.js uses an
&lt;code&gt;exports&lt;/code&gt; object because the CommonJS approach seemed like a good
idea at the time, and it works around the fact that we have no good
way to handle transitive dependencies except via unfinished objects.&lt;/p&gt;
&lt;p&gt; However, it is widely acknowledged in the node community that using
 the &lt;code&gt;module.exports = xyz&lt;/code&gt; style generally results in better
 programs.  Changes at the language level can likely address the
 transitive loading issue more powerfully, and so should encourage
 the known best practices.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;h2 id=&quot;a-simpler-proposal&quot;&gt;A Simpler Proposal&lt;/h2&gt;
&lt;p&gt;Clearly, the problems with the current state of JavaScript modules
cannot be solved with zero changes to the language.  Some cannot be
changed without adding syntax.  However, every change carries with it a
cost.  Therefore, it seems like the ideal approach is to try to find the
minimum possible change that will address the issues &amp;ndash; and, we ought to
be ruthless on which bits of functionality don&amp;rsquo;t make the cut to be
worth the risk.  If we can get away with a much smaller fix by refusing
to address part of the problem which is inessential, then that is the
right course of action.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know if this is minimal enough, but I&amp;rsquo;d like to propose the
following, which I think picks some of the most essential aspects of the
Loader and Module proposals.  It&amp;rsquo;s very rough, and there are a lot of
unanswered questions.  But in general, this is what I would like to see
from a Loader specification.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This is very rough, and needs a lot of polish and edge-case
exploration.&lt;/strong&gt;  I&amp;rsquo;m not pitching it to get it accepted, I&amp;rsquo;m sharing it
to hopefully help pull the conversation in another direction, and help
make it clear what a better proposal might look like.&lt;/p&gt;
&lt;p&gt;(I&amp;rsquo;ve numbered them simply so that I can refer to bits later, not so
much because they&amp;rsquo;re a list of like things in order.  I&amp;rsquo;m a spec n00b.)&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;p&gt;A &lt;code&gt;Loader&lt;/code&gt; built-in object, with a few methods that must be
specified before modules can be used.  (And will typically be
specified by the host object.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Within a module, the &lt;code&gt;import &amp;lt;pathString&amp;gt;&lt;/code&gt; syntax that can be easily
detected statically in program text before evaluation, and returns a
module&amp;rsquo;s exported object.  &lt;code&gt;var foo = import &#39;path/to/foo.js&#39;&lt;/code&gt;.
Import returns a single value, always.  The path must be a string
literal.  The import keyword is an operator, not a function, and thus
cannot be assigned etc.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;Loader.define(&amp;lt;path&amp;gt;, &amp;lt;program text&amp;gt;)&lt;/code&gt; defines a module at the
specified &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt;, with the &lt;code&gt;&amp;lt;program text&amp;gt;&lt;/code&gt; contents.  That
&lt;code&gt;&amp;lt;program text&amp;gt;&lt;/code&gt; is statically analyzed for any &lt;code&gt;import&lt;/code&gt; statements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Whenever an &lt;code&gt;import &amp;lt;path&amp;gt;&lt;/code&gt; is encountered in &lt;code&gt;&amp;lt;program text&amp;gt;&lt;/code&gt; then
the &lt;code&gt;Loader.resolve(requestPath, callerPath, callback)&lt;/code&gt; is called.
This method should return a fully qualified path.  If this method
returns boolean &lt;code&gt;true&lt;/code&gt;, then it will not be considered resolved until
the callback is called.  (The argument to the callback is the string
path.) If it does not return true, and does not return a string path,
then this is an error, and throws.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once a module is resolved to a full path string, then
&lt;code&gt;Loader.load(fullPath, callback)&lt;/code&gt; is called.  &lt;code&gt;callback&lt;/code&gt; should not
be called until &lt;code&gt;Loader.define(fullPath, contents)&lt;/code&gt; is called.
This should be called at most once for any given &lt;code&gt;fullPath&lt;/code&gt;.  (Is the
callback even necessary?  Why not just wait for &lt;code&gt;Loader.define&lt;/code&gt; and
throw any errors encountered?)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;Loader.main(fullPath)&lt;/code&gt; method executes the module referenced by
&lt;code&gt;fullPath&lt;/code&gt; (which must have already been defined), as well as
evaluating each of the modules that it imports.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Within a module, the &lt;code&gt;export &amp;lt;expression&amp;gt;&lt;/code&gt; statement marks the result
of &lt;code&gt;&amp;lt;expression&amp;gt;&lt;/code&gt; as the exported value from the module.  &lt;strong&gt;There can
be at most one export statement in a module&lt;/strong&gt;, and the exported
expression is the module&amp;rsquo;s export.  To export more than one thing,
export an object with more than one thing on it.&lt;/p&gt;
&lt;p&gt; Modules export a single value.  Exporting a second time throws.&lt;/p&gt;
&lt;p&gt; Maybe this is not a valid cause for syntax addition.  I&amp;rsquo;m not sure.
 There are hairy problems around cyclic dependencies, so it&amp;rsquo;s worth
 at least having the option to address with static magic that has not
 yet been fully imagined.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The global object within a module context is equivalent to
&lt;code&gt;Object.create(&amp;lt;global&amp;gt;)&lt;/code&gt; from the main global context.  (The
important thing is that leaks aren&amp;rsquo;t leaky outside the module, but
for example, &lt;code&gt;x typeof Error&lt;/code&gt; still works, because it uses the same
Error function.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If a module does not contain an &lt;code&gt;export&lt;/code&gt; statement, then its global
object is its export.  This is to provide support for legacy modules
that create a global object (such as &lt;code&gt;jQuery&lt;/code&gt;) rather than using an
export statement.  (Too magical?  Probably.  Also, what about having
exports inheriting from global is weird.  Is there a simpler way to
make existing libs place nicely with this approach?)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The default values of &lt;code&gt;Loader.load&lt;/code&gt;, &lt;code&gt;Loader.define&lt;/code&gt;, and
&lt;code&gt;Loader.resolve&lt;/code&gt; would typically be set by the host environment.
However, for reasons of simplicity, they &lt;strong&gt;must&lt;/strong&gt; be set in normal
program text (ie, not in a module), and modules should not have the
ability to alter them.&lt;/p&gt;
&lt;p&gt;In web browsers, modules could be defined straight away by using a new
attribute on the script tag: &lt;code&gt;&amp;lt;script module
src=&#39;http://src.com/foo.js&#39;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt; would be equivalent to doing
&lt;code&gt;Loader.define(&#39;http://src.com/foo.js&#39;, &#39;&amp;lt;contents of foo.js&amp;gt;)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Bundler programs could trivially translate files into modules using
Loader.define (rather than wrapping in a IIFE), or JavaScript files
could be loaded as-is, without requiring that existing libraries begin
using any &lt;code&gt;module { ... }&lt;/code&gt; syntax.&lt;/p&gt;
&lt;h2 id=&quot;in-web-browsers&quot;&gt;In Web Browsers&lt;/h2&gt;
&lt;p&gt;Web Browsers could implement the Loader object thusly:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Loader.resolve(request, from)&lt;/code&gt; Uses standard URL-resolution rules.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.define&lt;/code&gt; could be sweetened by a &lt;code&gt;&amp;lt;script module&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.main&lt;/code&gt; could be set via a &lt;code&gt;&amp;lt;script module main&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.load&lt;/code&gt; could fetch the URL, and evaluate the contents, as if it
had been added to the document with a &lt;code&gt;&amp;lt;script module src=...&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;For additional extensibility, these methods could be overridden by, for
example, browserify or RequireJS.&lt;/p&gt;
&lt;p&gt;For security, the Loader object could be frozen with &lt;code&gt;Object.freeze&lt;/code&gt; to
prevent additional changes.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in no way attached to the specifics of the tag spelling.  My point
is that we in the JS community should specify the loader semantics, and
then let host objects take advantage of them in application-specific
ways.&lt;/p&gt;
&lt;h2 id=&quot;in-require-js&quot;&gt;In Require.JS&lt;/h2&gt;
&lt;p&gt;RequireJS and other AMD platforms would be pretty much made mostly
obsolete by this specification, since the principle of AMD would just be
&amp;ldquo;how it works&amp;rdquo; in web browsers by default.  But, without the unfortunate
boilerplate, and the resource loading mechanism could kick off much
sooner, since &lt;code&gt;import&lt;/code&gt; statements can be detected long before the script
is actually run.&lt;/p&gt;
&lt;h2 id=&quot;in-browserify&quot;&gt;In Browserify&lt;/h2&gt;
&lt;p&gt;Most browserify modules would Just Work if they replaced &lt;code&gt;require(..)&lt;/code&gt;
with &lt;code&gt;import ..&lt;/code&gt;.  However, it would probably be necessary to extend the
&lt;code&gt;Loader&lt;/code&gt; methods to provide shims for Node.js built-ins (ie, path, fs,
url, assert, net, http, etc.) as well as pre-define &lt;code&gt;node_modules&lt;/code&gt;
dependencies into the browserify bundle.&lt;/p&gt;
&lt;p&gt;However, Browserify&amp;rsquo;s static analysis build step could be made much more
effective by using a designated &lt;code&gt;import&lt;/code&gt; operator rather than relying on
knowledge of a &lt;code&gt;require&lt;/code&gt; function.&lt;/p&gt;
&lt;h2 id=&quot;in-node-js&quot;&gt;In Node.js&lt;/h2&gt;
&lt;ul&gt;&lt;li&gt;&lt;code&gt;Loader.resolve(request, from)&lt;/code&gt; would do the current &lt;code&gt;node_modules&lt;/code&gt;
and &lt;code&gt;NODE_PATH&lt;/code&gt; dance.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.define&lt;/code&gt; would replace the existing module wrapper stuff.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.main&lt;/code&gt; would be called on the module specified as a command
line argument.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Loader.load&lt;/code&gt; would be very straightforward FS operations.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This would also set the stage for making node-core itself more modular,
and we could even explore new approaches like detecting module
dependencies from code, rather than requiring the use of a
&lt;code&gt;package.json&lt;/code&gt; file, which is very exciting.&lt;/p&gt;
&lt;h2 id=&quot;what-s-missing-from-this-proposal&quot;&gt;What&amp;rsquo;s Missing from this Proposal&lt;/h2&gt;
&lt;p&gt;There is no &lt;code&gt;module&lt;/code&gt; syntax in this &amp;ldquo;module&amp;rdquo; proposal.  That is because
it is unnecessary, and its omission is intentional.&lt;/p&gt;
&lt;p&gt;A lot of work has also been done on the Harmony Module Loader proposal
to flesh out some details of the Loader object.  Most of this is good
stuff.  However, by removing the Module syntax portion of the proposal,
a lot of those things can be streamlined.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also worth mentioning that this approach make sourcemaps
unnecessary for useful stack traces, even in bundled or concatenated
code, as the &lt;code&gt;Loader.define()&lt;/code&gt; syntax would function as a sourcemap.&lt;/p&gt;
&lt;p&gt;While the experience in the wild has shown us that the &amp;ldquo;export one
thing&amp;rdquo; approach is definition sound, I&amp;rsquo;m not sure exactly how to handle
the transitive dependency issue in a way that doesn&amp;rsquo;t involve unfinished
objects, or cause breakage in cases like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// x.js
var y = import &#39;./y.js&#39;
&lt;p&gt;// y.js
setTimeout(function() {
export { fooled: &#39;you&#39; }
}, 100)
&lt;/p&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Even more insidious is something like this:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// x.js
var y = import &#39;./y.js&#39;
export { real: &#39;x&#39; }

// y.js
var x = import &#39;./x.js&#39;
assert.deepEqual(x, {real: &#39;x&#39;}) // nope!!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Because &lt;code&gt;x&lt;/code&gt; sets its export &lt;em&gt;after&lt;/em&gt; being loaded by &lt;code&gt;y&lt;/code&gt;, the assignment
&lt;/p&gt;&lt;p&gt;does nothing. Currently, in Node.js (and most other systems as well)
this is not handled, or not handled very well at least.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Is there some way that it could somehow pass an object to the &lt;code&gt;x&lt;/code&gt; module
that would get swapped out behind the scenes when &lt;code&gt;y.js&lt;/code&gt; changes its
export?  Is that too magical?  I&amp;rsquo;m not sure.&lt;/p&gt;
&lt;h2 id=&quot;next-&quot;&gt;Next&amp;hellip;&lt;/h2&gt;
&lt;p&gt;My hope is that this post will help spark a more interesting
conversation than the current tendency towards &amp;ldquo;YAY/BOO&amp;rdquo; that is so
common in the internet.  This isn&amp;rsquo;t politics.  We&amp;rsquo;re not voting for
parties.  The goal is to figure out the best API, which is a complex
thing.  The solution space is wide, and it is naive to reduce it to a
boolean prematurely.&lt;/p&gt;
&lt;p&gt;I would like to try out some implementations of this in Node.js as soon
as possible.  Also, I&amp;rsquo;d love to hear feedback about which parts of this
you think are unnecessary or impossible.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s not forget that we all want these problems solved.  No reasonable
person thinks that JavaScript programs are optimally modular today.
Most people who enjoy Node&amp;rsquo;s module system only like it because they&amp;rsquo;ve
never taken a close look at it.  As one of its maintainers and chief
architects, I feel qualified to say that it&amp;rsquo;s pretty terrible.  (Though,
in my opinion, it is the best I&amp;rsquo;ve used, and the only that is optimized
for maximum utility and an absolute intolerance for boilerplate.  It&amp;rsquo;s
just that the language is lacking, but that&amp;rsquo;s what this is all about.)&lt;/p&gt;
&lt;p&gt;Not every change is an improvement, but every improvement is a change.
My friends in the &amp;ldquo;no new syntax&amp;rdquo; crowd would do well to remember that.&lt;/p&gt;
&lt;p&gt;That being said, since JavaScript cannot be easily changed, and can only
be changed in one direction, we must be very careful to make sure that
every change &lt;strong&gt;is&lt;/strong&gt; an improvement.  It&amp;rsquo;s more important to proceed
carefully than to proceed quickly.&lt;/p&gt;
&lt;p&gt;Future generations will thank us for our care, and curse us for our haste.&lt;/p&gt;
&lt;/div&gt;
</content>
	</entry>
	
	<entry>
		<title>Seldo&#39;s Tumblr: To save you time, here are Friday&#39;s tech headlines in roughly chronological order</title>
		<link href="https://blog.izs.me/2012/05/seldos-tumblr-to-save-you-time-here-are/"/>
		<updated>2012-05-19T03:47:00Z</updated>
		<id>https://blog.izs.me/2012/05/seldos-tumblr-to-save-you-time-here-are/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/23277913183/to-save-you-time-here-are-fridays-tech-headlines-in&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;&lt;li&gt;OMG Facebook IPO OMG OMG OMG
&lt;/li&gt;&lt;li&gt;Facebook Rises 50% in First Hour of Trading
&lt;/li&gt;&lt;li&gt;Holy Shit Mark Zuckerberg Is So Rich Now
&lt;/li&gt;&lt;li&gt;Look at All These Other Motherfuckers Who Are Also Rich Now
&lt;/li&gt;&lt;li&gt;Some People Who You’d Expect to Get Rich Didn’t Get Quite As Rich As You’d Think
&lt;/li&gt;&lt;li&gt;Oh Man Facebook Employees Are So Rich Now
&lt;/li&gt;&lt;li&gt;Some Random Dude Who Painted a Wall for Facebook in 2005 Is Like a Millionaire Now
&lt;/li&gt;&lt;li&gt;Facebook up 100% on Opening by Lunch Time
&lt;/li&gt;&lt;li&gt;When Will Twitter Go Public?
&lt;/li&gt;&lt;li&gt;Is Pinterest the Next Facebook? (Update: No)
&lt;/li&gt;&lt;li&gt;Holy Shit Those Instagram Guys Are Even Richer Now
&lt;/li&gt;&lt;li&gt;Facebook up 200% on Opening, Bigger Market Cap Than Jesus
&lt;/li&gt;&lt;li&gt;Eduardo Saverin Is Some Kind of Douche, Huh?
&lt;/li&gt;&lt;li&gt;Robert Scoble - “I’m Just Happy You’re Still Paying Attention to Me”
&lt;/li&gt;&lt;li&gt;Sean Parker Is Also Hella Rich
&lt;/li&gt;&lt;li&gt;Is Zuckerberg the Next Steve Jobs?
&lt;/li&gt;&lt;li&gt;Some Dude Who Bought a Domain 20 Minutes Ago Raises $200M to Make “Pinterest for Video”
&lt;/li&gt;&lt;li&gt;Are We Perhaps in Some Kind of Bubble?
&lt;/li&gt;&lt;li&gt;Will Facebook’s IPO Hurt Obama?
&lt;/li&gt;&lt;li&gt;“There Is No Bubble” Says VC Who Would Lose Billions if Bubble Burst
&lt;/li&gt;&lt;li&gt;Is Vidterest the Next Facebook?
&lt;/li&gt;&lt;li&gt;Facebook Plunges After Initial Pop, Closes at 10% over Opening
&lt;/li&gt;&lt;li&gt;Is Facebook Doomed?
&lt;/li&gt;&lt;li&gt;Why Facebook Is Here to Stay
&lt;/li&gt;&lt;li&gt;10 Reasons Facebook Is Doomed
&lt;/li&gt;&lt;li&gt;15 Reasons Facebook Will Be Bigger Than Google
&lt;/li&gt;&lt;li&gt;Yahoo Is Still Screwed, Does Anyone Care? (by Kara Swisher)
&lt;/li&gt;&lt;li&gt;Vidterest Acquired by Chinese Internet Portal for $2 Billion
&lt;/li&gt;&lt;li&gt;Are We Sure It’s Not a Bubble?
&lt;/li&gt;&lt;li&gt;“Stop Calling It a Bubble, Dammit” - Entrepreneur Raising Series A
&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/05/tacoconf-anarchism/"/>
		<updated>2012-05-14T18:51:00Z</updated>
		<id>https://blog.izs.me/2012/05/tacoconf-anarchism/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide02&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide01&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.001.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here are the slides from my &lt;a href=&quot;http://tacoconf.com/&quot;&gt;TacoConf&lt;/a&gt; talk on &amp;ldquo;Anarchism for Fun and Profit&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Click on each image to go to the next one, or just scroll down leisurely.  If you prefer, you can get this &lt;a href=&quot;http://dl.dropbox.com/u/3685/presentations/anarchy/anarchy-tacoconf.pdf&quot;&gt;as a pdf&lt;/a&gt; or &lt;a href=&quot;http://dl.dropbox.com/u/3685/presentations/anarchy/anarchy-tacoconf.key&quot;&gt;keynote&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As is so often the case, a lot of great ideas and concepts were left out to make the story seem more straightforward, and to keep it in the time allotted.  I attribute a lot of things to Drucker that were actually developed by a lot of people at the time, and cut out this whole section about Walt Disney, and several other anarchist thinkers.  Max Stirner was just one of several relevant continental philosophers on the topic, etc.&lt;/p&gt;
&lt;p&gt;Think of this work as a tease, and let it motivate you to go out and learn more.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide03&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide02&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.002.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m here today to talk to you all about Anarchism for fun and profit.  Usually, the way we use these words, what we really mean is:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide04&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide03&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.003.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;play and work.  and as I&amp;rsquo;ll hopefully convince you by the end of this, what we typically think of as play or relaxation is just a brief recovery from what we call &amp;ldquo;work&amp;rdquo; which is actually bullshit.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide05&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide04&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.004.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is what we ought to be doing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide06&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide05&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.005.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m gonna give you a little bit of history, mostly to put these ideas into context.  Then, I want to talk about how this applies to work, and some things I&amp;rsquo;ve observed in the world of software development.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide07&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide06&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.006.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s start at the beginning.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide08&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide07&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.007.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Anarchy&amp;rdquo; what does that actually mean?  It&amp;rsquo;s not just a slogan for punk bands, but it&amp;rsquo;s also a pretty broad topic.  The definition is right in the word:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide09&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide08&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.008.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;An&amp;rdquo; meaning &amp;ldquo;no&amp;rdquo; or &amp;ldquo;without&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide10&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide09&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.009.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Archy&amp;rdquo; meaning ruler.&lt;/p&gt;
&lt;p&gt;So, anarchy is the lack of rulers, hierarchies, and so on.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide11&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide10&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.010.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, who runs things?&lt;/p&gt;
&lt;p&gt;Basically, we all do&lt;/p&gt;
&lt;p&gt;Of course, there are degrees of things.  But typically, anarchy implies that associations are voluntary rather than forced, and that each person has control over themselves rather than being controlled by someone else.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide12&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide11&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.011.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A lot of this goes back to a guy named Max Stirner.  Well, actually named Johan Schmidt.  He wrote a book called &amp;ldquo;The Ego and Its Own&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;One thing that strikes me about Stirner was how similar his lifestyle is to some of ours.  They had this philosophy discussion group back in the mid-19th century in a wine bar in Berlin.&lt;/p&gt;
&lt;p&gt;Karl Marx sat in on a few of their sessions, Bruno Bauer, Friedrich Engels, and a bunch of other names you&amp;rsquo;ve heard of if you got a liberal arts education.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t think they biked around eating tacos, and they probably didn&amp;rsquo;t write JavaScript in coffee shops, but the similarities to the Oakland tech scene are nonetheless pretty striking.&lt;/p&gt;
&lt;p&gt;In this book, he said that the individual is consumed and overwhelmed by ghosts and illusions.  In order to attain Right Action, these ghosts must be left behind.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide13&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide12&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.012.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a quote that I think sums up what is so interesting about knowledge workers when they&amp;rsquo;re really working at their best.&lt;/p&gt;
&lt;p&gt;So, in other words, he wasn&amp;rsquo;t writing because it was his job, he was writing because it&amp;rsquo;s what he does.  He is a writer, and he can&amp;rsquo;t find out the end of the story unless there&amp;rsquo;s someone to tell it to.&lt;/p&gt;
&lt;p&gt;In this passage, he&amp;rsquo;s almost half-apologizing for inflicting the truth on society, because he fully expects it will incite revolutions; at the same time saying, &amp;ldquo;Well, I need to find out the end, so&amp;hellip; deal with it.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide14&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide13&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.013.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;More in the modern age,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide15&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide14&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.014.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Bob Black is an American anarchist author, one of the most visible members of the &amp;ldquo;primativist&amp;rdquo; movement.  He&amp;rsquo;s been criticized for being a &amp;ldquo;lifestyle anarchist&amp;rdquo; which is basically a fancy academic term for &amp;ldquo;crazy person&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;And, certainly, he&amp;rsquo;s a little bit kooky.  But!  He wrote a really interesting essay, in his spectacularly bombastic style, called &lt;a href=&quot;http://www.primitivism.com/abolition.htm&quot;&gt;The Abolition of Work&lt;/a&gt;.  If you aren&amp;rsquo;t a fan of that style, there&amp;rsquo;s an essay called &lt;a href=&quot;http://www.zpub.com/notes/idle.html&quot;&gt;In Praise of Idleness&lt;/a&gt; by Bertrand Russell, which hits a lot of the same points, but is less confrontational.&lt;/p&gt;
&lt;p&gt;He wrote this back in the 80s, and the central thesis of his whole ideology is that we work too much.  Back in the hunter gatherer days, he says, people actually didn&amp;rsquo;t work nearly as much as they do today.&lt;/p&gt;
&lt;p&gt;A lot of the work we do doesn&amp;rsquo;t actually have to be done.  And a lot of the time we spend at work, we&amp;rsquo;re not even really working, we&amp;rsquo;re just sort of fucking around, hoping our boss doesn&amp;rsquo;t see us fucking around, because in reality, humans can&amp;rsquo;t be productive 100% of the time, and humans can basically &lt;em&gt;never&lt;/em&gt; be productive doing something they hate.&lt;/p&gt;
&lt;p&gt;A choice quote from his essay:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide16&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide15&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.015.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You should go read the essay.&lt;/p&gt;
&lt;p&gt;So instead of being our best, and enjoying our time, and feeling happy, we get into this cycle of anxiety, guilt, and boredom.  Our tasks are boring, so we have a hard time focusing on them, so we don&amp;rsquo;t get much done, and then we feel guilty, and are anxious that our bosses will find out and we&amp;rsquo;ll be punished somehow.  This anxiety and boredom prevents us from &lt;em&gt;ever&lt;/em&gt; achieving that glorious Csikszentmihalyi &amp;ldquo;flow&amp;rdquo; state where we have good ideas and feel great.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide17&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide16&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.016.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, now that we&amp;rsquo;ve covered the 19th century philosopher anarchists, and the modern day hipster anarchists, I want to switch gears and get a bit more serious here.&lt;/p&gt;
&lt;p&gt;How do we make work not sucky?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide18&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide17&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.017.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You really can&amp;rsquo;t talk about working and management in the modern era without mentioning this guy, Peter Drucker.  It&amp;rsquo;s really rare to look back at someone from a few decades ago, who was writing about the future, and just go, &amp;ldquo;Yeah&amp;hellip; he was right.  Dude totally called it.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;He was born in Vienna, and grew up sort of just all over Europe in the years after WW1, eventually moving to the US in the 30s.  He was influenced at a early age by Keynes and other economists of that time, but he wrote that he was more interested in the behavior of &lt;em&gt;people&lt;/em&gt; rather than the movements of commodities, which is what economists usually focused on.&lt;/p&gt;
&lt;p&gt;Viewed now, in light of the science of behavioral economics, it&amp;rsquo;s clear he was really on to something.  Tversky and Kahneman really went on to define that field, but I don&amp;rsquo;t have time to talk about them.  His career basically took off with the work he did at GM.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide19&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide18&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.018.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CONCEPT OF THE CORPORATION&lt;/p&gt;
&lt;p&gt;GM, the car company.  Drucker was fascinated with the concept of authority, and really believed that making the world a better place would have to be done by the managers running companies, since they held so much power over so many people.&lt;/p&gt;
&lt;p&gt;GM hired Drucker to do an extensive analysis of their organization, and from 1943 to 1946, he did just that, resulting in a book called &amp;ldquo;Concept of the Corporation&amp;rdquo; which detailed the structure and politics of General Motors, and also delved into its effects on society at large, from the point of view of the political machinations and teams within the organization.&lt;/p&gt;
&lt;p&gt;See, up until then, management literature usually focused on a very top-down model.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide20&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide19&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.019.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The idea is that you have a leader, and he has some subordinates.  You tell your subordinates what to do, and they do it, possibly by delegating parts of their tasks to their subordinates, and so on.  So, the question was, how do we draw this tree so that it is the most effective, and how do we deliver orders that will be followed effectively?&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a nice simple model, and it&amp;rsquo;s probably how most people would go about explaining &amp;ldquo;The Organization&amp;rdquo; to someone who wasn&amp;rsquo;t part of it.&lt;/p&gt;
&lt;p&gt;But Drucker&amp;rsquo;s approach was completely different.  He did investigate and explain how GM was organized, and praised them heavily for what was definitely a very scientific approach to developing management techniques and structures.&lt;/p&gt;
&lt;p&gt;However, he also showed in this book that this hierarchy is only the tip of the ice berg of what actually happens.  In actuality, those captains (or directors, or whatever) talk to one another, and also talk to the sergeants and privates in other departments, and so on.&lt;/p&gt;
&lt;p&gt;He noticed that there was all this cross-department interaction, and that the political hierarchy actually got in the way.  He suggested taking advantage of this, by structuring the company more like this:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide21&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide20&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.020.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A less hierarchical organization structure, where each business unit would be run more like a separate company with its own autonomy, and the ability to freely communicate with other business units.&lt;/p&gt;
&lt;p&gt;Well, that was not taken well at GM, and his book was banned at the company.  What&amp;rsquo;s super interesting is that the Japanese car companies &lt;em&gt;did&lt;/em&gt; follow Drucker&amp;rsquo;s advice and restructure, and proceeded to take advantage of the benefits that Drucker predicted.&lt;/p&gt;
&lt;p&gt;This was pretty early in his career.  Again and again, the theme runs through Drucker&amp;rsquo;s work: Decentralize, push decisions to the edges of the organization, plan on changing direction when the environment changes (he called this &amp;ldquo;planned abandonment&amp;rdquo;)&lt;/p&gt;
&lt;p&gt;What is most fascinating about Drucker, really his &amp;ldquo;crystal ball&amp;rdquo; moment, in 1959, in a book called &amp;ldquo;the landmarks of tomorrow&amp;rdquo;, he coined the term &amp;ldquo;Knowledge Worker&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide22&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide21&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.021.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;THE LANDMARKS OF TOMORROW&lt;/p&gt;
&lt;p&gt;Drucker predicted that the &amp;ldquo;Blue collar&amp;rdquo; worker would soon be a thing of the past.  Increases in mechanization would eventually increase the productivity of a single manual laborer to the point where we just don&amp;rsquo;t need people doing that.&lt;/p&gt;
&lt;p&gt;He also predicted that the manual labor that is still required would be outsourced to countries in the process of developing their infrastructures in the context of all this increased mechanization.&lt;/p&gt;
&lt;p&gt;Society would increasingly rely on what he called &amp;ldquo;Knowledge Work&amp;rdquo;, or occupations where people think for a living.  Whereas the 20th century is characterized by an increase in efficiency of manual work, the 21st century would be dominated by those who can properly understand and leverage Knowledge Work.&lt;/p&gt;
&lt;p&gt;Managing knowledge worker productivity is hard.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide23&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide22&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.022.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The biggest problems is that it&amp;rsquo;s not even really clear what it is they&amp;rsquo;re doing.  If you have a manual laborer, and his job is to make widgets, you can just count the widgets at the end of the day, and there you go.&lt;/p&gt;
&lt;p&gt;But, somewhat by definition, a knowledge worker isn&amp;rsquo;t making the same thing over and over again, and the means of production is not a machine, but their brain, so we have to define the task, and often defining the task improperly can change perceptions and inadvertently reduce productivity&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide24&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide23&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.023.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once upon a time, you&amp;rsquo;d either go to school, or not, and then go to a company like GM or ALCOA, or whatever, that existed for as long as you could remember, and you&amp;rsquo;d climb a nice little ladder, or stay at the bottom, and after 50 years or so, you&amp;rsquo;d retire.&lt;/p&gt;
&lt;p&gt;Well, with Knowledge Work, because it is unstable by its very nature, since the same knowledge doesn&amp;rsquo;t &lt;em&gt;need&lt;/em&gt; to be created repeatedly, many of us &amp;ndash; in fact, &lt;em&gt;most&lt;/em&gt; of us &amp;ndash; will have careers that long outlast the companies we work for.  Or, if not, if it&amp;rsquo;s a google or apple, something with some staying power, by the time your career is over, it&amp;rsquo;ll be a whole different company, making different things in different ways, etc.&lt;/p&gt;
&lt;p&gt;In fact, the industrial revolution had already started this wheel in motion.  The information revolution has just accelerated it to the point where we can actually watch it happen in real time.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide25&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide24&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.024.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked at a bunch of companies, even technology companies, that still seemed to be stuck in the last century, and didn&amp;rsquo;t quite &amp;ldquo;get&amp;rdquo; what makes knowledge workers work.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m sure there are a few people out there who just want to put in their 8 hours like Neitzsche&amp;rsquo;s Last Man, &amp;ldquo;earn a living and keep warm&amp;rdquo;.  The rest of the knowledge workers are working to make their jobs obsolete.&lt;/p&gt;
&lt;p&gt;Just as the 20th century was devoted to increasing the productivity of manual laborers to the point where a lot of manual labor simply didn&amp;rsquo;t need to be done, today&amp;rsquo;s technology is making a lot of inessential knowledge work go away.  Already, many tasks have been replaced by software.&lt;/p&gt;
&lt;p&gt;As Drucker repeated again and again in his work, if you take away the autonomy of knowledge workers, you take away everything that makes them valuable.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide26&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide25&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.025.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Huge fan of this guy.  I think if I had to pick a favorite person I&amp;rsquo;ve never met but hope I someday do, it&amp;rsquo;d be Merlin Mann.&lt;/p&gt;
&lt;p&gt;You may be familiar with him as the &lt;a href=&quot;http://inboxzero.com/&quot;&gt;Inbox Zero&lt;/a&gt; guy, or &lt;a href=&quot;http://43folders.com/&quot;&gt;43Folders&lt;/a&gt; guy, or &lt;a href=&quot;http://twitter.com/hotdogsladies&quot;&gt;@hotdogsladies&lt;/a&gt; on twitter, or a bunch of other things.  &lt;a href=&quot;https://www.youtube.com/watch?v=QwRrpCWTiOY&quot;&gt;Talk: Who moved my brain?&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Merlin Mann&amp;rsquo;s history is somewhat interesting, and I think parallels the trajectory of a lot of reasonably successful modern-day knowledge workers.  He did some web stuff, moved to california, worked at a few companies, pretty much hated it, and then ended up finding a niche where he can do what he&amp;rsquo;s really passionate about.&lt;/p&gt;
&lt;p&gt;And that is basically to do podcasts and make dick jokes on the internet, but also he goes and talks to companies about how they&amp;rsquo;re literally murdering the souls of their employees.&lt;/p&gt;
&lt;p&gt;In a lot of ways, Merlin Mann reminds me of Peter Drucker, but instead of spending 3 years writing a book to piss off one company, he goes around and talks at companies that never &lt;em&gt;ever&lt;/em&gt; invite him back.&lt;/p&gt;
&lt;p&gt;A lot of his work focuses on being a better knowledge worker, but also basically behaving like grownups in organizations.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide27&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide26&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.026.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is one of those things that&amp;rsquo;s really easy to think you understand, but really hard to actually get, especially for managers.&lt;/p&gt;
&lt;p&gt;Even in a lot of places where they&amp;rsquo;re are ostensibly trying to empower teams, at some level, priorities are still being handed down to them by people who are under the impression that writing a date on a spreadsheet is some sort of contract with the universe.&lt;/p&gt;
&lt;p&gt;What this ultimately comes down to is that there are a lot of little unreasonable assumptions and expectations we place on one another without even realizing it.&lt;/p&gt;
&lt;p&gt;Managers can say, &amp;ldquo;Yeah, check email less, reduce communication overhead, work at a sustainable pace, don&amp;rsquo;t be interrupt driven&amp;rdquo;, but then when you try to explain what this means: that your employees will only check their email once per day, meetings should have the minimum number of people in them, and so on, they laugh at you like you&amp;rsquo;re a crazy person.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide28&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide27&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.027.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In my own life, I&amp;rsquo;ve been unemployed a few times.  I&amp;rsquo;ve been poor, though I was lucky enough to be educated and to have a great support network.  I&amp;rsquo;ve worked for tech companies, and sold vacuum cleaners and other things, I&amp;rsquo;ve answered phones.  Not having a job when I needed money was probably the most stressful time in my life.&lt;/p&gt;
&lt;p&gt;But, for a few months in 2010, I didn&amp;rsquo;t have a job, but I didn&amp;rsquo;t actually need one.  I&amp;rsquo;d worked at Yahoo for 4 years, and got sort of sick of it.  So, I planned out how long my money would last, and decided to see what would happen if I just didn&amp;rsquo;t have an employer for a while.&lt;/p&gt;
&lt;p&gt;I highly recommend knowledge workers do this, at least every few years.  I didn&amp;rsquo;t even realize how burnt out I&amp;rsquo;d become, and those few months of idleness, well,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide29&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide28&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.028.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;it just doesn&amp;rsquo;t really make much sense to call it &amp;ldquo;idleness&amp;rdquo;, since it was one of the most productive times of my life.&lt;/p&gt;
&lt;p&gt;Why be productive when you don&amp;rsquo;t have a job?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide30&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide29&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.029.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Of course, I don&amp;rsquo;t want to make it seem like jobs are necessarily bad things.&lt;/p&gt;
&lt;p&gt;A lot of times, a company gives you access and opportunity to do the things you&amp;rsquo;re passionate about, and that&amp;rsquo;s when it&amp;rsquo;s awesome.&lt;/p&gt;
&lt;p&gt;But what really struck me about that time was how I felt so much more motivated to work on node than I ever had felt on any project before.  And as I looked around the node community, it seemed really interesting to me in those early days that everyone was working their asses off, and loving it&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide31&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide30&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.030.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t know if who first coined this term, but I&amp;rsquo;ve sometimes referred to the Node.js ecosystem, and particularly the npm registry, as a &amp;ldquo;mostly anarchic dictatorship&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;That is, there&amp;rsquo;s definitely leadership, but the leader&amp;rsquo;s role is shrunken down to almost nothing.  Because we built a decent module system, and node provided APIs that were easy to extend, little fiefdoms and satellite projects spun up.&lt;/p&gt;
&lt;p&gt;So, it&amp;rsquo;s maybe not &amp;ldquo;anarchy&amp;rdquo; in the purest sense, but it&amp;rsquo;s about as close as we can get.  Anyone has the opportunity to leave and do their own thing, and the leader&amp;rsquo;s role is mostly just to help everyone out, not to tell them what to do.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide32&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide31&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.031.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The awesome thing about working on an open source project like Node is that it is an anarchy with one dictator who is really answerable to the rest of the community.  The leader doesn&amp;rsquo;t have any control over a person&amp;rsquo;s income, so if you want a person to work harder, well&amp;hellip; you have to make it enticing.&lt;/p&gt;
&lt;p&gt;This means that we have to plan for occasional outages, or for people losing interest randomly and disappearing.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide33&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide32&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.032.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The payoff, though, is that people actually have a sense of ownership of what they do, because they&amp;rsquo;re endowed with a sense of agency, and that attracts more people to come help, and when they&amp;rsquo;re done with whatever it was that was distracting them, they tend to come back.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=u6XAPnuFjJc&quot;&gt;Dan Pink has a great talk on this&lt;/a&gt;, where he goes through lots and lots of evidence and reproduced studies.  The more people feel like they&amp;rsquo;re in control of what they do, the more than that they are connected via social ties, the more respect they are shown, the better and more creatively they can perform.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not about how many hours you spend in an office.  It&amp;rsquo;s about what you get done, and how good it is.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide34&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide33&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.033.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A lot of times, I think teams tend to forget what their mission is.  Or, worse, they may not have ever had one.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s definitely helpful sometimes to have meetings or estimate when things will be done.  Anarchy isn&amp;rsquo;t &amp;ldquo;everyone run in a different direction&amp;rdquo; (or at least, that&amp;rsquo;s not very useful or fun most of the time.)&lt;/p&gt;
&lt;p&gt;But I&amp;rsquo;ve worked on a lot of projects where I would have sworn that &lt;em&gt;my job&lt;/em&gt; was to pull bullshit estimates out of my ass about ill-defined product features just so some managers could massage the bullshit numbers into bigger bullshit numbers and hand it off to some other manager.&lt;/p&gt;
&lt;p&gt;Which really highlights the point that we need &amp;ldquo;leaders, not managers&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide35&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide34&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.034.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a pretty subtle distinction.  But, the verb &amp;ldquo;lead&amp;rdquo; really implies a much more active role, and an assumption that we are actually going somewhere.  &amp;ldquo;Managing&amp;rdquo; means we&amp;rsquo;re just kinda keeping everything in place.&lt;/p&gt;
&lt;p&gt;The person who is ostensibly in charge of a team of knowledge workers needs to be a person who takes on a lot of group-helping tasks, but also is intimately involved in the project.  Most of their job has to be to listen, not to tell.  Because knowledge work happens best when it&amp;rsquo;s fun, and &amp;gt; fun cannot be forced&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/#slide36&quot;&gt;&lt;img width=&quot;666&quot; id=&quot;slide35&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.035.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;fun cannot be forced.&lt;/p&gt;
&lt;p&gt;People work better when they&amp;rsquo;re having fun.  So, this means that you have to let them work on things they care about, help them find good things to work on, and mostly stay out of their way.&lt;/p&gt;
&lt;p&gt;&lt;img width=&quot;666&quot; id=&quot;slide36&quot; src=&quot;https://blog.izs.me/2012/05/tacoconf-anarchism/anarchy-tacoconf.036.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;So, I&amp;rsquo;m way over my time limit here I think, but if anyone wants to talk about any of this stuff, I&amp;rsquo;ll be around.  Thanks!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Beginner Ease</title>
		<link href="https://blog.izs.me/2012/04/beginner-ease/"/>
		<updated>2012-04-30T07:27:27Z</updated>
		<id>https://blog.izs.me/2012/04/beginner-ease/</id>
		<content type="html">&lt;p&gt;Pretty much on a daily basis, in some conversation either in real life, or over the internet, someone justifies a software design decision based on something being easier or more difficult to explain to beginners.  Most often, this is regarding programming language design, or language patterns.&lt;/p&gt;
&lt;p&gt;I think the &amp;ldquo;easier to explain to beginners&amp;rdquo; argument is a fine one if you&amp;rsquo;re tasked with making a bunch of beginners productive as fast as possible.&lt;/p&gt;
&lt;p&gt;As it happens, with respect to the JavaScript language at least, I am not a beginner, nor do I share in code creation/maintenance with very many beginners, so that argument is not so compelling to me.&lt;/p&gt;
&lt;p&gt;In my experience, most people spend a short time being a beginner, and then a long time being experts. By the nature of the time spent in each state, there will tend to be more experts than beginners, just as there are typically more adults than children. You certainly wouldn&amp;rsquo;t suggest that cars should be illegal simply because it takes so many years for a child to learn to drive responsibly!&lt;/p&gt;
&lt;p&gt;Therefore, for me at least, it seems better to optimize to minimize the mistakes that experts continue to make, and use patterns that will be the most convenient for experts to maintain.&lt;/p&gt;
&lt;p&gt;And becoming an expert is not so hard, really. It just takes a thousand hours or so of JavaScript use (assuming that the person already is a decent programmer in some other language). It&amp;rsquo;s a lot easier than becoming a competent dentist or hairdresser or lawyer, and there are plenty of dentists and hairdressers and lawyers.&lt;/p&gt;
&lt;p&gt;As experts, we should not push for less powerful abstractions on the basis that newcomers have a hard time with them.  Instead, we should push newcomers to &lt;em&gt;become&lt;/em&gt; experts by supplying them with mentorship, support, and the truth.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s not to say that the language should be so difficult or abstract as to be completely impenetrable.  We &lt;em&gt;do&lt;/em&gt; need a nice smooth incline to the learning curve, so that newcomers will not be turned away abruptly.  But in general, if you expect people to be somewhat smart and capable, they will be.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Re: @brixen’s &quot;Is Node Better&quot;</title>
		<link href="https://blog.izs.me/2012/04/re-brixens-is-node-better/"/>
		<updated>2012-04-09T17:27:00Z</updated>
		<id>https://blog.izs.me/2012/04/re-brixens-is-node-better/</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The talk is online at &lt;a href=&quot;http://blip.tv/jsconf/jsconf2012-brian-ford-6091521&quot;&gt;http://blip.tv/jsconf/jsconf2012-brian-ford-6091521&lt;/a&gt;.  If you weren&amp;rsquo;t there, you should go watch it before reading this.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;As usual, this year&amp;rsquo;s JSConf did not fail to deliver.  The parties, the
location, the talks, the food, it was incredible.  Chris Williams (and
the rest of the JSConf family) really put together an incredible event.&lt;/p&gt;
&lt;p&gt;By far, the most controversial talk was &lt;a href=&quot;http://brixen.io/&quot;&gt;Brian
Ford&amp;rsquo;s&lt;/a&gt; &amp;ldquo;Is Node.js
Better&amp;rdquo;.  I must admit, I walked in skeptical.  Brian Ford seems like a
bright and reasonable guy, but is clearly not a noder.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not going to transcribe what he said.  If you want that, read &lt;a href=&quot;http://speakerdeck.com/u/brixen/p/is-nodejs-better&quot;&gt;his
slides&lt;/a&gt; and watch
the video when it comes out.  This is my reaction and response, and says
more about me than it does about Brian.&lt;/p&gt;
&lt;p&gt;This is based mostly on my meat-brain memory, and some notes that
I scribbled.  It&amp;rsquo;s quite
possible that I may get some of the particulars wrong.  However, rather
than wait for the video to come out, I&amp;rsquo;d like to write this now, since
the errors in perception are themselves useful information.  If you
notice any such error, please let me know.&lt;/p&gt;
&lt;p&gt;Of course, there are limits to how deep a speaker can go into a topic in
a 30 minute talk, and those limits are much shallower than how deep I
can go in this blog post.  So, I&amp;rsquo;d like to frame this response not so
much as me-vs-Brian, but rather as just another public part of a longer
multi-format conversation.  My goal is not to produce more controversy
than is useful, but to perhaps produce enough to keep things interesting.&lt;/p&gt;
&lt;p&gt;Fair warning, this is a much longer post than most things I write.  If
you&amp;rsquo;re reading it, you&amp;rsquo;re probably interested mostly in the specific
node stuff at the end.  I&amp;rsquo;ve opted not to shorten it too drastically, because
the topics are in my opinion best served by a thorough exploration.&lt;/p&gt;
&lt;h2&gt;[citation needed]&lt;/h2&gt;
&lt;p&gt;A lot of what I&amp;rsquo;m talking about is discussed in much more rigor
elsewhere.  This blog post is a synthesis, not a research paper.  In
addition to &lt;a href=&quot;http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637&quot;&gt;Thinking Fast and
Slow&lt;/a&gt;
which Brian mentioned, these are about the most
approachable and informative discussions of the subjects that I&amp;rsquo;ve
found:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.amazon.com/Influence-Science-Practice-ePub-ebook/dp/B001CDZYVE&quot;&gt;Influence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.com/Predictably-Irrational-Revised-Expanded-ebook/dp/B002C949KE&quot;&gt;Predictably
Irrational&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lesswrong.com/lw/xy/the_fun_theory_sequence/&quot;&gt;Less Wrong: Fun Theory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.lesswrong.com/wiki/How_To_Actually_Change_Your_Mind&quot;&gt;Less Wrong: How to Actually Change Your
Mind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;The Right&lt;/h2&gt;
&lt;p&gt;Brian started his talk with a very insightful exploration of the nature
of controversy.  He talked about our fast brain and slow brain, and
guaranteed that reading &lt;a href=&quot;http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637&quot;&gt;Thinking Fast and
Slow&lt;/a&gt;
would change your life for the better, or he&amp;rsquo;d refund the cost of the book.&lt;/p&gt;
&lt;p&gt;In discussing the title of the talk, he made the point that every value
judgement implies a comparison, and invites controversy.  If presented
with a choice of apples and oranges, and you remark that &amp;ldquo;oranges are
healthy&amp;rdquo;, then the implication is that apples are not (or at least
&lt;em&gt;less&lt;/em&gt;) healthy.  So, the question &amp;ldquo;Is Node.js Better&amp;rdquo; raises the
question, &amp;ldquo;Better than what?&amp;rdquo;&lt;/p&gt;
&lt;h3&gt;Storming Brains&lt;/h3&gt;
&lt;p&gt;He went on to stress the importance of the scientific method, especially
in cases where groupthink can grab ahold of a popular intuition.  A
powerful example of this is the idea of brainstorming, which has come
under
&lt;a href=&quot;https://en.wikipedia.org/wiki/Brain-storming#Criticism&quot;&gt;criticism&lt;/a&gt; in
recent studies.&lt;/p&gt;
&lt;p&gt;Of course, another fascinating point worth mentioning (which was not covered
in Brian&amp;rsquo;s talk) is that the primary
source of the criticism is a survey of the results of 22 different
studies with different methodologies, done in different environments,
on different subjects.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m wondering what the differences are between the 4 where brainstorming
worked, and the 18 where it didn&amp;rsquo;t.  It&amp;rsquo;s especially worth noting that
18 instances of brainstorming&amp;rsquo;s failure vs 4 instances where it was
successful, does not imply that brainstorming is &amp;ldquo;usually&amp;rdquo; less
effective: only that it&amp;rsquo;s usually less effective in the studies
surveyed.  If you check the weather in Wisconsin 18 times in the summer,
and 4 times in the winter, you might conclude it&amp;rsquo;s usually tropical.&lt;/p&gt;
&lt;p&gt;This survey was reported several
times in the Journal of Personality and Social Psychology.  More
recently, these journal articles were summarized in the New Yorker and
other popular magazines.  To me, this smacks of &amp;ldquo;turns out&amp;rdquo;-ism.  It
&lt;em&gt;might&lt;/em&gt; be that the popular intuition about brainstorming is wrong.  It
might also be that it&amp;rsquo;s just incomplete.&lt;/p&gt;
&lt;h3&gt;Organization&lt;/h3&gt;
&lt;p&gt;Brian discussed the concept that organizations tend to perpetuate the
problems that they were designed to solve.  To my mind, this implies
that we ought not to try to solve our problems with organizations, but
rather, to solve them with chaos and disruption instead, wherever possible.
Since it is often not possible, and because &amp;ldquo;disruption&amp;rdquo; becomes just
another buzzword meaning a specific sort of organization, we should make
it our goal not to &amp;ldquo;solve problems&amp;rdquo;, but rather to find the problems
that are hidden by our current assumptions.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Solving&amp;rdquo; a problem, then,
becomes more an exploration than a &amp;ldquo;fix this thing&amp;rdquo; exercise.  An
exploratory expedition stops exploring when it returns with an answer.
Similarly, organizations that are designed to solve a specific problem
(as opposed to organizations that are designed to, say, throw parties or
make buttons)
should have their own destruction built into their core constitution.&lt;/p&gt;
&lt;p&gt;This principle of minimum institution has guided the choices we&amp;rsquo;ve made
in npm and in Node.js, technologically as well as socially.
It has shaped the community in subtle ways that
are difficult to recognize from the outside.  It&amp;rsquo;s a principle that is
close to my heart, and it&amp;rsquo;s why Node and I have gotten along so well.&lt;/p&gt;
&lt;h3&gt;Behavioral Science&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;Programming is a behavioral science.&amp;rdquo;  Couldn&amp;rsquo;t agree more.  However,
the transition from &amp;ldquo;behavioral science&amp;rdquo; to concurrency as a way to deal
with scarcity of compute resources felt a bit forced to me.  From that
point of view, everything is behavioral science, because everything we
do is done out of some human need (or else we wouldn&amp;rsquo;t do it.)&lt;/p&gt;
&lt;p&gt;I think it&amp;rsquo;s more precise to say that software development is behavioral
science, because every interface is a human interface, and humans are
even more unreasonable in their behavior than hard disk platters.&lt;/p&gt;
&lt;h2&gt;The Wrong&lt;/h2&gt;
&lt;p&gt;There were a few points where I believe that Brian simply was either
incorrect, misinformed, or perpetuating and reacting to
the very groupthink that he is ostensibly setting out to move past.&lt;/p&gt;
&lt;h3&gt;Justifications for Using Node.js&lt;/h3&gt;
&lt;p&gt;There were a few justifications for using Node that Brian listed:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;same language on the client and server&lt;/li&gt;
&lt;li&gt;there are many JavaScript programmers&lt;/li&gt;
&lt;li&gt;Node.js is more fun&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;These are all interesting justifications, though really, the
first two are rationalizations for the third.  For a talk that started
out by diving into the science of hedonics and decision theory (albeit
a somewhat Gladwell-esque popularization of it), I was a bit disappointed to
see that he didn&amp;rsquo;t go into more depth on this point.&lt;/p&gt;
&lt;p&gt;He said that users call themselves polyglots, so he rejects the claim
that a single language is actually relevant.  This is a highly specious
rebuttal.  I can stand, but I still often find it pleasant to sit.  It
doesn&amp;rsquo;t have to be &lt;em&gt;necessary&lt;/em&gt; in order to be valid
in this case, it only needs to be &lt;em&gt;comfortable&lt;/em&gt;.  If you&amp;rsquo;ve never
worked in a single-language stack, I highly recommend it.  Even though
you can&amp;rsquo;t share a lot of code in most situations, it does reduce the
cognitive load switching between different parts of the application.
This is the same reason that I&amp;rsquo;ve suggested using semicolons in
JavaScript programs that include other non-ASI languages: reducing
switching cost is reducing cost.&lt;/p&gt;
&lt;p&gt;Brian claimed that the &amp;ldquo;many JavaScript programmers&amp;rdquo; argument is
invalid, or at least, not very compelling. We ought to figure out the
ideal platform, he said, and then provide advocacy, education, and
resources to help people adopt it.  This also strikes me as a bit weird.
I&amp;rsquo;m not claiming that one should make all their technical
decisions based solely on popularity, of course, but it certainly is not
&lt;em&gt;irrelevant&lt;/em&gt;.  There&amp;rsquo;s something to be said for pragmatism.&lt;/p&gt;
&lt;p&gt;People don&amp;rsquo;t use Node.js because it&amp;rsquo;s the same language on the client
and server.  They use Node.js because that language is &lt;strong&gt;JavaScript&lt;/strong&gt;,
and JavaScript is fun.&lt;/p&gt;
&lt;p&gt;There aren&amp;rsquo;t more JavaScript programmers because of a lack of education
or advocacy in other languages.  JavaScript is fun (and unavoidable),
and so all programmers use it.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Node.js is more fun.&amp;rdquo;  This reminds Brian of Ruby a few years ago.
It&amp;rsquo;s important to remember, in the context of hedonics especially, that
&amp;ldquo;fun&amp;rdquo; is a highly subtle term worthy of study on its own.&lt;/p&gt;
&lt;p&gt;The problem with &amp;ldquo;Justifications for doing X&amp;rdquo; is that we do things
&lt;em&gt;primarily&lt;/em&gt; because of our emotions.  Even the action of &amp;ldquo;being rational&amp;rdquo;
is a thing that we choose to do because of a positive feeling attached
to our self-image as a &amp;ldquo;rational person who does smart things&amp;rdquo;, and the
assumption that we&amp;rsquo;ll get some pleasantly winful reward that feels good.
When we really want to do something irrational, we usually have no problem
reconciling the conflict with our preferred self-image as a rational
individual.&lt;/p&gt;
&lt;p&gt;Emotions are not just &lt;em&gt;part&lt;/em&gt; of motivation, they &lt;em&gt;are&lt;/em&gt; motivation.  If you
want to know why a person does something, don&amp;rsquo;t ask them to explain why
they do it; try instead to figure out how they feel.  It&amp;rsquo;s a much more
challenging question, but it leads to much more interesting information.&lt;/p&gt;
&lt;h3&gt;About the word &amp;ldquo;hype&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;When we have a good feeling about something (or even,
when we just make any choice at all, and don&amp;rsquo;t quite understand why),
our brain begins inventing rationalizations right away.  The
first one to pattern-match against &amp;ldquo;X because Y&amp;rdquo; is likely
accepted as the &amp;ldquo;reason&amp;rdquo; we&amp;rsquo;re doing something, regardless of how much
the truth of &amp;ldquo;Y&amp;rdquo; actually affects the likelihood of &amp;ldquo;X&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Try asking a compulsive gambler why he goes to the casino.  He might
tell you about his &amp;ldquo;strategy&amp;rdquo; for roulette.  Of course, this is
bullshit.  Roulette is a deterministically losing game; the more you
play, the more you lose.  Same with craps, slots, and
(unless you&amp;rsquo;re the best at the table) poker.  It&amp;rsquo;s the
&lt;strong&gt;feeling&lt;/strong&gt; of winning that he&amp;rsquo;s chasing, and the &lt;strong&gt;feeling&lt;/strong&gt; of the
chase.  If he was truly motivated by the desire for money,
there are obviously much better ways of getting it.&lt;/p&gt;
&lt;p&gt;When a person shares their justifications for doing something,
one of two things typically happens, in the &amp;ldquo;fast-brain&amp;rdquo;:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;You feel the same way about the thing.  The justification
pattern-matches against &amp;ldquo;I should X-that-I-do because Y&amp;rdquo;, and so
you accept the justification as rational, wise, and well-informed.
After all, you already do it, so you must agree.&lt;/li&gt;
&lt;li&gt;You feel differently about the thing.  Or, at least, it&amp;rsquo;s not a thing
you do, and so you have invented some justifications for not doing
it.  Your brain pattern-matches against &amp;ldquo;I should
X-that-is-stupid because of Y&amp;rdquo;, and so you reject the justification
as irrational, foolish, and ignorant.  After all, it&amp;rsquo;s stupid, so any
justification must be misguided.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you have some vegan friends, and some friends on the paleo diet, and
feel like watching some fireworks, ask them in each others company why
they eat the way that they do.  No matter how polite they try to be,
each will &lt;em&gt;subconsciously&lt;/em&gt; perceive the statements of the other as an
attack, and feel the need to defend their position.  If they are wise
enough to retreat from needing to &lt;em&gt;convince&lt;/em&gt; the other, they&amp;rsquo;ll most
likely at least make a big show about &amp;ldquo;agreeing to disagree&amp;rdquo;.
(Of course, if they&amp;rsquo;ve been on this diet for a while, they may have
enough practice at these sorts of situations to handle them quite
gracefully.)&lt;/p&gt;
&lt;p&gt;If X is not just &amp;ldquo;do this action&amp;rdquo;, but rather &amp;ldquo;feel this way&amp;rdquo;, and you
do not already feel that way, and the justification is not enough to
incite this feeling (as justifications almost never are),
then we label it &amp;ldquo;hype&amp;rdquo;, and it &lt;em&gt;raises&lt;/em&gt; the bar
that we now require to take the thing seriously next time.&lt;/p&gt;
&lt;p&gt;Like so many cognitive
shortcuts, this is a really good move much of the time.  After all,
people&amp;rsquo;s justifications are usually self-delusions as often as
well-informed and rational reasons for doing or thinking anything.  It
makes perfect sense to be extra skeptical when we are at the risk of
being influenced by it.  If we have to be extra skeptical over and over
again, we start to pattern match &amp;ldquo;X is good&amp;rdquo; into the hype category.
Suddenly, it&amp;rsquo;s not just that veganism or paleo is not for me, it&amp;rsquo;s that
the diet is a mark of a foolish &lt;em&gt;person&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The net result is that anyone saying anything positive is likely to be
labelled a &amp;ldquo;fanboi&amp;rdquo;, and their statement called &amp;ldquo;hype&amp;rdquo;, no matter what
they say.&lt;/strong&gt;  This is a dangerous feedback loop that leads technology
communities to stagnation, bitterness, and chest-beating.&lt;/p&gt;
&lt;h3&gt;Yo Dawg! I heard you like cognitive distortions, so I distorted your cognition so you can distort while you cognit!&lt;/h3&gt;
&lt;p&gt;The mind is such a wonderful thing!  Mistakes in the mistake
detection lead to potentially valid statements being
discounted because they are presented &lt;em&gt;along with&lt;/em&gt; invalid justifications,
or presented &lt;em&gt;by&lt;/em&gt; a low-status speaker, or are &lt;em&gt;in conflict with&lt;/em&gt;
already-held beliefs, &lt;em&gt;especially&lt;/em&gt; when those already-held beliefs are a
part of our Tribal Story.&lt;/p&gt;
&lt;p&gt;Even worse, you have situations where we see a few &amp;ldquo;X is good because Y&amp;rdquo;
justifications, deem them false, and then subconsciously
internalize the fact that we
gain status in our tribe by applying the &amp;ldquo;hype&amp;rdquo; label and
discounting it, resulting in spiraling down into the toilet.
Politicians and marketers have made a science of getting us to elevate
arbitrary ideas into this Tribal Story, blinding us to any disagreement.&lt;/p&gt;
&lt;p&gt;Birds fly.  Fish swim.  Humans make mistakes.  It is our Super Power.
We all do this.&lt;/p&gt;
&lt;p&gt;We almost never change our minds.  We are influenced in ways we are
incapable of detecting (and will deny!)  We are motivated by the behavior
of people who look like us superficially, and believe (at least temporarily)
literally everything we hear.&lt;/p&gt;
&lt;p&gt;There is virtually no limit to the ability
of the human mind to find new and creative ways to get out of touch with
reality.  I don&amp;rsquo;t want to give the impression that I (or anyone) could
delineate all the many subtleties of human cognitive error.  Every one
is so rich and complicated.  Even this discussion of
pattern-matching &amp;ldquo;X-because-Y&amp;rdquo; is a serious oversimplification.&lt;/p&gt;
&lt;p&gt;In the ancestral environment of adaptation, disagreement was often
fatal.  We&amp;rsquo;ve gotten a bit better at intelligent disagreement, but we
still try unconsciously to come to an all-or-nothing agreement within
our own heads, annihilating any &amp;ldquo;bad&amp;rdquo; idea entirely, and shrowding any
&amp;ldquo;good&amp;rdquo; idea in a halo.&lt;/p&gt;
&lt;p&gt;Whenever tempted to call something &amp;ldquo;hype&amp;rdquo; (or, even, &amp;ldquo;anti-hype&amp;rdquo;),
I try to remember to ask the following questions:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Is the provided justification &lt;em&gt;evidence&lt;/em&gt;, &lt;em&gt;data&lt;/em&gt;, or an expression of
a &lt;em&gt;feeling&lt;/em&gt;?  What is the speaker&amp;rsquo;s experience of the thing being
discussed?  If it&amp;rsquo;s evidence, is it reproducible?  If it&amp;rsquo;s data, is
it relevant?&lt;/li&gt;
&lt;li&gt;How do I feel about the subject?  How did I feel about it
yesterday?  What are my justifications?&lt;/li&gt;
&lt;li&gt;Am I tempted to dismiss this?  Is it because of bad evidence,
a speaker who holds low status in my tribe,
or because I disagree with the feeling?  If it&amp;rsquo;s a lack of evidence,
what evidence &lt;em&gt;would&lt;/em&gt; make me feel the same way?  If it&amp;rsquo;s a feeling I
don&amp;rsquo;t share, what other things &lt;em&gt;do&lt;/em&gt; I feel that way about?  If it&amp;rsquo;s a
low-status speaker, how would I feel if &lt;code&gt;&amp;lt;person I respect&amp;gt;&lt;/code&gt;
was saying it?&lt;/li&gt;
&lt;li&gt;Am I tempted to accept this?  Is it because it agrees with something
I already think?  What new information does it actually contain?&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This is part of the reason why I try to criticise Node.js
and npm as harshly and often and publicly as I can.  I do think that
they&amp;rsquo;re tremendously useful tools&amp;hellip; but how can you believe me if I
tell you that they&amp;rsquo;re perfect, when I clearly know better?  And if you
can&amp;rsquo;t believe me when I talk about Node.js, then what good am I?&lt;/p&gt;
&lt;h3&gt;Better justifications to use Node.js&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;The IO paradigm is a good fit for your problem, and V8 is fast enough.
This is the case for a lot of web software, but definitely
not every program.  Node.js really does make
it pretty easy to write things like IRC bots and crawlers and
websites, and is probably not ideal for many compute-intensive
applications.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s fun to write programs in this fashion.  There are time-honored
traditions of thinking of data as streams of bytes, and JavaScript is
a relatively simple and expressive language for doing this in
creative ways.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s fun to be a part of making a popular platform better.  The
community is active and still pretty friendly, and that feels good to
be a part of.  Newcomers turn into regulars and then celebrities very
swiftly.  All it takes is a bit of persistence and enthusiasm.&lt;/li&gt;
&lt;li&gt;You prefer the simpler approach to asynchronous programming, using a
callback/observer model (or actor model for child processes), rather
than something like green threads or coroutines that &amp;ldquo;look&amp;rdquo; synchronous.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If you&amp;rsquo;re not writing systems that are well served by nonblocking IO, or
an event loop/observer pattern approach, or if you don&amp;rsquo;t think it&amp;rsquo;s fun
to make programs this way, then you probably shouldn&amp;rsquo;t use it.&lt;/p&gt;
&lt;p&gt;But, even that aversion is worth looking carefully at that, no matter what
you decide.  V8 is an extremely fast virtual machine, and
these days, a &lt;em&gt;lot&lt;/em&gt; of programs are IO-bound.&lt;/p&gt;
&lt;p&gt;And even if it&amp;rsquo;s not, we tend to focus on &amp;ldquo;the right tool for the job&amp;rdquo;,
at the exclusion of &amp;ldquo;an awesome tool for the job&amp;rdquo;.  The opposite of
&amp;ldquo;right&amp;rdquo; is &amp;ldquo;wrong&amp;rdquo;, but the opposite of &amp;ldquo;awesome&amp;rdquo; is &amp;ldquo;boring&amp;rdquo;, which is
sometimes worse, especially if you&amp;rsquo;re trying to maximize creativity.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure how much research Brian did when he went out looking for
justifications for using Node.js, but I don&amp;rsquo;t think he really got at
what actually is driving so many people interested in this thing.&lt;/p&gt;
&lt;h2&gt;Controversy&lt;/h2&gt;
&lt;p&gt;So far, I felt like the setup was nice, but the criticism itself was
kind of lackluster.  We&amp;rsquo;ve heard it before.  Node is hyped.  The
single-language stack isn&amp;rsquo;t all it&amp;rsquo;s cracked up to be.  Etc.  I was
eager for the meat.&lt;/p&gt;
&lt;p&gt;No sooner had I thought this, than the next slide said:&lt;/p&gt;
&lt;h3&gt;Node.js rejects reality&lt;/h3&gt;
&lt;p&gt;Aha!  There it is.  That primal &amp;ldquo;under attack&amp;rdquo; feeling, the visceral
tension in my lower abdomen, the warmth on my face.&lt;/p&gt;
&lt;p&gt;When I was younger (and still today when I&amp;rsquo;m not at my best, I must
admit) the temptation was to hit back, or dismiss the message.  Fight or
flight.  I think Brian probably
lost a bunch of the audience with this slide.  It sure did get my attention.&lt;/p&gt;
&lt;p&gt;These days, when I feel that reaction, I try to leverage the added
awareness that comes with the adrenaline, to be on the lookout for
whatever comes next, because it is full of valuable information,
especially if it is highly disagreeable.  Beware of the moments
when rationality tries to slip away: those are the times you most need
it.&lt;/p&gt;
&lt;p&gt;As I am somewhat dogmatic about endeavoring to
reject reality less, I was very excited to hear what we might be
missing.&lt;/p&gt;
&lt;p&gt;Sadly, the justification for the &amp;ldquo;ignores reality&amp;rdquo; claim was not as
pointed as I would have liked.  It amounted to:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;JavaScript is a garbage collected language.  Garbage collection
pretends that you have infinite memory, and you don&amp;rsquo;t.&lt;/li&gt;
&lt;li&gt;IO always &amp;ldquo;actually&amp;rdquo; blocks somewhere, so the comparison between
events and blocking is not valid, since it has to block somewhere.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;For sure, garbage collection is tricky, and the interaction between
Node.js and the V8 garbage collector could probably be improved.  But to
call it a lie is a bit silly.  Garbage collection doesn&amp;rsquo;t pretend that
you have infinite memory; that&amp;rsquo;s virtual memory.  Garbage collection
pretends that you don&amp;rsquo;t have to &lt;code&gt;free&lt;/code&gt; memory in order for it to be
re-used.&lt;/p&gt;
&lt;p&gt;One of the biggest pain
points of non-managed languages is having to explicitly free memory.
The biggest pain point in managed languages is having to deal with a
garbage collector.  There may be some sort of approach to memory
management that isn&amp;rsquo;t collected or manual, but better than either.  If
so, I don&amp;rsquo;t know of it, and it doesn&amp;rsquo;t matter anyway, because &lt;strong&gt;that is
a language design problem, and Node.js is not about designing a
language&lt;/strong&gt;.  If you have a beef with garbage collection, take it up with
V8 and TC-39.&lt;/p&gt;
&lt;p&gt;As for node being single-threaded, and IO always blocking, that&amp;rsquo;s kind
of confusing to me.  Of course, you don&amp;rsquo;t
actually have application-level &lt;em&gt;processing&lt;/em&gt; of IO in parallel,
since there&amp;rsquo;s only a single &lt;em&gt;JavaScript&lt;/em&gt; thread, but IO definitely is
performed in parallel to the degree that the machine can provide,
and &amp;ldquo;nonblocking&amp;rdquo; is the technical term for the
type of IO that node does on sockets.  (Nonblocking IO on files is
simulated using threads.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d really like more details about what exactly Brian
was referring to on this point about IO &amp;ldquo;always blocking somewhere&amp;rdquo; and
in what way Node.js rejects that reality.&lt;/p&gt;
&lt;h3&gt;entire ecosystem of tools and libraries must be built&lt;/h3&gt;
&lt;p&gt;This was a valid concern in 2010.  I said at the time that it
would not be an issue in a few years.  It&amp;rsquo;s not an issue today.&lt;/p&gt;
&lt;p&gt;To an extent, this was by design.  A large part of
Ryan&amp;rsquo;s reason for choosing
JavaScript was that it is the only popular interpreted language with a
suitably powerful VM and no existing IO paradigm.  Additionally,
to the extent that JavaScript &lt;em&gt;does&lt;/em&gt; have a tradition of IO, it&amp;rsquo;s
XHR and the DOM, which are event-based and asynchronous.&lt;/p&gt;
&lt;p&gt;Since the birth of Node.js, a lot of libraries have been built.  There
are 8500 modules on
npm.  There are bindings to every popular database, sophisticated test
frameworks, template libraries, HTTP routers, and so on.  It&amp;rsquo;s easy and
fun to write modules, and so people have written modules.  This approach
is remarkably valuable.&lt;/p&gt;
&lt;p&gt;That being said, module discovery and visibility leaves a lot to be
desired.  npm has grown much faster than Rubyforge or PyPI, much earlier
in the life of Node, and so we have hit these problems earlier.&lt;/p&gt;
&lt;p&gt;Regarding tools, things are coming along quite nicely.&lt;/p&gt;
&lt;p&gt;Post-mortem debugging with MDB
just landed in the master branch, and will be in node 0.7.8.  (Node v0.6
has had this for a while already.)  Mad props to Dave Pacheco for that.
Seriously, if you&amp;rsquo;ve never seen it in action, it&amp;rsquo;s amazing.  In all my
years using PHP, I can&amp;rsquo;t even count the number of times I&amp;rsquo;d desparately
wanted this sort of thing.  The zend IDE had some pretty good debugging
capabilities, but Dap&amp;rsquo;s jsstack stuff is truly magical.  Call me a
fanboi, I don&amp;rsquo;t care: believe the hype.  It&amp;rsquo;s fantastic.
The only sad
point is that it&amp;rsquo;s only available in SmartOS, but it&amp;rsquo;s not exactly
surprising that the OS made by Joyent has some special love for Node.js
;)&lt;/p&gt;
&lt;p&gt;The DTrace support in Node is also impressive.  Again, not
surprising, given the fact that so many DTrace heavyweights work at
Joyent, but the go-to DTrace library for node is not written by a Joyent
employee.  It&amp;rsquo;s Chris Andrews&amp;rsquo;
&lt;a href=&quot;https://github.com/chrisa/node-dtrace-provider&quot;&gt;node-dtrace-provider&lt;/a&gt;
module.  Anarchy &amp;gt; curation, yet again.&lt;/p&gt;
&lt;p&gt;The depth and breadth of information that can be provided by
DTrace, and the great work by Brendan Gregg and others at Joyent to
actually massage that data into a format that humans can easily consume,
is absolutely phenomenal.&lt;/p&gt;
&lt;p&gt;Similar work on run-time analytics and post-mortem debugging is underway
at Microsoft, I&amp;rsquo;m told.  Windows users: stay tuned.&lt;/p&gt;
&lt;p&gt;As a long-time text-editor-and-shell guy
(moved from TextMate to vim a while ago), I don&amp;rsquo;t really
follow the IDE stuff too closely.  But, Microsoft,
Cloud9, and many others are iterating furiously in this space.
Many of them are leveraging their existing work on other JavaScript
tooling, so it&amp;rsquo;s moving quite fast.&lt;/p&gt;
&lt;p&gt;The built-in node debugger client is more my style, but node-inspector
hooks into the Chrome debug tools, which imo blow away most visual
debuggers available.  (They even have heap analysis tools!)  There are
also plugins for Eclipse to provide stepwise debugging and analysis, and
a lot of existing Eclipse users are more at home there.&lt;/p&gt;
&lt;p&gt;So, it&amp;rsquo;s not so much that the ecosystem of tools &amp;ldquo;must
be built&amp;rdquo;, as much as that it is being built, and leverages the existing
JavaScript, V8, and system tools that already existed before Node showed
up.  In many ways, Node.js provides one of the first server-side systems
that can fully take advantage of these things in a mostly cross-platform
fashion.&lt;/p&gt;
&lt;h3&gt;Node.js will reproduce the last 15 years of ruby mistakes&lt;/h3&gt;
&lt;p&gt;Bold claim.  One that I was excited to see ample justification for.  What
are the last 15 years of Ruby mistakes?
How can we avoid making those
same mistakes?  How did ruby fix them?  What can we learn from ruby&amp;rsquo;s
experience?&lt;/p&gt;
&lt;p&gt;Brian&amp;rsquo;s main justification of this point was that the
cluster module is a repeat of Phusion Passenger.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not entirely
clear whether he was referring to TJ&amp;rsquo;s &amp;ldquo;cluster&amp;rdquo; package, or the
built-in &amp;ldquo;cluster&amp;rdquo; module in v0.6, or the much improved &amp;ldquo;cluster&amp;rdquo;
module in node v0.7.  None of them are a particularly close reproduction
of passenger, though I suppose that TJ&amp;rsquo;s is probably the closest.  But
it&amp;rsquo;s not as if any of these are an Apache plugin, or tied to a specific
web framework.  The analogy is a stretch, to say the least.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s even less clear is how Phusion Passenger, a program written in
2009, and widely recognized as the most effective and popular way to
deploy the most effective and popular Ruby application framework, can
possibly represent a &amp;ldquo;mistake&amp;rdquo;, let alone 15 years of mistakes.&lt;/p&gt;
&lt;p&gt;I can only conclude that I do not understand what he was trying to say,
because otherwise, I cannot make sense of it.
Maybe there was something else called &amp;ldquo;passenger&amp;rdquo; in the Ruby world once
upon a time, which did kernel load balancing, IPC, and not much else.
Perhaps this &amp;ldquo;passenger&amp;rdquo; was deemed a mistake, and is now gone.&lt;/p&gt;
&lt;p&gt;Show me a ruby mistake we&amp;rsquo;re reproducing, and I&amp;rsquo;ll make sure it gets
fixed.&lt;/p&gt;
&lt;h3&gt;process concurrency is doomed&lt;/h3&gt;
&lt;p&gt;Brian declared that process concurrency will never be able to scale
adequately.  I cannot accept this without data.  Instead of data, he
gave some hand-wavey assertions about garbage collection getting out of
control.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll assume that he was running low on time, and perhaps had to cut out
the histograms and demonstrations.  So let&amp;rsquo;s leave that question open.&lt;/p&gt;
&lt;p&gt;Of course, spawning one process per request, or one process per IO
or timer, is completely unreasonable.
That&amp;rsquo;s why CGI was not adequate, and no one runs a real web platform
on bash.  However, running a single process
per core, and having multiple HTTP servers share the open socket,
and then using an event loop for IO and timers, is remarkably effective.&lt;/p&gt;
&lt;p&gt;If there is doom on the horizon, don&amp;rsquo;t hint about it.  Show me the
evidence.&lt;/p&gt;
&lt;h3&gt;symmetric errors, chain of evidence&lt;/h3&gt;
&lt;p&gt;Finally!  Something that &lt;em&gt;genuinely sucks a &lt;strong&gt;lot&lt;/strong&gt; in Node.js!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Domains is on the list for v0.8.  I don&amp;rsquo;t know that the first pass at
domains will be the final and ultimate fix for this, but it&amp;rsquo;ll be
something to iterate on.  This will make errors much more symmetric, and
provide a much clearer chain of evidence.&lt;/p&gt;
&lt;p&gt;The chain of evidence is also much improved by having post-mortem
debugging of production systems.  If you haven&amp;rsquo;t yet, check out Bryan
Cantrill&amp;rsquo;s talk &lt;a href=&quot;http://www.infoq.com/presentations/Debugging-Production-Systems&quot;&gt;And It All Went Horribly
Wrong&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So, this is important to me, it&amp;rsquo;s important to Node.js users, it&amp;rsquo;s
important to the various companies paying the salaries of the node core
team.  It&amp;rsquo;s reasonable to trust it&amp;rsquo;s high priority.&lt;/p&gt;
&lt;h2&gt;Problems I Wish He&amp;rsquo;d Mentioned&lt;/h2&gt;
&lt;p&gt;If you want to know what&amp;rsquo;s wrong with node, ask a node-core developer.&lt;/p&gt;
&lt;p&gt;These are some of the things that are really problematic, some of them
in a pretty deep way.  Of course, these are the things I know about,
so they&amp;rsquo;re things that we&amp;rsquo;re working on for future releases of Node.js.
If there are things that you think belong on this list, let us know.&lt;/p&gt;
&lt;p&gt;Some of them are very hard,
and will require iteration.  Some of them are pretty straightforward,
and will be addressed soon.  Some of them are not super difficult, but
just lower priority, and won&amp;rsquo;t get addressed for a while.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Debugging.
See above.  It&amp;rsquo;s our top issue, and it&amp;rsquo;s coming along.  It was
mentioned, but less strongly than I would have liked to see.&lt;/li&gt;
&lt;li&gt;It is very hard to get visibility into which pending actions are
keeping the event loop running.  This is a source of subtle errors.
The libuv refcount behavior is in the process of being cleaned up,
and v0.8 will include a mechanism for seeing exactly which handles
are in an open state.&lt;/li&gt;
&lt;li&gt;The Stream API, which is by all accounts the core use-case for node,
is remarkably inconsistent and hard to extend.  It&amp;rsquo;s a lot nicer in
v0.4 and v0.6 than it was in v0.2 and before, but it&amp;rsquo;s got a ways to
go yet.  We paper over a lot of the inconsistency in the
Stream.pipe() method, but it&amp;rsquo;s a source of many subtle issues.  Node
v0.9 will focus primarily on this issue.&lt;/li&gt;
&lt;li&gt;It&amp;rsquo;s hard to find good node modules.  Reducing the barrier to entry
for node package creation has made it a lot easier for more people to
take advantage of.  However, when you solve a problem, you open the
door for new ones that were hiding behind it.  We&amp;rsquo;ve grown faster
than most platforms, which means that we&amp;rsquo;re encountering the
discovery issues sooner.  This will be addressed in the coming months
with a new npmjs.org website.&lt;/li&gt;
&lt;li&gt;The Node.js project lacks a consistent and visible continuous
integration system, so performance degradations can occur silently.&lt;/li&gt;
&lt;li&gt;Using binary modules is overly difficult, and requires a build
toolchain on the install target.  Work is underway to improve this,
but it&amp;rsquo;s tricky.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;And of course, just the fact that Node.js is very young, and has some
bugs.  It&amp;rsquo;ll no doubt get more, as we continue to work on it, but the
goal is to change things in ways that make these bugs easier to spot and
easier to fix.&lt;/p&gt;
&lt;p&gt;It is not sufficient for Node.js to be better than any other platform.
It must be so good that it permanently raises expectations in this
space.  It must continue to impress and delight users.  There is so much
work yet to do, it&amp;rsquo;s mind boggling.&lt;/p&gt;
&lt;p&gt;Laurels are not very comfortable to rest on.&lt;/p&gt;
&lt;h2&gt;And finally&amp;hellip;&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;ve gotten this far, congratulations.  I try to keep blog posts
much shorter than this, but there was a lot to respond to here, and
touched on several issues that are very close to my interests.&lt;/p&gt;
&lt;p&gt;Brian&amp;rsquo;s talk was fascinating.  Even the mistakes were
interesting.  When the video comes out, I highly recommend watching it.
Go get &lt;a href=&quot;http://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374275637/&quot;&gt;Thinking, Fast and
Slow&lt;/a&gt;.
I haven&amp;rsquo;t read it, but I&amp;rsquo;m familiar with some of
Kahneman&amp;rsquo;s other work in behavioral economics, and I suspect it&amp;rsquo;s
every bit as fantastic as Brian claims.&lt;/p&gt;
&lt;p&gt;I got a chance to talk to Brian after the talk, and so hopefully a lot
of these points (at least, the specific technical details of what sucks
in Node.js and what we&amp;rsquo;re doing about it) doesn&amp;rsquo;t come as a surprise to
him.  He seems like a genuinely nice and thoughtful person.&lt;/p&gt;
&lt;p&gt;For a talk that started off with a request that we use science and
make conflict useful, I was disappointed that his criticisms of Node
were lacking in scientific rigor or constructive calls to action.  But
as I mentioned earlier, it&amp;rsquo;s hard to fit it all into a 30 minute talk.
I hope this conversation will not end here.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re all humans.  We all think wrong.  We all love, and worry, and try
to do interesting things.  We all fail, and feel shitty, and try
to explain why we&amp;rsquo;re not a bad person for it.  We
all succeed, and want to brag about it.  We tell ourselves stories, and
sometimes those stories are true, but usually they&amp;rsquo;re only just true enough
to get by.&lt;/p&gt;
&lt;p&gt;Try to remember this, the next time you&amp;rsquo;re telling someone how awesome
(or over-hyped)
Node.js is, or any other thing you have feelings about,
and they suggest that you may be a brainwashed idiot.  They are
just trying to protect something, as are you, and in the course of this
protection, our instincts will cause us to fail.&lt;/p&gt;
&lt;p&gt;Show that monkey brain who&amp;rsquo;s boss!
Slow down, breathe, and try to remember that this person
who disagrees with you is not some big dumb idiot, but most likely a very
thoughtful person who&amp;rsquo;s trying to do their best to create truth and beauty
in the world.  If you don&amp;rsquo;t learn what motivates them, how can you ever
join forces?&lt;/p&gt;
&lt;div class=&quot;small&quot;&gt;Many thanks to Mikeal Rogers, Bryan Cantrill, Marco Rogers for reading early drafts of this post and providing feedback.&lt;/div&gt;
</content>
	</entry>
	
	<entry>
		<title>Stack</title>
		<link href="https://blog.izs.me/2012/04/stack/"/>
		<updated>2012-04-08T07:04:00Z</updated>
		<id>https://blog.izs.me/2012/04/stack/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;
A stack of things, is right now on my floor,
And the stack&amp;rsquo;s depth currently measures four.
At the bottom, a table I bought at a local thrift store,
On it a pack for computer, and more
On that, a t-shirt, my girlfriend today wore
And on that, a cat, who is a plasticovore,
Next to him, are some flowers, but they don&amp;rsquo;t rhyme.
&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/04/merlin-inspecting-the-worlds-most-derp-derp/"/>
		<updated>2012-04-08T07:02:52Z</updated>
		<id>https://blog.izs.me/2012/04/merlin-inspecting-the-worlds-most-derp-derp/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/20689226702/inspecting-the-worlds-most-derp-derp-subway-map&quot; class=&quot;tumblr_blog&quot;&gt;merlin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;h1&gt;Inspecting the World’s Most Derp-Derp Subway Map&lt;/h1&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Sexism, Words, and Marketing</title>
		<link href="https://blog.izs.me/2012/03/sexism-words-and-marketing/"/>
		<updated>2012-03-23T16:40:00Z</updated>
		<id>https://blog.izs.me/2012/03/sexism-words-and-marketing/</id>
		<content type="html">&lt;p&gt;Go read this: &lt;a href=&quot;http://storify.com/charlesarthur/oh-hai-sexism&quot;&gt;Oh Hai Sexism&lt;/a&gt;.  (Aside: I&amp;rsquo;m finding that more and more of the news stories I really like are on &lt;a href=&quot;http://storify.com/&quot;&gt;Storify&lt;/a&gt;, which I first heard about as one of the earliest Node.js adopters.  Nice to see them doing well.)&lt;/p&gt;
&lt;p&gt;Some of the confusion on the part of bystanders to this flame war was, &amp;ldquo;So, there&amp;rsquo;s a model being objectified in an underwear commercial.  What&amp;rsquo;s the big deal?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;However, a &lt;em&gt;very&lt;/em&gt; important point here, I think, is that this video was not being used &lt;em&gt;solely&lt;/em&gt; to sell underwear, and that&amp;rsquo;s where it started going wrong.&lt;/p&gt;
&lt;p&gt;Design Like Whoa is a clothing company.  Clothing companies use models to sell clothing.  Models are chosen for their looks, and they are &lt;em&gt;literally&lt;/em&gt; objectified, as part of their job.  They&amp;rsquo;re also consenting, and reasonably well paid.  This method of selling clothes is used by just about every single clothing company, because it works.  I don&amp;rsquo;t think there&amp;rsquo;s a single thing wrong with the video as such, qua underwear commercial, or at least, nothing that isn&amp;rsquo;t &lt;em&gt;also&lt;/em&gt; wrong with the whole clothing industry and our irrational ape-brained methods of choosing clothing, but I don&amp;rsquo;t think DLW can be expected to change that.  It&amp;rsquo;s actually relatively un-sexy, compared to other underwear commercials.  &lt;a href=&quot;http://www.youtube.com/results?search_query=victoria%27s+secret+commercial&quot;&gt;Quid veritas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add to this that Design Like Whoa markets their clothing by putting startup logos on them.  Not a terrible plan, I mean, if it moves clothes, why not, right?  People are passionate about the websites they use.  Lots of companies put various logos on things to sell them by associating with the brand.  &lt;del&gt;Allegedly, Geeklist gave DLW permission to use their logo, and then DLW made the video without Geeklist&amp;rsquo;s involvement, and just happened to choose their branded apparel in the commercial.  I&amp;rsquo;m willing to give them the benefit of the doubt there.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;ins id=&quot;edit-2012-03-23&quot;&gt;Edit: Geeklist was &amp;ldquo;involved&amp;rdquo; with the making of the video, somewhere between &amp;ldquo;It was all their idea&amp;rdquo; and &amp;ldquo;They asked for photos, and got a video.&amp;rdquo;  It&amp;rsquo;s not very relevant to the points I&amp;rsquo;m trying to make here, so I&amp;rsquo;m not going to go into it any further.  &lt;a href=&quot;http://designlikewhoa.tumblr.com/post/19791735980/response-to-geeklists-letter-after-reading&quot;&gt;Gemma says this.&lt;/a&gt;  Christian disputes (via private email) some of what she wrote, but not all.  There&amp;rsquo;s definitely some room for interpretation.  I&amp;rsquo;m not really interested in the finer points of how this started, as much as where it ended up.  Bottom line: no one intended to offend anyone at the start, but that doesn&amp;rsquo;t actually matter in the end.&lt;/ins&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;The problem, however, came about when Geeklist decided to use a women&amp;rsquo;s underwear commercial as a marketing technique for their own product, which is a social networking website for people in technology.&lt;/p&gt;
&lt;p&gt;This was the first line crossed.  I hadn&amp;rsquo;t seen that marketing, since I never use geeklist and don&amp;rsquo;t really care about their product except for the fact that it&amp;rsquo;s written in node.  (That&amp;rsquo;s not intended as a slight against Geeklist.  It seems like a fine enough product.  I am just set in my ways.  I use twitter and github and IRC, and that&amp;rsquo;s about the extent of my social networking.  I don&amp;rsquo;t really use Facebook much, either.)  Using a model in underwear to sell underwear is fine.  Using a model in underwear to sell an inclusive social network for technologists?  Sends the wrong message.&lt;/p&gt;
&lt;p&gt;So far, in my book, no major harm done.  Doing interesting things means taking risks, and taking risks means sometimes being wrong.  It&amp;rsquo;s important to give people permission to make mistakes, or else nothing interesting happens.  &lt;strong&gt;The trade-off of that permission is the trust that they&amp;rsquo;ll act appropriately when their mistakes are made known to them.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/harthvader/status/182982567220363265&quot;&gt;According to Heather Arthur&lt;/a&gt;, at least one private complaint about the video was ignored.&lt;/p&gt;
&lt;p&gt;Heather&amp;rsquo;s email should have been taken as a red flag.  Heather is exactly the sort of person that geeklist &lt;em&gt;should&lt;/em&gt; be trying to target: She&amp;rsquo;s young, prolific, and very actively involved with several happening developer communities.  She is a paradigm example of Geeklist&amp;rsquo;s money demographic.  Any principles aside, if she felt put off by their marketing, then the marketing is broken, period.&lt;/p&gt;
&lt;p&gt;Shanley Kane complained about it publicly on Twitter.  Again, I can&amp;rsquo;t really think of anyone more fitting the ideal Geeklist target demographic.  A product manager and marketeer at Basho (maker of Riak, one of the most relevant nosql databases), and also a Ruby coder and technical hobbyist.  Someone who goes to conferences and &lt;strong&gt;networks with technologists&lt;/strong&gt; as her &lt;strong&gt;job&lt;/strong&gt;.  Geeklist should be happy to get &lt;em&gt;any&lt;/em&gt; feedback from her, and should take it extremely seriously if she&amp;rsquo;s put off by their marketing.  Anything short of a brick through the window should have been accepted gratefully.&lt;/p&gt;
&lt;p&gt;This was an opportunity.  There is rarely a case where the right answer is so obvious.  Christian could have replied, &amp;ldquo;Good point. I&amp;rsquo;m on it. We don&amp;rsquo;t own the video, I&amp;rsquo;ll talk to the person who does. No offense was intended. Thanks.&amp;rdquo; and actually walked away from this event perhaps not a hero, but certainly not a villain.&lt;/p&gt;
&lt;p&gt;Instead, he got defensive, and took offense at Shanley&amp;rsquo;s &amp;ldquo;insult&amp;rdquo; to his &amp;ldquo;brand&amp;rdquo;.  News flash: you don&amp;rsquo;t get to have a brand, or a project, or a company, or any public anything, without people insulting it.  People say &amp;ldquo;fuck&amp;rdquo; sometimes.  That&amp;rsquo;s just how it works.&lt;/p&gt;
&lt;p&gt;From there, it spiraled WAY out of control.  However much Shanley&amp;rsquo;s &amp;ldquo;cursing&amp;rdquo; may have offended geeklist&amp;rsquo;s brand, Reuben&amp;rsquo;s and Christian&amp;rsquo;s response to it was much worse.  The veiled threats about talking to Shanley&amp;rsquo;s employer were just so far beyond what is sensible or appropriate, I am at a loss for words.&lt;/p&gt;
&lt;p&gt;There was &lt;a href=&quot;http://gklst.tumblr.com/post/19734620901/geeklist-and-a-public-apology&quot;&gt;an apology&lt;/a&gt;, and the video is now gone, which I guess is good.  But my two worst nopology pet peeves are in there: &amp;ldquo;We apologize &lt;i&gt;&lt;b&gt;if&lt;/b&gt;&lt;/i&gt;&amp;hellip;&amp;rdquo;, and justifications for the behavior that they&amp;rsquo;re ostensibly apologizing about.  Don&amp;rsquo;t tell me why I &lt;strong&gt;shouldn&amp;rsquo;t&lt;/strong&gt; be offended, and then apologize &lt;strong&gt;if&lt;/strong&gt; it was offensive.  Tell me why I &lt;strong&gt;should&lt;/strong&gt; be offended, and then apologize &lt;strong&gt;because&lt;/strong&gt; it was offensive.&lt;/p&gt;
&lt;p&gt;As &lt;a href=&quot;https://twitter.com/mikeal/status/182984512261734400&quot;&gt;Mikeal put it&lt;/a&gt;, &amp;ldquo;apologies that don&amp;rsquo;t contain the words &amp;quot;we fucked up&amp;rdquo; aren&amp;rsquo;t usually genuine.&amp;ldquo;&lt;/p&gt;
&lt;p&gt;Put aside your immediate feelings and keep your eye on your choices and their likely results.  This isn&amp;rsquo;t just &lt;em&gt;part&lt;/em&gt; of being a grown up, it&amp;rsquo;s basically the &lt;em&gt;definition&lt;/em&gt; of being a grown up.  People won&amp;rsquo;t remember that you valiantly defended your brand from the vicious assault of an outraged feminist.  They&amp;rsquo;ll remember that you insulted and intimidated the exact sort of person you&amp;rsquo;re claiming to cater to, and you&amp;rsquo;ll lose their trust.&lt;/p&gt;
&lt;p&gt;Can we please go just a few weeks without some insecure startup founder pissing off a huge chunk of the technology community with macho antics?  And, really?  I don&amp;rsquo;t care if you actually are a beer-chugging juggy-hooting misogynistic bro douchebag in the privacy of your own home.  Just please keep it out of twitter, the work place, conferences, and other public forums.  Just temporarily, in public, &lt;em&gt;pretend&lt;/em&gt; to be grown ups.  Think about your words, and choose the ones most likely the have the effects you desire.&lt;/p&gt;
&lt;p&gt;There are smart talented women going into applied science and fucking &lt;strong&gt;academia&lt;/strong&gt; because of you asshats.  Clean up your act.  We need more good programmers, and you&amp;rsquo;re scaring off half of them.&lt;/p&gt;
&lt;h2 id=&quot;addendum-2012-03-23&quot;&gt;Addendum&lt;/h2&gt;
&lt;p&gt;Just to clarify, I&amp;rsquo;ve met Christian Sanz numerous times.  He seems like a really nice guy.  It&amp;rsquo;s easy to get swept up in a flamewar and say stupid things, and a lot of us have done so.  They clearly realized much too late that the train was headed for crazy town, and fumbled awkwardly to try to change course.  I&amp;rsquo;m more disappointed than angry about all this.  It&amp;rsquo;s kind of sad, really.&lt;/p&gt;
&lt;p&gt;A person is not just one conversation, and a product is not just one person.  My hope is that Geeklist (particularly Christian and Reuben) will learn from this event and let it inform their actions the next time someone criticizes their marketing decisions, rather than be so scared off from the event that they stop taking risks at all.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/03/dont-use-classes/"/>
		<updated>2012-03-18T17:40:00Z</updated>
		<id>https://blog.izs.me/2012/03/dont-use-classes/</id>
		<content type="html">&lt;p&gt;Watch this video.  I really like a lot of what he has to say.  Two main comments:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;165&lt;/strong&gt; Exceptions in the standard library, is &lt;em&gt;enough&lt;/em&gt;!?  &lt;strong&gt;Are you fucking kidding me?&lt;/strong&gt;  JavaScript has 7, and if you ask me, that&amp;rsquo;s way too many.  &lt;code&gt;URIError&lt;/code&gt; is completely unnecessary, and &lt;code&gt;EvalError&lt;/code&gt; is always better off being expressed as something else.  The only Error types you ever need to use in your code are &lt;code&gt;Error&lt;/code&gt; or &lt;code&gt;TypeError&lt;/code&gt;.  That being said, &amp;ldquo;Don&amp;rsquo;t create a new exception type&amp;rdquo; is 100% spot-on.  Even having typed catches in the language encourages this kind of awful profusion.&lt;/li&gt;
&lt;li&gt;The reliance on &amp;ldquo;the standard library&amp;rdquo; is, imo, a bad thing.  The idea that we should not reinvent wheels is great.  s/standard library/npm registry/g and you&amp;rsquo;ve got me.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Many aspects of the Node.js module system, and the npm package registry, are built with exactly these principles in mind.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;code&gt;module.exports&lt;/code&gt; allows you to export a single thing from a module.  If I had the opportunity to do it again, I&amp;rsquo;d only support that, rather than an &lt;code&gt;exports&lt;/code&gt; object. If you really want to export multiple things, you&amp;rsquo;d still be able to, but it should be an extra mental leap to do so.&lt;/li&gt;
&lt;li&gt;The single-level namespace in the npm registry makes it a bit less likely to end up with garbage like &lt;code&gt;com.initech.utils.UtilityFactory.UtilityFactoryExceptions.UtilityFactoryNotFoundException&lt;/code&gt;.  &amp;ldquo;Namespaces are for preventing collisions, not for creating taxonomies.&amp;rdquo;  I cheered when he said this.&lt;/li&gt;
&lt;li&gt;Once upon a time, I foolishly implemented the proposed &amp;ldquo;modules&amp;rdquo; feature in package.json.  Ryan gave me a lot of shit about that and refused to support it in node, no matter how easy it was to do.  I realized (a bit too late) that he was absolutely right, and pissed off some folks by removing it.  Today, you get one &lt;code&gt;main&lt;/code&gt; module defined in package.json.  That&amp;rsquo;s it.  A package is a module.  Yes, a package is also a folder, and modules are files, so you &lt;em&gt;can&lt;/em&gt; dive into it and get at its guts.  But it&amp;rsquo;ll feel &lt;em&gt;off&lt;/em&gt;, because it&amp;rsquo;s weird, and non-standard.  You&amp;rsquo;ll get funny looks.  &lt;strong&gt;This is on purpose,&lt;/strong&gt; because it nudges you towards a flatter namespace by default.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The social engineering in node and npm is always more carrot than stick, and we always try to nudge people in a good direction by saying &amp;ldquo;no&amp;rdquo; to a feature rather than saying &amp;ldquo;yes&amp;rdquo; to one.  This hasn&amp;rsquo;t been done perfectly in the past, but I am fairly proud of the results.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a shock to someone who&amp;rsquo;s used to writing giant monolithic programs, and has to re-think how they draw their boundaries.  That&amp;rsquo;s good.  In fairly short order, things like local installs and limited exports start to &amp;ldquo;click&amp;rdquo; in a programmers mind most of the time.  I&amp;rsquo;ve seen a lot of people start out frustrated and angry, and then a month later tell me how odd it is to use other platforms that don&amp;rsquo;t have the a similar approach.&lt;/p&gt;
&lt;p&gt;When you solve a problem that others accept as the status quo, you often end up finding new problems.  You don&amp;rsquo;t have to worry about coming up with unique descriptive names for your programs when you can nest them 7 layers deep underneath a company name.  You don&amp;rsquo;t need to come up with approaches for managing a deep dependency graph if conflicts are insoluble.&lt;/p&gt;
&lt;h2&gt;Addendum&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s not that I&amp;rsquo;m against using classes.  I&amp;rsquo;ve written several programs that use classes extensively.  It&amp;rsquo;s the proper abstraction for a long-lived object that needs to keep state and be interacted with.  The hoop-jumping required to do this sort of thing in pure functional languages, with accumulator sets and so on, is kind of silly sometimes.&lt;/p&gt;
&lt;p&gt;That being said, the &lt;em&gt;point&lt;/em&gt; of using classes is to make things &lt;em&gt;easier&lt;/em&gt;.  If your class is a fire-and-forget thing with a single method, then it&amp;rsquo;s really just a function, and would be easier expressed in that manner.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s no hard and fast rule here.  You have to actually think about what would make your program easier to use, easier to debug, and easier to understand.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How I Would Do It</title>
		<link href="https://blog.izs.me/2012/03/how-i-would-do-it/"/>
		<updated>2012-03-13T23:15:00Z</updated>
		<id>https://blog.izs.me/2012/03/how-i-would-do-it/</id>
		<content type="html">&lt;p&gt;One of the most common shorthands for evaluating the choices of others is to internally ask ourselves if we would make those same choices in the same situation.  If the choice is &amp;ldquo;Not how I would do it&amp;rdquo;, then it is deemed &amp;ldquo;Bad&amp;rdquo;, and reflects poorly on the chooser.&lt;/p&gt;
&lt;p&gt;Like most sources of error, this shorthand is insidious precisely because it is a valuable time-saver in so many situations.  A person doing foolish things is likely a fool, and by establishing this aversion early, we can save ourselves the trouble of evaluating their future actions and words in depth.  If there&amp;rsquo;s something that I know how to do &amp;ndash; whether that&amp;rsquo;s writing a JavaScript program or making meatloaf or listening to music or dating &amp;ndash; then approaches that look &lt;em&gt;off&lt;/em&gt; probably are.  Difference smells funny, and why look deeper?&lt;/p&gt;
&lt;p&gt;Not every change is an improvement, but every improvement is a change.  We must be ever vigilant to not turn our noses up at progress simply because it is new, or at help simply because it comes in a shape somewhat different from what our own hands would make, or at a friend simply because they like different things.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/02/coffee-sun-and-hacking-3-taken-with/"/>
		<updated>2012-02-23T00:40:51Z</updated>
		<id>https://blog.izs.me/2012/02/coffee-sun-and-hacking-3-taken-with/</id>
		<content type="html">&lt;p&gt;Coffee, sun, and hacking. &amp;lt;3 (Taken with &lt;a href=&quot;http://instagr.am/&quot;&gt;instagram&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/02/giantass-ship-as-seen-from-my-desk-taken-with/"/>
		<updated>2012-02-17T01:40:14Z</updated>
		<id>https://blog.izs.me/2012/02/giantass-ship-as-seen-from-my-desk-taken-with/</id>
		<content type="html">&lt;p&gt;Giantass ship, as seen from my desk.  (Taken with &lt;a href=&quot;http://instagr.am/&quot;&gt;instagram&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/02/bikes-on-bart-taken-with-instagram/"/>
		<updated>2012-02-12T20:56:43Z</updated>
		<id>https://blog.izs.me/2012/02/bikes-on-bart-taken-with-instagram/</id>
		<content type="html">&lt;p&gt;Bikes on Bart (Taken with &lt;a href=&quot;http://instagr.am/&quot;&gt;instagram&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Software Personality</title>
		<link href="https://blog.izs.me/2012/02/software-personality/"/>
		<updated>2012-02-06T22:02:22Z</updated>
		<id>https://blog.izs.me/2012/02/software-personality/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.fetchnotes.com/post/17155558880/what-happens-when-you-swear-at-your-users&quot; class=&quot;tumblr_blog&quot;&gt;fetchnotes&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p id=&quot;internal-source-marker_0.6089860387146473&quot;&gt;Last semester, Chase and I took a business communication class in which we dissected the PR crisis that resulted from someone trashing an &lt;a href=&quot;http://www.airbnb.com/&quot;&gt;Airbnb&lt;/a&gt; user’s home. At the time, it seemed very abstract and unlikely — crises never happen to those who prepare! Well, one just happened to us.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There&amp;rsquo;s an important lesson here.  Don&amp;rsquo;t be too afraid to show a little personality in your products.  Let your team&amp;rsquo;s humanity show.  Keep the character in mind, and be true to it.&lt;/p&gt;
&lt;p&gt;Think, &lt;i&gt;&amp;ldquo;If this product were a person, what kind of person it be like?  How would it dress?  What would it feel?  What would it say to you when you&amp;rsquo;re having a bad day, or when you come to it with good news that you&amp;rsquo;re excited to tell?&amp;rdquo;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;In developing npm, this has always been chief in my thoughts.  Very early on, I started imagining npm as a friendly helper and developer cheering-section.  It just wants you to succeed so much.  It loves your program like a parent, and is proud of the day when it can get all its dependencies taken care of, and leave your warm embrace to go out into the harsh world of deployment.  It wants to know you&amp;rsquo;re prepared, that you&amp;rsquo;ve run all your tests.  It will help you find friends and allies, try to warn you which ones to steer clear of.  This can be a little smothering at times, but when your program is out there in the wild, maybe you&amp;rsquo;ll &lt;code&gt;require()&lt;/code&gt; a little something, and there it&amp;rsquo;ll be, because of how much npm cared for it, and it&amp;rsquo;ll think warmly of the place it grew up, back in the &lt;code&gt;$HOME&lt;/code&gt; directory on your laptop.&lt;/p&gt;
&lt;p&gt;This mental image is what inspired the &amp;ldquo;npm loves you&amp;rdquo; meme.  (It&amp;rsquo;s right in the faq.)&lt;/p&gt;
&lt;p&gt;On the other hand, Node.js has a slightly different personality.  It doesn&amp;rsquo;t shield you from harsh realities.  It&amp;rsquo;ll go with you out into the wild, and handle all the incoming requests with you.  It&amp;rsquo;ll be by your side through thick and thin, and follow your commands to the bitter end.  It won&amp;rsquo;t go out of its way to be a jerk, but if there&amp;rsquo;s ever a choice between being fast and being nice, you know what it&amp;rsquo;s going to pick.  If something needs to break between versions, well, then that&amp;rsquo;s what has to happen.  It knows you&amp;rsquo;re going to be able to deal with it.&lt;/p&gt;
&lt;p&gt;This, in my opinion, is the chief conceptual difference between a &amp;ldquo;platform&amp;rdquo; and a &amp;ldquo;tool&amp;rdquo;.  Of course, to some extent, every platform is a tool for interacting with the system, but you really want a different personality from your platform than you do from a tool.  A tool gets you there, and then is left behind; a platform is a part of the show from start to finish.&lt;/p&gt;
&lt;p&gt;Bryan Cantrill has mentioned to me that every software project carries the esthetic of its creator.  I think there&amp;rsquo;s a lot of truth to this.  But, just as children don&amp;rsquo;t necessarily grow up into copies of their parents, software&amp;rsquo;s personality doesn&amp;rsquo;t necessarily match the &lt;em&gt;personality&lt;/em&gt; of its creator.  In many ways, Ryan is much nicer than I am, but npm is certainly more friendly than Node.&lt;/p&gt;
&lt;p&gt;This phenomenon is uniquely challenging for companies that want to appear &amp;ldquo;grown up&amp;rdquo; and be taken seriously.  The line between &amp;ldquo;grown up&amp;rdquo; and &amp;ldquo;robotic&amp;rdquo; is so subtle.  Certainly, cursing at your users in a test message is a very risky way to breathe life into a product, but nevertheless, I find myself unsurprised by the reaction to the fetchnotes flub.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/02/i-really-like-the-view-from-where-i-live/"/>
		<updated>2012-02-05T07:33:55Z</updated>
		<id>https://blog.izs.me/2012/02/i-really-like-the-view-from-where-i-live/</id>
		<content type="html">&lt;p&gt;I really like the view from where I live.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2012/01/aredridel-or-you-know-we-could-go-own-our-own/"/>
		<updated>2012-01-03T00:46:08Z</updated>
		<id>https://blog.izs.me/2012/01/aredridel-or-you-know-we-could-go-own-our-own/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://aredridel.tumblr.com/post/15201371401/or-you-know-we-could-go-own-our-own&quot; class=&quot;tumblr_blog&quot;&gt;aredridel&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Or, you know, we could go own our own infrastructure. Start your own blog, folks. Find a local company who hosts sites or get your own virtual server. Get help setting it up or learn how yourself. And then there are no limits save the actual resources you’re using.&lt;/p&gt;
&lt;p&gt;You’ll learn a lot. You’ll own your space, not just lease it for the price of your privacy to another company.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;tumblr_blog&quot; href=&quot;http://samueloser.tumblr.com/post/15152527217/remember-back-when-tumblr-didnt-have-all-these&quot;&gt;samueloser&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Remember back when Tumblr didn’t have all these restrictions? It was great! Well since then, they’ve added new limits to the things we can do.&lt;/p&gt;
&lt;p&gt;Reblog this if you want the Ask Limit, the Post Limit, and all the other limits that Tumblr has been adding to be repealed. If this gets enough notes, hopefully we’ll be able to persuade them to repeal the limits, or at least lessen the restrictions!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reblog &lt;/strong&gt;and &lt;strong&gt;Reblog &lt;/strong&gt;and &lt;strong&gt;Reblog,&lt;/strong&gt; and get your friends to &lt;strong&gt;Reblog &lt;/strong&gt;as much as possible!&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Xmas Traditions</title>
		<link href="https://blog.izs.me/2011/12/xmas-traditions/"/>
		<updated>2011-12-30T02:45:00Z</updated>
		<id>https://blog.izs.me/2011/12/xmas-traditions/</id>
		<content type="html">&lt;p&gt;As an american, especially one descended from european catholics, there
is no annual event as steeped in tradition and ritual as Christmas.  It
seems at times that failing to maintain our traditions would be an
affront to our ancestry, and a crime to our descendents.&lt;/p&gt;
&lt;p&gt;Tradition is a funny thing.  It&amp;rsquo;s a social fiction.  It&amp;rsquo;s something that
&lt;strong&gt;we as humans decide we&amp;rsquo;re going to do&lt;/strong&gt;.  On the one hand, traditions
can give comfort and stability in the midst of a shifting world.  On the
other hand, &amp;ldquo;because we&amp;rsquo;ve always done it this way&amp;rdquo; is hardly an optimal
heuristic for social behavior (or even good evidence for having in fact
always done it that way).&lt;/p&gt;
&lt;p&gt;Back when our software was being
written, when our world changed less quickly, and tribal unity was a
life or death issue, it probably made a lot of sense to value stability
over most other aspects of life.  However, in the modern world, the
absurdity of this pattern seems so painfully clear sometimes.&lt;/p&gt;
&lt;p&gt;Christmas just a few generations ago would have been &lt;em&gt;unrecognizable&lt;/em&gt; to us
today.  The &amp;ldquo;Santa Claus&amp;rdquo; character as we know him today, with the reindeer
and flying and chimneys and north pole, was invented
less than 200 years ago, and only became an overweight bearded red-clad man in
the 1920s.  Our &amp;ldquo;classic&amp;rdquo; christmas songs were almost all written
in the 1940s and 1950s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A lot of our &amp;ldquo;time-honored&amp;rdquo; christmas traditions were invented while
my parents were kids.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The christmas traditions that I remember were waking up early, opening
presents, and then spending the day in pyjamas playing with new toys.
No travelling, no extended family, no huge dinner.  We didn&amp;rsquo;t have any
xmas eve celebration (probably because my parents did a lot of their
shopping and preparation the night before.)  The &amp;ldquo;christmas dinner&amp;rdquo; was
usually delivery chinese.  Normal Rockwell would&amp;rsquo;ve been scandalized.&lt;/p&gt;
&lt;p&gt;The extravagance of our christmas presents varied quite a lot.
My dad ran his own business, and along with that came a lot of
ups and downs.  When we didn&amp;rsquo;t have a lot of money, my parents put
a lot of creativity into it.&lt;/p&gt;
&lt;p&gt;One year, our gifts consisted mainly of coupons to be redeemed for
outings or favors at some later date.  We were young enough to be
excited about that.  Those coupons were made at home, printed
to look official and then decorated with magic marker (our printer at
the time was a black and white dot-matrix.)&lt;/p&gt;
&lt;p&gt;The most awesome part of our xmas tradition came out of a creative
solution to a last-minute problem.  It was a good year, and my parents
had bought me
and my sister new bicycles.  But, they didn&amp;rsquo;t see any way to bring them
into the living room and wrap them in such a way that we wouldn&amp;rsquo;t know
right away what they were.&lt;/p&gt;
&lt;p&gt;They had the innovative idea to put the bikes outside in the shed,
but rather than just tell us to go out and get them, my mom designed a
treasure hunt that my sister and I would have to work together
to solve.  The first clue was on a card buried in the middle of the
tree.  That led to another clue, which led to another, and so on.  Each
one was a little puzzle that had to be solved, and it was all allegedly
from &amp;ldquo;Santa&amp;rdquo;.  So, when we asked my mom for help, she just threw up her
hands, and said, &amp;ldquo;Hey, I didn&amp;rsquo;t help him make this thing.  Call up the
north pole if you can&amp;rsquo;t figure it out.&amp;rdquo;  (We were old enough at the time
to know she was putting us on, but she can be very stubborn.  Her
sense of humor is so dry, you never really know if she&amp;rsquo;s joking, or
has had some break with reality and believes what she&amp;rsquo;s saying.)&lt;/p&gt;
&lt;p&gt;Every year, whatever big present we got, it was at the end of a similar
treasure hunt.  It kept us out of our parents hair, that&amp;rsquo;s for sure.  A
chemistry set in the trunk of the car.  A Nintendo and a few games (that
year, my parents were eager for us to finish so that they could &amp;ldquo;help&amp;rdquo; play
with it.)  A &amp;ldquo;treasure box&amp;rdquo; filled with about $25 in quarters and dollar
bills and some plastic pirate toys (not one of the fat years, but still fun.)
One year in highschool we had to drive across town to pick up one of the
clues.  Once one of them was hidden in a file on a computer.  (And,
just to throw us off, another clue that year was in a piece of paper
literally &lt;em&gt;inside&lt;/em&gt; a different computer, so we had the thing mostly taken
apart to individual pieces before reading the clue more carefully.)&lt;/p&gt;
&lt;p&gt;Looking back, I attribute a lot of my relationship with my sister to the
fact that my mother put so much time and thought
into getting us to work together and experience joy and frustration
together.&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t until recently that I learned that all this was a huge departure
from the traditions in the Schlueter family, which previously had
involved trekking back to my dad&amp;rsquo;s home town (in &lt;strong&gt;South Dakota&lt;/strong&gt; of all
bloody places!)  Christmas eve gift exchange, followed by midnight mass,
sleep, followed by &lt;em&gt;another&lt;/em&gt; church service Christmas morning, and then a
huge elaborate dinner.  More Jesus than Santa.&lt;/p&gt;
&lt;p&gt;We did that one year.  I remember it sucking, and wishing that we could
just do a &amp;ldquo;normal&amp;rdquo; christmas instead of all this work and church stuff,
and driving across the country.  The food was ok, but I didn&amp;rsquo;t see why I
had to put on dress pants and uncomfortable shoes to eat with my
cousins.&lt;/p&gt;
&lt;p&gt;When I heard about other kids doing other
things, visiting family and such,
I thought, &amp;ldquo;Oh, that&amp;rsquo;s kind of weird, I&amp;rsquo;m glad I don&amp;rsquo;t have to do that.&amp;rdquo;
I didn&amp;rsquo;t feel uncomfortably different
for our &amp;ldquo;easy&amp;rdquo; traditions; they were &lt;strong&gt;great&lt;/strong&gt;.  Low-stress,
low-expectation, high-fun.&lt;/p&gt;
&lt;p&gt;I remember sensing at the time that my mom didn&amp;rsquo;t
have as much fun with it as I did, and figured it was because she had to
do a bunch of work.  I didn&amp;rsquo;t realize at the time, it wasn&amp;rsquo;t just the
work, it was the &lt;em&gt;sense of obligation&lt;/em&gt; she felt that made the work seem
so awful sometimes.  She&amp;rsquo;d grown up disliking christmas,
and felt a tremendous pressure to make it magical for her kids.  She
succeeded&amp;ndash;impressively&amp;ndash;but probably went well beyond the realm of
diminishing returns.  She could have done a bit less, been just as
successful in making a great experience for her kids, and enjoyed the
process more.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a father today, but I am an adult.  And I find myself
with a family that&amp;rsquo;s quite a lot bigger and more spread out than just the
4 of us.  It&amp;rsquo;s easier to appreciate what my parents were giving up by
staying home, and how hard that decision probably was.  I feel that
pressure, to do this and that, to be here and go there, and get this for
these, and that for those, to drive around from town to town visiting
everyone and being at every party.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s fun, sometimes.  There are
people that I love, and don&amp;rsquo;t see often enough, and this is a great
excuse to make that happen.  There&amp;rsquo;s also a lot of stress and
headaches involved, and that can make everyone grumpy and annoyed.  We
feel an obligation to this thing called &amp;ldquo;Tradition&amp;rdquo; that feels so real
and solid, and sometimes end up spending our time
doing things no one likes for reasons no one understands, often for the
alleged benefit of &amp;ldquo;passing on&amp;rdquo; traditions to children who will accept it for
whatever it is, no matter what we end up doing.&lt;/p&gt;
&lt;p&gt;The moral of the story is this:
you don&amp;rsquo;t owe the past shit.  If you want
your kids to enjoy christmas, and have happy memories, then do what makes you
happy, and focus on having fun with them today, in the here and now.
The universe will forgive you if
you give people presents in January or November, or if your bonding
event is movies and chinese takeout in pj&amp;rsquo;s rather than church and ham in
slacks.&lt;/p&gt;
&lt;p&gt;Tradition is a story you can rewrite at any time, so write one you can
enjoy.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Browser : Operating System</title>
		<link href="https://blog.izs.me/2011/11/browser-operating-system/"/>
		<updated>2011-11-29T17:46:00Z</updated>
		<id>https://blog.izs.me/2011/11/browser-operating-system/</id>
		<content type="html">&lt;p&gt;Fairly early in my career as a programmer, I switched from the C and C++ path over to front-end web development. It was fun, in-demand, and provided a way to scratch my artistic and programming itches at the same time.&lt;/p&gt;
&lt;p&gt;I spent a lot of that time wrestling with web browsers.&lt;/p&gt;
&lt;p&gt;These days, I write most of my JavaScript for node, and run my programs on servers. I&amp;rsquo;ve found that wrestling with operating system differences is very similar to web browsers.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;(Disclaimer: this is a joke. Please don&amp;rsquo;t email me.)&lt;/i&gt;&lt;/p&gt;
&lt;h2&gt;IE : Windows&lt;/h2&gt;
&lt;p&gt;Full of Microsoftisms. Most things mostly work, except that sometimes they don&amp;rsquo;t, and when they do, it&amp;rsquo;s usually in a completely foreign and strange way. So different that many people either don&amp;rsquo;t support it, or don&amp;rsquo;t support anything else.&lt;/p&gt;
&lt;h2&gt;Firefox : Linux&lt;/h2&gt;
&lt;p&gt;Mostly works, but always awkward. A perpetually broken mish-mash of components that often weren&amp;rsquo;t really intended to be used together. No two are alike, and nothing ever looks exactly right.&lt;/p&gt;
&lt;p&gt;Shrouded in a religious belief that it is fixing the worlds problems. Any criticism is viewed as heresy (unless it comes with a patch).&lt;/p&gt;
&lt;h2&gt;WebKit/Safari/Chrome : Darwin/BSD&lt;/h2&gt;
&lt;p&gt;Very nice, very polished. Would probably die if not for the fact that a huge corporation decided to back it (since we already have a public option with Linux/Firefox). Mostly open source, but if you have to actually do things, you&amp;rsquo;ll inevitably be forced into the &amp;ldquo;blessed&amp;rdquo; APIs, which are not standard.&lt;/p&gt;
&lt;h2&gt;Opera : SunOS&lt;/h2&gt;
&lt;p&gt;All 12 of its users loudly agree it is superior in every way, and they have graphs to prove it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/11/badlipreading-herman-cain-a-blr-soundbite/"/>
		<updated>2011-11-18T07:29:38Z</updated>
		<id>https://blog.izs.me/2011/11/badlipreading-herman-cain-a-blr-soundbite/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://badlipreading.tumblr.com/post/12047299166&quot; class=&quot;tumblr_blog&quot;&gt;badlipreading&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;“HERMAN CAIN” — A BLR Soundbite&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Only slightly more crazy than the actual Herman Cain.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Experts, Idiots, and Taste</title>
		<link href="https://blog.izs.me/2011/11/experts-idiots-and-taste/"/>
		<updated>2011-11-10T18:15:00Z</updated>
		<id>https://blog.izs.me/2011/11/experts-idiots-and-taste/</id>
		<content type="html">&lt;p&gt;My nerd rage on the topic of Fibers, co-routines, and compiled-to-js languages in node.js comes from seeing a non-problem solved in a way that makes it worse.&lt;/p&gt;
&lt;p&gt;There are two really dangerous rationalizations in software design:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&amp;ldquo;We need to make it easier for newcomers.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Only experts will use this, anyway.&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;Tower of Babel of Cards&lt;/h3&gt;
&lt;p&gt;They&amp;rsquo;re dangerous because each seems to imply that the other can be disregarded.  The worst approach is to vacillate between them: &amp;ldquo;We need to make (async IO, object cleanup, database queries, whatever) easier for new users, so we&amp;rsquo;ll add this magic that experts will use to make intuitive APIs.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a vicious spiral.  You can justify adding complexity, because &amp;ldquo;this is for experts only&amp;rdquo;, and also exposing the functionality in an obscured way in the name of making it &amp;ldquo;intuitive&amp;rdquo; for newcomers.  The result is inevitably a towering house of cards.  On a somewhat visceral level, I get this gut reaction to a &amp;ldquo;handing down from the mountain&amp;rdquo; mentality that is only harmful in the long run for everyone.&lt;/p&gt;
&lt;p&gt;A better goal is to make an API such that when an expert uses it expertly, a newcomer can still understand it thoroughly.  It requires an API (and more importantly, a culture) that limits experts, and educates newcomers.  I don&amp;rsquo;t know the best way to approach problems to get there, but I&amp;rsquo;ve found pretty good results from thinking, &amp;ldquo;I&amp;rsquo;m probably going to mess this up the next time I touch it, so I&amp;rsquo;d better make it really obvious.&amp;rdquo;  I usually fail at it, and end up cursing myself later when I rewrite the damn thing yet again.&lt;/p&gt;
&lt;p&gt;Passing around a function that gets called later is &lt;em&gt;not that hard&lt;/em&gt;.  We&amp;rsquo;ve been doing that in JavaScript forever.  Yes, newcomers to the language, especially if they come from a language without closures and first-class functions, have a little bit of a learning curve to get used to this phenomenon.  In my opinion, you do them a disservice by trying to shield them from that.&lt;/p&gt;
&lt;p&gt;(Passing around function pointers in C is actually a little bit better in some ways, because you &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; define your functions inline, and all the captured data must be passed around explicitly.  This is a bit like using named functions instead of nested closures, which is a common low-complexity approach to the alleged callback problem.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been writing JavaScript for a while now, and other languages for a few years before I got into JavaScript.  I&amp;rsquo;m not the most expert at it, but I certainly don&amp;rsquo;t consider myself a newcomer.  In that time, I&amp;rsquo;ve learned something:&lt;/p&gt;
&lt;h3&gt;We&amp;rsquo;re All Idiots&lt;/h3&gt;
&lt;p&gt;All of us, whether experts or newcomers.  Well-meaning idiots, perhaps, but idiots.  We all write bugs, all the time.  That is the normal state of software.  There is no abstraction so perfect that a human won&amp;rsquo;t fuck it up at the first opportunity.  But we can try to be better, simpler, to make it easier for our future idiotic selves to figure out what we were thinking in our cleverly idiotic brains, and chop the problems into smaller pieces so that our future selves can have some clues to find the maddeningly idiotic bugs we stuffed in there.&lt;/p&gt;
&lt;p&gt;If your code uses step or async or slide or Q, I can read it, and I see a function getting called and passed some arguments.  I can look at how you got that function from a require() statement, pull up that module, and look at its definition.  These are lightweight abstractions that are highly penetrable.  I&amp;rsquo;ve suggested in the past that everyone should write their own flow control lib, because it&amp;rsquo;s the best way to really understand how they work, and it&amp;rsquo;s not that hard.  Once you grasp the basic concepts, reading someone else&amp;rsquo;s flow control utility is pretty easy.&lt;/p&gt;
&lt;p&gt;If your code uses a compiled fibers library, or something that transforms the code, then it&amp;rsquo;s &lt;em&gt;much&lt;/em&gt; harder for me to figure out what the heck is going on.  The introspection is gone.  The languages change.  Stuff happens that isn&amp;rsquo;t present in the code I&amp;rsquo;m looking at.  &lt;strong&gt;This is fundamentally different from a library that just passes functions around.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That means: I won&amp;rsquo;t use your library if there&amp;rsquo;s any alternative (including writing the exact same functionality myself).  It&amp;rsquo;s nothing personal.  I just would rather spend my time solving necessary problems rather than manufactured ones.  I simply don&amp;rsquo;t believe that you&amp;rsquo;ve put the same level of thinking into your coro util that TC-39 and the v8 team has put into JavaScript, or that Bert and Ryan and Ben and Igor have put into libuv.&lt;/p&gt;
&lt;p&gt;Not everyone is the same, and that&amp;rsquo;s great!!  If you find that Fibers solve a problem &lt;em&gt;for you&lt;/em&gt;, and they make the code that you write easier &lt;em&gt;for you&lt;/em&gt; to manage and design, then that&amp;rsquo;s awesome.  Use them.  Understand them.  Drop the illusory dichotomy of &amp;ldquo;experts&amp;rdquo; and &amp;ldquo;newcomers&amp;rdquo;, and realize that they are both idiots, and both you.&lt;/p&gt;
&lt;p&gt;Every choice that isn&amp;rsquo;t completely boring will alienate someone.  Pleasing everyone is a recipe for blandness.  That&amp;rsquo;s why we keep the node-core standard lib super small, and encourage variation and repetition and iteration in userland modules.&lt;/p&gt;
&lt;h3&gt;Absolutes&lt;/h3&gt;
&lt;p&gt;If your goal is to please &lt;em&gt;me&lt;/em&gt; (and other stodgy &amp;ldquo;javascript is fine, callbacks aren&amp;rsquo;t hard&amp;rdquo; types) with a compiled coroutine library that adds magic to the language, you should realize how horribly unlikely that is.  I do actually think that this approach is fundamentally flawed.  I&amp;rsquo;ve played with Marcel&amp;rsquo;s fibers lib a bit, and it&amp;rsquo;s about the nicest I&amp;rsquo;ve seen, but it still adds an unacceptable &lt;em&gt;(for me!)&lt;/em&gt; amount of magic to programs.&lt;/p&gt;
&lt;p&gt;Programmers tend to think in absolutes, perhaps because computers are such absolute things, or maybe just because absolutes are easier and we&amp;rsquo;re all idiots.  I&amp;rsquo;ve done it in this post, because I&amp;rsquo;m as lazy as anyone.  Maybe you&amp;rsquo;re the exception, and you actually are smart enough to use Fibers or Streamline wisely and still know what&amp;rsquo;s going on when you read the code a year later.  If the benefit is greater than the cost, then go for it.  It&amp;rsquo;s your house, you decide whether to wear pants or not.&lt;/p&gt;
&lt;p&gt;When we are discussing things like this, it&amp;rsquo;s important to realize that we&amp;rsquo;re artists discussing matters of taste.  If everyone agreed, then it would mean it wasn&amp;rsquo;t interesting.  Maybe we should be less interested in convincing people of stuff, and more interested in just writing programs that do interesting things.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Mud Rooms, Red Letters, and Real Priorities</title>
		<link href="https://blog.izs.me/2011/11/mud-rooms-red-letters-and-real-priorities/"/>
		<updated>2011-11-03T16:46:28Z</updated>
		<id>https://blog.izs.me/2011/11/mud-rooms-red-letters-and-real-priorities/</id>
		<content type="html">&lt;blockquote&gt;
  &lt;p&gt;You can&amp;rsquo;t &amp;ldquo;prioritize&amp;rdquo; a list of 20 tasks any more than you can &amp;ldquo;uniqueify&amp;rdquo; 20 objects by &amp;ldquo;uniqueness,&amp;rdquo; or &amp;ldquo;pregnantitze&amp;rdquo; 20 women by &amp;ldquo;pregnantness.&amp;rdquo; Each of those words &lt;em&gt;means something&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Merlin Mann is my hero.  Read this post every time you say the word &amp;ldquo;prioritize&amp;rdquo;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/10/yIqVaA/"/>
		<updated>2011-10-26T17:37:00Z</updated>
		<id>https://blog.izs.me/2011/10/yIqVaA/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>JavaScript is Not Web Assembly  </title>
		<link href="https://blog.izs.me/2011/09/javascript-is-not-web-assembly/"/>
		<updated>2011-09-14T21:21:00Z</updated>
		<id>https://blog.izs.me/2011/09/javascript-is-not-web-assembly/</id>
		<content type="html">&lt;p&gt;It&amp;rsquo;s fairly common these days to think of JavaScript as a sort of
&amp;ldquo;assembly language for the web&amp;rdquo;.  After all, it&amp;rsquo;s the language that
is natively supported by web browsers, making it the most widely
deployed runtime in history.  With Node, we have a very relevant
general purpose non-browser stack for doing system programming using
this language, so it&amp;rsquo;s even more important as a language.&lt;/p&gt;
&lt;p&gt;Programmers like to improve things and solve problems.  This is a
healthy instinct, but like so many healthy instincts, it can be subject
to runaway feedback loops and lead to pathological behavior.&lt;/p&gt;
&lt;p&gt;If you are designing a language, compiling it to JavaScript is a pretty
attractive option, for much the same reason that compiling C to machine
code is an attractive option: running it in more places.&lt;/p&gt;
&lt;p&gt;However, so far, most of the times that I&amp;rsquo;ve seen someone trot out the
&amp;ldquo;JS = new assembly&amp;rdquo; horse, it&amp;rsquo;s not an apt comparison.  The reason we
write C instead of assembly is that:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Assembly varies wildly between architectures.  C is not as variable.
So, the compiler can abstract away a lot of that peculiarity, and you
only need to worry about it if you&amp;rsquo;re distributing precompiled binaries.&lt;/li&gt;
&lt;li&gt;C offers an order of magnitude more expressiveness.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;rsquo;m going to pick on CoffeeScript, because it&amp;rsquo;s clearly the most popular
to-JS language.  Jeremy Ashkenas is a great guy, and has shown himself
on repeated occasions to be remarkably sane with
respect to this issue.  Either he hasn&amp;rsquo;t caught the language-wank
crazy, or he hides it &lt;em&gt;really&lt;/em&gt; well.&lt;/p&gt;
&lt;p&gt;However, either or both of these points
apply to every other to-JS language, including but not limited to GWT,
paren-js, sibilant, streamline, kaffiene, narrative, et al.  That&amp;rsquo;s not
to say that any of these systems are &lt;em&gt;bad&lt;/em&gt;, just that the &amp;ldquo;blah is to JS
as C is to Assembly&amp;rdquo; analogy is wildly wrongheaded.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;CoffeeScript programs don&amp;rsquo;t vary any less across architectures than
the JavaScript programs it creates.  That is, you don&amp;rsquo;t compile it to target a given platform.
(This is not true of GWT, which can compile different JS files for
different browsers, but that&amp;rsquo;s not the norm in the to-JS world.)&lt;/li&gt;
&lt;li&gt;CoffeeScript does not offer an order of magnitude difference in
expressiveness.  I&amp;rsquo;m not using &amp;ldquo;expressiveness&amp;rdquo; as some fuzzy term to
mean &amp;ldquo;how happy you are expressing yourself in X language&amp;rdquo;, but the
more mathy technical meaning of &amp;ldquo;how many relevant program tokens are
required to do X task.&amp;rdquo;  CoffeeScript may require fewer tokens, sure,
but not 10 to 1 fewer.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;JavaScript is not the Assembly of the Web.  It&amp;rsquo;s the C of the web.  The
to-JS languages are lining up to become the C++ of the web.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;They offer language features that make some sorts of programs a
little bit easier to write, but don&amp;rsquo;t make an order of
magnitude difference in expressive power.&lt;/li&gt;
&lt;li&gt;They&amp;rsquo;re mostly backwards compatible with JavaScript.&lt;/li&gt;
&lt;li&gt;You still need to grok the DOM, or
node, or whatever other platform your program is interacting with,
and that&amp;rsquo;s probably documented in JavaScript.&lt;/li&gt;
&lt;li&gt;They break almost all of the tooling that exists for JavaScript
debugging.&lt;/li&gt;
&lt;/ol&gt;&lt;hr /&gt;&lt;p&gt;&lt;strong&gt;Clarification&lt;/strong&gt;: CoffeeScript &lt;em&gt;does&lt;/em&gt; try very hard to compile to JS
that runs on all JS platforms.  However, it does not optimize &lt;em&gt;for&lt;/em&gt; a given
platform, or have a specified target when it compiles.  The resulting
JS is still a high-level general-purpose program, and the pitch, at least,
is that it is a better one than you would have written as easily by hand.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/09/in-the-universe-where-everything-works-the-way-it/"/>
		<updated>2011-09-05T17:22:32Z</updated>
		<id>https://blog.izs.me/2011/09/in-the-universe-where-everything-works-the-way-it/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;In the universe where everything works the way it common-sensically ought to, everything about the study of Artificial General Intelligence is driven by the one overwhelming fact of the indescribably huge effects: initial conditions and unfolding patterns whose consequences will resound for as long as causal chains continue out of Earth, until all the stars and galaxies in the night sky have burned down to cold iron, and maybe long afterward, or forever into infinity if the true laws of physics should happen to permit that.  To deliberately thrust your mortal brain onto that stage, as it plays out on ancient Earth the first root of life, is an act so far beyond “audacity” as to set the word on fire, an act which can only be excused by the terrifying knowledge that the empty skies offer no higher authority.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Eliezer Yudkowsky, &lt;a href=&quot;http://lesswrong.com/lw/uc/aboveaverage_ai_scientists/&quot;&gt;Above-Average AI Scientists&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New Recruiter Response</title>
		<link href="https://blog.izs.me/2011/08/new-recruiter-response/"/>
		<updated>2011-08-31T19:23:31Z</updated>
		<id>https://blog.izs.me/2011/08/new-recruiter-response/</id>
		<content type="html">&lt;p&gt;I have a new strategy for recruiters.  First, a curt one-liner &amp;ldquo;not
interested&amp;rdquo;.  If they press (usually with an &amp;ldquo;I&amp;rsquo;ll ping you in 3 months&amp;rdquo;
or something), then they get the longer explanation.&lt;/p&gt;
&lt;p&gt;I just search and replace &amp;ldquo;XYZCorp&amp;rdquo; with whatever company they&amp;rsquo;re
calling from, and maybe change a line or two based on their response.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Your optimism is delightful.  It pains me to step on it, but I
wouldn&amp;rsquo;t feel right doing otherwise.&lt;/p&gt;
&lt;p&gt;In 3 months, I&amp;rsquo;ll have the same answer.  The future is never
absolutely certain, but this is as certain as any prediction I can
make.  It&amp;rsquo;s a Safe Bet.&lt;/p&gt;
&lt;p&gt;I am working on Node.js and npm.  This is the technology that has
already displaced Python and Ruby as the hot new high-level language
platform of choice; within 5 or 10 years it&amp;rsquo;ll join the likes of .NET,
Perl, PHP, Java as the go-to platform for enterprise development (ie,
&amp;ldquo;serious business&amp;rdquo;) and new college grads.  But there is &lt;em&gt;so&lt;/em&gt; much
more work to be done!&lt;/p&gt;
&lt;p&gt;XYZCorp has a lot of very interesting technical challenges, I&amp;rsquo;m sure.
But this is the one that I&amp;rsquo;m most passionate about, and Joyent is the
place that has it.  npm started out as my personal side project.  Node
was a dream of mine that is coming true.  I&amp;rsquo;ve invested a lot of time
and a lot of love in this technology and in this community.&lt;/p&gt;
&lt;p&gt;Going to work there in 3 months, or in 3 years, would be a huge step
down in terms of the effectiveness of my effort and the results that
I&amp;rsquo;ll have on the technology world in general.  It would be a bit like
someone asking you if you&amp;rsquo;ll be done with your son or daughter in 3
months, and interested in trying out another kid.&lt;/p&gt;
&lt;p&gt;When and if I leave Joyent, it will be to do some other work focused
on npm and Node.js, probably as part of my own company.  The only way
that XYZCorp could ever recruit me is if they recruited me to do that.&lt;/p&gt;
&lt;p&gt;If I come across any developers that rival or exceed my skills, I&amp;rsquo;ll
almost certainly try to recruit them myself, or get them to work
somewhere else on Node so that they can add to this community.  As
long as I&amp;rsquo;m not a XYZCorp employee, and &amp;ldquo;working at XYZCorp&amp;rdquo; doesn&amp;rsquo;t
imply &amp;ldquo;working on Node&amp;rdquo;, it really does not serve my interests to send
talent to XYZCorp.  There is no referral bonus that XYZCorp could
provide me which would change that.&lt;/p&gt;
&lt;p&gt;Altruistically, I want what&amp;rsquo;s best for the Node community, because I
feel connected to it.  Selfishly, I want to be one of the names that
is remembered as part of a major revolution in software development.
If you can show that these two goals are better served at XYZCorp than
at Joyent, then let&amp;rsquo;s talk.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/08/the-proper-response-to-the-current-impracticality/"/>
		<updated>2011-08-29T18:34:34Z</updated>
		<id>https://blog.izs.me/2011/08/the-proper-response-to-the-current-impracticality/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;The proper response to the current impracticality of decentralized computing is not to sigh and build centralized systems. The proper response is to build the systems to &lt;em&gt;make decentralized computing practical again&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://lists.canonical.org/pipermail/kragen-tol/2011-August/000938.html&quot;&gt;Kragen Sitaker&lt;/a&gt; (via &lt;a href=&quot;http://blog.felter.org/&quot; class=&quot;tumblr_blog&quot;&gt;hack-the-planet&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/08/youranonnews-use-this-image-in-and-around-bart/"/>
		<updated>2011-08-23T00:10:00Z</updated>
		<id>https://blog.izs.me/2011/08/youranonnews-use-this-image-in-and-around-bart/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://youranonnews.tumblr.com/post/8877530155&quot; class=&quot;tumblr_blog&quot;&gt;youranonnews&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Use this image in and around BART stations to let people know about the protest.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It &lt;em&gt;is&lt;/em&gt; quite nice to live in a place where even the slightest infraction against free speech is met with absurd overreaction.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Think Again: War</title>
		<link href="https://blog.izs.me/2011/08/think-again-war/"/>
		<updated>2011-08-18T20:01:21Z</updated>
		<id>https://blog.izs.me/2011/08/think-again-war/</id>
		<content type="html">&lt;p&gt;Very encouraging article.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;If the world feels like a more violent place than it actually is, that&amp;rsquo;s because there&amp;rsquo;s more information about wars &amp;ndash; not more wars themselves. Once-remote battles and war crimes now regularly make it onto our TV and computer screens, and in more or less real time. Cell-phone cameras have turned citizens into reporters in many war zones. Societal norms about what to make of this information have also changed. As Harvard University psychologist Steven Pinker has noted, &amp;ldquo;The decline of violent behavior has been paralleled by a decline in attitudes that tolerate or glorify violence,&amp;rdquo; so that we see today&amp;rsquo;s atrocities &amp;ndash; though mild by historical standards &amp;ndash; as &amp;ldquo;signs of how low our behavior can sink, not of how high our standards have risen.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>New English</title>
		<link href="https://blog.izs.me/2011/08/new-english/"/>
		<updated>2011-08-12T05:38:00Z</updated>
		<id>https://blog.izs.me/2011/08/new-english/</id>
		<content type="html">&lt;p&gt;shown to be far more ergonomic.&lt;br /&gt;
the bottom to top writing direction was&lt;br /&gt;
Reviled and ridiculed at first,&lt;/p&gt;
&lt;p&gt;it became apparent this was not ideal.&lt;br /&gt;
on monitor screens,&lt;br /&gt;
Displaying text in streams&lt;/p&gt;
&lt;p&gt;all written down from the top.&lt;br /&gt;
languages of the ancients were&lt;br /&gt;
Developed for paints in hand,&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Obvious Answers to Simple Questions</title>
		<link href="https://blog.izs.me/2011/07/obvious-answers-to-simple-questions/"/>
		<updated>2011-07-20T21:18:30Z</updated>
		<id>https://blog.izs.me/2011/07/obvious-answers-to-simple-questions/</id>
		<content type="html">&lt;p&gt;People who live or work with nerds sometimes are annoyed and perplexed by what strikes them as willful, snarky, unhelpful responses to questions.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;q: Do you know what time it is?
a: Yes.
&amp;lt;beat&amp;gt;
q: Ok... What time is it?   (asshole)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;or:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;q: How are you going to the party Saturday?
a: I&#39;m driving.
q: Yeah, but are you taking the 101 or the 280?    (asshole)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Programming is a deep and complicated field.  There are very many layers of abstraction between the user&amp;rsquo;s intent and the electrons on silicon.&lt;/p&gt;
&lt;p&gt;When working on a problem, it&amp;rsquo;s common to be so immersed in it that everything seems obvious.  In fact, until this level of familiarity is achieved, it&amp;rsquo;s hard to make any progress at all.&lt;/p&gt;
&lt;p&gt;However, other parts of the stack may still be very foreign.  This is part of why software development is a social activity.  There&amp;rsquo;s simply too much for any one person to hold the entire stack in their head at once.&lt;/p&gt;
&lt;p&gt;So, you ask someone a question.  A question that seems obvious to them, &lt;em&gt;but isn&amp;rsquo;t to you&lt;/em&gt;, because you&amp;rsquo;re not immersed in that part of the world.&lt;/p&gt;
&lt;p&gt;And the polite and kind thing for them to do is try to answer your question as precisely and accurately as possible, &lt;em&gt;even though it seems obvious to them and isn&amp;rsquo;t something they&amp;rsquo;d ever bother asking&lt;/em&gt;, because they realize that you don&amp;rsquo;t live in the same area that they do.&lt;/p&gt;
&lt;p&gt;In the ancestral environment, everyone knew most of what everyone else knew.  Even if there were specific details that were shared in bits, it was unlikely that someone didn&amp;rsquo;t even know the rudimentary basics of any particular subject.  So, when asked a question, the polite thing for the answerer to do is skip past any details that the asker probably already knows, and try to infer the bits that they don&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Most of human social interaction happens in this sort of framework.  You probably know I&amp;rsquo;m driving, and are &lt;em&gt;really&lt;/em&gt; asking which specific route I&amp;rsquo;m taking, or which car, or when I&amp;rsquo;m leaving.  Answering with &amp;ldquo;I&amp;rsquo;m driving&amp;rdquo; is akin to saying, &amp;ldquo;You&amp;rsquo;re an idiot who doesn&amp;rsquo;t know what a car is, but I&amp;rsquo;m going to step down off my Smart People pedestal, where we Speak Properly, and help educate you, so that you can learn to not be so dumb.   Here&amp;rsquo;s where the key goes&amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not (just) that nerds are fundamentally more persnickety, or detail-oriented, or hyper-literal.  Those things may factor into our oddness, or into our choice of careers, but a large part of this social disconnect is that we actively learn to break this evolved habit.&lt;/p&gt;
&lt;p&gt;Our culture and craft depend on responding to simple questions with obvious answers, out of respect for the fact that what is obvious to me may not be obvious to you, even though we&amp;rsquo;re both competent, intelligent, worldly people with nothing of the best intentions.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s no excuse for being a dick, of course.  Rudeness—especially unintended rudeness—is not the Winful Way.  But it&amp;rsquo;s hard to shift cultures, especially when our friends are also our colleagues, and social interactions often include technical conversations.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Benchmark: Array-ification of arguments</title>
		<link href="https://blog.izs.me/2011/07/benchmark-array-ification-of-arguments/"/>
		<updated>2011-07-18T02:29:00Z</updated>
		<id>https://blog.izs.me/2011/07/benchmark-array-ification-of-arguments/</id>
		<content type="html">&lt;p&gt;Having really hot paths in your code can be great, but it can also be a little dangerous.&lt;/p&gt;
&lt;p&gt;When v8&amp;rsquo;s Crankshaft landed in the Node.js dev build, it immediately resulted in a significant drop in Node&amp;rsquo;s &amp;ldquo;hello world&amp;rdquo; performance benchmark.&lt;/p&gt;
&lt;p&gt;This was alarming.  Crankshaft was supposed to be faster, and here it was causing slowdowns.&lt;/p&gt;
&lt;p&gt;The cause was tracked down Vyacheslav Egorov (known to many in the Node community as &amp;ldquo;mraleph&amp;rdquo;), and had to do with Node&amp;rsquo;s use of the &lt;code&gt;arguments&lt;/code&gt; object in the &lt;code&gt;EventEmitter.prototype.emit&lt;/code&gt; function.&lt;/p&gt;
&lt;p&gt;Since this function is the hottest code in Node, even a slight decrease in performance is immediately felt.  Vyacheslav discussed &lt;a href=&quot;https://github.com/joyent/node/commit/91f1b250ecb4fb8151cd17423dd4460652d0ce97&quot;&gt;the commit&lt;/a&gt; in &lt;a href=&quot;https://plus.google.com/111090511249453178320/posts/ikjTyY6UKcE&quot;&gt;a google plus post&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This got me thinking about the best ways to convert the &lt;code&gt;arguments&lt;/code&gt; object, or part of it, to a standard JavaScript &lt;code&gt;Array&lt;/code&gt;.  I pulled out &lt;a href=&quot;https://raw.github.com/isaacs/node-bench&quot;&gt;the node benchmarking thing I wrote&lt;/a&gt;, and wrote up &lt;a href=&quot;https://raw.github.com/isaacs/node-bench/master/examples/array-ify.js&quot;&gt;two&lt;/a&gt; &lt;a href=&quot;https://raw.github.com/isaacs/node-bench/master/examples/array-ify-offset.js&quot;&gt;tests&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Disclaimers&lt;/h2&gt;
&lt;p&gt;This advice is only relevant in the latest v8.  By the time you read it, it&amp;rsquo;s already out of date and incorrect.  Just stop now, run your own tests, and make your own choices.&lt;/p&gt;
&lt;p&gt;If node.js is still using v8 version 3.4.12.1, then it &lt;em&gt;might&lt;/em&gt; be just a &lt;em&gt;little&lt;/em&gt; valid for your node programs, but otherwise, no.  Stop.  Don&amp;rsquo;t even continue reading.&lt;/p&gt;
&lt;h2&gt;Results&lt;/h2&gt;
&lt;p&gt;First, if your function takes a variable number of arguments, and you don&amp;rsquo;t know how many it will be called with &lt;strong&gt;do not define any named parameters&lt;/strong&gt;.  It makes things more complicated, and dramatically slows down the process.&lt;/p&gt;
&lt;p&gt;Want to just put all the &lt;code&gt;arguments&lt;/code&gt; in an array?  Do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function varArgsList () {
  var args = arguments.length === 1
           ? [arguments[0]] : Array.apply(null, arguments)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;rsquo;s an order of magnitude faster than &lt;code&gt;Array.prototype.slice.call&lt;/code&gt; or &lt;code&gt;[].slice.call&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Want to get all the arguments in a particular slice?  (Like, say, everything after the first, or the second until the second-to-last, etc.)  Well, that&amp;rsquo;s a bit more complicated.  There, as with the patch from Mr. Aleph, you&amp;rsquo;ve gotta walk the list yourself.&lt;/p&gt;
&lt;p&gt;For example, to do the equivalent of &lt;code&gt;Array.prototype.slice.call(arguments, 1)&lt;/code&gt;, pulling off every argument after the first, the fastest method seems to be this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;function manualMap () {
  var l = arguments.length
  var arr = new Array(l - 1)
  for (var i = 1; i &amp;lt; l; i ++) arr[i - 1] = arguments[i]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The fastest, if you know exactly which arguments are which, is to refer to them as &lt;code&gt;arguments[i]&lt;/code&gt;, and only array-ify if and when it&amp;rsquo;s absolutely necessary.  So, not surprisingly, I was unable to out-perform Mr. Aleph in a v8 benchmark-off.  My goal in this was simply to figure out &lt;em&gt;how much&lt;/em&gt; of a difference it makes, and write a script to check it later, in case I find myself in a similar situation again.&lt;/p&gt;
&lt;p&gt;Of course, &lt;code&gt;[].slice.call(arguments, 1, 2)&lt;/code&gt; is far fewer bytes, and easier to know what&amp;rsquo;s going on.  For most programs, the slight difference is not going to affect your overall program.  But sometimes hot code is hot enough to slow your benchmarks down by 20% because of what seems like a trivial change.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s only over-optimizing if it doesn&amp;rsquo;t make a significant difference.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Nuno&#39;s</title>
		<link href="https://blog.izs.me/2011/07/nunos/"/>
		<updated>2011-07-14T00:25:08Z</updated>
		<id>https://blog.izs.me/2011/07/nunos/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;nuno&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Email is such a huge part of my life.  I need to say &amp;quot;No&amp;quot; to a lot of people.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It&#39;d be cool if there was an app to do that for you.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;nuno&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah, it could be almost like an autoresponder or something.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;And you could have some kind of Markov thing to come up with innovative and creative ways to say no to everything.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;nuno&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;That&#39;d be great!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You should write that.  You could call it &amp;quot;Nuno&#39;s New No&#39;s&amp;quot;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;mikeal&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You were thinking about that for a while, huh?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;It was either that or a rhinoplasty joke.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Re: Brown Coffee Co&#39;s &quot;Correcting the Record&quot;</title>
		<link href="https://blog.izs.me/2011/06/re-brown-coffee-cos-correcting-the-record/"/>
		<updated>2011-06-28T17:59:00Z</updated>
		<id>https://blog.izs.me/2011/06/re-brown-coffee-cos-correcting-the-record/</id>
		<content type="html">&lt;p&gt;Comment posted &lt;a href=&quot;http://browncoffeeco.wordpress.com/2011/06/28/correcting-the-record/&quot;&gt;on their blog post&lt;/a&gt;, reposted here as well.  I expect that it will not pass moderation.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Not convinced.&lt;/p&gt;
&lt;p&gt;The tweet was “No human law can ever legitimize what natural law precludes #SorryFolks #NotEqual”. In the wake of the NY legalization of gay marriage, this would seem to indicate that at least someone at BrownCoffeeCo believes that “natural law” precludes homosexual pairings, and that homosexual couples are not “legitimate”, regardless of what the “human law” declares.&lt;/p&gt;
&lt;p&gt;Am I misinterpreting this? If so, it would be wise to go through that tweet word by word and explain exactly what each bit means, with reference to the specific classical philosophy you are referring to.&lt;/p&gt;
&lt;p&gt;Where is this written in the “natural law” of the universe? Is it implied by the workings of physics that love between two humans is better or worse depending on the similarity of their genitals?&lt;/p&gt;
&lt;p&gt;You might not be feeling hate or fear when you say these things. But it is nonetheless ignorant and offensive, and your customers have come to expect more from you. They are right to be disappointed. You would earn more respect with an apology and an explanation than with this cowardly backpedaling.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Evolution of a Prototypal Language User</title>
		<link href="https://blog.izs.me/2011/04/evolution-of-a-prototypal-language-user/"/>
		<updated>2011-04-18T23:28:00Z</updated>
		<id>https://blog.izs.me/2011/04/evolution-of-a-prototypal-language-user/</id>
		<content type="html">&lt;ol&gt;&lt;li&gt;Fresh out of Java or C++, learning JavaScript.  Look up on the internets how to define a class.  It doesn&amp;rsquo;t quite work.  Avoid the &amp;ldquo;new&amp;rdquo; keyword, because it is dangerous.&lt;/li&gt;
&lt;li&gt;Learn about prototypes.  Design constructors that work how you expect.  Re-introduce &amp;ldquo;new&amp;rdquo; into your code. &lt;small&gt;Note: Many programmers stop here.  And that is &lt;strong&gt;fine&lt;/strong&gt;.&lt;/small&gt;&lt;/li&gt;
&lt;li&gt;Learn about Object.create, Object.getPrototypeOf.  Mix and match constructors with just &amp;ldquo;raw&amp;rdquo; Object prototype usage.  Monkey-patch native prototypes.  Use prototypes to do everything.&lt;/li&gt;
&lt;li&gt;Come back to sanity.  Use constructors+prototypes to define objects, but use Plain Old Functions more often.  Prefer composition to &amp;ldquo;is-a&amp;rdquo; inheritance, but use is-a when it makes sense.  Use &lt;code&gt;new&lt;/code&gt; and prototypes to create objects that all extend the same prototype, because, well, why not?&lt;/li&gt;
&lt;li&gt;Re-read &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_Patterns&quot;&gt;the Gang of Four book&lt;/a&gt; that you once thought was so inspiring.  Grok how the &amp;ldquo;class&amp;rdquo; pattern is just a special case of disciplined prototype re-use.  Realize that prototypal inheritance makes a lot of those patterns trivial, and it&amp;rsquo;s a bit silly to spend so much time on them.&lt;/li&gt;
&lt;li&gt;Begin to notice actual applications that are best moduled with prototype chains.  (Branching recursive file-system walks, configuration object overriding, inheritance trees, etc.)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;rsquo;m really wondering what&amp;rsquo;s next on this list.&lt;/p&gt;
&lt;p&gt;The great thing about enlightenment is that it doesn&amp;rsquo;t end.  It is continually extending itself in multiple non-overlapping directions.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>New Project</title>
		<link href="https://blog.izs.me/2011/04/new-project/"/>
		<updated>2011-04-16T00:33:40Z</updated>
		<id>https://blog.izs.me/2011/04/new-project/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Name Redacted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;So, I&#39;m getting increasingly serious about launching [project redacted]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Name Redacted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;[url redacted]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;cool, there&#39;s a market for it, I&#39;ll bet.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i&#39;ve got some experience in that area. if you wanna get lunch and talk about the various ways that running such a service can suck and what people will expect, i&#39;d be happy to do that.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Name Redacted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Name Redacted&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I intend to just throw up a splash screen and collect email addresses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;HAHAHahaha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;your evil is delicious.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>How this works...</title>
		<link href="https://blog.izs.me/2011/02/how-this-works/"/>
		<updated>2011-02-20T01:54:00Z</updated>
		<id>https://blog.izs.me/2011/02/how-this-works/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;programmer 1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hey, it turns out you don&#39;t need semicolons in JavaScript, and my previous reasons for putting them there are not actually true.  Neat.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;programmer 2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah, but it&#39;ll break.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;But... that&#39;s just it, it &lt;em&gt;doesn&#39;t&lt;/em&gt; break.  It&#39;s actually ok for me to do this.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No it isn&#39;t.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Why not?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Browser bugs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Which browsers?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All of them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Well, it works fine on all the engines I&#39;ve tested---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;IE.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Works fine there, too.  Even in IE 5.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compression.  Compressors can&#39;t handle it. Need the semicolons.  All of them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All the compressors in use today handle it fine.  In fact, the code compresses a little &lt;em&gt;better&lt;/em&gt; in most of them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Well, whatever, that&#39;s not how it&#39;s done.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ok, well, there are other reasons to do things besides a convention.  I mean, you&#39;re wearing an unconventional hat, and that&#39;s cool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;So, now you have a problem with my coding style AND my hat?? FUCK YOU.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You can code however you want, and I love your hat, I was ju---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No.  NO.  Fuck you.  Seriously.  You crossed a line, dude.  Too far.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;[puzzled] I don&#39;t get why this an issue, I mean, if you see the spec, it says---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You just can&#39;t let this go, can you?  Why don&#39;t you lighten up?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Let what go, exactly?  And I don&#39;t really think that I&#39;m the one who needs to lighten anything.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Oh, so now you come in with the personal attacks.  I get it.  We&#39;re all not smart enough to understand your precious spec, so you have to attack people?  HAVE YOU NO DECENCY, SIR?  AT LONG LAST, HAVE YOU NO DECENCY?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;p1&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I think maybe hacker news isn&#39;t for me...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>On npm and Homebrew</title>
		<link href="https://blog.izs.me/2011/02/on-npm-and-homebrew/"/>
		<updated>2011-02-14T19:43:01Z</updated>
		<id>https://blog.izs.me/2011/02/on-npm-and-homebrew/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/mxcl/homebrew&quot;&gt;Homebrew&lt;/a&gt; is a Mac OS X package
manager created by &lt;a href=&quot;https://github.com/mxcl&quot;&gt;Max Howell&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s git-based, somewhat opinionated, and managed by a handful of
volunteers that review patches sent in by community members.  Its
purpose is to install unix programs and shared libraries, but Homebrew is designed with OS X in mind: by limiting the
scope of the problem, they manage significant gains in performance and
functionality.  Homebrew&amp;rsquo;s featureset and politics reflect that problem set well.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve said before that writing a package manager is easy.  It is.
Maintaining one, and managing the community using it?  Whoa, boy, that
gets tricky fast.  The Homebrew guys have done an admirable job of
steering that ship through a tricky bit of sea that few dare to deal
with.&lt;/p&gt;
&lt;p&gt;Almost as soon as npm was unleashed on the Node community, some helpful
folks helpfully decided to help us all by putting npm into the Homebrew
index.  I was so thankful to be helped in this way!  I love Homebrew,
and now my program is in it?  Oh, Joy of Joys!&lt;/p&gt;
&lt;p&gt;And thus began the great wailing and gnashing of teeth.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;npm is a package manager.  It is not git-based, it is as opinionless as
I could manage, and anyone can publish anything.  (I
do maintain autocratic powers over the registry, but I am a very lazy
dictator.)&lt;/p&gt;
&lt;p&gt;npm is designed to install NodeJS programs and module libraries.  While you
could in theory install anything with npm, that&amp;rsquo;d be a little dumb.  It
still lacks (and will likely lack forever) some features you&amp;rsquo;d really
want for that purpose, and has a bunch of features that are specifically
designed for node programs.  It makes no assumptions about pre-existing
operating systems, libraries, and so on.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure one could say whether or not npm&amp;rsquo;s approach is
&lt;em&gt;better&lt;/em&gt; than Homebrew&amp;rsquo;s.  For its use case, certainly.  But
Homebrew is a perfectly lovely package manager that fills an important
niche very nicely.&lt;/p&gt;
&lt;p&gt;Better or worse, the Homebrew model is not very amenable to npm&amp;rsquo;s way of
doing things, and the shoehorning caused some of the worst sorts of
bugs: The kind where &amp;ldquo;It works&amp;rdquo;, and then 2 months later &amp;ldquo;It doesn&amp;rsquo;t
work.&amp;rdquo;  What&amp;rsquo;s worse, the error was reported to the user as an npm
problem, so I frequently found myself dealing with confusing debugging
information, and giving users solutions that didn&amp;rsquo;t fix the issue.&lt;/p&gt;
&lt;p&gt;The standard response quickly became, &amp;ldquo;It doesn&amp;rsquo;t work with
Homebrew.  Remove it, and install it using the instructions in the
README.&amp;rdquo;  What&amp;rsquo;s worse, the changes that caused these issues were in the
Homebrew index, and not in npm.  Even if I&amp;rsquo;d wanted to code around the
problems, I couldn&amp;rsquo;t just do that in npm itself.&lt;/p&gt;
&lt;p&gt;It was not easily fixable, and very frustrating.  I had more than enough work to do on npm itself, so it was always pretty easy to just blame the other guy, and go back to work.  But this was not the right course of action.&lt;/p&gt;
&lt;h2&gt;The Solution&lt;/h2&gt;
&lt;p&gt;One day, in a fit of frustration over the situation, having just painfully
explained to two users in a row that their most beloved package managers have
both been lying to them, I managed to raise the ire and
disappointment of &lt;a href=&quot;http://jan.prima.de/&quot;&gt;Jan Lenhardt&lt;/a&gt;.  Luckily for us
all, he had the pre-existing notion that I&amp;rsquo;m an ok chap, and decided to
give me a swift kick in the ass rather than
&lt;a href=&quot;http://c2.com/cgi/wiki?SetTheBozoBit&quot;&gt;setting the bozo bit&lt;/a&gt;.  He deserves a lot of credit for stepping in when and how he did.&lt;/p&gt;
&lt;p&gt;I opened up an issue on the Homebrew github page, started a pull
request, and &lt;a href=&quot;https://github.com/mikemcquaid&quot;&gt;Mike McQuaid&lt;/a&gt; and I duked
it out for a while.&lt;/p&gt;
&lt;p&gt;We all knew at the start of the discussion that just removing
npm from the Homebrew index was a potential course of action that would
solve a lot of problems with very little cost to everyone.  But none of
us wanted to do so capriciously, without at least riding the solution
train to its logical end.&lt;/p&gt;
&lt;p&gt;Mike and I eventually got to a rewrite of the npm
recipe that we could both live
with.  It wasn&amp;rsquo;t great, but it was much better.  And, really, there wasn&amp;rsquo;t
any way to improve upon it further, without rewriting major chunks of one or
both of our programs.&lt;/p&gt;
&lt;p&gt;Max made the call to remove it.  I agree with him.  Better for a feature
to be intentionally lacking rather than subtly broken.&lt;/p&gt;
&lt;h2&gt;Takeaways, and The Future&lt;/h2&gt;
&lt;p&gt;The debate was fruitful, and helped inform the development of
npm and node.  I&amp;rsquo;d like to think it was somewhat profitable for Mike
and Max, as well.&lt;/p&gt;
&lt;p&gt;There may one day be an npm recipe in Homebrew again.  But at least not
until npm 1.0, when things settle out a bit.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2011/01/seldo-new-episodes-jan-27th-so-excited/"/>
		<updated>2011-01-20T07:40:37Z</updated>
		<id>https://blog.izs.me/2011/01/seldo-new-episodes-jan-27th-so-excited/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://seldo.tumblr.com/post/2815138406/new-episodes-jan-27th-so-excited&quot; class=&quot;tumblr_blog&quot;&gt;seldo&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;NEW EPISODES JAN 27TH SO EXCITED&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Wrench</title>
		<link href="https://blog.izs.me/2011/01/wrench/"/>
		<updated>2011-01-12T00:11:06Z</updated>
		<id>https://blog.izs.me/2011/01/wrench/</id>
		<content type="html">&lt;p&gt;When you have a wrench, all problems look like fucked up nail that didn&amp;rsquo;t get hammered in quite right.&lt;/p&gt;
&lt;p&gt;But if you pull on it, you can straighten it, so really, I don&amp;rsquo;t see what the problem is, I mean, it couldn&amp;rsquo;t be more obvious, and clearly, a wrench is the best tool for any jobs it can do.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a really nice wrench, if people would just learn to use it properly, then their nails would be fine.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Wanted: &quot;no-false-attribs&quot; OSS License</title>
		<link href="https://blog.izs.me/2010/12/wanted-no-false-attribs-oss-license/"/>
		<updated>2010-12-30T10:31:00Z</updated>
		<id>https://blog.izs.me/2010/12/wanted-no-false-attribs-oss-license/</id>
		<content type="html">&lt;p&gt;Anyone know of a license that says this?  If not, are there any lawyers out
there who wanna do lawyer stuff to this?&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;You can use this thing for whatever purpose you want, commercial,
non-commercial, whatever, under the following terms:&lt;/li&gt;
&lt;li&gt;You can distribute or sublicense this thing as much as you want,
provided the copyright and license remains attached to any reasonable
portion of the thing.&lt;/li&gt;
&lt;li&gt;You cannot sell this thing for a profit without any meaningful
changes.  You can, however, sell a thing that is built using this
thing, or a thing that uses this thing as a component and adds
nontrivial functionality to it, or a thing
that links to this thing as a separate library, or pretty much anything other than
&amp;ldquo;this exact thing and nothing else&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;If you distribute this thing, whether for profit or not, and you&amp;rsquo;ve made some meaningful changes, &lt;strong&gt;any
such changes must be clearly spelled out to the end user,
and the bug reporting contact information must be changed or removed.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;rsquo;m ok with you using the stuff I build.  In fact, that&amp;rsquo;s actually why I
build stuff, so people will use it.  And money is great, so using it
to make a profit?  That&amp;rsquo;s so totally awesome.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m also ok with you sharing the stuff I build.  I want people to use
it, and if you help that happen, then that&amp;rsquo;s also great.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m super ok with you tinkering with the stuff I build.  Seriously.  Go
nuts on it.  Do stuff.  Rock on.  I&amp;rsquo;d love to see what you do to it, but
if it&amp;rsquo;s your secret project, I totally get that, too.&lt;/p&gt;
&lt;p&gt;I just wish that, if you&amp;rsquo;re going to change it, and then hand it out to
others, you didn&amp;rsquo;t give me credit for the changes I didn&amp;rsquo;t make.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>An Open Letter to JavaScript Leaders Regarding Semicolons</title>
		<link href="https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/"/>
		<updated>2010-12-18T00:50:00Z</updated>
		<id>https://blog.izs.me/2010/12/an-open-letter-to-javascript-leaders-regarding/</id>
		<content type="html">&lt;p&gt;I got this email last night from Sean Silva:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;I was browsing the code for your npm.js project (this file in
  particular: &lt;a href=&quot;https://github.com/isaacs/npm/blob/master/lib/npm.js&quot;&gt;https://github.com/isaacs/npm/blob/master/lib/npm.js&lt;/a&gt;),
  and noticed you using a style where you line up your commas under
  the &amp;lsquo;r&amp;rsquo; of your var statements, and under your [ and { in
  array/object literals. I&amp;rsquo;m very fond of this kind of formatting, but
  have been reluctant to use it since most js resources expound a fear
  of js&amp;rsquo;s automatic semicolon insertion wreaking havoc on your code if
  you don&amp;rsquo;t end lines with something which implies a continuation.&lt;/p&gt;
  &lt;p&gt;Is this safe to place commas like this in browser code, or is it
  just node where this is possible?&lt;/p&gt;
  &lt;p&gt;&lt;ins&gt;2011-12-20 updated link to file&lt;/ins&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I wrote a few paragraphs, and then decided to shorten it to just this
response:&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Yes, it&amp;rsquo;s quite safe, and perfectly valid JS that every browser
  understands.  Closure compiler, yuicompressor, packer, and jsmin all
  can properly minify it.  There is no performance impact anywhere.&lt;/p&gt;
  &lt;p&gt;I am sorry that, instead of educating you, the leaders in this
  language community have given you lies and fear.  That was shameful.
  I recommend learning how statements in JS are actually terminated
  (and in which cases they are &lt;em&gt;not&lt;/em&gt; terminated), so that you can
  write code that you find beautiful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Inimino posted &lt;a href=&quot;http://inimino.org/~inimino/blog/javascript_semicolons&quot;&gt;this
very clear explanation&lt;/a&gt;.  In his typical style, it is crisp, clear,
authoritative, well researched, and he generally kept his opinions to
himself.&lt;/p&gt;
&lt;p&gt;I am going to be a bit more opinionated.&lt;/p&gt;
&lt;h3&gt;The Rules&lt;/h3&gt;
&lt;p&gt;In general, &lt;code&gt;&#92;n&lt;/code&gt; ends a statement unless:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;The statement has an unclosed paren, array literal, or object
literal or ends in some other way that is not a valid way to end a
statement.  (For instance, ending with &lt;code&gt;.&lt;/code&gt; or &lt;code&gt;,&lt;/code&gt;.)&lt;/li&gt;
&lt;li&gt;The line is &lt;code&gt;--&lt;/code&gt; or &lt;code&gt;++&lt;/code&gt; (in which case it will decrement/increment
the next token.)&lt;/li&gt;
&lt;li&gt;It is a &lt;code&gt;for()&lt;/code&gt;, &lt;code&gt;while()&lt;/code&gt;, &lt;code&gt;do&lt;/code&gt;, &lt;code&gt;if()&lt;/code&gt;, or &lt;code&gt;else&lt;/code&gt;, and there is
no &lt;code&gt;{&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The next line starts with &lt;code&gt;[&lt;/code&gt;, &lt;code&gt;(&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;*&lt;/code&gt;, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;,&lt;/code&gt;, &lt;code&gt;.&lt;/code&gt;,
or some other binary operator that can only be found between two
tokens in a single expression.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The first is pretty obvious.  Even JSLint is ok with &lt;code&gt;&#92;n&lt;/code&gt; chars in
JSON and parenthesized constructs, and with &lt;code&gt;var&lt;/code&gt; statements that span
multiple lines ending in &lt;code&gt;,&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The second is super weird.  I&amp;rsquo;ve never seen a case (outside of these
sorts of conversations) where you&amp;rsquo;d want to do write &lt;code&gt;i&#92;n++&#92;nj&lt;/code&gt;, but,
point of fact, that&amp;rsquo;s parsed as &lt;code&gt;i; ++j&lt;/code&gt;, not &lt;code&gt;i++; j&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The third is well understood, if generally despised.  &lt;code&gt;if (x)&#92;ny()&lt;/code&gt; is
equivalent to &lt;code&gt;if (x) { y() }&lt;/code&gt;.  The construct doesn&amp;rsquo;t end until it
reaches either a block, or a statement.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;;&lt;/code&gt; is a valid JavaScript statement, so &lt;code&gt;if(x);&lt;/code&gt; is equivalent to
&lt;code&gt;if(x){}&lt;/code&gt; or, &amp;ldquo;If x, do nothing.&amp;rdquo;  This is more commonly applied to
loops where the loop check also is the update function.  Unusual, but
not unheard of.&lt;/p&gt;
&lt;p&gt;The fourth is generally the fud-inducing &amp;ldquo;oh noes, you need
semicolons!&amp;rdquo; case.  But, as it turns out, it&amp;rsquo;s quite easy to &lt;em&gt;prefix&lt;/em&gt;
those lines with semicolons if you don&amp;rsquo;t mean them to be continuations
of the previous line.  For example, instead of this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;foo();
[1,2,3].forEach(bar);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;you could do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;foo()
;[1,2,3].forEach(bar)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The advantage is that the prefixes are easier to notice, once you are
accustomed to never seeing lines starting with &lt;code&gt;(&lt;/code&gt; or &lt;code&gt;[&lt;/code&gt; without
semis.&lt;/p&gt;
&lt;h3&gt;Restricted Productions&lt;/h3&gt;
&lt;p&gt;The other common argument for semicolons has to do with semicolon
insertion and &amp;ldquo;restricted productions&amp;rdquo;.  That is, if you have a &lt;code&gt;&#92;n&lt;/code&gt;
immediately after a &lt;code&gt;return&lt;/code&gt;, &lt;code&gt;throw&lt;/code&gt;, &lt;code&gt;break&lt;/code&gt;, or &lt;code&gt;continue&lt;/code&gt; token,
or a &lt;code&gt;++&lt;/code&gt; or &lt;code&gt;--&lt;/code&gt; as a postfix operator (that is, &lt;code&gt;x++&#92;n&lt;/code&gt; or &lt;code&gt;y--&#92;n&lt;/code&gt;),
then it will terminate the statement, no exceptions.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;//ok
return 7

//probably a mistake
return
       7
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, again, this is in fact &lt;em&gt;easier&lt;/em&gt; to spot and avoid once you
get out of the habit of terminating every statement with a semicolon.
When I see the second, my brain instinctively associates the &lt;code&gt;&#92;n&lt;/code&gt; with
&amp;ldquo;ok, this is over now&amp;rdquo;, because return is &lt;em&gt;always&lt;/em&gt; terminated by just
a linebreak.&lt;/p&gt;
&lt;p&gt;Lining up the most relevant tokens on the left edge of the screen
makes them demonstrably easier for humans to quickly scan.  Piles of
research on the subject of speed reading and eye-tracking suggest that
a missing token on the right is far more likely to be overlooked than
one on the left.  So, I say, make the right-edge irrelevant, and put
the important things on the left.&lt;/p&gt;
&lt;h3&gt;So which style is better?&lt;/h3&gt;
&lt;p&gt;To the extent that there is an objectively &amp;ldquo;better&amp;rdquo; choice, it appears
to me that the minimal-semicolon/comma-first style is &lt;strong&gt;slightly&lt;/strong&gt;
superior, both because it is fundamentally more scannable and because
it encourages programmers to better understand the language they use.&lt;/p&gt;
&lt;p&gt;I can pretty well guarantee that, if you care about this even a
little, I care less about your JavaScript style than you do about
mine.  This isn&amp;rsquo;t an article where I try to convince you to write your
code like I write mine.  &lt;a href=&quot;http://groups.google.com/group/nodejs/msg/428220ab8cd199d2&quot;&gt;We should all decide the pants policy in our
own
homes.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Just as a show of good faith&amp;hellip;&lt;/p&gt;
&lt;h3 id=&quot;good-reasons&quot;&gt;Good Reasons to Put Semicolons Everywhere&lt;/h3&gt;
&lt;p&gt;The best reasons for excessive semicolon usage are esthetics and
politics.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I put semicolons in my JavaScript because without semicolons, it&amp;rsquo;s
not valid C/C++/Java/Whatever.&amp;rdquo;  If you have to write a bunch of Java
or C code in a project, and want your JavaScript to not look too
different, then that is a valid concern.
(&lt;a href=&quot;http://cassisjs.org/&quot;&gt;Cassis&lt;/a&gt; takes this approach to its absurd end.)&lt;/p&gt;
&lt;p&gt;&amp;ldquo;We do it this way because we use this linter, and it says to.&amp;rdquo;
Consistency is important, and linters are one way to help a group of
people stay consistent.  Writing an npm-style linter is on my todo
list, but it&amp;rsquo;s not very high up on it.&lt;/p&gt;
&lt;h3&gt;The Most Terrible Reason to Put Semicolons Everywhere&lt;/h3&gt;
&lt;p&gt;&amp;ldquo;They&amp;rsquo;re required because ASI is unreliable.&amp;rdquo;  Seriously!?&lt;/p&gt;
&lt;p&gt;These rules date back to the early days of JavaScript, in the late
90s.  They&amp;rsquo;re not new, and in my opinion there is no excuse for
someone calling themselves a professional JavaScripter and not
understanding statement termination.  &lt;strong&gt;It is blatantly irresponsible
of the thought leaders in the JavaScript community to continue to
spread uncertainty rather than understanding.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Furthermore, the typical place where &amp;ldquo;automatic semicolon insertion&amp;rdquo;
bites unexpectedly is with the restricted productions.  &lt;strong&gt;Adding
semicolons to every line will not make &lt;code&gt;return&#92;nfoo&lt;/code&gt; return anything
other than &lt;code&gt;undefined&lt;/code&gt;.&lt;/strong&gt;  The problem is that you &lt;strong&gt;do&lt;/strong&gt; use line
breaks, not that you &lt;strong&gt;don&amp;rsquo;t&lt;/strong&gt; use semicolons.&lt;/p&gt;
&lt;p&gt;The only way to prevent restricted productions from &lt;em&gt;ever&lt;/em&gt; being an
issue is to always use semicolons &lt;em&gt;and never use linebreaks&lt;/em&gt;.  No one
is suggesting that.  So stop talking about restricted productions as
if they matter, or offering semicolon overuse as an alternative to
understanding ASI.  You have to understand ASI to be a competent
JavaScripter, period.&lt;/p&gt;
&lt;p&gt;Which leads me to&amp;hellip;&lt;/p&gt;
&lt;h3&gt;The Part Where I Get All Opinionated and Piss You Off (despite a noble effort to the contrary)&lt;/h3&gt;
&lt;p&gt;If you don&amp;rsquo;t understand how statements in JavaScript are terminated,
then you just don&amp;rsquo;t know JavaScript very well, and shouldn&amp;rsquo;t write
JavaScript programs professionally without supervision, and you
&lt;em&gt;definitely&lt;/em&gt; should not tell anyone else how to write their JavaScript
programs.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m guessing I just insulted you.  That&amp;rsquo;s unfortunate.  I know that
you probably know all sorts of things &lt;em&gt;around&lt;/em&gt; JavaScript, like the
DOM, and CSS, and MSIE&amp;rsquo;s little quirks, and jQuery.  You have maybe
also spent some time learning about closures and prototypes and scope
and activation objects, and even hacked a few extensions onto V8 or
SpiderMonkey.  You&amp;rsquo;re not a dummy, I&amp;rsquo;m sure.  In fact, you&amp;rsquo;re almost
certainly smarter than I am, and probably better looking and nicer,
too.  I&amp;rsquo;m sure we have a lot in common, and could maybe even be
friends.&lt;/p&gt;
&lt;p&gt;But if you don&amp;rsquo;t understand &lt;em&gt;what a JavaScript statement &lt;b&gt;is&lt;/b&gt;&lt;/em&gt;,
then there is a huge hole in your understanding of perhaps the most
fundamental aspect of the language.&lt;/p&gt;
&lt;p&gt;And that&amp;rsquo;s ok.  I don&amp;rsquo;t speak Spanish very well and my C is pretty
novice; I also don&amp;rsquo;t call myself an expert in either one, though I
know enough to get by in many situations.  If I were to get a job that
involved a lot of Spanish speaking or C coding, I&amp;rsquo;d want someone
watching to help me avoid making any serious mistakes.&lt;/p&gt;
&lt;p&gt;Like most things in JavaScript, the statement termination rules are
not very &lt;em&gt;well&lt;/em&gt; designed, but they&amp;rsquo;re also not particularly &lt;em&gt;hard&lt;/em&gt; to
understand and use.  That understanding just takes a bit of time and
effort.&lt;/p&gt;
&lt;p&gt;Cozy up with some hot chocolate and the ECMAScript spec some Saturday
afternoon.  Practice a little.  Play around with some test programs.
It&amp;rsquo;s a good time.&lt;/p&gt;
&lt;p&gt;Or don&amp;rsquo;t do that, if you don&amp;rsquo;t feel like it.  It&amp;rsquo;s your life.  You
almost certainly have better things to do with it.&lt;/p&gt;
&lt;p&gt;Just please stop making authoritative claims like &amp;ldquo;terminate all lines
with semicolons to be safe.&amp;rdquo;  It&amp;rsquo;s not any safer, or more reliable.&lt;/p&gt;
&lt;h3&gt;Addenda 1: &amp;ldquo;leaders&amp;rdquo;&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;So, mr ruffler of feathers, who are these &amp;ldquo;leaders&amp;rdquo; you speak of?
  Why didn&amp;rsquo;t you name names?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Because there are too many to name, and I don&amp;rsquo;t know all of them.&lt;/p&gt;
&lt;p&gt;If you have been writing JavaScript for a while, and you provide
guidance or leadership to another person who has been writing
JavaScript for less time than you, then I&amp;rsquo;m talking to you.  Being a
leader is a responsibility.  Take it seriously.  Don&amp;rsquo;t spread lies. Be
an expert, or admit you&amp;rsquo;re not an expert.  But don&amp;rsquo;t drive that car
without a license.&lt;/p&gt;
&lt;h3 id=&quot;literary&quot;&gt;Addenda 2: Literary Programmer&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;but in English, we put punctuation at the end, not the beginning&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;JavaScript isn&amp;rsquo;t english.  We also don&amp;rsquo;t denote ownership (or
subject-verb connection) using a period in English.  We don&amp;rsquo;t have
Object Literals in English, and we only indent the first line of
paragraphs, not all the middle sentences.&lt;/p&gt;
&lt;p&gt;This is such a silly argument, I have no choice but to fall in love
with it.  I started out your detractor, but you won my heart, Literary
Programmer.  From now on, I&amp;rsquo;m going to only put line-breaks at the end
of functions, and never in the middle, and indent the first line of
each.&lt;/p&gt;
&lt;h3&gt;Addenda 3: Pedantry&lt;/h3&gt;
&lt;blockquote&gt;
  &lt;p&gt;Why you wanna change my codes? What are you some kinda pedant?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Code however you want.  I don&amp;rsquo;t care, even a little.&lt;/p&gt;
&lt;p&gt;Please just don&amp;rsquo;t lie to people.  That&amp;rsquo;s all I&amp;rsquo;m asking.  It&amp;rsquo;s such a
little bit of politeness.  It&amp;rsquo;s not hard.  Just say true things,
instead of being a liar, that&amp;rsquo;s all that this is about.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>explaining git</title>
		<link href="https://blog.izs.me/2010/12/explaining-git/"/>
		<updated>2010-12-16T20:23:12Z</updated>
		<id>https://blog.izs.me/2010/12/explaining-git/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;robg&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Awesome explanation of git: &lt;a href=&quot;http://tartley.com/?p=1267&quot;&gt;http://tartley.com/?p=1267&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;robg: i&#39;m not sure that quite counts as an &amp;quot;explanation&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;robg&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;isaacs: it&#39;s an explanation, just not one that clarifies anything&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaacs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;haha&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rob&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;PUSH YOUR FUCKING CODE!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;robg&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No, no, that&#39;s part of the operations manual...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;rob&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;that was offtopic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2010/12/a-three-day-old-human-embryo-is-a-collection-of/"/>
		<updated>2010-12-01T18:16:51Z</updated>
		<id>https://blog.izs.me/2010/12/a-three-day-old-human-embryo-is-a-collection-of/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;A three-day-old human embryo is a collection of 150 cells called a blastocyst. There are, for the sake of comparison, more than 100,000 cells in the brain of a fly. If our concern is about suffering in this universe, it is rather obvious that we should be more concerned about killing flies than about killing three-day-old human embryos… Many people will argue that the difference between a fly and a three-day-old human embryo is that a three-day-old human embryo is a potential human being. Every cell in your body, given the right manipulations, every cell with a nucleus is now a potential human being. Every time you scratch your nose, you’ve committed a holocaust of potential human beings… Let’s say we grant it that every three-day-old human embryo has a soul worthy of our moral concern. First of all, embryos at this stage can split into identical twins. Is this a case of one soul splitting into two souls? Embryos at this stage can fuse into a chimera. What has happened to the extra human soul in such a case? This is intellectually indefensible, but it’s morally indefensible given that these notions really are prolonging scarcely endurable misery of tens of millions of human beings, and because of the respect we accord religious faith, we can’t have this dialogue in the way that we should. I submit to you that if you think the interests of a three-day-old blastocyst trump the interests of a little girl with spinal cord injuries or a person with full-body burns, your moral intuitions have been obscured by religious metaphysics.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sam Harris, on stem cell research. (via &lt;a href=&quot;http://cocknbull.tumblr.com/&quot;&gt;cocknbull&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>10 Cool Things You Probably Didn&#39;t Realize npm Could Do</title>
		<link href="https://blog.izs.me/2010/11/10-cool-things-you-probably-didnt-realize-npm/"/>
		<updated>2010-11-25T01:22:00Z</updated>
		<id>https://blog.izs.me/2010/11/10-cool-things-you-probably-didnt-realize-npm/</id>
		<content type="html">&lt;p&gt;&lt;strong&gt;OMG UPDAET!&lt;/strong&gt; &lt;small&gt;2011-06-19&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Some of this is no longer 100% accurate, which shouldn&amp;rsquo;t be very surprising, since it was written 7 months ago, and npm had a major version update since then.&lt;/p&gt;
&lt;p&gt;Check out &lt;a href=&quot;http://blog.nodejs.org/category/npm&quot;&gt;the node blog&lt;/a&gt; for some of the 1.0 changes.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;npm is the node package manager.  Once upon a time, I would have said
&amp;ldquo;a&amp;rdquo; node package manager, and the humbler part of me would like to
pretend that that&amp;rsquo;s still the case, but SCREW THAT HUMBLER SIDE, I&amp;rsquo;m
feeling egotistical and braggy today, so today it&amp;rsquo;s &lt;strong&gt;THE&lt;/strong&gt; node package
manager.&lt;/p&gt;
&lt;p&gt;Also, I&amp;rsquo;m writing a &amp;ldquo;head -n 10&amp;rdquo; blog post, so it&amp;rsquo;s basically a license to be a complete ass.&lt;/p&gt;
&lt;p&gt;Yeah, it&amp;rsquo;s that kinda day.  I think tomorrow, Imma eat a turkey.  So there.&lt;/p&gt;
&lt;p&gt;You probably know that npm can install stuff, publish stuff, remove
stuff, and that it makes dependencies magically work.  You may even know that it
runs without being burdened by unnecessary semicolons.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a node veteran, you may even already know about some of these
lesser-known features.  But I&amp;rsquo;m hoping that at least one of them is a bit
surprising, even for old timers and core node devs.&lt;/p&gt;
&lt;h2&gt;1: Handle multiple versions of the same thing at the same time&lt;/h2&gt;
&lt;p&gt;One of the reasons I wrote npm is that package managers put you in
dependency hell, and I simply can&amp;rsquo;t abide that.&lt;/p&gt;
&lt;p&gt;npm keeps all its installed packages organized in &lt;code&gt;name/version&lt;/code&gt;
folders, and versions all the public stuff.  Then, one of them is
&amp;ldquo;active&amp;rdquo; at any given time in the global space.  (That&amp;rsquo;s what you&amp;rsquo;ll see
if you install multiple versions of &amp;ldquo;foo&amp;rdquo; and then drop into the repl and
do &lt;code&gt;require(&quot;foo&quot;)&lt;/code&gt;.)&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s where it gets cool:  Let&amp;rsquo;s say that you installed &lt;code&gt;foo@1.0.0&lt;/code&gt;
and &lt;code&gt;foo@2.0.0&lt;/code&gt;.  Now, you have &lt;code&gt;bar@1.0.0&lt;/code&gt; that depends on &lt;code&gt;foo@1.0.0&lt;/code&gt;,
and &lt;code&gt;baz@1.0.0&lt;/code&gt; that depends on &lt;code&gt;foo@2.0.0&lt;/code&gt;, and &lt;code&gt;quux@1.0.0&lt;/code&gt; that
depends on &lt;code&gt;bar&lt;/code&gt; and &lt;code&gt;baz&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a diagram:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;quux@1.0.0
|
+-- bar@1.0.0
|   |
|   `-- foo@1.0.0 &#92;
|                  &#92;
`-- baz@1.0.0       &amp;gt; Conflict?
    |              /
    `-- foo@2.0.0 /
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In most package manager systems, quux would simply never be installable.
It needs two packages that can&amp;rsquo;t coexist because they have competing
dependencies.  Or, you&amp;rsquo;d have to name things stupidly, and bar and
baz would have tobe aware of one another.&lt;/p&gt;
&lt;p&gt;npm handles that all for you.  Try it.  It works.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s &lt;strong&gt;MAGIC&lt;/strong&gt;.  (Also, it&amp;rsquo;s the commonjs module system&amp;rsquo;s built in
separation of scope that doesn&amp;rsquo;t require that the path be a single
consistent thing.)&lt;/p&gt;
&lt;h2&gt;2: Be gone at runtime&lt;/h2&gt;
&lt;p&gt;npm doesn&amp;rsquo;t load your modules.  It installs them.  Then you can even do
&lt;code&gt;npm rm npm&lt;/code&gt; and it&amp;rsquo;ll remove itself.  All the modules you installed?
Yeah, they still work.&lt;/p&gt;
&lt;p&gt;It does this by setting up things in the proper places so that node&amp;rsquo;s
very simple module loader can find them when it needs them.&lt;/p&gt;
&lt;p&gt;Most package managers are sort of hybrid loader/installer things.  npm
is first and foremost a dependency manager.  It puts things in place,
and then ducks out of the way so that it&amp;rsquo;s not all in your face telling
you how to write your programs.&lt;/p&gt;
&lt;h2&gt;3: Structure your program any way you want&lt;/h2&gt;
&lt;p&gt;&amp;hellip;provided, of course, you describe that structure in a package.json
file.&lt;/p&gt;
&lt;p&gt;That is, you can put all your node modules in a folder called &amp;ldquo;src&amp;rdquo; or
&amp;ldquo;lib&amp;rdquo; or &amp;ldquo;path/to/my/awesome/modules&amp;rdquo;.  npm doesn&amp;rsquo;t care.  In fact, it
doesn&amp;rsquo;t even need to be a node program.  If you can describe the package
in a package.json file, you can install &lt;em&gt;literally anything&lt;/em&gt;.  I&amp;rsquo;m
waiting for people to figure this out, and see something awful and
hideous like &lt;code&gt;npm install vim&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A lot of people have objected to this feature.  They called me crazy and
said that we need to form a committee and decide on a set of
conventions.  Some even went so far as to pound fists on tables, and
declare that madness will surely result from my freewheeling insanity!&lt;/p&gt;
&lt;p&gt;To them, I say, HA!  JavaScript is at its heart an anarchic language,
forged in the great battles of Browsers, lit by the flicker of a
thousand animated gifs depicting construction workers.  It bears many
scars from those dark days, but it also resulted in a strong and vibrant
community, all of whom have strong opinions and found their way here
because they could not agree on much of anything.&lt;/p&gt;
&lt;p&gt;npm welcomes your strife.  Like JavaScript itself, it doesn&amp;rsquo;t judge you.&lt;/p&gt;
&lt;p&gt;Read through &lt;code&gt;npm help json&lt;/code&gt; to learn what you can put in your
package.json file.&lt;/p&gt;
&lt;h2&gt;4: Start a package.json file for you&lt;/h2&gt;
&lt;p&gt;If you run &lt;code&gt;npm init&lt;/code&gt; in a folder, it&amp;rsquo;ll ask you a few questions, and
then write out a package.json file.&lt;/p&gt;
&lt;p&gt;The init command is pretty new, and doesn&amp;rsquo;t do much.  But sometimes all
you need is a little nudge to get started.&lt;/p&gt;
&lt;h2&gt;5: Verify sha1 hashes of packages&lt;/h2&gt;
&lt;p&gt;As of version 0.2.9, sha hashes get generated for all packages as they
get published, and then are verified after being downloaded.&lt;/p&gt;
&lt;p&gt;Checksumming is one of those things where everyone feels a little safer
knowing it&amp;rsquo;s there, but no one usually pays much attention to it.  When
it works, it&amp;rsquo;s silent, and that&amp;rsquo;s great.&lt;/p&gt;
&lt;p&gt;The good news is that, now, if there&amp;rsquo;s some kind of error downloading
something, or if something gets corrupted in transit in any other way,
then npm will stubbornly refuse to proceed.&lt;/p&gt;
&lt;p&gt;(You have to compile node with openssl crypto support for this to work.)&lt;/p&gt;
&lt;h2&gt;6: Shut The Hell Up&lt;/h2&gt;
&lt;p&gt;Sometimes you just need to show your packager who&amp;rsquo;s boss.  &amp;ldquo;Shutting up&amp;rdquo; is a feature.  By
setting the &lt;code&gt;loglevel&lt;/code&gt; config, you can make npm anywhere from completely
silent to ludicrously noisy.  The levels are: silent, win, error, warn,
info, verbose, and silly.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;silent: completely silent.  Zero logging output.&lt;/li&gt;
&lt;li&gt;win: Just the &amp;ldquo;npm ok&amp;rdquo; or &amp;ldquo;npm not ok&amp;rdquo; message at the end.&lt;/li&gt;
&lt;li&gt;error: When something unexpected and bad happens.&lt;/li&gt;
&lt;li&gt;warn: When something odd or potentially dangerous is happening.&lt;/li&gt;
&lt;li&gt;info: Helpful information so you can track what&amp;rsquo;s happening.&lt;/li&gt;
&lt;li&gt;verbose: Even more.  Perhaps just a wee bit obnoxious, even.&lt;/li&gt;
&lt;li&gt;silly: Completely fuckin crazy, man.  Dump everything.  Whole objects,
you name it, whatever.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Like any configuration option, you can set the loglevel in a few ways.
To set it for just one command just add &lt;code&gt;--loglevel silent&lt;/code&gt; to the
command.  This is particularly handy if something breaks, and you want
to provide a bit more debugging output with &lt;code&gt;--loglevel verbose&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To set it for your user account, you can do &lt;code&gt;npm config set loglevel
win&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;To set it globally for all users on the machine, you can do &lt;code&gt;npm config
set loglevel info --global&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You can also set it in the environment if that floats your boat.  Any
config option can be set by the &lt;code&gt;npm_config_&amp;lt;blerg&amp;gt;&lt;/code&gt; environ, so doing
&lt;code&gt;export npm_config_loglevel=verbose&lt;/code&gt; will affect all subsequent npm
commands.&lt;/p&gt;
&lt;p&gt;Oh, and if those &lt;code&gt;npm config set&lt;/code&gt; and &lt;code&gt;npm config get&lt;/code&gt; commands get
tedious, you can just do &lt;code&gt;npm c edit&lt;/code&gt; to open up the config in your
favorite editor.&lt;/p&gt;
&lt;p&gt;See &lt;code&gt;npm help config&lt;/code&gt; for more info.&lt;/p&gt;
&lt;h2&gt;7: Abbreviate commands&lt;/h2&gt;
&lt;p&gt;If you&amp;rsquo;re anything like me, then you drink a lot of coffee, hate extra typing,
and are awesome.  But mostly the typing.  Let&amp;rsquo;s focus on that.&lt;/p&gt;
&lt;p&gt;Is &amp;ldquo;install&amp;rdquo; just too long for you?  Try &lt;code&gt;npm inst connect&lt;/code&gt;.  Bam.  Done.&lt;/p&gt;
&lt;p&gt;Anything that is unambiguous will work just as well.  I don&amp;rsquo;t have this
logic implemented for arguments and package names, but that&amp;rsquo;s on the
roadmap.  It uses the &lt;code&gt;abbrev&lt;/code&gt; program, and you can use it in your
programs, too.  &lt;code&gt;npm i abbrev&lt;/code&gt; to get it.&lt;/p&gt;
&lt;p&gt;The most common commands even have super short shorthands, because I
love you.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;i: install&lt;/li&gt;
&lt;li&gt;r, rm: uninstall&lt;/li&gt;
&lt;li&gt;ln: link&lt;/li&gt;
&lt;li&gt;ls: list&lt;/li&gt;
&lt;li&gt;bn: bundle&lt;/li&gt;
&lt;li&gt;up: update&lt;/li&gt;
&lt;li&gt;c: config&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you think it stops there, you&amp;rsquo;re wrong.  So wrong.  Go sit in the
corner.&lt;/p&gt;
&lt;p&gt;In the npm source folder, there&amp;rsquo;s a file called &lt;code&gt;npm-completion.sh&lt;/code&gt;.
Source that bad boy in your bashrc or whatever, and you&amp;rsquo;ve got tab
completion.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Tab completion!&lt;/em&gt;  The &lt;abbr title=&quot;Yeah, I know what penultimate means,
hold on a second&quot;&gt;penultimate&lt;/abbr&gt; feature of any unix program, &lt;abbr title=&quot;see?&quot;&gt;second only to&lt;/abbr&gt; tab completion that works and is
helpful!&lt;/p&gt;
&lt;p&gt;This is where you come in.  Check out what it&amp;rsquo;s doing.  Dig into the
code.  Make it better.  Right now it can just tab-complete npm commands,
not package names or other useful things.  But if you hack away on the
&lt;code&gt;lib/completion.js&lt;/code&gt; file, you can make it awesomer.&lt;/p&gt;
&lt;h2&gt;8: Get help on &lt;em&gt;anything&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;npm has a ton of documentation.  In fact, the biggest documentation
problem at the moment in npm is that there&amp;rsquo;s too much of it, and it&amp;rsquo;s
probably impossible for any non-robot to read all if it in a reasonable
amount of time.&lt;/p&gt;
&lt;p&gt;In case you&amp;rsquo;re not a robot, here&amp;rsquo;s how you can get the most out of the
docs:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;run &lt;code&gt;npm&lt;/code&gt; without any arguments.  This&amp;rsquo;ll show you what you can do.
It lists out the commands and the help topics.&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;npm command -h&lt;/code&gt; to quickly view the arguments that command
expects.  This is handy when you forget how to do something that you
knew how to do, and you just need to remember how you did it.&lt;/li&gt;
&lt;li&gt;run &lt;code&gt;npm help &amp;lt;topic&amp;gt;&lt;/code&gt; to get more detailed manpage-style
documentation.  For general info about npm itself, you can run &lt;code&gt;npm
help npm&lt;/code&gt;.  This page has a few pointers based on your use cases.
Check it out.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;9: View specific fields on published packages&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;npm view&lt;/code&gt; command was pretty lame for a while.  Basically it just
fetched data from the registry and then dumped it to the terminal.  But
now, it&amp;rsquo;s so much more.&lt;/p&gt;
&lt;p&gt;Specify a package name (in the form of &lt;code&gt;name@version&lt;/code&gt; or &lt;code&gt;name@latest&lt;/code&gt;
or &lt;code&gt;name&lt;/code&gt; or even &lt;code&gt;name@&quot;&amp;gt;=1.2.3&quot;&lt;/code&gt; for ranges), and optionally one or
more fields, and it&amp;rsquo;ll pull just those fields out and show them to you.&lt;/p&gt;
&lt;p&gt;It operates smartly on arrays, and parses out the &lt;code&gt;url&lt;/code&gt; and &lt;code&gt;email&lt;/code&gt;
fields from contributors and author names.  So, if you do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm view npm contributors.name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then you&amp;rsquo;ll get a list of all the contributor names in npm.  If you just
do:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm view npm contributors
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;then you&amp;rsquo;ll see the list of contributors in the &lt;code&gt;&quot;name (url) &amp;lt;email&amp;gt;&quot;&lt;/code&gt;
format.&lt;/p&gt;
&lt;h2&gt;10: Bump your package version FOR YOU OMG HOLY CRAP WHAT!?&lt;/h2&gt;
&lt;p&gt;Yeah.  That&amp;rsquo;s right.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;ll even commit the change, and tag it for you, if you do it in a git
repo.  Just run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm version 1.2.3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It&amp;rsquo;ll open up your package.json file, change the version to 1.2.3, &lt;code&gt;git
add&lt;/code&gt; it, &lt;code&gt;git commit&lt;/code&gt; it, and &lt;code&gt;git tag v1.2.3&lt;/code&gt; it.&lt;/p&gt;
&lt;p&gt;If your git repository is unclean, then it&amp;rsquo;ll recoil in horror at the
dirty, and tell you to get your act together.  (Of course, if you&amp;rsquo;re not
using git, then it won&amp;rsquo;t do the git stuff.  It&amp;rsquo;ll just change the json
and write it back to package.json.)&lt;/p&gt;
&lt;h2&gt;11: Bundle all your dependencies into the package itself&lt;/h2&gt;
&lt;p&gt;When you use the &lt;code&gt;npm bundle&lt;/code&gt; command, npm will put all your
dependencies into the &lt;code&gt;node_modules&lt;/code&gt; folder in your package.  But it
doesn&amp;rsquo;t stop there.&lt;/p&gt;
&lt;p&gt;If you want to depend on something that&amp;rsquo;s not on the registry, you can
do that.  Just do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;npm bundle install &lt;a href=&quot;http://github.com/whoever/whatever/tarball/master&quot;&gt;http://github.com/whoever/whatever/tarball/master&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will install the contents of that tarball into the bundle, and then
you can list it as a dependency, and it won&amp;rsquo;t try to install it when
your package gets installed.&lt;/p&gt;
&lt;p&gt;This also is handy if you have your own fork of something, and would
prefer not to change the name.&lt;/p&gt;
&lt;p&gt;In fact, you can run almost any npm command at the bundle.  To see
what&amp;rsquo;s inside, you can do &lt;code&gt;npm bundle ls&lt;/code&gt;.  To remove something, do &lt;code&gt;npm
bundle rm thing&lt;/code&gt;.  And, of course, you can install multiple versions and
activate the one you want.&lt;/p&gt;
&lt;h2&gt;12: Change the very laws of mathematics itself!!&lt;/h2&gt;
&lt;p&gt;There are 13 things in this list of 10 things.&lt;/p&gt;
&lt;p&gt;npm IS JUST THAT AWESOME.&lt;/p&gt;
&lt;h2&gt;13: Always be lowercase&lt;/h2&gt;
&lt;p&gt;If you see npm referred to as &amp;ldquo;NPM&amp;rdquo; anywhere except right there in this
sentence, then you know that I didn&amp;rsquo;t write it.  &amp;ldquo;NPM&amp;rdquo; is the &lt;a href=&quot;http://npm.org/&quot;&gt;National Association of Pastoral Musicians&lt;/a&gt;.
If you need some church music, use NPM.  If you want node packages
installed, then you need &lt;a href=&quot;http://npmjs.org/&quot;&gt;npm&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Other things that didn&amp;rsquo;t make this list because they were too common or not awesome enough&lt;/h2&gt;
&lt;ol&gt;&lt;li&gt;Cache registry requests using etags.&lt;/li&gt;
&lt;li&gt;Run arbitrary scripts to start, stop, restart, and test packages.&lt;/li&gt;
&lt;li&gt;Set deprecation messages to keep people from using old versions of
your stuff.&lt;/li&gt;
&lt;li&gt;compile node addons automatically if it sees a wscript file.&lt;/li&gt;
&lt;li&gt;rebuild packages in a single command so that you can easily keep up
with node ABI changes.  &lt;code&gt;npm rebuild&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Manage owners of a project with the &lt;code&gt;npm owner&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;Edit package contents.  See &lt;code&gt;npm edit&lt;/code&gt;.  (When used as &lt;code&gt;npm bundle
edit&lt;/code&gt; it&amp;rsquo;s especially handy.)&lt;/li&gt;
&lt;li&gt;Be used as a library in node programs.  (Check the readme for a quick how-to, or &lt;code&gt;cli.js&lt;/code&gt; for an example of using npm programmatically.)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Happy Thanksgiving, Americans.  And non-Americans, Happy Random Thursday When All Your American Friends Are Not Online Much!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>LinkedIn</title>
		<link href="https://blog.izs.me/2010/11/linkedin/"/>
		<updated>2010-11-24T08:16:19Z</updated>
		<id>https://blog.izs.me/2010/11/linkedin/</id>
		<content type="html">&lt;p&gt;In the time that I&amp;rsquo;ve been a LinkedIn user, 100% of the messages that
I&amp;rsquo;ve got from the service have been one of the following types:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;[person you met once] did [some random pointless thing] on LinkedIn&lt;/li&gt;
&lt;li&gt;Recruiter Spam&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I had 265 connections, all of whom were people I&amp;rsquo;d actually met and
interacted with in some professional capacity.  But I never once
interacted with any of them in any meaningful way on LinkedIn.&lt;/p&gt;
&lt;p&gt;Today, I realized that the worst Manager, the worst Ops engineer, and
the worst programmer that I&amp;rsquo;d ever worked with (three separate people)
all have several glowing recommendations on their profile.&lt;/p&gt;
&lt;p&gt;In order for evil to triumph, all that must happen is for good men to do
nothing.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re going to hire me, it&amp;rsquo;s going to be because you already know my work.  If I&amp;rsquo;m going to hire you, it&amp;rsquo;s going to be for the same reason.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll see you on the internets.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>TSA Success Story</title>
		<link href="https://blog.izs.me/2010/11/tsa-success-story/"/>
		<updated>2010-11-16T15:58:00Z</updated>
		<id>https://blog.izs.me/2010/11/tsa-success-story/</id>
		<content type="html">&lt;p&gt;By now, if you haven&amp;rsquo;t heard the outrage at the TSA&amp;rsquo;s &amp;ldquo;enhanced&amp;rdquo; pat-down procedures, then you don&amp;rsquo;t use the internet, and you&amp;rsquo;re not reading this blog.&lt;/p&gt;
&lt;p&gt;They &lt;a href=&quot;http://www.google.com/search?q=tsa+groping+children&quot;&gt;grope children&lt;/a&gt;.  They &lt;a href=&quot;http://johnnyedge.blogspot.com/2010/11/these-events-took-place-roughly-between.html&quot;&gt;touch your junk&lt;/a&gt;.  The procedures are &lt;a href=&quot;http://www.thestar.com/iphone/news/world/article/744199---israelification-high-security-little-bother&quot;&gt;ludicrously ineffective and harmful from a security point of view&lt;/a&gt;.  And the naked-picture xray machines &lt;a href=&quot;http://www.scribd.com/doc/35498347/UCSF-letter-to-Holdren-concerning-health-risks-of-full-body-scanner-TSA-screenings-4-6-2010&quot;&gt;are most likely unsafe&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Things like this get me feeling all rebellious and Jeffersonian.  So, since I&amp;rsquo;m flying up to &lt;a href=&quot;http://joyent.com/&quot;&gt;Joyent&amp;rsquo;s&lt;/a&gt; Vancouver offices today, I decided to do a little prep work.&lt;/p&gt;
&lt;p&gt;First, I took the UCSF letter, added a bit of highlighting and annotation to make it a bit easier to scan, and printed it out.  You can get a copy from &lt;a href=&quot;http://j.mp/cancer-ray.&quot;&gt;http://j.mp/cancer-ray.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I was worried that I&amp;rsquo;d chicken out.  No, not &amp;ldquo;worried&amp;rdquo;.  I was &lt;em&gt;sure&lt;/em&gt; I&amp;rsquo;d chicken out. Of &lt;em&gt;course&lt;/em&gt; I would.  I talk a good game about incendiary politics and unconventional ideals, but when the chips are down, I generally do the expedient thing like a nice polite citizen.  I&amp;rsquo;m not one of these &amp;ldquo;talk down the authorities&amp;rdquo; types, even though I wish I was.&lt;/p&gt;
&lt;p&gt;But then my flight was cancelled, and I learned that I&amp;rsquo;d have to be in the airport until 12 to catch the next one.  The extra time to kill strengthened my resolve.  &amp;ldquo;So what if I&amp;rsquo;m detained?,&amp;rdquo; I thought. &amp;ldquo;I don&amp;rsquo;t have to be anywhere for 5 more hours.&amp;rdquo;  Plus I was alone, so there wasn&amp;rsquo;t anyone else&amp;rsquo;s embarrassment to worry about.  I repeated the confidence mantras in my head.  They&amp;rsquo;re expendable workers.  I own this place.  I&amp;rsquo;m the boss.  They work for me.  The only reason I don&amp;rsquo;t fire them is that they&amp;rsquo;re cheaper than robots.  Etc.&lt;/p&gt;
&lt;p&gt;I started talking to the family behind me as soon as I got into the security line, a middle-aged couple with 2 adolescent boys and a girl about 4 or 5.  They were amused by &lt;a href=&quot;http://www.vibrams.co.uk/&quot;&gt;my shoes&lt;/a&gt;, so it wasn&amp;rsquo;t too hard to strike up a conversation.&lt;/p&gt;
&lt;p&gt;I asked where they were from.  Santa Clara.  Heading to Toronto for some family thing.  I asked if they&amp;rsquo;d heard about the new X-Ray machines.  The dad was tired and apathetic. She said, &amp;ldquo;Oh, yeah, I heard about those on the news, that if you don&amp;rsquo;t go through, they grope you or something, and if you do, they take a naked picture of you.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Yeah, it&amp;rsquo;s messed up.  Did you know that the UCSF oncology department thinks they pose a serious health risk, especially to children or anyone at risk for breast cancer?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Whoa, no, I didn&amp;rsquo;t know that!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I handed the paper to the mom.  Bam.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Oh, honey, you should read this!! &amp;hellip; Oh my god&amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Turns out she&amp;rsquo;s a breast cancer survivor.  And her doctor has told her to avoid x-rays, even at the dentist, unless absolutely medically necessary.  And she didn&amp;rsquo;t realize that &amp;ldquo;millimeter wave digital backscatter detection&amp;rdquo; used x-rays, because the TSA doesn&amp;rsquo;t actually put that on the sign.&lt;/p&gt;
&lt;p&gt;She did the rest.&lt;/p&gt;
&lt;p&gt;When we got to the scanner, I opted out.  Then they opted out.  She&amp;rsquo;d already convinced the family behind them to do the same.  Her response to the TSA agent was awesome, I wish I&amp;rsquo;d thought of it:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Ma&#39;am, please step over here.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;No thanks, I&amp;rsquo;ve already had cancer, just feel me up or whatever.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;After the first 4 &amp;ldquo;OPT-OUT&amp;rdquo; calls, they just passed us all through the regular metal detector.  No one got groped.&lt;/p&gt;
&lt;p&gt;Information, properly delivered, is power.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;em&gt;Addendum&lt;/em&gt; The revolt was emotionally satisfying, and I totally recommend doing it, but ultimately it&amp;rsquo;s only a drop in the ocean.  From where I&amp;rsquo;m sitting, I can see the security line, people holding their hands up in the little booth.&lt;/p&gt;
&lt;p&gt;So, do make trouble.  On-the-ground rebellion is important.  But also tell your legislator. There&amp;rsquo;s a senate oversight meeting tomorrow, so please &lt;a href=&quot;http://hillwho.com/index.php?option=com_sobi2&amp;amp;sobi2Task=sobi2Details&amp;amp;catid=10&amp;amp;sobi2Id=5651&quot;&gt;call these people and tell them how you feel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll leave a voicemail.  It&amp;rsquo;s easy and takes 2 seconds.  Just call up and say &amp;ldquo;I think that the TSA has gone too far. Body scanning and inappropriate groping are unconstitutional and wrong. If you want my vote, change the policy.&amp;rdquo;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;em&gt;Addendum 2&lt;/em&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Millimeter_wave_scanner&quot;&gt;Millimeter wave scanners&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Backscatter_X-ray&quot;&gt;Backscatter X-Rays&lt;/a&gt; are not the same thing.  But it wasn&amp;rsquo;t clear which one was in use, and the TSA sign used the terms interchangeably in the fine print where it told you about the opt-out option.&lt;/p&gt;
&lt;p&gt;Also, yes, it&amp;rsquo;s true, the cancer risks are not well understood, and I absolutely committed the alarmist fallacy.  (&amp;ldquo;But can you really take that risk!&amp;rdquo;)  Unfortunately, people aren&amp;rsquo;t as afraid of a police state as they are of cancer.  I maintain that I used my powers for Good.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2010/11/israelis-unlike-canadians-and-americans-dont/"/>
		<updated>2010-11-15T03:13:31Z</updated>
		<id>https://blog.izs.me/2010/11/israelis-unlike-canadians-and-americans-dont/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Israelis, unlike Canadians and Americans, don’t take s—- from anybody. When the security agency in Israel (the ISA) started to tighten security and we had to wait in line for — not for hours — but 30 or 40 minutes, all hell broke loose here. We said, ‘We’re not going to do this. You’re going to find a way that will take care of security without touching the efficiency of the airport.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.thestar.com/news/world/article/744199---israelification-high-security-little-bother&quot;&gt;The ‘Israelification’ of airports: High security, little bother&lt;/a&gt; (via &lt;a href=&quot;http://isnot.tv/&quot; class=&quot;tumblr_blog&quot;&gt;isnottv&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>irc.freenode.net#couchdb</title>
		<link href="https://blog.izs.me/2010/10/ircfreenodenetcouchdb/"/>
		<updated>2010-10-22T00:57:22Z</updated>
		<id>https://blog.izs.me/2010/10/ircfreenodenetcouchdb/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Thank goodness, sublim21 is back!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;sublim21&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;monty, don&#39;t make me take out your memory&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Monty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What about your own memory  ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;sublim21&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;that&#39;s why i drink monty.  that&#39;s why i drink&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Bart Ticket Machines</title>
		<link href="https://blog.izs.me/2010/09/bart-ticket-machines/"/>
		<updated>2010-09-16T20:49:37Z</updated>
		<id>https://blog.izs.me/2010/09/bart-ticket-machines/</id>
		<content type="html">&lt;p&gt;I always get the maximum amount of change when using cash to buy a Bart ticket.  Put in a $20, push a bunch of buttons, and then get a ticket and a bunch of quarters go satisfyingly &amp;ldquo;KACHING-KACHING-KACHING-KACHING&amp;rdquo; into the little box.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s like a slot machine, but it gives you a ride home after.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>I Am Detained By The Feds For Not Answering Questions</title>
		<link href="https://blog.izs.me/2010/09/i-am-detained-by-the-feds-for-not-answering/"/>
		<updated>2010-09-11T19:27:57Z</updated>
		<id>https://blog.izs.me/2010/09/i-am-detained-by-the-feds-for-not-answering/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://aredridel.tumblr.com/post/1103632034/i-am-detained-by-the-feds-for-not-answering-questions&quot; class=&quot;tumblr_blog&quot;&gt;aredridel&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Another civil liberties type toeing the line to keep federal powers in check. We need more people like him.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Code Samples in Web Pages: How to Not be Doing It Wrong.</title>
		<link href="https://blog.izs.me/2010/09/code-samples-in-web-pages-how-to-not-be-doing-it/"/>
		<updated>2010-09-07T23:06:17Z</updated>
		<id>https://blog.izs.me/2010/09/code-samples-in-web-pages-how-to-not-be-doing-it/</id>
		<content type="html">&lt;p&gt;Observe:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;To list files, do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ ls -laF&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Compare that to this:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;To list files, do this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;dollar&quot;&gt;ls -laF&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;You spot the difference?  The second one is much more user friendly, because you won&amp;rsquo;t pick up the &lt;code&gt;$&lt;/code&gt; when you copy and paste, and only takes a teeny bit of CSS.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2010/08/via-peetypassion/"/>
		<updated>2010-08-30T16:41:24Z</updated>
		<id>https://blog.izs.me/2010/08/via-peetypassion/</id>
		<content type="html">&lt;p&gt;via &lt;a href=&quot;http://1nation.eu/post/515766683/accurate-representation&quot; class=&quot;tumblr_blog&quot;&gt;peetypassion&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2010/08/via-icanread-so-thatd-make-the-author-a-small/"/>
		<updated>2010-08-25T05:16:00Z</updated>
		<id>https://blog.izs.me/2010/08/via-icanread-so-thatd-make-the-author-a-small/</id>
		<content type="html">&lt;p&gt;(via &lt;a href=&quot;http://icanread.tumblr.com/&quot; class=&quot;tumblr_blog&quot;&gt;icanread&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;So that&amp;rsquo;d make the author a small person, yes?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Rider</title>
		<link href="https://blog.izs.me/2010/08/rider/"/>
		<updated>2010-08-20T19:04:09Z</updated>
		<id>https://blog.izs.me/2010/08/rider/</id>
		<content type="html">&lt;p&gt;The rollercoaster moves up and down.  I am not the vehicle, but the rider within it.&lt;/p&gt;
&lt;p&gt;Feet tap the pavement in hypnotic rhythm, legs pounding the heart demanding more more more.  I am not those legs or that heart.  I ride in telepathic communication with this animal, feed it, bathe it, lay it down to rest.&lt;/p&gt;
&lt;p&gt;The internal computer calculates risk, strategy, weighs pros and cons.  It races through analysis working what it knows into speculations of the future.  I ask it questions and watch the output.&lt;/p&gt;
&lt;p&gt;I am not these feelings.  I am not this body.  I am not this mind.&lt;/p&gt;
&lt;p&gt;This vehicle takes me where I steer it.  I am the sum that decides which parts to make whole.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Forgot</title>
		<link href="https://blog.izs.me/2010/07/forgot/"/>
		<updated>2010-07-28T20:00:00Z</updated>
		<id>https://blog.izs.me/2010/07/forgot/</id>
		<content type="html">&lt;p&gt;I totally forgot about this little blog.&lt;/p&gt;
&lt;p&gt;How completely odd.  I guess it got its job done.  Or maybe I just started writing in my  &lt;a href=&quot;http://blog.izs.me/&quot;&gt;tumblr blog&lt;/a&gt; more often.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Google Voice vs. Happy Birthday</title>
		<link href="https://blog.izs.me/2010/07/google-voice-vs-happy-birthday/"/>
		<updated>2010-07-01T23:25:41Z</updated>
		<id>https://blog.izs.me/2010/07/google-voice-vs-happy-birthday/</id>
		<content type="html">&lt;p&gt;Google Voice&amp;rsquo;s transcription does funny things to people singing Happy Birthday.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d include the audio, but it&amp;rsquo;d be a copyright violation.&lt;/p&gt;
&lt;p&gt;From my sister and brother-in-law.  What&amp;rsquo;s funny is how close it is to what they actually were saying.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Dean, yup the, and a Yahoo The, and year, I man stable are good, a jacuzzi to. I&amp;rsquo;m going on man. Happy Birthday. And hey, we&amp;rsquo;re good and I&amp;rsquo;ll talk to you later. I love you bye. You were born. Bye.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;From my dad and stepmom.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Hi, Happy Birthday interview. Happy Birthday to You. Happy Birthday Dear Ryan, Happy Birthday to you, man, Randall. Alright then. Marry a man. Ohh man. Bye bye.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Their support of gay marriage is nice (if somewhat misguided), but I wish they&amp;rsquo;d remembered my name.  Seems like they struggled with that a bit.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>NodeJS and Empowering n00bz</title>
		<link href="https://blog.izs.me/2010/06/nodejs-and-empowering-n00bz/"/>
		<updated>2010-06-23T21:59:00Z</updated>
		<id>https://blog.izs.me/2010/06/nodejs-and-empowering-n00bz/</id>
		<content type="html">&lt;p&gt;Something interesting occurred to me today about why I like NodeJS so much, and why I got so into it as soon as I started playing with it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not the fact that it&amp;rsquo;s fast (it could be a &lt;em&gt;lot&lt;/em&gt; slower before it would start to matter), or that I have strong feelings about IO being async (it should be, of course, but I mean, whatever, threads work), or that JavaScript is so great (I like it, but there were other JS platforms out there that were more advanced in a lot of ways).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s that it was so easy to just download the source, run a command, and have something that works, right away.  The example programs are simple, and short, and clear in what they do.  When I first started poking at the source code, the mapping from the &amp;ldquo;lib&amp;rdquo; folder to the &amp;ldquo;require&amp;rdquo; function was easy to grok.&lt;/p&gt;
&lt;p&gt;Empowering newcomers is the key to success.  That matters more than anything else.  I saw the simplicity in what Ryan was trying to do, and that was a huge indicator of future success.  Even the &amp;ldquo;commonjs be damned, we&amp;rsquo;re gonna do what&amp;rsquo;s right and let the standards follow&amp;rdquo; attitude has kept things lean and simple.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked on a lot of different projects.  I like new things, and that means I&amp;rsquo;ve been the new guy for most of my career in software development, professionally and recreationally.  Going from empty folder to running program in a few simple steps is a HUGE accomplishment that many professional software teams really struggle with, and that struggle costs a lot of wasted time and energy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen people post to the NodeJS list asking questions as they&amp;rsquo;re comparing node to other platforms, and a week later, they&amp;rsquo;re publishing modules and add-ons and contributing code and tests and docs back to the core.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s huge.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Steps</title>
		<link href="https://blog.izs.me/2010/05/steps/"/>
		<updated>2010-05-18T19:53:40Z</updated>
		<id>https://blog.izs.me/2010/05/steps/</id>
		<content type="html">&lt;p&gt;The first step is admitting your neuroses.&lt;br /&gt;
The second is admitting that the first didn&amp;rsquo;t make them go away.&lt;br /&gt;
The third is understanding that you have no idea how many steps there are.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Scoble</title>
		<link href="https://blog.izs.me/2010/05/scoble/"/>
		<updated>2010-05-12T00:40:00Z</updated>
		<id>https://blog.izs.me/2010/05/scoble/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Scoble is in my office&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Should I throw something? Trip him up?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;hey, something similar just happened here, actually.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;right as you sent that IM, i farted, and it smells REALLY bad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;wow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;basically the same thing as scoble showing up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I got it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seld0&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hence: wow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;it&#39;s ok, though.  it&#39;s one of those big open-air type deals, so no one will know where it came from.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>A Public Service</title>
		<link href="https://blog.izs.me/2010/05/a-public-service/"/>
		<updated>2010-05-06T04:57:43Z</updated>
		<id>https://blog.izs.me/2010/05/a-public-service/</id>
		<content type="html">&lt;dl&gt;&lt;dt&gt;He pushed the button, which was red.&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;There was a button.&lt;br /&gt;
The button was red. &lt;br /&gt;
He pushed it. &lt;br /&gt;
Use a comma.&lt;/p&gt;
&lt;/dd&gt;
&lt;dt&gt;He pushed the button that was red.&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;There were buttons. &lt;br /&gt;
One of those buttons was red. &lt;br /&gt;
He pushed the red one. &lt;br /&gt;
No comma.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;The comma separates the initial phrase from another extra bit of information about the thing.  In the first case, &amp;ldquo;which&amp;rdquo; stands in for &amp;ldquo;the button&amp;rdquo;.  It&amp;rsquo;s like saying, &amp;ldquo;He pushed the button.  The button was red.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In the second case, there is no comma, because &amp;ldquo;that&amp;rdquo; is used as a limiter, not a reference.  It&amp;rsquo;s like saying, &amp;ldquo;He pushed the button.  That button, the one that&amp;rsquo;s red.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;When you say &amp;ldquo;that one&amp;rdquo;, you point.  You are limiting the referent.&lt;/p&gt;
&lt;p&gt;To make things more confusing, &amp;ldquo;which&amp;rdquo; can actually be used as a limiter, and sometimes limiters can be used to add information.  But when in doubt, follow these rules.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Email Confidentiality Footers</title>
		<link href="https://blog.izs.me/2010/04/email-confidentiality-footers/"/>
		<updated>2010-04-29T04:43:24Z</updated>
		<id>https://blog.izs.me/2010/04/email-confidentiality-footers/</id>
		<content type="html">&lt;blockquote&gt;&lt;p style=&quot;white-space:pre&quot;&gt;&amp;gt; This email message is for the sole use of the intended
&amp;gt; recipient(s) and may contain confidential and privileged
&amp;gt; information.  Any unauthorized review, use, disclosure or
&amp;gt; distribution is prohibited.  If you are not the intended
&amp;gt; recipient, please contact the sender by reply email and destroy
&amp;gt; all copies of the original message.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Ah, where to begin&amp;hellip;&lt;/p&gt;
&lt;p&gt;How about the fact that email works by making copy after copy.  If you sent me this, then there are a jillion &amp;ldquo;copies of the original&amp;rdquo; between your computer and mine.  I simply &lt;em&gt;can&amp;rsquo;t&lt;/em&gt; reliably destroy them all.  (&lt;a href=&quot;http://nukefromorbit.ytmnd.com/&quot;&gt;Well, maybe&amp;hellip;&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;If it may contain confidential information, then why are you sending it via email?  And without so much as &lt;a href=&quot;http://en.wikipedia.org/wiki/Pretty_Good_Privacy&quot;&gt;PGP&lt;/a&gt; encrypting it?  I know that PGP&amp;rsquo;s only been around for like &lt;strong&gt;20 years&lt;/strong&gt; now, so it&amp;rsquo;s pretty new, but still.  Get on that.  It&amp;rsquo;s integrated in every email mail client, and it&amp;rsquo;s not too hard to use.&lt;/p&gt;
&lt;p&gt;But even more worryingly, this little footer just seems profoundly odd.  It&amp;rsquo;s asking me to do something based on the &lt;em&gt;sender&amp;rsquo;s&lt;/em&gt; intent.  How am I supposed to know if I&amp;rsquo;m the intended recipient?  Should I guess that the sender doesn&amp;rsquo;t know how to use email, and just whacks the Reply-All button like a drunken ape?&lt;/p&gt;
&lt;p&gt;Sorry.  We&amp;rsquo;re 10% of the way through the 21st century now.  You&amp;rsquo;re expected to know how to use a technology that&amp;rsquo;s been around for 40 years.  It&amp;rsquo;s not my responsibility if you send something to the wrong person.&lt;/p&gt;
&lt;p&gt;In the end, this is just a bit of unenforceable legalese that makes people feel more official, and it&amp;rsquo;s complete trash.  It&amp;rsquo;s the digital equivalent of tossing your Starbucks cup out the window on the highway.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Explode</title>
		<link href="https://blog.izs.me/2010/04/explode/"/>
		<updated>2010-04-11T05:20:12Z</updated>
		<id>https://blog.izs.me/2010/04/explode/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;Beloved and pure, turn, face her.
See emotional spilling.
I am rapt.
Explode!
Rapt am I, spilling emotional.
See her face turn pure and beloved.&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>Steak and BJ Day</title>
		<link href="https://blog.izs.me/2010/03/steak-and-bj-day/"/>
		<updated>2010-03-16T12:26:54Z</updated>
		<id>https://blog.izs.me/2010/03/steak-and-bj-day/</id>
		<content type="html">&lt;p&gt;Happy holiday, everyone! &lt;a href=&quot;http://bit.ly/QPkQ8&quot;&gt;http://bit.ly/QPkQ8&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>4 Step Writing Process</title>
		<link href="https://blog.izs.me/2010/02/4-step-writing-process/"/>
		<updated>2010-02-10T21:07:00Z</updated>
		<id>https://blog.izs.me/2010/02/4-step-writing-process/</id>
		<content type="html">&lt;p&gt;Whether it&amp;rsquo;s an essay or a program, writing is not about what you put out, it&amp;rsquo;s about what you take in.  The purpose of life is to learn, and that is why writing is important.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t follow this process with everything, because it&amp;rsquo;s a bit slow.  But for complicated subjects, it&amp;rsquo;s sometimes the only way to get something useful.&lt;/p&gt;
&lt;h2&gt;Step 1: Sketch&lt;/h2&gt;
&lt;p&gt;Write as quickly as possible, as dirty as necessary, giving no thought whatsoever to the quality of the output.  Just get it out of your head and into the real medium.  Make the code run.  Put sentences on the page.  Don&amp;rsquo;t worry if it&amp;rsquo;s ugly or slow or badly worded or whatever.  That&amp;rsquo;s the point.  Just the act of getting it out of your head is important and necessary.&lt;/p&gt;
&lt;h2&gt;Step 2: Discard and Rewrite&lt;/h2&gt;
&lt;p&gt;Don&amp;rsquo;t revise your rough draft.  Throw it away.  Maybe it had some good parts, fine.  You can look at them, but you&amp;rsquo;re not allowed to copy and paste &lt;em&gt;anything&lt;/em&gt;.  Type it out again.  You want it to filter through your brain and your hands so that every character is re-evaluated.&lt;/p&gt;
&lt;p&gt;Go slow here.  The goal is to make it as elegant as possible, to really carefully consider each part&amp;rsquo;s relationship to the whole, to enforce balance and symmetry and consistency of intent.  This is where the vision takes shape.&lt;/p&gt;
&lt;p&gt;The goal isn&amp;rsquo;t to end up with something clever.  It&amp;rsquo;s to end up with something obvious.  The solution should simply seem to grow out of the problem and attach to it, like its natural symbiotic twin.  Reading your program or your essay should be easy, and should leave a reader with the understanding that you gained in your sketching and meditation.&lt;/p&gt;
&lt;p&gt;Occasionally, you&amp;rsquo;ll learn something, and have to return to step 1.  And that&amp;rsquo;s great.&lt;/p&gt;
&lt;h2&gt;Step 3: Test with Absurd Aggression&lt;/h2&gt;
&lt;p&gt;If it&amp;rsquo;s code, then find or write a test suite that goes over an absurd amount of edge cases.  Try really hard to make your program break.  And then make it pass every single test case.  Write some more test cases to cover areas that the suite doesn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s text, then read it over and over.  Scrutinize every word to make sure it means exactly what you want.  Go to bed and wake up and read it again.  Have other people read it and push them to be really critical.  Ask them what they thought, and make notes of where it&amp;rsquo;s different from your intent.&lt;/p&gt;
&lt;p&gt;Return to step 2 as necessary.&lt;/p&gt;
&lt;h2&gt;Step 4: Optimize&lt;/h2&gt;
&lt;p&gt;We always want to put this step earlier in the process, but that&amp;rsquo;s almost always a mistake.  Certainly, you don&amp;rsquo;t want to be structuring your code in ways that are always going to be slow, but if you&amp;rsquo;re writing for elegance, that&amp;rsquo;s not likely to happen anyhow.&lt;/p&gt;
&lt;p&gt;Profile your program, and find the parts of it that are slow.  Make them fast, even if you lose a bit of beauty in the process.&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s an essay, try to remove everything that does not enforce the thesis.  Any word that can be removed should be.&lt;/p&gt;
&lt;p&gt;Keep returning to step 3 after any changes.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s never done.  You just reach a point where you decide to study something different.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Hours of Sleep</title>
		<link href="https://blog.izs.me/2010/01/hours-of-sleep/"/>
		<updated>2010-01-26T17:26:05Z</updated>
		<id>https://blog.izs.me/2010/01/hours-of-sleep/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;That doesn&#39;t really work for me as I naturally wake up every few hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I need a clock to tell me if another 2-hour cycle is safe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;crazy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Because waking up halfway through a cycle breaks me for the whole day&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;how are you not complete manic and anxious and crazy all the time?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Have you met me?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;oh yeah, huh...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Shared Flashback</title>
		<link href="https://blog.izs.me/2010/01/shared-flashback/"/>
		<updated>2010-01-20T09:03:00Z</updated>
		<id>https://blog.izs.me/2010/01/shared-flashback/</id>
		<content type="html">&lt;p&gt;Some time around That 70&amp;rsquo;s Show, maybe earlier, but certainly post-Seinfeld, characters in sitcoms gained the ability to have a shared flashback to instantly and graphically communicate with one another.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s really odd is that they often know they can do this, and even make meta-jokes about this phenomenon.&lt;/p&gt;
&lt;p&gt;Is there a word for this?  It seems to me to be something unique to the television storytelling medium, and fairly recent, and we all seem to Just Get It.&lt;/p&gt;
&lt;p&gt;I think that&amp;rsquo;s neat.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2010/01/job-descriptions/"/>
		<updated>2010-01-12T02:44:50Z</updated>
		<id>https://blog.izs.me/2010/01/job-descriptions/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/nq979/job-descriptions&quot;&gt;job-descriptions&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What I hear when you &quot;just want to reach out directly&quot;</title>
		<link href="https://blog.izs.me/2010/01/reach-out/"/>
		<updated>2010-01-07T23:52:16Z</updated>
		<id>https://blog.izs.me/2010/01/reach-out/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recruiter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I&#39;ve got two positions for a Java contractor, a PHP developer position, and a Flash developer position, and I think they really speak to your skills as a developer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I HAVE NO RESPECT FOR YOU.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I HAVENT READ YUR REZUME, BIUT CUD YOU JUS SAY YES I NEED A BONUSES TO PAY FOR MY EXPENSVIE CAR, OK!?????!!!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;BE A PAL AND TAKE THE JOB YUR A PRUGRMAMER, RITE? ITS ALL JUST CODEZ AND DRAWING WEB PAGES RITE SO WHATS THE DIFFRENCE!?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recruiter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I realize that you&#39;re happy at your current position, but I just wanted to reach out to you directly to tell you about these exciting opportunities.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I ARE A DUMB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I THINK IF YOU HERE MY VOISE YULL TOTALY CHANGE UR MIND OMGLOLZ0RZ!!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;THAY SED IN THE SEMINAR THAT THIS SCRIPT TOTLALY WORKS LIKE ALL THE TIEMS SO YOU HAFTA CALL ME BACK NOW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Translation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I SAID &amp;quot;REACH OUT&amp;quot; SO YOU KNOW THAT IM YUR FRIEND AND I TOTLALY CARE ABUOT YOUUUUUUUUUUUUUUUUUUU!!!!!!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Transition</title>
		<link href="https://blog.izs.me/2010/01/transition/"/>
		<updated>2010-01-05T23:59:00Z</updated>
		<id>https://blog.izs.me/2010/01/transition/</id>
		<content type="html">&lt;p&gt;My last day at Yahoo will be 2010-01-22.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve gotten an offer from &lt;a href=&quot;http://proofpoint.com/&quot;&gt;Proofpoint&lt;/a&gt; which is too good to ignore.  The opportunity to drive the direction of a product at an early stage, including having a lot of input about the choice of technology and team, is very exciting.  Also, though this was not the primary factor, the position is significantly more financially rewarding than I believe that the next few years would be if I stayed at Yahoo.&lt;/p&gt;
&lt;p&gt;Yahoo has been a mostly great company to work for, and &lt;a href=&quot;http://yuilibrary.com/&quot;&gt;YUI&lt;/a&gt; is by far the best team that I&amp;rsquo;ve worked on here.  It&amp;rsquo;s a shame that I didn&amp;rsquo;t join YUI sooner; I still feel like I just got here.  The quality of this team made the decision very difficult, and that says a lot about the job that Eric Miraglia and Thomas Sha have done building it.&lt;/p&gt;
&lt;p&gt;If you ever get a chance to work at Yahoo, take it.&lt;/p&gt;
&lt;p&gt;I feel so very fortunate to have met so many of Silicon Valley&amp;rsquo;s bright minds in the last 4 years, and to have learned so much about the web, about business, about people, and about the science and art of software development.  I&amp;rsquo;ve been a student, a teacher, an expert, an amateur, a mentor, and a mentee.&lt;/p&gt;
&lt;p&gt;Thank you all so much for what you&amp;rsquo;ve given me.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Torrents</title>
		<link href="https://blog.izs.me/2009/12/torrents/"/>
		<updated>2009-12-28T23:17:22Z</updated>
		<id>https://blog.izs.me/2009/12/torrents/</id>
		<content type="html">&lt;p&gt;Dear friends and relatives.  You knew about Napster, and Kazaa, and then they went away.  Now, you&amp;rsquo;ve maybe heard about this &amp;ldquo;bittorrent&amp;rdquo; thing.  You tried to download it, but then it didn&amp;rsquo;t do anything, and you got confused and frustrated.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to explain torrenting to you so that you can do it if you want.&lt;/p&gt;
&lt;h2&gt;Isn&amp;rsquo;t torrenting illegal?&lt;/h2&gt;
&lt;p&gt;Sure.  So is jaywalking, speeding, and smoking pot.  Yet it&amp;rsquo;s perfectly legal to treat children in subtly cruel ways until they develop into a neurotic unhappy adult.  The law is no substitute for a personal moral compass.  Make your own choices.&lt;/p&gt;
&lt;h2&gt;Terminology&lt;/h2&gt;
&lt;p&gt;A &amp;ldquo;torrent&amp;rdquo; is a collection of people sharing a file with each other.  You download the parts of the file that you don&amp;rsquo;t have yet, and at the same time, you upload the parts of the file that you do have.  It&amp;rsquo;s kind of like trading cards with other users until you&amp;rsquo;ve got a complete deck.&lt;/p&gt;
&lt;p&gt;When you have all the parts of the file (all the cards in the deck), then you&amp;rsquo;re a &amp;ldquo;seeder&amp;rdquo;.  That is, you are uploading, but you&amp;rsquo;re not downloading anything, so you are just helping out the other people on the torrent.&lt;/p&gt;
&lt;p&gt;When you are just downloading, but not uploading, you&amp;rsquo;re a &amp;ldquo;leecher&amp;rdquo;.  That is, you&amp;rsquo;re taking, but not giving back.  Everyone starts out as a leecher, and as you download more of the file, you get closer and closer to being a seeder.&lt;/p&gt;
&lt;p&gt;Your &amp;ldquo;ratio&amp;rdquo; is the amount of data that you&amp;rsquo;ve uploaded compared to the amount that you&amp;rsquo;ve downloaded.  If your ratio is 1, then that means that you&amp;rsquo;ve uploaded the same amount of bytes that you&amp;rsquo;ve downloaded.  If it&amp;rsquo;s less than one, then you haven&amp;rsquo;t uploaded as much as you&amp;rsquo;ve downloaded.  If it&amp;rsquo;s greater than one, then that means that you&amp;rsquo;ve given back more than you&amp;rsquo;ve taken.&lt;/p&gt;
&lt;h2&gt;The .torrent File&lt;/h2&gt;
&lt;p&gt;The .torrent file is a small file that tells your computer how to find peers.  It provides the address to the stream, so to speak.&lt;/p&gt;
&lt;p&gt;When you download a .torrent file, you&amp;rsquo;re not downloading the actual movie or music or software or whatever.  You&amp;rsquo;re downloading an address card that tells your computer how to &lt;em&gt;find&lt;/em&gt; the peers who have the bytes you&amp;rsquo;re interested in.&lt;/p&gt;
&lt;h2&gt;The Torrent Client&lt;/h2&gt;
&lt;p&gt;In Order to Do This Whole Sharing Thing Using .Torrent Files, You Need a &amp;ldquo;torrent client&amp;rdquo;.  I Like &lt;a href=&quot;http://www.utorrent.com/&quot;&gt;µTorrent&lt;/a&gt;.  It&amp;rsquo;s small, powerful, well-maintained, and works on Mac and PC natively.  If you use Linux, then you can run µTorrent under wine, or use &lt;a href=&quot;http://qbittorrent.sourceforge.net/&quot;&gt;qBittorrent&lt;/a&gt;.  (I haven&amp;rsquo;t used qBittorrent, so I can&amp;rsquo;t vouch for it, but it looks pretty similar to µTorrent from the screenshots.)&lt;/p&gt;
&lt;p&gt;Get one of these, and install it.&lt;/p&gt;
&lt;h2&gt;A Brief Note About Trust&lt;/h2&gt;
&lt;p&gt;Torrents are created by random folks.  They then share these things, and sometimes, it&amp;rsquo;s just the name of the file that distinguishes its contents, since you have to download (and in the process &lt;em&gt;upload&lt;/em&gt;) the file before you can see what it really contains.&lt;/p&gt;
&lt;p&gt;Be smart, and expect to be disappointed some of the time.  Here are some tips:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;If the file is a .rar or .zip or some other kind of &amp;ldquo;archive&amp;rdquo; format, and there&amp;rsquo;s no reason
for it to be archived in that manner, there&amp;rsquo;s a good chance it doesn&amp;rsquo;t
contain what you think it does.  (Sometimes these formats are smaller or better for transport,
so this isn&amp;rsquo;t a hard-and-fast rule, but .rar files are, in my experience, slightly less
trustworthy.)&lt;/li&gt;
&lt;li&gt;If the file is a TV episode, and it hasn&amp;rsquo;t aired yet, then you can be 100% sure it&amp;rsquo;s fake.&lt;/li&gt;
&lt;li&gt;If the file is an avi file, and when you open it, it says you need to install a codec, or enter
a password, it&amp;rsquo;s most likely fake.  Never buy anything or give anyone your credit card number.&lt;/li&gt;
&lt;li&gt;If there are three copies of something, download them all.  Chances are, one of them will be bogus,
and then at least you haven&amp;rsquo;t wasted your time.  You can always just throw away the extra files
when you find one that works.&lt;/li&gt;
&lt;/ol&gt;&lt;h2&gt;Getting a Torrent File&lt;/h2&gt;
&lt;p&gt;Next step is to find a .torrent file for the thing you&amp;rsquo;re interested in.  Let&amp;rsquo;s say that you wanted to download RadioHead&amp;rsquo;s &amp;ldquo;In Rainbows&amp;rdquo; album.  &lt;a href=&quot;http://thepiratebay.org/&quot;&gt;The Pirate Bay&lt;/a&gt; is a good search engine, since they show you the number of seeders and leeches on any given torrent, as well as a ranking for the user who uploaded it.&lt;/p&gt;
&lt;p&gt;Of course, if that doesn&amp;rsquo;t work, then there&amp;rsquo;s always google.  Just add &amp;ldquo;filetype:torrent&amp;rdquo; to any search, and google will return torrent files with the keywords you specify.  Here&amp;rsquo;s what we&amp;rsquo;d use to find In Rainbows: &lt;a href=&quot;http://www.google.com/search?q=radiohead%20in%20rainbows%20filetype%3Atorrent&quot;&gt;radiohead in rainbows filetype:torrent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll note on the search that there are a few options.  Like I said above, your best bet is usually to kick off a few downloads at once, so that you&amp;rsquo;ll be more likely to get a good file out of it.&lt;/p&gt;
&lt;p&gt;If you are looking for video, it&amp;rsquo;s a good idea to add &amp;ldquo;720p&amp;rdquo; or &amp;ldquo;1080p&amp;rdquo; to your search query to find high-definition copies.  A lot of torrents are labelled &amp;ldquo;high def&amp;rdquo; or &amp;ldquo;HD&amp;rdquo; when they&amp;rsquo;re only 480p.&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll probably find that, at least for popular items, barring the caveats above, the titles are remarkably accurate.&lt;/p&gt;
&lt;h2&gt;Speed&lt;/h2&gt;
&lt;p&gt;Bittorrent is a peer-to-peer protocol.  That means that you&amp;rsquo;re depending on the goodness of other peoples&amp;rsquo; hearts to upload quality files, and to stay online while they seed.  If something is very popular, then there will naturally be more people sharing it, and it&amp;rsquo;ll come in faster.  If it&amp;rsquo;s rare or niche, then you might be downloading from 1-2 people at a time, and when they shut down their computers, you are sitting alone on that feed.&lt;/p&gt;
&lt;p&gt;Be patient.  It&amp;rsquo;s free, after all.  And be a seeder.  Try to get your ratio up around 2-3 on average, and at least you&amp;rsquo;ll know that you&amp;rsquo;re one of the good guys.  If you have a computer that you can keep connected to the internet round the clock, then you&amp;rsquo;ll be able to just start it going and check back in a few days when it&amp;rsquo;s done.&lt;/p&gt;
&lt;h2&gt;Your ISP&lt;/h2&gt;
&lt;p&gt;Some internet service providers don&amp;rsquo;t take kindly to users actually using the bandwidth that we pay for.  From my point of view, if I buy 50Mbit service, then I ought to be within my rights to expect 50Mbit service any time I want it, for as long as I want it, even round the clock.  Apparently, from the point of view of many cable and DSL providers, expecting to get what you buy is considered &amp;ldquo;abusive&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;You may find that they throttle your bandwidth or do other unsavory tactics.  They&amp;rsquo;ve come under heat for selling services they can&amp;rsquo;t provide, and you&amp;rsquo;re well within your rights to complain if you find you&amp;rsquo;re not getting the speeds you signed up for.&lt;/p&gt;
&lt;p&gt;One way to work around this problem (or to just avoid &lt;em&gt;using up&lt;/em&gt; what you&amp;rsquo;ve paid for), is to use the throttling built into µTorrent.  If you go into the preferences, you can set up the maximum speeds for uploads, downloads, and the maximum ratio at which you want to stop seeding.&lt;/p&gt;
&lt;h2&gt;Enjoy!&lt;/h2&gt;
&lt;p&gt;Go have fun, and remember to support artists who create the things you like.  It&amp;rsquo;ll almost always be more convenient, fast, and reliable to buy something than to get it from a peer-to-peer network.  Vote with your dollars.  Buy MP3s from Amazon and other DRM-free providers.  Cancel your cable TV and watch streaming shows on &lt;a href=&quot;http://hulu.com/&quot;&gt;Hulu&lt;/a&gt; and &lt;a href=&quot;http://netflix.com/&quot;&gt;Netflix&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;Or maybe take the money saved on CDs and spend it going to a concert.  (I&amp;rsquo;m told artists typically get a bigger cut of concert revenues than album sales, but TicketMaster is even more evil than the RIAA, so who knows.)&lt;/p&gt;
&lt;p&gt;There is no reason to subsidize institutions that don&amp;rsquo;t support artists and fans.  The days of a corporate monopoly on the stream of content are coming to an end.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/12/node-xmasjs/"/>
		<updated>2009-12-27T21:47:21Z</updated>
		<id>https://blog.izs.me/2009/12/node-xmasjs/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/npd4j/node-xmas.js&quot;&gt;node xmas.js&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/12/white-xmas-in-reno/"/>
		<updated>2009-12-24T19:56:25Z</updated>
		<id>https://blog.izs.me/2009/12/white-xmas-in-reno/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/nc73t/white-xmas-in-reno&quot;&gt;White Xmas in Reno.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>YouTube - The Known Universe by AMNH</title>
		<link href="https://blog.izs.me/2009/12/youtube-the-known-universe-by-amnh/"/>
		<updated>2009-12-20T22:36:11Z</updated>
		<id>https://blog.izs.me/2009/12/youtube-the-known-universe-by-amnh/</id>
		<content type="html">&lt;p&gt;A stunning brief film from the tops of the tallest mountains out through the most distant realms of space-time as currently understood. This is the stuff that makes me shiver. To be a part of such a&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What English Sounds Like to Foreigners is Today&#39;s BIG Thing in Music - NOV 03, 2009</title>
		<link href="https://blog.izs.me/2009/12/what-english-sounds-like-to-foreigners-is-todays/"/>
		<updated>2009-12-16T06:29:23Z</updated>
		<id>https://blog.izs.me/2009/12/what-english-sounds-like-to-foreigners-is-todays/</id>
		<content type="html">&lt;p&gt;This is so deeply awesome it makes my brain break&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/12/minzms-in-the-photo-booth-im-not-referring-to/"/>
		<updated>2009-12-07T18:21:00Z</updated>
		<id>https://blog.izs.me/2009/12/minzms-in-the-photo-booth-im-not-referring-to/</id>
		<content type="html">&lt;h2&gt;MiNzMs in the Photo Booth&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;m not referring to the OS X app here, or some fancy iPhone program that takes old-timey crappy photos, but an actual real-live physical photobooth.&lt;/p&gt;
&lt;p&gt;This is a ritual that is on the way out.  If you&amp;rsquo;ve never experienced it, I highly recommend it.  Your grandchildren probably won&amp;rsquo;t even know what you&amp;rsquo;re talking about.&lt;/p&gt;
&lt;p&gt;You sit down on the tiny bench.  It&amp;rsquo;s too small for two, or really even for one, so you have to crowd together.&lt;/p&gt;
&lt;p&gt;You pull the curtain shut.  There&amp;rsquo;s an illusion of privacy, but you both know it&amp;rsquo;s fleeting, and incomplete, like holding hands on a carnival ride somewhere in the middle of puberty.&lt;/p&gt;
&lt;p&gt;For a brief moment, there is a discussion.  You must coordinate, because taking the same picture 4 times would seem somehow wasteful and inartistic.  Nevertheless, you know you&amp;rsquo;ll screw up whatever plans you make, and that it&amp;rsquo;ll be ok.&lt;/p&gt;
&lt;p&gt;You put the money in the little slot, and look into the seemingly endless black abyss in front of you, immediately forgetting what poses you&amp;rsquo;d agreed to do.&lt;/p&gt;
&lt;p&gt;PHOOMPSH.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;PHOOMPSH.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;PHOOMPSH.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;PHOOMPSH.&lt;/p&gt;
&lt;p&gt;And then it&amp;rsquo;s done.&lt;/p&gt;
&lt;p&gt;Upon exiting, there&amp;rsquo;s a several-minute wait for the pictures to come out of the slot, sticky and stinking of chemicals; delicate and toxic.&lt;/p&gt;
&lt;p&gt;And you&amp;rsquo;re left, not with a high definition jpg or raw file, but a tiny slip of paper, imperfect and unique, a shared memory squeezed into 4 improbably wonderful slices.&lt;/p&gt;
&lt;p&gt;An artifact to be treasured, and there&amp;rsquo;s only one.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>kung fu grippe : On ‘Conspicuous Compassion.’</title>
		<link href="https://blog.izs.me/2009/12/kung-fu-grippe-on-conspicuous-compassion/"/>
		<updated>2009-12-03T21:44:01Z</updated>
		<id>https://blog.izs.me/2009/12/kung-fu-grippe-on-conspicuous-compassion/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;For anyone who thinks a hashtag campaign or a goddamned ribbon helps “raise awareness” for anything more than our own bloated and self-involved sense of self, get over yourself.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Pipes Blog » Blog Archive » Craigslist and Yahoo! Pipes</title>
		<link href="https://blog.izs.me/2009/12/pipes-blog-blog-archive-craigslist-and-yahoo/"/>
		<updated>2009-12-03T00:36:28Z</updated>
		<id>https://blog.izs.me/2009/12/pipes-blog-blog-archive-craigslist-and-yahoo/</id>
		<content type="html">&lt;p&gt;Craigslist, for some reason, blocked Yahoo Pipes. This blog post shows how retardedly trivial it is to circumvent the obstacle. I &amp;lt;3 the internet.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Problem With Music</title>
		<link href="https://blog.izs.me/2009/12/the-problem-with-music/"/>
		<updated>2009-12-02T09:42:58Z</updated>
		<id>https://blog.izs.me/2009/12/the-problem-with-music/</id>
		<content type="html">&lt;p&gt;Ever wonder why artists don&amp;rsquo;t care if you steal their music? Because the record company already stole it. Go torrent something.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How Twilight Works</title>
		<link href="https://blog.izs.me/2009/12/how-twilight-works/"/>
		<updated>2009-12-01T02:39:04Z</updated>
		<id>https://blog.izs.me/2009/12/how-twilight-works/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;If you&amp;rsquo;re male and you like Twilight, you&amp;rsquo;re gay. I don&amp;rsquo;t mean that in the derogatory sense, I mean it in the &amp;quot;you want to put your testicles against another man&amp;rsquo;s testicles while gripping handfuls&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Badass of the Week: Nikola Tesla</title>
		<link href="https://blog.izs.me/2009/12/badass-of-the-week-nikola-tesla/"/>
		<updated>2009-12-01T02:39:01Z</updated>
		<id>https://blog.izs.me/2009/12/badass-of-the-week-nikola-tesla/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Another sweet thing about Tesla is that he conducted the sort of crazy experiments that generally result in hordes of angry villages breaking down the door to your lab with torches and pitchforks.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Robo-One Dance Competition Brings The Creepy | BotJunkie</title>
		<link href="https://blog.izs.me/2009/11/robo-one-dance-competition-brings-the-creepy/"/>
		<updated>2009-11-30T22:34:47Z</updated>
		<id>https://blog.izs.me/2009/11/robo-one-dance-competition-brings-the-creepy/</id>
		<content type="html">&lt;p&gt;It&amp;rsquo;s like they went down into the uncanny valley, and then started digging. /via @tlrobinson&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/11/comfort/"/>
		<updated>2009-11-24T22:29:52Z</updated>
		<id>https://blog.izs.me/2009/11/comfort/</id>
		<content type="html">&lt;p&gt;Just a carpet, and the sun.  That&amp;rsquo;s all he needs.&lt;/p&gt;
&lt;p&gt;If only I could ever be anywhere near this comfortable.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>So How&#39;s That Enforcement Working For You? - Raise the Hammer</title>
		<link href="https://blog.izs.me/2009/11/so-hows-that-enforcement-working-for-you-raise/"/>
		<updated>2009-11-23T20:10:32Z</updated>
		<id>https://blog.izs.me/2009/11/so-hows-that-enforcement-working-for-you-raise/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Successful policies work because they are designed to accommodate what people are going to do anyway. &amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Horrible Turn on Vimeo</title>
		<link href="https://blog.izs.me/2009/11/horrible-turn-on-vimeo/"/>
		<updated>2009-11-20T18:48:11Z</updated>
		<id>https://blog.izs.me/2009/11/horrible-turn-on-vimeo/</id>
		<content type="html">&lt;p&gt;Far and away the best Dr. Horrible fan fiction. A Horrible Turn. How it all got started. If you don&amp;rsquo;t know Dr. Horrible, watch this first: &lt;a href=&quot;http://drhorrible.com/&quot;&gt;http://drhorrible.com/&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Implication v. Causation</title>
		<link href="https://blog.izs.me/2009/11/implication-v-causation/"/>
		<updated>2009-11-19T19:01:00Z</updated>
		<id>https://blog.izs.me/2009/11/implication-v-causation/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;let M = &amp;quot;is married&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;let D = &amp;quot;gets a divorce&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;all D is M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;not all M is D&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;therefore D → M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;divorce is the leading cause of marriage!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;replicantkitty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;implication ≠ causation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;that&#39;s the joke.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;thanks for explaining it to me, i wasn&#39;t getting it already.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;replicantkitty&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i like destroying humor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaaczschlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;NEEERRRRRRRRRRDDDDD!!!!!!!!!!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Texas&#39; gay marriage ban may have banned all marriages | McClatchy</title>
		<link href="https://blog.izs.me/2009/11/texas-gay-marriage-ban-may-have-banned-all/"/>
		<updated>2009-11-19T19:00:36Z</updated>
		<id>https://blog.izs.me/2009/11/texas-gay-marriage-ban-may-have-banned-all/</id>
		<content type="html">&lt;p&gt;Apparently a bill in Texas that sought to remove marriages as well as civil unions and domestic partnerships for gay couples contains language that actually removes all marriage. While I disagree&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Mighty Mighty</title>
		<link href="https://blog.izs.me/2009/11/mighty-mighty/"/>
		<updated>2009-11-18T23:20:00Z</updated>
		<id>https://blog.izs.me/2009/11/mighty-mighty/</id>
		<content type="html">&lt;p&gt;Here&amp;rsquo;s a freaky thought:&lt;/p&gt;
&lt;p&gt;Mitochondria.&lt;/p&gt;
&lt;p&gt;Think about that shit.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s got its own DNA.  It&amp;rsquo;s like a completely separate bunch of organisms living inside all your cells.&lt;/p&gt;
&lt;p&gt;Way back in the pre-cambrian, some single-celled ancestor of ours swallowed some other single-celled thing, and was like, &amp;ldquo;I&amp;rsquo;m keeping it as a pet!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;And now we have this little bacteria-type thingie living inside each of our cells.&lt;/p&gt;
&lt;p&gt;Say hi to your cells&amp;rsquo; pet:&lt;br /&gt;&lt;img src=&quot;https://blog.izs.me/2009/11/mighty-mighty/tumblr_ktbvedZaIH1qzgxun.png&quot; width=&quot;500&quot; height=&quot;318&quot; alt=&quot;mighty mighty mitochondria&quot; /&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>2012: The End Of The World?</title>
		<link href="https://blog.izs.me/2009/11/2012-the-end-of-the-world/"/>
		<updated>2009-11-18T09:38:54Z</updated>
		<id>https://blog.izs.me/2009/11/2012-the-end-of-the-world/</id>
		<content type="html">&lt;p&gt;Just in case you weren&amp;rsquo;t already convinced that the 2012 stuff was pure weapons-grade balonium, the folks at Information is Beautiful are on the case.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Microsoft Azure is The New Outlook — jungleG</title>
		<link href="https://blog.izs.me/2009/11/microsoft-azure-is-the-new-outlook-jungleg/"/>
		<updated>2009-11-18T07:51:28Z</updated>
		<id>https://blog.izs.me/2009/11/microsoft-azure-is-the-new-outlook-jungleg/</id>
		<content type="html">&lt;p&gt;Seems like Microsoft is doing something not completely retarded. I will be watching closely.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Romantic Rivalries Stir Religious Feelings</title>
		<link href="https://blog.izs.me/2009/11/romantic-rivalries-stir-religious-feelings/"/>
		<updated>2009-11-17T06:05:31Z</updated>
		<id>https://blog.izs.me/2009/11/romantic-rivalries-stir-religious-feelings/</id>
		<content type="html">&lt;p&gt;A study of college students finds that they are more religious when exposed to attractive rivals. The suggestion is that religion may be a mating strategy. However, OkCupid found that religiosity&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The 40-30-30 Rule: Why Risk Is Worth It :: Tips :: The 99 Percent</title>
		<link href="https://blog.izs.me/2009/11/the-40-30-30-rule-why-risk-is-worth-it-tips/"/>
		<updated>2009-11-16T20:15:31Z</updated>
		<id>https://blog.izs.me/2009/11/the-40-30-30-rule-why-risk-is-worth-it-tips/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Indeed, to improve at anything, we must at some point push ourselves outside our comfort zone.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Next Page</title>
		<link href="https://blog.izs.me/2009/11/next-page/"/>
		<updated>2009-11-13T07:06:41Z</updated>
		<id>https://blog.izs.me/2009/11/next-page/</id>
		<content type="html">&lt;p&gt;You know when paginated things have links like this?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1 2 3 4 5 6 7 &amp;gt; &amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Where &lt;code&gt;&amp;gt;&lt;/code&gt; goes to the next page, and &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; goes to the last page?&lt;/p&gt;
&lt;p&gt;I think that&amp;rsquo;s wrong.&lt;/p&gt;
&lt;p&gt;It should be this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[[[ NEXT FUCKING PAGE ALL YOU CARE ABOUT OMG ]]] 1 2 3 (last)
&lt;/code&gt;&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/11/my-new-desktop-background-youre-welcome/"/>
		<updated>2009-11-13T03:10:00Z</updated>
		<id>https://blog.izs.me/2009/11/my-new-desktop-background-youre-welcome/</id>
		<content type="html">&lt;p&gt;My new desktop background. &lt;a href=&quot;http://skitch.com/isaacschlueter/n8j2w/haggar-shark&quot;&gt;You&amp;rsquo;re welcome.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Google Closure: How not to write JavaScript</title>
		<link href="https://blog.izs.me/2009/11/google-closure-how-not-to-write-javascript/"/>
		<updated>2009-11-13T01:13:45Z</updated>
		<id>https://blog.izs.me/2009/11/google-closure-how-not-to-write-javascript/</id>
		<content type="html">&lt;p&gt;A very strong case for why Java programmers should not be allowed anywhere near JavaScript.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Threats relocate &#39;Godless&#39; billboard | cincinnati.com | Cincinnati.Com</title>
		<link href="https://blog.izs.me/2009/11/threats-relocate-godless-billboard/"/>
		<updated>2009-11-12T23:55:32Z</updated>
		<id>https://blog.izs.me/2009/11/threats-relocate-godless-billboard/</id>
		<content type="html">&lt;p&gt;Kinda proves the point, doesn&amp;rsquo;t it?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How does health insurance work?</title>
		<link href="https://blog.izs.me/2009/11/how-does-health-insurance-work/"/>
		<updated>2009-11-11T20:45:46Z</updated>
		<id>https://blog.izs.me/2009/11/how-does-health-insurance-work/</id>
		<content type="html">&lt;p&gt;Very friendly tutorial about how health insurance works. With soothing music to help with the frustration. (via @yellowgreeneyes)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>cyoa</title>
		<link href="https://blog.izs.me/2009/11/cyoa/"/>
		<updated>2009-11-11T07:00:05Z</updated>
		<id>https://blog.izs.me/2009/11/cyoa/</id>
		<content type="html">&lt;p&gt;Choices, choices. These books were a wonderful part of my childhood.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Atheists, It&#39;s Time to Stand Up to Jesus | Belief | AlterNet</title>
		<link href="https://blog.izs.me/2009/11/atheists-its-time-to-stand-up-to-jesus-belief/"/>
		<updated>2009-11-11T03:48:14Z</updated>
		<id>https://blog.izs.me/2009/11/atheists-its-time-to-stand-up-to-jesus-belief/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Mockery is one way of saying that a view does not deserve to be taken seriously. Religious views are fair game&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Validity of software patents goes on trial today at Supreme Court</title>
		<link href="https://blog.izs.me/2009/11/validity-of-software-patents-goes-on-trial-today/"/>
		<updated>2009-11-10T01:30:00Z</updated>
		<id>https://blog.izs.me/2009/11/validity-of-software-patents-goes-on-trial-today/</id>
		<content type="html">&lt;p&gt;In my opinion, patents are a dearth on the entire technology industry. They have no place in modern society, and are afflicted with too many problems to ever be salvageable. I hope the Supreme Court&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Random Thoughts: Why has this got so much harder to do?</title>
		<link href="https://blog.izs.me/2009/11/random-thoughts-why-has-this-got-so-much-harder/"/>
		<updated>2009-11-09T19:56:09Z</updated>
		<id>https://blog.izs.me/2009/11/random-thoughts-why-has-this-got-so-much-harder/</id>
		<content type="html">&lt;p&gt;Starting my Monday with a flood of deliciously melancholy nostalgia. My experience is roughly 100% the same as the author&amp;rsquo;s, except it was a Ti-83 rather than a ZXSpectrum.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Man punched his way out of shark attack - ABC News (Australian Broadcasting Corporation)</title>
		<link href="https://blog.izs.me/2009/11/man-punched-his-way-out-of-shark-attack-abc-news/"/>
		<updated>2009-11-09T19:56:09Z</updated>
		<id>https://blog.izs.me/2009/11/man-punched-his-way-out-of-shark-attack-abc-news/</id>
		<content type="html">&lt;p&gt;This dude punched a shark, and it left him alone. That is SO fucking hard core.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Generation specs: Stopping the short-sight epidemic - health - 06 November 2009 - New Scientist</title>
		<link href="https://blog.izs.me/2009/11/generation-specs-stopping-the-short-sight/"/>
		<updated>2009-11-09T19:56:09Z</updated>
		<id>https://blog.izs.me/2009/11/generation-specs-stopping-the-short-sight/</id>
		<content type="html">&lt;p&gt;Apparently, if you want your kids to have good vision, make them go play outside. The bright light and long distances are essential to keep their eyes from becoming elongated and myopic.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>NSFW Science: Fruit Bat Fellatio</title>
		<link href="https://blog.izs.me/2009/11/nsfw-science-fruit-bat-fellatio/"/>
		<updated>2009-11-06T06:04:12Z</updated>
		<id>https://blog.izs.me/2009/11/nsfw-science-fruit-bat-fellatio/</id>
		<content type="html">&lt;p&gt;As awesome as it sounds&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Great white sharks coming closer to shore than thought, researchers find - washingtonpost.com</title>
		<link href="https://blog.izs.me/2009/11/great-white-sharks-coming-closer-to-shore-than/"/>
		<updated>2009-11-04T20:08:59Z</updated>
		<id>https://blog.izs.me/2009/11/great-white-sharks-coming-closer-to-shore-than/</id>
		<content type="html">&lt;p&gt;Just in case sharks weren&amp;rsquo;t scary enough, it turns out they actually LOVE hanging out right near the shore.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/11/monster-venn-diagram/"/>
		<updated>2009-11-04T18:51:14Z</updated>
		<id>https://blog.izs.me/2009/11/monster-venn-diagram/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/ngnn6/monster-venn-diagram&quot;&gt;Monster Venn Diagram&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Yahoo! open sources uber web server • The Register</title>
		<link href="https://blog.izs.me/2009/11/yahoo-open-sources-uber-web-server-the-register/"/>
		<updated>2009-11-04T06:04:16Z</updated>
		<id>https://blog.izs.me/2009/11/yahoo-open-sources-uber-web-server-the-register/</id>
		<content type="html">&lt;p&gt;This is relatively gigantic news. Traffic Server is the program that lets Yahoo serve gargantuan amounts of web traffic at crazy fast speeds.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Caviar</title>
		<link href="https://blog.izs.me/2009/11/caviar/"/>
		<updated>2009-11-03T18:37:49Z</updated>
		<id>https://blog.izs.me/2009/11/caviar/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;for the price, slicehost is shitty&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Like I said, I&#39;m not worried about my data, I&#39;m worried about my &lt;em&gt;time&lt;/em&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Bah&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;for $40, i expect drink service and extra leg room.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pish posh. I&#39;m happy with it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;big spender.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;You know it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;must be nice.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Hang on, I just spilled a gallon of caviar on my new Magic Mouse...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Okay, no worries, cat&#39;s licking it up.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ryan Grove&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I guess she won&#39;t be getting her afternoon caviar as usual today.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac Schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SO tumblring this...&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Hive Mind - Hive Mind – The luck of the Sapiens: the weird fortuitousness of global warming - True/Slant</title>
		<link href="https://blog.izs.me/2009/11/hive-mind-hive-mind-the-luck-of-the-sapiens/"/>
		<updated>2009-11-03T01:32:00Z</updated>
		<id>https://blog.izs.me/2009/11/hive-mind-hive-mind-the-luck-of-the-sapiens/</id>
		<content type="html">&lt;p&gt;Apparently, all that fossil fuel may have actually helped prevent an ice age. I remain unconvinced that global warming is a problem. Frankly, I prefer my globes warm.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Cell Size and Scale</title>
		<link href="https://blog.izs.me/2009/11/cell-size-and-scale/"/>
		<updated>2009-11-03T00:08:22Z</updated>
		<id>https://blog.izs.me/2009/11/cell-size-and-scale/</id>
		<content type="html">&lt;p&gt;A fascinating slider showing the differences in sizes of things ranging from a coffee bean to a carbon atom. (via everybody, but especially @seldo)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>BBC NEWS | Health | Depression link to processed food</title>
		<link href="https://blog.izs.me/2009/11/bbc-news-health-depression-link-to-processed/"/>
		<updated>2009-11-03T00:08:22Z</updated>
		<id>https://blog.izs.me/2009/11/bbc-news-health-depression-link-to-processed/</id>
		<content type="html">&lt;p&gt;Yet another reason to avoid the middle of the grocery store. (via @seldo)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/10/how-to-not-forget/"/>
		<updated>2009-10-26T20:17:45Z</updated>
		<id>https://blog.izs.me/2009/10/how-to-not-forget/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/nr3gt/how-to-not-forget&quot;&gt;how to not forget&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Was our oldest ancestor a proton-powered rock? - life - 19 October 2009 - New Scientist</title>
		<link href="https://blog.izs.me/2009/10/was-our-oldest-ancestor-a-proton-powered-rock/"/>
		<updated>2009-10-19T23:40:57Z</updated>
		<id>https://blog.izs.me/2009/10/was-our-oldest-ancestor-a-proton-powered-rock/</id>
		<content type="html">&lt;p&gt;Very interesting developments regarding the origin of life on Earth.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Dean Kamen’s Robot Arm Grabs More Publicity | Gadget Lab | Wired.com</title>
		<link href="https://blog.izs.me/2009/10/dean-kamens-robot-arm-grabs-more-publicity/"/>
		<updated>2009-10-16T18:22:34Z</updated>
		<id>https://blog.izs.me/2009/10/dean-kamens-robot-arm-grabs-more-publicity/</id>
		<content type="html">&lt;p&gt;Dean Kamen is making cyborg arms and they&amp;rsquo;re fantastic (via @seldo)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>sweet bro and hella jeff</title>
		<link href="https://blog.izs.me/2009/10/sweet-bro-and-hella-jeff/"/>
		<updated>2009-10-15T07:28:34Z</updated>
		<id>https://blog.izs.me/2009/10/sweet-bro-and-hella-jeff/</id>
		<content type="html">&lt;p&gt;Worst comic EVAR. via @richtaur&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Python vs Clojure – Evolving « Best in Class</title>
		<link href="https://blog.izs.me/2009/10/python-vs-clojure-evolving-best-in-class/"/>
		<updated>2009-10-14T21:10:21Z</updated>
		<id>https://blog.izs.me/2009/10/python-vs-clojure-evolving-best-in-class/</id>
		<content type="html">&lt;p&gt;Analysis of Python vs Clojure. More and more lately, I&amp;rsquo;ve been thinking of Python as the new Basic. Powerful enough, not too bright, easy to pick up. A good introduction to programming, but not a&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Letters of Note</title>
		<link href="https://blog.izs.me/2009/10/letters-of-note/"/>
		<updated>2009-10-14T21:10:21Z</updated>
		<id>https://blog.izs.me/2009/10/letters-of-note/</id>
		<content type="html">&lt;p&gt;Letters of Note is a blog of interesting correspondence via cellulose. Particularly fun rant from the Gonzo Journalist: &lt;a href=&quot;http://j.mp/3NbCSV&quot;&gt;http://j.mp/3NbCSV&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>becoming</title>
		<link href="https://blog.izs.me/2009/10/becoming/"/>
		<updated>2009-10-05T01:53:46Z</updated>
		<id>https://blog.izs.me/2009/10/becoming/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;snatch a rainbow with the bottom of your shoe
turn into something beautiful
become yourself becoming you&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/09/the-surface-of-the-earth-is-the-shore-of-the/"/>
		<updated>2009-09-25T21:31:20Z</updated>
		<id>https://blog.izs.me/2009/09/the-surface-of-the-earth-is-the-shore-of-the/</id>
		<content type="html">&lt;blockquote&gt;&lt;p&gt;The surface of the earth is the shore of the cosmic ocean.  Recently we&amp;rsquo;ve waded in the waves, and the water seems inviting.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class=&quot;source&quot;&gt;&lt;cite&gt;Carl Sagan&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;via @nokapixel&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/09/hosting-a-party/"/>
		<updated>2009-09-24T18:01:04Z</updated>
		<id>https://blog.izs.me/2009/09/hosting-a-party/</id>
		<content type="html">&lt;p&gt;Quick: What kind of party are they talking about?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>FFRF&#39;s &quot;Image No Religion&quot; Campaign Reaches San Francisco</title>
		<link href="https://blog.izs.me/2009/09/ffrfs-image-no-religion-campaign-reaches-san/"/>
		<updated>2009-09-18T19:18:50Z</updated>
		<id>https://blog.izs.me/2009/09/ffrfs-image-no-religion-campaign-reaches-san/</id>
		<content type="html">&lt;p&gt;Atheist bus FTW!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Run if you are a poop</title>
		<link href="https://blog.izs.me/2009/09/run-if-you-are-a-poop/"/>
		<updated>2009-09-17T18:06:00Z</updated>
		<id>https://blog.izs.me/2009/09/run-if-you-are-a-poop/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vark Questioner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I read in magazine that you cannot run if you are a poop yes?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Depend on what magazine say, if are you poop no then forever run you cannot.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vark Questioner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;no it just says poop and run no, but i dont believe it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Is magazine poop run?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vark Questioner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;what? no the magazine tells me that i cannot run and poop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tried you to run a poop and failed?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Thanks To Gene Therapy, Monkeys See In Full Color</title>
		<link href="https://blog.izs.me/2009/09/thanks-to-gene-therapy-monkeys-see-in-full-color/"/>
		<updated>2009-09-17T05:28:16Z</updated>
		<id>https://blog.izs.me/2009/09/thanks-to-gene-therapy-monkeys-see-in-full-color/</id>
		<content type="html">&lt;p&gt;See, this is why there&amp;rsquo;s a medical crisis. We&amp;rsquo;re wasting the really cool treatments on monkeys.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/09/incredible-great-greate-really-nice-just-great-easy-easy/"/>
		<updated>2009-09-16T20:49:18Z</updated>
		<id>https://blog.izs.me/2009/09/incredible-great-greate-really-nice-just-great-easy-easy/</id>
		<content type="html">&lt;p&gt;Keynote.  Just the good parts.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty incredible.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Better world: Legalise drugs - 11 September 2009 - New Scientist</title>
		<link href="https://blog.izs.me/2009/09/better-world-legalise-drugs-11-september-2009/"/>
		<updated>2009-09-15T03:50:19Z</updated>
		<id>https://blog.izs.me/2009/09/better-world-legalise-drugs-11-september-2009/</id>
		<content type="html">&lt;p&gt;Make the world a better place by legalizing drugs&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/09/in-my-house-right-now-sweet-beautiful-and/"/>
		<updated>2009-09-13T03:40:14Z</updated>
		<id>https://blog.izs.me/2009/09/in-my-house-right-now-sweet-beautiful-and/</id>
		<content type="html">&lt;p&gt;&lt;b&gt;In my house right now, sweet, beautiful, and smelling awesome.:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;And the pie she made is pretty nice, too.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>How I Got Quicksilver to Work in Snow Leopard</title>
		<link href="https://blog.izs.me/2009/09/how-i-got-quicksilver-to-work-in-snow-leopard/"/>
		<updated>2009-09-11T20:29:00Z</updated>
		<id>https://blog.izs.me/2009/09/how-i-got-quicksilver-to-work-in-snow-leopard/</id>
		<content type="html">&lt;p&gt;When I installed Snow Leopard, Quicksilver stopped responding.  This is not acceptable.&lt;/p&gt;
&lt;h2 id=&quot;quit_quicksilver&quot;&gt;Quit Quicksilver&lt;/h2&gt;
&lt;p&gt;It was probably nice enough to quit for you.  If not, you probably don’t need to do this.  But still, duh, quit it if it’s running.&lt;/p&gt;
&lt;h2 id=&quot;move_the_settings_away&quot;&gt;Move the Settings Away&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;mv ~/Library/Application&#92; Support/Quicksilver{,~}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’ll move all your Quicksilver settings out of the way, so that it’ll be like a brand new install.  This means that you’ll &lt;em&gt;temporarily&lt;/em&gt; lose all your customizations and trained shortcuts, but we’ll get them (mostly) back.&lt;/p&gt;
&lt;h2 id=&quot;install_the_newest_beta&quot;&gt;Install the Newest Beta&lt;/h2&gt;
&lt;p&gt;Get the latest beta from &lt;a href=&quot;http://code.google.com/p/blacktree-alchemy/downloads/list&quot;&gt;blacktree-alchemy’s google code project&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Drag to Applications, start it up, put it on the Dock, you know the drill.&lt;/p&gt;
&lt;p&gt;This will create a new ~/Library/Application&#92; Support/Quicksilver folder. So, now you have two.  The old (broken) one that ends in ~, and the new (empty) one that doesn’t have any plugins or preferences.&lt;/p&gt;
&lt;p&gt;Start it just to make sure it works.  Then close it.  We’re gonna tinker in its brains a little.&lt;/p&gt;
&lt;h2 id=&quot;copy_mnemonics&quot;&gt;Copy Mnemonics&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;cp ~/Library/Application&#92; Support/Quicksilver{~,}/Mnemonics.plist
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will “retrain” Quicksilver with all your learned behaviors.  However, chances are, most of the things that it points do don’t exist yet, because the Catalogs are empty.&lt;/p&gt;
&lt;h2 id=&quot;carefully_enable_plugins&quot;&gt;Carefully Enable Plugins&lt;/h2&gt;
&lt;p&gt;Open up Quicksilver, and make sure that &lt;kbd&gt;⌘space&lt;/kbd&gt; (or &lt;kbd&gt;⌃space&lt;/kbd&gt; or whatever) launches it like it did before.&lt;/p&gt;
&lt;p&gt;Go into the settings with &lt;kbd&gt;⌘,&lt;/kbd&gt; and set everything the way you had it.  This is tedious.&lt;/p&gt;
&lt;p&gt;Enable plugins one-by-one.  When Quicksilver crashes, you’ll know that you enabled something you shouldn’t have.  Remove the folder in ~/Library/Application&#92; Support/Quicksilver/Plugins associated with the offensive thing.  The “File” stuff is mostly broken, so hopefully you weren’t too in love with setting file attributes from Quicksilver.&lt;/p&gt;
&lt;p&gt;Same for Catalogs.&lt;/p&gt;
&lt;h2 id=&quot;get_the_new_snow_compatible_bezelhud_display&quot;&gt;Get the New Snow-Compatible BezelHUD Display&lt;/h2&gt;
&lt;p&gt;If you don’t already use &lt;a href=&quot;http://code.bencochran.com/bezelhud/&quot;&gt;BezelHUD&lt;/a&gt;, you should have been.  It is the win.&lt;/p&gt;
&lt;h2 id=&quot;bonus_markdown_in_textmate&quot;&gt;Bonus! Markdown in Textmate!&lt;/h2&gt;
&lt;p&gt;Not sure why, but Textmate bundles got a bit stupid in Snow Leopard, and can’t find their scripts.  If you add &lt;code&gt;&quot;$HOME/Library/Application Support/TextMate/Support/bin&quot;&lt;/code&gt; to the $PATH environment variable, and then restart Textmate, it seems to work.  (I just added this to my .bashrc goodies.)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Hierarchy Of Digital Distractions | Information Is Beautiful</title>
		<link href="https://blog.izs.me/2009/09/the-hierarchy-of-digital-distractions/"/>
		<updated>2009-09-09T22:16:43Z</updated>
		<id>https://blog.izs.me/2009/09/the-hierarchy-of-digital-distractions/</id>
		<content type="html">&lt;p&gt;Ironically, I should really be doing some work right now, but this interesting thing popped up on my twitter feed (via seldo)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Emoticons</title>
		<link href="https://blog.izs.me/2009/09/emoticons/"/>
		<updated>2009-09-06T22:03:30Z</updated>
		<id>https://blog.izs.me/2009/09/emoticons/</id>
		<content type="html">&lt;p&gt;There are many cultural differences around which emoticons people use.  While the sideways &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;:)&lt;/code&gt; style emoticons are more common in western cultures, the &amp;ldquo;right-side-up&amp;rdquo; style emoticons are more popular in eastern countries.  Perhaps owing to their greater expressiveness, or the influence of manga on western culture and internet culture in particular, eastern-style emoticons have gained in popularity in the west, especially among nerds.&lt;/p&gt;
&lt;p&gt;I started using them because they seemed to capture much more emotion, and lend themselves to a wider range of expressiveness.  But for those unfamiliar with their meaning, they can be confusing.&lt;/p&gt;
&lt;p&gt;The trick is to look at them as right-side-up faces, eyes on the sides, mouth in the middle.  The size and position of the eyes usually indicates the emotion.  It might help to put them in parentheses like &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;(^_^)&lt;/code&gt; so it looks more like a face.  These are the ones I use.  There are a bunch more, especially in Kanji and other languages where there are many more shapes to play with.&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;ToT&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Crying a lot. The Ts are eyes squinted shut, with a stream of tears. The &amp;ldquo;o&amp;rdquo; is a wide open mouth, because you&amp;rsquo;re crying so hard. Think WAAAAAAA!!!! like a cartoon baby.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;T_T&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Lotta tears, but not wailing.  Maybe you&amp;rsquo;re just chopping onions or something.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;;_;&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Crying a little. The ;s are an eye with one tear coming down, and the mouth is shut. Sniff sniff.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;v_v&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Quiet frustrated resignation. Eyes are pointed down. &amp;ldquo;Alright. Fine. Whatever.&amp;rdquo;
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;/_&#92;&lt;/code&gt;&lt;br /&gt;&lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;/o&#92;&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Profound dismay. Opposite of smiling. Eyebrows are lifted in the middle, very sad.  With the open mouth, it&amp;rsquo;s a wail of extreme sorrow.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;O_O&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Whoa!! Exclamation, surprise. Eyes are wide open.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;-_-&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Sleeping. Eyes are shut.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;=_=&lt;/code&gt;&lt;br /&gt;&lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;g_g&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Sleepy. Note the bags under the eyes.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;&amp;gt;_&amp;lt;&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Furious or hurt. Like you just stubbed your toe. Fuck! Face is scrunched up.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;&amp;gt;o&amp;lt;&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Yelling about it!
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;~o~&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Yawn (eyes are closed, mouth open)
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;@.@&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Dizzy, confused, disoriented. whoooaaa&amp;hellip;
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;$_$&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Thinking about money (Like the cartoons where the person&amp;rsquo;s eyes would go &amp;ldquo;chaching!&amp;rdquo;)
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;x_x&lt;/code&gt;&lt;br /&gt;&lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;X_X&lt;/code&gt;&lt;br /&gt;&lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;*…*&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Dead (x&amp;rsquo;s over the eyes, skeleton face.)
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;o_O&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Raised eyebrow, quizzical, interested. &amp;ldquo;Hm..?&amp;rdquo;
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;o_O?&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Scratching head. Like &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;o_O&lt;/code&gt; but a bit more confused or intrigued.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;^_^&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Happy, grinning
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;^o^&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            WOW! YAY! Eyes are smiling, mouth wide open exclaiming about something. Sometimes with arms, like &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;&#92;(^o^)/&lt;/code&gt;
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;*^_^*&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            blushing
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;;^_^&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Embarrassed, smiling. From the manga tradition of putting a giant sweat drop by the face of a character to indicate discomfort. More ; means more embarrassed.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;d^_^b&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Listening to music, headphones on
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        &lt;code style=&quot;font-family:Helvetica, Arial, sans-serif&quot;&gt;^.^&lt;/code&gt;
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            A happy kiss.
        &lt;/p&gt;
    &lt;/dd&gt;
&lt;/dl&gt;
</content>
	</entry>
	
	<entry>
		<title>Coding Style</title>
		<link href="https://blog.izs.me/2009/09/coding-style/"/>
		<updated>2009-09-02T21:00:19Z</updated>
		<id>https://blog.izs.me/2009/09/coding-style/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://github.com/isaacs/narwhal/blob/master/lib/http-client.js&quot;&gt;http://github.com/isaacs/narwhal/blob/master/lib/http-client.js&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;usage: &lt;a href=&quot;http://github.com/isaacs/narwhal-playground/blob/master/http-client.js&quot;&gt;http://github.com/isaacs/narwhal-playground/blob/master/http-client.js&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;omg your code looks so much like mine &amp;lt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;omg that&#39;s the most nerdy bromantic thing you&#39;ve ever said to me.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/09/rock-heart/"/>
		<updated>2009-09-01T21:25:11Z</updated>
		<id>https://blog.izs.me/2009/09/rock-heart/</id>
		<content type="html">&lt;p&gt;&lt;b&gt;Rock Heart&lt;/b&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Most Twitter users are atheists, according to poll.</title>
		<link href="https://blog.izs.me/2009/08/most-twitter-users-are-atheists-according-to/"/>
		<updated>2009-08-31T04:20:00Z</updated>
		<id>https://blog.izs.me/2009/08/most-twitter-users-are-atheists-according-to/</id>
		<content type="html">&lt;p&gt;This is interesting.  Sadly, as an opt-in poll, it suffers from the most obvious and extreme selection bias, and raises more questions than it answers.&lt;/p&gt;
&lt;p&gt;Does it suggest that atheists are most likely to use twitter?  Or perhaps that, without religion, we look elsewhere for silly memes, and thus are more susceptible to polls and the like?  Perhaps this higher memetic availability explains why more atheists might be using twitter in the first place.  Perhaps it&amp;rsquo;s really just a measurement of religiousity in the Bay Area and a few other places where twitter is popular.&lt;/p&gt;
&lt;p&gt;Hard to say.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>xx, by The XX</title>
		<link href="https://blog.izs.me/2009/08/xx-by-the-xx/"/>
		<updated>2009-08-30T21:30:17Z</updated>
		<id>https://blog.izs.me/2009/08/xx-by-the-xx/</id>
		<content type="html">&lt;p&gt;Excellent music. I&amp;rsquo;m hooked.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Wherein T-Rex pwns some philosophers with descriptivist semantics.</title>
		<link href="https://blog.izs.me/2009/08/wherein-t-rex-pwns-some-philosophers-with/"/>
		<updated>2009-08-28T21:25:14Z</updated>
		<id>https://blog.izs.me/2009/08/wherein-t-rex-pwns-some-philosophers-with/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/netflix-culture/"/>
		<updated>2009-08-28T17:02:53Z</updated>
		<id>https://blog.izs.me/2009/08/netflix-culture/</id>
		<content type="html">&lt;p&gt;Netflix is Doing It Right.&lt;/p&gt;
&lt;p&gt;This is how employees should be treated, and how creative knowledge-based companies should be run.&lt;/p&gt;
&lt;p&gt;Given that &lt;a href=&quot;http://www.ted.com/talks/dan_pink_on_motivation.html&quot;&gt;short-term incentives motivate far less effectively than a sense of control and ownership&lt;/a&gt;, isn&amp;rsquo;t it time that businesses start using what science knows to make their employees more productive?&lt;/p&gt;
&lt;p&gt;If I ever go to another BDC after I&amp;rsquo;m done at Yahoo, I&amp;rsquo;ll take a good long look at Netflix.  Now I understand why engineers who go there and seem so happy.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Ryan Sager - Neuroworld – Whoa, This Is Heavy - True/Slant</title>
		<link href="https://blog.izs.me/2009/08/ryan-sager-neuroworld-whoa-this-is-heavy/"/>
		<updated>2009-08-27T19:05:22Z</updated>
		<id>https://blog.izs.me/2009/08/ryan-sager-neuroworld-whoa-this-is-heavy/</id>
		<content type="html">&lt;p&gt;Heavy: Yet another case of somatic input affecting our abstract thoughts. (via @seldo)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Can Atheists Be Parents? - TIME</title>
		<link href="https://blog.izs.me/2009/08/can-atheists-be-parents-time/"/>
		<updated>2009-08-27T19:05:22Z</updated>
		<id>https://blog.izs.me/2009/08/can-atheists-be-parents-time/</id>
		<content type="html">&lt;p&gt;[EDIT] Ha! Social media fail. This was from 1970, despite showing up in &amp;ldquo;new stories&amp;rdquo; sections of Buzz and Digg. &amp;mdash;- WTF!? Judge Camarata in New Jersey has declared that atheist parents are unfit to&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Canadian scientist aims to turn chickens into dinosaurs</title>
		<link href="https://blog.izs.me/2009/08/canadian-scientist-aims-to-turn-chickens-into/"/>
		<updated>2009-08-27T06:13:32Z</updated>
		<id>https://blog.izs.me/2009/08/canadian-scientist-aims-to-turn-chickens-into/</id>
		<content type="html">&lt;p&gt;What could possibly go wrong?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Inside Google Books: Download Over a Million Public Domain Books from Google Books in the Open EPUB Format</title>
		<link href="https://blog.izs.me/2009/08/inside-google-books-download-over-a-million/"/>
		<updated>2009-08-26T23:51:53Z</updated>
		<id>https://blog.izs.me/2009/08/inside-google-books-download-over-a-million/</id>
		<content type="html">&lt;p&gt;Google is working to remove the DRM on the printed word. A very &amp;ldquo;not being evil&amp;rdquo; move, in my opinion.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/dan-ariely-ted-talk/"/>
		<updated>2009-08-26T17:03:11Z</updated>
		<id>https://blog.izs.me/2009/08/dan-ariely-ted-talk/</id>
		<content type="html">&lt;p&gt;Dan Ariely talks about a few of the ways in which we demonstrate that we don&amp;rsquo;t know why we do the things we do.  Key takeaway: when picking up strangers, bring someone who looks just like you, but just a &lt;em&gt;little&lt;/em&gt; uglier.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Placebos Are Getting More Effective. Drugmakers Are Desperate to Know Why.</title>
		<link href="https://blog.izs.me/2009/08/placebos-are-getting-more-effective-drugmakers/"/>
		<updated>2009-08-25T09:28:56Z</updated>
		<id>https://blog.izs.me/2009/08/placebos-are-getting-more-effective-drugmakers/</id>
		<content type="html">&lt;p&gt;Apparently, laughter isn&amp;rsquo;t the best medicine. Sugar pills are.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>hurl</title>
		<link href="https://blog.izs.me/2009/08/hurl/"/>
		<updated>2009-08-24T08:20:13Z</updated>
		<id>https://blog.izs.me/2009/08/hurl/</id>
		<content type="html">&lt;p&gt;Unfortunately named very useful curl-ish tool from @defunkt and @leahculver (via @tlrobinson)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Into</title>
		<link href="https://blog.izs.me/2009/08/into/"/>
		<updated>2009-08-22T17:01:00Z</updated>
		<id>https://blog.izs.me/2009/08/into/</id>
		<content type="html">&lt;p&gt;There&amp;rsquo;s a big difference between these three states:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;I like X&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m into X&lt;/li&gt;
&lt;li&gt;I&amp;rsquo;m good at X&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That difference usually amounts to doing whatever it is.  A lot.  But, if you like something, it&amp;rsquo;s hard to admit you&amp;rsquo;re not really into it in any meaningful way.  Maybe you like the beliefs behind open source code, and you admire the people who do it, and think of yourself as one of them.  But you don&amp;rsquo;t actually &lt;em&gt;do&lt;/em&gt; it.&lt;/p&gt;
&lt;p&gt;The first step to getting good at anything worthwhile is accepting that you&amp;rsquo;re going to suck at it, most likely for a &lt;em&gt;very&lt;/em&gt; long time.  If you can master it in a day, it&amp;rsquo;s probably not all that interesting.  The really cool stuff takes years.&lt;/p&gt;
&lt;p&gt;So get started, already.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Holidays</title>
		<link href="https://blog.izs.me/2009/08/holidays/"/>
		<updated>2009-08-21T17:01:18Z</updated>
		<id>https://blog.izs.me/2009/08/holidays/</id>
		<content type="html">&lt;p&gt;There are four holidays in my religion. They match the seasons, and are balanced and symmetrical. As far as I know, there are at least 2 people other than myself that observe all 4 of these holidays as they&amp;rsquo;re intended.&lt;/p&gt;
&lt;h2&gt;Consumptive Holidays&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;Moderation is for monks. Take big bites.&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&quot;source&quot;&gt;&lt;cite&gt;Lazarus Long&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Autumn: Thanksgiving&lt;/strong&gt; - Food. OMG food. Everyone get together, with family or friends or strangers, and eat a lot. Wine, turkey, corn, gravy, potatoes, pastries, berries, pumpkins and squashes, ham, whateveryoucanfitinyourfaceuntilyourbeltpops. It&amp;rsquo;s not about family, it&amp;rsquo;s not about pilgrims and indians or turkeys, it&amp;rsquo;s about feasting until you have to lay down.&lt;/p&gt;
&lt;p&gt;Then sleep. Take Friday off for more sleeping.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Spring: 4/20&lt;/strong&gt; - April 20th is the Thanksgiving of the spring. It&amp;rsquo;s not cold, and there&amp;rsquo;s no need to stuff your face. Instead, stuff your head. Go outside, celebrate the beauty of nature all around you. Explore new areas in your world and your mind. Have fun with it! See: &lt;a href=&quot;http://en.wikipedia.org/wiki/420_(cannabis_culture)&quot;&gt;420&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Reflective Holidays&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;The Unexamined Life is Not Worth Living&lt;/p&gt;&lt;/blockquote&gt;
&lt;div class=&quot;source&quot;&gt;&lt;cite&gt;Socrates&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Winter: Christmas&lt;/strong&gt; - From December 21st-ish until January 1, we meet with family. Bake sweet foods, and play with evergreens, and do other things that smell lovely. Eventually, there&amp;rsquo;s a big dinner, and presents. The presents used to be the big draw for me, but now, they&amp;rsquo;re just kind of a hassle. I spend a bunch of money on things that my family doesn&amp;rsquo;t need, and get a bunch of stuff that I didn&amp;rsquo;t really want. But wrapping and unwrapping things is fun, and the surprise of it can be enjoyable.&lt;/p&gt;
&lt;p&gt;On Christmas, I reflect on my family, and my place in the tribe. We all come together, and it&amp;rsquo;s a very social thing. Old animosities are stirred up, as are old loves and childhood memories. It connects us to our shared past, and adds warmth to the winter.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Summer: Birthday&lt;/strong&gt; - On July 1, we take a day off to reflect on the last year of life, and think about where it&amp;rsquo;s going next. Instead of buying presents for other people, we focus on what we really want for ourselves, and measure the progress that is so often forgotten in our day-to-day business. It&amp;rsquo;s a primarily solitary activity, but it&amp;rsquo;s also an excuse to party.&lt;/p&gt;
&lt;p&gt;The fact that I was actually born on Birthday is inconsequential. Birthday is for everyone. For each of us, it&amp;rsquo;s a celebration of the fact that we are present and alive in this world, and a day when we can take a moment to see how we&amp;rsquo;re doing and consider if there are any course changes we might want to make. Most of all, it&amp;rsquo;s a day to reward ourselves for what we&amp;rsquo;ve accomplished, and thus provide greater motivation for more accomplishment.&lt;/p&gt;
&lt;h2&gt;Consumptive vs Reflective&lt;/h2&gt;
&lt;p&gt;None of these holidays are better or more important than any of the others. The interesting thing is that, by coming together and consuming, we bond and find commonalities. By reflecting and meditating on one&amp;rsquo;s place in the universe and in our tribe, we often find cause for feasting.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a value in focusing on one aspect or another, just for a day, just to make sure we don&amp;rsquo;t forget.&lt;/p&gt;
&lt;p&gt;The incomplete life is the life not worth living.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/origami/"/>
		<updated>2009-08-20T19:45:14Z</updated>
		<id>https://blog.izs.me/2009/08/origami/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Not all code needs to be a factory, some of it can just be origami.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://rubyforge.org/pipermail/camping-list/2008-May/000719.html&quot;&gt;_why&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Inbox Of Nardo Pace, The Empire&#39;s Worst Engineer</title>
		<link href="https://blog.izs.me/2009/08/the-inbox-of-nardo-pace-the-empires-worst/"/>
		<updated>2009-08-20T19:16:20Z</updated>
		<id>https://blog.izs.me/2009/08/the-inbox-of-nardo-pace-the-empires-worst/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Stuff Geeks Love</title>
		<link href="https://blog.izs.me/2009/08/stuff-geeks-love/"/>
		<updated>2009-08-20T07:36:36Z</updated>
		<id>https://blog.izs.me/2009/08/stuff-geeks-love/</id>
		<content type="html">&lt;p&gt;How is it I&amp;rsquo;m just finding out about this site now?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Loyalty</title>
		<link href="https://blog.izs.me/2009/08/loyalty/"/>
		<updated>2009-08-19T17:02:44Z</updated>
		<id>https://blog.izs.me/2009/08/loyalty/</id>
		<content type="html">&lt;p&gt;Send up the red flags and alarms whenever you hear this word. 10&amp;rsquo;ll get you 20, it&amp;rsquo;s a scam of some sort.  Sniff around.&lt;/p&gt;
&lt;p&gt;There are only two things to be loyal to in this world: your self, and your integrity. And usually, if you lose one, the other goes along with it.&lt;/p&gt;
&lt;p&gt;If any other &amp;ldquo;loyalty&amp;rdquo; seems to collide with those two—family, party, country, job, what-have-you—you&amp;rsquo;re in trouble. Drop it like a bad habit. Run fast. That ship is sinking.&lt;/p&gt;
&lt;p&gt;In other words, &amp;ldquo;I got only two things in this world: my word, and my balls. And I don&amp;rsquo;t break ’em for nobody.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Time-Traveling for Dummies</title>
		<link href="https://blog.izs.me/2009/08/time-traveling-for-dummies/"/>
		<updated>2009-08-18T21:15:50Z</updated>
		<id>https://blog.izs.me/2009/08/time-traveling-for-dummies/</id>
		<content type="html">&lt;p&gt;Dave Goldberg examines the implications of single-timeline-style time travel, making the argument that it&amp;rsquo;s the only style supported by Einstein&amp;rsquo;s theories.Of course, Einstein might be wrong.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Artistic Integrity</title>
		<link href="https://blog.izs.me/2009/08/artistic-integrity/"/>
		<updated>2009-08-18T17:36:23Z</updated>
		<id>https://blog.izs.me/2009/08/artistic-integrity/</id>
		<content type="html">&lt;p&gt;Don&amp;rsquo;t worry about your artistic integrity.  Selling out is harder than it looks.&lt;/p&gt;
&lt;p&gt;Just be honest about what you want.  Integrity will be there when you need it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/thomas-jefferson/"/>
		<updated>2009-08-18T05:34:00Z</updated>
		<id>https://blog.izs.me/2009/08/thomas-jefferson/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;The returning good sense of our country threatens abortion to &lt;ins&gt;[the Christian churches’]&lt;/ins&gt; hopes, &amp;amp; they believe that any portion of power confided to me, will be exerted in opposition to their schemes. &lt;strong&gt;And they believe rightly; for I have sworn upon the altar of god, eternal hostility against every form of tyranny over the mind of man.&lt;/strong&gt; But this is all they have to fear from me: &amp;amp; enough too in their opinion, &amp;amp; this is the cause of their printing lying pamphlets against me, forging conversations for me &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-1&quot;&gt;[1]&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;strong&gt;Difference of opinion is advantageous in religion.&lt;/strong&gt; The several sects perform the office of a &lt;i lang=&quot;lat&quot;&gt;Censor morum&lt;/i&gt; over each other. Is uniformity attainable? Millions of innocent men, women and children, since the introduction of Christianity, have been burnt, tortured, fined, imprisoned: yet we have not advanced one inch towards uniformity. &lt;strong&gt;What has been the effect of coercion? To make one half the world fools, and the other half hypocrites.&lt;/strong&gt; To support roguery and error all over the earth. &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-2&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;The rights of conscience we never submitted, we could not submit. We are answerable for them to our God. The legitimate powers of government extend to such acts only as are injurious to others. &lt;strong&gt;But it does me no injury for my neighbour to say there are twenty gods, or no god.&lt;/strong&gt; It neither picks my pocket nor breaks my leg. … &lt;strong&gt;Reason and free enquiry are the only effectual agents against error.&lt;/strong&gt; &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-2&quot;&gt;[2]&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;Fix reason firmly in her seat, and call to her tribunal every fact, every opinion. &lt;strong&gt;Question with boldness even the existence of a god;&lt;/strong&gt; because, if there be one, he must more approve the homage of reason, than that of blindfolded fear. &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-3&quot;&gt;[3]&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;And the day will come when &lt;strong&gt;the mystical generation of Jesus, by the supreme being as his father in the womb of a virgin will be classed with the fable of the generation of Minerva in the brain of Jupiter.&lt;/strong&gt; But we may hope that the dawn of reason and freedom of thought in these United States will do away all this artificial scaffolding, and restore to us the primitive and genuine doctrines of this the most venerated reformer of human errors. &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-4&quot;&gt;[4]&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;In fact &lt;ins&gt;[the Holy Trinity]&lt;/ins&gt; is so incomprehensible to the human mind that no candid man can say he has any idea of it, and how can he believe what presents no idea. &lt;strong&gt;He who thinks he does only deceives himself.&lt;/strong&gt; He proves also that &lt;strong&gt;man, once surrendering his reason, has no remaining guard against absurdities the most monstrous&lt;/strong&gt;, and like a ship without rudder is the sport of every wind. With such persons gullability which they call faith takes the helm from the hand of reason and the mind becomes a wreck. [sic] &lt;a href=&quot;https://blog.izs.me/2009/08/thomas-jefferson/#tj-cite-5&quot;&gt;[5]&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thomas Jefferson, third President of the United States:&lt;br /&gt;[1] &lt;a href=&quot;http://lachlan.bluehaze.com.au/lit/jeff04.htm&quot;&gt;letter to Dr. Benjamin Rush, 1800-10-23&lt;/a&gt; Note that he specifically indicates that he will take no action against the church leaders that smeared him; all they have to fear is his hostility and ill will.&lt;br /&gt;[2] &lt;a href=&quot;http://tjportal.monticello.org/cgi-bin/Pwebrecon.cgi?BBID=392&quot;&gt;Notes on the State of Virginia&lt;/a&gt; Jefferson here stated explicitly that he saw atheism as an inalienable right, and outside the province of the State.&lt;br /&gt;[3] &lt;a href=&quot;http://tjportal.monticello.org/cgi-bin/Pwebrecon.cgi?BBID=6323&quot;&gt;letter to Peter Carr, 1787-08-10&lt;/a&gt; In other words, agnosticism is preferable to blind faith.&lt;br /&gt;[4] &lt;a href=&quot;http://tjportal.monticello.org/cgi-bin/Pwebrecon.cgi?BBID=2607&quot;&gt;letter to John Adams, 1823-04-11&lt;/a&gt;  Note that he held Jesus’s principles in high regard, but rejected the christian mythology just the same.  It was his hope that the free and secular nature of the American society would bring about the demise of these beliefs.&lt;br /&gt;[5] &lt;a href=&quot;http://memory.loc.gov/cgi-bin/ampage?collId=mtj1&amp;amp;fileName=mtj1page053.db&amp;amp;recNum=577&quot;&gt;letter to James Smith, 1822-12-08&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/benw-the-billion-dollar-gram-information-is/"/>
		<updated>2009-08-18T03:38:51Z</updated>
		<id>https://blog.izs.me/2009/08/benw-the-billion-dollar-gram-information-is/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.benward.me/post/165291215&quot;&gt;benw&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;a href=&quot;http://www.informationisbeautiful.net/visualizations/the-billion-dollar-gram/&quot;&gt;The Billion Dollar Gram | Information Is Beautiful&lt;/a&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Science and Pseudoscience in Adult Nutrition Research and Practice</title>
		<link href="https://blog.izs.me/2009/08/science-and-pseudoscience-in-adult-nutrition/"/>
		<updated>2009-08-18T01:07:33Z</updated>
		<id>https://blog.izs.me/2009/08/science-and-pseudoscience-in-adult-nutrition/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;The data clearly show that much current advice about dietary pyramids, food supplements, megavitamins, and weight loss regimens is frequently unproven, erroneous, or even harmful and is often based&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Academic Programmers - A Spotter&#39;s Guide</title>
		<link href="https://blog.izs.me/2009/08/academic-programmers-a-spotters-guide/"/>
		<updated>2009-08-18T01:07:33Z</updated>
		<id>https://blog.izs.me/2009/08/academic-programmers-a-spotters-guide/</id>
		<content type="html">&lt;p&gt;I think I&amp;rsquo;ve worked with (or been) all of these at some point or another.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/discover-hostile-towards-exclamation-points/"/>
		<updated>2009-08-17T22:49:45Z</updated>
		<id>https://blog.izs.me/2009/08/discover-hostile-towards-exclamation-points/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://skitch.com/isaacschlueter/b5i1f/discover-hostile-towards-exclamation-points&quot;&gt;Discover - Hostile towards exclamation-points&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Atheism and Groupthink </title>
		<link href="https://blog.izs.me/2009/08/atheism-and-groupthink/"/>
		<updated>2009-08-17T17:00:52Z</updated>
		<id>https://blog.izs.me/2009/08/atheism-and-groupthink/</id>
		<content type="html">&lt;p&gt;Get ready, I&amp;rsquo;m about to offend almost everyone. (Except atheists.) Chasing the TeaL DeeR&amp;hellip;&lt;/p&gt;
&lt;p&gt;Having a firm belief in a &amp;ldquo;higher power&amp;rdquo; smelled funny to me from a pretty early age. I could never find any non-contradictory evidence, and it seemed like a pretty fantastic set of ideas to buy into. I guess you could say that I was a soft atheist (aka agnostic) as early as 10 years old, and my acceptance of God gradually faded as I learned to distinguish reality from fiction.&lt;/p&gt;
&lt;p&gt;The thing that struck me as very odd around that time is that I started to realize that other people – adults – they &lt;em&gt;actually believed this shit&lt;/em&gt;. When my grandmother told me that Santa lives in the North Pole, and when she told me that Jesus lives in Heaven, I heard two statements that were in roughly the same category. But for her, one was make-believe, and the other history. Between 10 and 12, this very strange cognitive dissonance started to dawn on me, and it troubled me greatly.&lt;/p&gt;
&lt;p&gt;Also around that time, I realized that people didn&amp;rsquo;t just &lt;em&gt;believe&lt;/em&gt; in God; they formed &lt;em&gt;teams&lt;/em&gt; around what they believed about God, and they based their lives around it. I had friends who were Protestants, and they didn&amp;rsquo;t have to go to Catechism after school. I had other friends who were Jewish, and they had Chanukah instead of Christmas. (Some of them had Christmas too, and Santa.)&lt;/p&gt;
&lt;p&gt;Luckily for me, my parents were kind of hippies, despite (or maybe because of) both being brought up Catholic. My dad is the kind of atheist that we&amp;rsquo;d all be if there was no such thing as religion. He just doesn&amp;rsquo;t think about it, doesn&amp;rsquo;t talk about it, doesn&amp;rsquo;t care about it. He is spiritual, but God isn&amp;rsquo;t involved even a little. My mother calls herself a Christian, but doesn&amp;rsquo;t affiliate herself with any particular denomination. She believes in &amp;ldquo;some kind of higher power&amp;rdquo;, but she thought it was important for us to &amp;ldquo;find our own paths and learn about ourselves&amp;rdquo; and all that jazz.&lt;/p&gt;
&lt;p&gt;Turns out, &amp;ldquo;find your own path and form your own belief&amp;rdquo; is a good way to ensure your kid is an atheist. If they&amp;rsquo;re not in the fold by 21, they&amp;rsquo;re probably lost for good.&lt;/p&gt;
&lt;p&gt;So, in middle school and high school, when kids normally start identifying with various teams and forming their sense of self around labels, I became very curious about religion. I knew that there was something deeply wrong with my grandmother&amp;rsquo;s fervent Catholicism, but I really didn&amp;rsquo;t get why someone would believe those things. I figured I must be missing something.&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t. It&amp;rsquo;s stupid. That&amp;rsquo;s really all there is to it. But religion&amp;rsquo;s unique &lt;em&gt;kind&lt;/em&gt; of stupid is important, and it wasn&amp;rsquo;t until a few years later that I saw it.&lt;/p&gt;
&lt;p&gt;We are not solitary animals. A lone human is like a lone ant—not long for this world. Evolutionary biology has a funny way of imbuing us with instincts and ideas and feelings that help ensure survival and crush our rivals in the dangerous time of our near-extinction. However, in modern times, when those feelings no longer make sense, we still have them. Sex feels good, even when you&amp;rsquo;re not procreating. Fat tastes good, even when you don&amp;rsquo;t need to hoard calories. And so on.&lt;/p&gt;
&lt;p&gt;These ideas about God and Jesus and the Bible and whatnot, I realized, got into peoples&amp;rsquo; heads just to keep them in the group. I realized this in high school, and it was a pretty pivotal point in my spiritual growth.&lt;/p&gt;
&lt;p&gt;I was at a concert when I had this revelation, for a local band in New Haven that wasn&amp;rsquo;t very good, called the Venus Vixens. &amp;ldquo;Wasn&amp;rsquo;t very good&amp;rdquo; is quite generous. I went outside because they were so unbearably terrible. I would have left if I&amp;rsquo;d been old enough to have driven there. I started to wonder why I&amp;rsquo;d come and paid money for this band I couldn&amp;rsquo;t stand.&lt;/p&gt;
&lt;p&gt;I couldn&amp;rsquo;t claim ignorance, either. I knew I couldn&amp;rsquo;t stand them before I&amp;rsquo;d agreed to go, because I&amp;rsquo;d heard one of their tapes already! And when a friend of mine asked if I wanted to come with them, and if I liked the band, I &lt;em&gt;lied and said that I thought they were good!&lt;/em&gt; I&amp;rsquo;d heard the words coming out of my mouth, and had thought, &amp;ldquo;No, I don&amp;rsquo;t. They&amp;rsquo;re terrible. What the fuck am I doing?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;(Interestingly enough, The Offspring were the opening band, and they were even worse back then than they are now. A few years later when I saw them on MTV, I couldn&amp;rsquo;t believe it.)&lt;/p&gt;
&lt;p&gt;So there I was, standing on Center Street outside the Tune Inn, walking to the Dunkin&amp;rsquo; Donuts on the corner to pass the time until the show was over, wondering about why I was such a damned putz. The humbling fact was apparent: I&amp;rsquo;d claimed a fact that was untrue about myself solely to belong to a group of people. And we were the freaks and nerds, the outcasts! We were supposed to be ok with being different, for crying out loud!&lt;/p&gt;
&lt;p&gt;The second worst social attack that one teenager can use against another is to make them seem like they&amp;rsquo;re not part of the group. &amp;ldquo;You don&amp;rsquo;t like the same zoodads that we like. You&amp;rsquo;re not one of us.&amp;rdquo; The pressure to like the same things that the group likes is powerful, subconscious, and instinctual. It is the most primal glue that bonds us, and as children, we aren&amp;rsquo;t sophisticated to have any other kind.&lt;/p&gt;
&lt;p&gt;So, the &lt;em&gt;worst&lt;/em&gt; insult that one teenager can lay on another is that of &amp;ldquo;poser&amp;rdquo;, someone who pretends to like something even though they don&amp;rsquo;t really. That&amp;rsquo;s like calling someone an outsider and a traitor all at once. This is such a damaging insult, such a vicious slur against one&amp;rsquo;s character, that most kids would do almost anything to send the signals that they are genuine in their appreciation for the band, or the style, or whatever.&lt;/p&gt;
&lt;p&gt;When you pretend to believe something, and pretend diligently enough, you&amp;rsquo;ll start to really believe it. Sitting there in Dunkin&amp;rsquo; Donuts with some muttering crackhead in downtown New Haven outside an unlistenable punk show, I realized that the only argument for believing in God is that you&amp;rsquo;ll have friends who believe the same things you do, just like my alleged appreciation for the Venus Vixens had brought me to a terrible punk show. It kinda grossed me out to see that in myself.&lt;/p&gt;
&lt;p&gt;Since then, I&amp;rsquo;ve learned a lot of philosophy. I&amp;rsquo;ve learned about the infinity paradoxes. I&amp;rsquo;ve learned about the problems with the ontological &amp;ldquo;proof&amp;rdquo;. I&amp;rsquo;ve learned about Pascal&amp;rsquo;s Wager, and shown its failure in a variety of different ways. I&amp;rsquo;ve learned about the formal and technical applications of Occam&amp;rsquo;s Razer. I&amp;rsquo;ve learned about spirituality and meditation. I&amp;rsquo;ve taken a wide array of psychotropic drugs (and it wasn&amp;rsquo;t experimentation most of the time, I knew &lt;em&gt;exactly&lt;/em&gt; what would happen). I&amp;rsquo;ve learned about the history of the Bible. I&amp;rsquo;ve studied the space teacups and the flying spaghetti monsters. I&amp;rsquo;ve read Dawkins and Harris and Rand and Russel. I&amp;rsquo;ve learned about evolution and cosmology.&lt;/p&gt;
&lt;p&gt;There is no need for God. In fact, it raises a lot more problems that it solves. It is my belief that &amp;ldquo;friends who believe&amp;rdquo; remains the solitary compelling reason that people can and do convince themselves to believe in a higher power. There&amp;rsquo;s more to it, of course. There&amp;rsquo;s agent fixation, and the tendency of children to believe just about &lt;em&gt;anything&lt;/em&gt; their elders tell them, and a bunch of other cognitive mistakes that are usually evolutionarily advantageous. But groupthink seems like the biggest contender.&lt;/p&gt;
&lt;p&gt;I can&amp;rsquo;t accept a belief just because it&amp;rsquo;s what the crowd believes. That kind of idea—and more importantly, that method of choosing ideas—while perhaps important for our ancestors, is dangerous, wrong, and &lt;em&gt;evil&lt;/em&gt;. If anything, I tend to be especially suspicious of the things that &amp;ldquo;everybody knows,&amp;rdquo; precisely because they tend to get less criticism, so we need to make the extra effort.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m very confident that there is no God, no woowoo energies, no angels and fairies and devils, no afterlife, no unicorns, no super powers. That being said, I have a lot of respect for many different kinds of cognitive distortions. In a previous post, I wrote about the concept of &amp;ldquo;energy&amp;rdquo; or &amp;ldquo;chi&amp;rdquo; – sometimes the model might be wrong, but the phenomenon may still be worth investigating.&lt;/p&gt;
&lt;p&gt;Groupthink is never ok, and it is an insidious error. By comparison, I can definitely respect someone for stopping at agnosticism. I&amp;rsquo;ve seen two common arguments for agnosticism; one is defensible in my opinion, the other is not.&lt;/p&gt;
&lt;h2&gt;1. It seems possible to me that &amp;hellip;&lt;/h2&gt;
&lt;p&gt;A lot of things might seem possible that in fact aren&amp;rsquo;t. &amp;ldquo;Possibility&amp;rdquo; is a statement about our mental model, not a statement about the universe. It &amp;ldquo;seemed possible&amp;rdquo; to the writers, cast, and many viewers of CSI that the line &lt;a href=&quot;http://www.google.com/search?q=create+a+gui+interface+using+visual+basic%2C+see+if+i+can+track+an+IP+address&quot;&gt;&amp;ldquo;I&amp;rsquo;ll create a GUI interface using VisualBasic, see if I can track an IP address&amp;rdquo;&lt;/a&gt; was a reasonable thing that a computer hacker might say about tracking down a criminal. As a programmer, I laughed my ass off.&lt;/p&gt;
&lt;p&gt;Not everyone has time to burn on studying the arguments for and against. And expertise is hard to come by on this topic. Many apparent experts are clearly quacks, and many others disagree with one another, so who should you believe? And really, how much does it matter? Not having an opinion on the subject of God is rational, just as it&amp;rsquo;s rational to not have an opinion on &amp;ldquo;GUI interfaces using VisualBasic&amp;rdquo; that are used to &amp;ldquo;track an IP address&amp;rdquo;. There are plenty of important topics that I have no opinion about, or where I&amp;rsquo;ll freely admit that my opinion is mostly useless.&lt;/p&gt;
&lt;h2&gt;2. It&amp;rsquo;s not a black and white issue.&lt;/h2&gt;
&lt;p&gt;That&amp;rsquo;s a bit of malarky, if you ask me. Either there is a God or there isn&amp;rsquo;t. I&amp;rsquo;ve never gotten a straight answer on how this really could make sense, and I suspect that it&amp;rsquo;s a softer form of social-think. In other words, it translates to &amp;ldquo;God doesn&amp;rsquo;t make sense to me, but I&amp;rsquo;m not quite sure I want to anger the other apes, so I&amp;rsquo;m taking a less controversial position.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen this &amp;ldquo;absolutes are bad&amp;rdquo; ideology taken to extreme (and self-defeating!) zealotry. I&amp;rsquo;ve been told that I&amp;rsquo;m &amp;ldquo;just as bad as religious fundamentalists&amp;rdquo; because of my atheism. (Really? &lt;em&gt;Just as bad?&lt;/em&gt; How many atheists kill their daughters for the &amp;ldquo;crime&amp;rdquo; of having been raped, or blow up abortion clinics, or prevent life-saving medical treatments for their children?)&lt;/p&gt;
&lt;p&gt;Gray-worship is deeply problematic. &amp;ldquo;Undecided&amp;rdquo; is the place to be when ignorant and without a trustworthy expert. But the avoidance of firm opinions because they are firm is foolish, and equating all firm opinions as equally wrong is a wild perversion of &amp;ldquo;open mindedness&amp;rdquo;. I usually try to point out the contradictory nature of this fundamentalist anti-fundamentalism. I don&amp;rsquo;t buy the premise that &amp;ldquo;all ideas are fuzzy except this one.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This might strike some as improper or overly harsh: if you are religious, at least in the traditional western sense, and serious about it, then I could probably never date you, and even our level of friendship would be capped somewhere just above &amp;ldquo;friendly acquaintance&amp;rdquo; at best. It&amp;rsquo;s not that I have any disdain for religious people. I try not to blame the victim, since many of these mistakes are so very easy to slip into. This is a prediction more than a prescription. We just won&amp;rsquo;t click.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s not about having to agree; in fact, some of my best friends are agnostic, and many of them have very different ideas about a lot of things than I do. If anything, it&amp;rsquo;s about being able to disagree. That&amp;rsquo;s another problem with gray worship: if there are no absolutes, then we can&amp;rsquo;t disagree, can we?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s not &amp;ldquo;agree to disagree&amp;rdquo;; instead, let&amp;rsquo;s &lt;em&gt;actually disagree&lt;/em&gt;, and chew on it. If you&amp;rsquo;re not willing and able to think &amp;ldquo;wrong&amp;rdquo; thoughts, to collide ideas against one another, then where&amp;rsquo;s the growth? If some ideas are off-limits, then where&amp;rsquo;s the innovation? If that&amp;rsquo;s not your cup of tea, we probably just won&amp;rsquo;t get along.&lt;/p&gt;
&lt;p&gt;We all occasionally hide from our true selves under the warm blanket of the hive mind. But as responsible rational animals, we ought to strive to be vigilant against this distortion, and eagerly cut through that blanket whenever we notice it. When we hide from our true selves, we are living less fully.&lt;/p&gt;
&lt;p&gt;Living less fully means being less alive.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Billion Dollar Gram | Information Is Beautiful</title>
		<link href="https://blog.izs.me/2009/08/the-billion-dollar-gram-information-is-beautiful/"/>
		<updated>2009-08-16T22:24:47Z</updated>
		<id>https://blog.izs.me/2009/08/the-billion-dollar-gram-information-is-beautiful/</id>
		<content type="html"></content>
	</entry>
	
	<entry>
		<title>Never has a conversation gone wronger faster</title>
		<link href="https://blog.izs.me/2009/08/food-is-an-experience/"/>
		<updated>2009-08-16T17:00:30Z</updated>
		<id>https://blog.izs.me/2009/08/food-is-an-experience/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sarah&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Food is an experience for all 5 senses.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fried&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;I don&#39;t know about you, but I don&#39;t feel up my food.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;What do you do with it in your mouth?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sarah&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Yeah, you don&#39;t just feel it up, you have oral sex with your food.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Then later, you have butt sex with your food.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fried&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sarah&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;... yeah... but.. going out instead of in...&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Isaac&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Eh. Hits all the same spots.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fried&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;This conversation just got a lot less appetizing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title>Organic Food Isn’t More Nutritious § SEEDMAGAZINE.COM</title>
		<link href="https://blog.izs.me/2009/08/organic-food-isnt-more-nutritious/"/>
		<updated>2009-08-16T00:50:38Z</updated>
		<id>https://blog.izs.me/2009/08/organic-food-isnt-more-nutritious/</id>
		<content type="html">&lt;p&gt;“…organically and conventionally produced crops and livestock products are broadly comparable in their nutrient content.”&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/programming-communism/"/>
		<updated>2009-08-15T17:01:40Z</updated>
		<id>https://blog.izs.me/2009/08/programming-communism/</id>
		<content type="html">&lt;p&gt;via Zach Graves&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Calm of Exertion</title>
		<link href="https://blog.izs.me/2009/08/the-calm-of-exertion/"/>
		<updated>2009-08-14T17:00:33Z</updated>
		<id>https://blog.izs.me/2009/08/the-calm-of-exertion/</id>
		<content type="html">&lt;p&gt;Exerted and spent, and yet filled up and satisfied.&lt;br /&gt;
Like a cat in the sun.&lt;br /&gt;
It is work that brings this calm, strengthens the body and mind for another round.&lt;br /&gt;
This is the reward of your effort.&lt;br /&gt;&lt;strong&gt;Do not squander it!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How often have I burnt myself out, and felt so overwhelmed, like there was never enough time, never enough of me to cover all the corners, spread and stretched as a sheet over too large a bed, butter across too much bread, thin and weary, cracking and torn, pulled to shreds.  So many times I&amp;rsquo;ve forgotten this lesson, forgotten to pick up my reward, and paid the price for it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve told myself that work is to blame.  I point the finger at the likely suspect, but the fact of the matter is that &lt;em&gt;I&lt;/em&gt; was to blame, and didn&amp;rsquo;t want to admit I&amp;rsquo;d caused my own pain.&lt;/p&gt;
&lt;p&gt;There is plenty of time.&lt;br /&gt;
Everyone will get by just fine.&lt;/p&gt;
&lt;p&gt;Work hard, and rest deeply.  That is the Key.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Perl Cannot Be Parsed: A Formal Proof</title>
		<link href="https://blog.izs.me/2009/08/perl-cannot-be-parsed-a-formal-proof/"/>
		<updated>2009-08-13T18:03:10Z</updated>
		<id>https://blog.izs.me/2009/08/perl-cannot-be-parsed-a-formal-proof/</id>
		<content type="html">&lt;p&gt;Proof that Perl is Unparseable, or: How to Solve the Halting Problem&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/politicians-and-diapers-should-be-changed-often/"/>
		<updated>2009-08-13T17:00:36Z</updated>
		<id>https://blog.izs.me/2009/08/politicians-and-diapers-should-be-changed-often/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;Politicians and diapers should be changed often and for the same reason&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mark Twain&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On Leadership</title>
		<link href="https://blog.izs.me/2009/08/on-leadership/"/>
		<updated>2009-08-12T17:02:46Z</updated>
		<id>https://blog.izs.me/2009/08/on-leadership/</id>
		<content type="html">&lt;p&gt;Report down, not up.&lt;/p&gt;
&lt;p&gt;Change direction, don&amp;rsquo;t ask someone else to.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Let&#39;s Abolish High School (article) - Youth Rights Network</title>
		<link href="https://blog.izs.me/2009/08/lets-abolish-high-school-article-youth-rights/"/>
		<updated>2009-08-12T00:30:48Z</updated>
		<id>https://blog.izs.me/2009/08/lets-abolish-high-school-article-youth-rights/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;pointing out the obvious: High school is a waste of time for the majority of the students—that is, for those who haven’t already dropped out. &amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/schills-revenge/"/>
		<updated>2009-08-11T20:06:05Z</updated>
		<id>https://blog.izs.me/2009/08/schills-revenge/</id>
		<content type="html">&lt;p&gt;I want a venus flytrap.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Fear of Failure</title>
		<link href="https://blog.izs.me/2009/08/fear-of-failure/"/>
		<updated>2009-08-10T21:30:00Z</updated>
		<id>https://blog.izs.me/2009/08/fear-of-failure/</id>
		<content type="html">&lt;p&gt;Todo:&lt;/p&gt;
&lt;p&gt;Once per month, or as often as possible, find an error in judgement that I made in the past—something I really and truly believed and fought for, which was 100% wrong—and publicly announce it.  It&amp;rsquo;s gotta sting.&lt;/p&gt;
&lt;p&gt;The goal is to build up a thick skin against the fear of failure.  Failure is natural, it is a learning process, and important.  Resisting the information that comes with failure is disastrous.  And fear of failure is a mind-killer.  My ego might not like doing this, but sometimes you just have to tell your ego to grow a pair.&lt;/p&gt;
&lt;p&gt;The first one is a gimme: getting married was a horrifically bad idea.  There&amp;rsquo;s no excuse for it.  It&amp;rsquo;s an outdated institution, but beyond that, we were just a terrible couple.  I wasn&amp;rsquo;t happy.  I should have broken up with her, and instead I proposed.  I have defended the decision countless times, even while going through our separation and divorce, because of a fear of admitting to my family and friends and myself that I was just flat-out wrong on many levels.&lt;/p&gt;
&lt;p&gt;It is unlikely that any mistake I make in business or in life will ever be as painful, expensive, or full of public fail.  And yet here I am, happy and successful.  So there is really no reason to fear anything.  I&amp;rsquo;ve learned a lot from that failure, about myself, and about love, and about what I need to be happy.&lt;/p&gt;
&lt;p&gt;Admitting failure can be exhilarating.  Try it!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Notorious CEO: Ten Startup Commandments from Biggie Smalls</title>
		<link href="https://blog.izs.me/2009/08/the-notorious-ceo-ten-startup-commandments-from/"/>
		<updated>2009-08-10T17:02:27Z</updated>
		<id>https://blog.izs.me/2009/08/the-notorious-ceo-ten-startup-commandments-from/</id>
		<content type="html">&lt;p&gt;Biggie Smalls&amp;rsquo; classic &amp;ldquo;10 Crack Commandments&amp;rdquo;, applied to software startups.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/merlin-fuck-f%C9%99k-vulgar-slang-i-cant/"/>
		<updated>2009-08-08T20:12:33Z</updated>
		<id>https://blog.izs.me/2009/08/merlin-fuck-f%C9%99k-vulgar-slang-i-cant/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://www.kungfugrippe.com/post/158649660/fuck-f-k-vulgar-slang-i-cant-believe-the&quot;&gt;merlin&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/merlin/3801577000/&quot;&gt;&lt;strong&gt;“fuck |fək| vulgar slang”&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;I can’t believe the vulgarity in &lt;a href=&quot;http://www.apple.com/macosx/what-is-macosx/apps-and-utilities.html#dictionary&quot; rel=&quot;nofollow&quot;&gt;Apple’s OS X Dictionary&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;As we speak, millions of OS X users have no idea there’s an “&lt;b&gt;eff word&lt;/b&gt;” right on their Mac. Right there. &lt;i&gt;In their home&lt;/i&gt;. Where their spouse sleeps. Where their children play with their toys.&lt;/p&gt;
  &lt;p&gt;When will Apple finally clean up its act? When will they learn?&lt;/p&gt;
  &lt;p&gt;People don’t buy computers to explore the world or learn what things mean; they buy computers to rent PIXAR movies and order iPhones. They certainly don’t buy them to see trash like this. No, sir.&lt;/p&gt;
  &lt;p&gt;Shame, Apple. &lt;i&gt;Shame&lt;/i&gt;.&lt;/p&gt;
  &lt;p&gt;Please take all the words off my computer.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title>Postal Experiments</title>
		<link href="https://blog.izs.me/2009/08/postal-experiments/"/>
		<updated>2009-08-07T23:53:40Z</updated>
		<id>https://blog.izs.me/2009/08/postal-experiments/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;The USPS appears to have some collective sense of humor, and might in fact here be displaying the rudiments of organic bureaucratic intelligence.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Autism as Academic Paradigm</title>
		<link href="https://blog.izs.me/2009/08/autism-as-academic-paradigm/"/>
		<updated>2009-08-07T04:28:00Z</updated>
		<id>https://blog.izs.me/2009/08/autism-as-academic-paradigm/</id>
		<content type="html">&lt;blockquote&gt;&lt;p&gt;We&amp;rsquo;re also learning that a lot of the stereotypes about autistics are false or at least misleading. It&amp;rsquo;s been suggested, for instance, that autistics don&amp;rsquo;t care much about other people, or that autistics lack genuine emotions or are incapable of empathy. The more likely truth is that autistics and nonautistics do not always understand each other very well. It&amp;rsquo;s odd that the people who make this charge so often, in the very act of doing so, fail to show much empathy for autistics or to recognize their rich emotional lives. Even when the cognitive capabilities of autistics are recognized —most commonly in the cases of savants —it is too often accompanied by a clichéd and inaccurate picture of a cold, robotic, or less than human personality.&lt;/p&gt;&lt;/blockquote&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/hope-less-ness/"/>
		<updated>2009-08-07T02:51:00Z</updated>
		<id>https://blog.izs.me/2009/08/hope-less-ness/</id>
		<content type="html">&lt;p&gt;hope-less-ness, by &lt;a href=&quot;http://www.flickr.com/photos/dinosonic/&quot;&gt;9 0 0 0&lt;/a&gt;.  So much good stuff in this stream.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Modern Love: Those Aren’t Fighting Words, Dear</title>
		<link href="https://blog.izs.me/2009/08/modern-love-those-arent-fighting-words-dear/"/>
		<updated>2009-08-07T01:20:34Z</updated>
		<id>https://blog.izs.me/2009/08/modern-love-those-arent-fighting-words-dear/</id>
		<content type="html">&lt;p&gt;(via &lt;a href=&quot;http://girk.tumblr.com/&quot;&gt;girk&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/baby-throwing/"/>
		<updated>2009-08-06T08:40:00Z</updated>
		<id>https://blog.izs.me/2009/08/baby-throwing/</id>
		<content type="html">&lt;p&gt;The late MJ had nothing on these guys. (via &lt;a href=&quot;http://twitter.com/pixelarchitect/status/3162608863&quot;&gt;@pixelarchitect&lt;/a&gt;)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>If you want to be rich, first stop being so frightened</title>
		<link href="https://blog.izs.me/2009/08/if-you-want-to-be-rich-first-stop-being-so/"/>
		<updated>2009-08-06T07:39:00Z</updated>
		<id>https://blog.izs.me/2009/08/if-you-want-to-be-rich-first-stop-being-so/</id>
		<content type="html">&lt;p&gt;Good quote: &amp;ldquo;If you are unwilling to fail, sometimes publicly, and even catastrophically, you stand little chance of ever getting rich.&amp;rdquo; Reminds me of this quote from Lazarus Long: &amp;ldquo;People who go broke in a big way never miss any meals. It is the poor jerk who is shy a half slug who must tighten his belt.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;As a bit of a pod who sometimes finds it all too easy to &amp;ldquo;turn off&amp;rdquo; my human concerns, and an on-again-off-again workaholic who was literally ridiculed by my friends for my study and work habits, I am very inspired by what he has to say.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/rob-gruhl-buying-a-new-car/"/>
		<updated>2009-08-06T04:17:41Z</updated>
		<id>https://blog.izs.me/2009/08/rob-gruhl-buying-a-new-car/</id>
		<content type="html">&lt;p&gt;A 6-minute video from Rob Gruhl on buying a new car.&lt;/p&gt;
&lt;p&gt;Good negotiation tips, and also timely for my life at the moment.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Sierpinski</title>
		<link href="https://blog.izs.me/2009/08/sierpinski/"/>
		<updated>2009-08-05T22:02:00Z</updated>
		<id>https://blog.izs.me/2009/08/sierpinski/</id>
		<content type="html">&lt;pre style=&quot;font-family: courier new,monospace; line-height: 10px; letter-spacing: -5.5px;&quot;&gt;                                ▲
                               ▲ ▲
                              ▲   ▲
                             ▲ ▲ ▲ ▲
                            ▲       ▲
                           ▲ ▲     ▲ ▲
                          ▲   ▲   ▲   ▲
                         ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
                        ▲               ▲
                       ▲ ▲             ▲ ▲
                      ▲   ▲           ▲   ▲
                     ▲ ▲ ▲ ▲         ▲ ▲ ▲ ▲  Your buddy Wacław came by the other day.
                    ▲       ▲       ▲       ▲
                   ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲
                  ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲
                 ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
                ▲                               ▲   Put a bunch of holes in the carpet.
               ▲ ▲                             ▲ ▲
              ▲   ▲                           ▲   ▲
             ▲ ▲ ▲ ▲                         ▲ ▲ ▲ ▲
            ▲       ▲                       ▲       ▲
           ▲ ▲     ▲ ▲                     ▲ ▲     ▲ ▲
          ▲   ▲   ▲   ▲                   ▲   ▲   ▲   ▲
         ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲                 ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲
        ▲               ▲               ▲               ▲
       ▲ ▲             ▲ ▲             ▲ ▲             ▲ ▲
      ▲   ▲           ▲   ▲           ▲   ▲           ▲   ▲
     ▲ ▲ ▲ ▲         ▲ ▲ ▲ ▲         ▲ ▲ ▲ ▲         ▲ ▲ ▲ ▲
    ▲       ▲       ▲       ▲       ▲       ▲       ▲       ▲
   ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲     ▲ ▲     Fucking douche.
  ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲   ▲
 ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲ ▲&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title>Your World of Text</title>
		<link href="https://blog.izs.me/2009/08/your-world-of-text/"/>
		<updated>2009-08-05T03:08:50Z</updated>
		<id>https://blog.izs.me/2009/08/your-world-of-text/</id>
		<content type="html">&lt;p&gt;A web page that lets everyone write whatever, in real time. Pretty much what you&amp;rsquo;d expect. Lotta ascii penises.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Spokenlounge</title>
		<link href="https://blog.izs.me/2009/08/spokenlounge/"/>
		<updated>2009-08-05T03:08:50Z</updated>
		<id>https://blog.izs.me/2009/08/spokenlounge/</id>
		<content type="html">&lt;p&gt;This is simply wonderful.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Daring Fireball: Ninjawords: iPhone Dictionary, Censored by Apple</title>
		<link href="https://blog.izs.me/2009/08/daring-fireball-ninjawords-iphone-dictionary/"/>
		<updated>2009-08-05T03:08:50Z</updated>
		<id>https://blog.izs.me/2009/08/daring-fireball-ninjawords-iphone-dictionary/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Every time I think I’ve seen the most outrageous App Store rejection, I’m soon proven wrong.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>&quot;What you are seeing in Iraq is a Second Amendment War.&quot;</title>
		<link href="https://blog.izs.me/2009/08/what-you-are-seeing-in-iraq-is-a-second-amendment/"/>
		<updated>2009-08-04T20:43:11Z</updated>
		<id>https://blog.izs.me/2009/08/what-you-are-seeing-in-iraq-is-a-second-amendment/</id>
		<content type="html">&lt;p&gt;I disagree with the author&amp;rsquo;s claim that combat robotics are somehow fundamentally any different from any other weapon. However, the analysis of the 2nd Amendment in practice is spot-on.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/if-you-always-put-limits-on-everything-you-do/"/>
		<updated>2009-08-04T18:30:18Z</updated>
		<id>https://blog.izs.me/2009/08/if-you-always-put-limits-on-everything-you-do/</id>
		<content type="html">&lt;blockquote&gt;
&lt;p&gt;If you always put limits on everything you do, physical or anything else, it will spread into your work and into your life. There are no limits. There are only plateaus, and you must not stay there, you must go beyond them.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bruce Lee&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Sharing</title>
		<link href="https://blog.izs.me/2009/08/sharing/"/>
		<updated>2009-08-02T18:29:58Z</updated>
		<id>https://blog.izs.me/2009/08/sharing/</id>
		<content type="html">&lt;p&gt;Sharing code is like sharing minds.  It is every bit as intimate as a relationship with a lover — moreso, perhaps.&lt;/p&gt;
&lt;p&gt;Unlike the things we share in other areas of our lives, there is no option for dishonesty, no artifice in which to hide.  By your comments, patterns, and bugs, your deepest and most intimate truths are exposed.  The very working of your mind is laid out in the editor&amp;rsquo;s colored monotype for all to see, tracked in meticulous detail by your source control system, critiqued in cold honesty by the heartless computer.&lt;/p&gt;
&lt;p&gt;It is possible to develop a deep love or profound disdain for someone, simply by reading their code.  You can get a sense of intellects far above or beneath your own.  Our minds laid bare in the pursuit of beauty and magic, yearning for appreciation, correction, growth.  I am convinced: there is no other way on earth to achieve this level of naked vulnerability.  The connection is frightening and life affirming, powerful and cruel, lovingly cold.&lt;/p&gt;
&lt;p&gt;Perhaps it is right that programmers seem to give up a piece of their humanity in the pursuit of their craft.  What we get in return is worth the price.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>you are a dream</title>
		<link href="https://blog.izs.me/2009/08/you-are-a-dream/"/>
		<updated>2009-08-01T00:24:00Z</updated>
		<id>https://blog.izs.me/2009/08/you-are-a-dream/</id>
		<content type="html">&lt;pre class=&quot;poem&quot;&gt;
Joy overwhelms
alters and exposes everything

Smell you on my lips
  taste your scent
Brains buzz
  intoxicated by you

Wrap me in your soul
  arms and legs
    pull me in
Float downstream
  warm oceans sunlit beaches
    bask in your glow

You are a dream.

Come true to me
  when I kiss you.
&lt;/pre&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/nature-abhors-a-cathair-free-shirt-or-at-least/"/>
		<updated>2009-08-01T00:10:24Z</updated>
		<id>https://blog.izs.me/2009/08/nature-abhors-a-cathair-free-shirt-or-at-least/</id>
		<content type="html">&lt;p&gt;Nature abhors a cathair-free shirt. Or at least, my cats do.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/man-on-the-moon-fallacy-having-done-one-hard/"/>
		<updated>2009-08-01T00:10:24Z</updated>
		<id>https://blog.izs.me/2009/08/man-on-the-moon-fallacy-having-done-one-hard/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Man on the Moon&amp;rdquo; fallacy: Having done one hard thing does not mean that other hard things are necessarily any more doable.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/08/every-time-i-see-an-about-me-textarea-and-dont/"/>
		<updated>2009-08-01T00:10:24Z</updated>
		<id>https://blog.izs.me/2009/08/every-time-i-see-an-about-me-textarea-and-dont/</id>
		<content type="html">&lt;p&gt;Every time I see an &amp;ldquo;About Me&amp;rdquo; textarea, and don&amp;rsquo;t know what to write there, I have a mini identity crisis.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/everybody-everywhere-groks-the-pentatonic-scale/"/>
		<updated>2009-07-31T18:09:17Z</updated>
		<id>https://blog.izs.me/2009/07/everybody-everywhere-groks-the-pentatonic-scale/</id>
		<content type="html">&lt;p&gt;Everybody everywhere groks the pentatonic scale.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/got-a-flickr-shirt-in-the-mail-today-for-fixing-a/"/>
		<updated>2009-07-31T06:14:29Z</updated>
		<id>https://blog.izs.me/2009/07/got-a-flickr-shirt-in-the-mail-today-for-fixing-a/</id>
		<content type="html">&lt;p&gt;Got a @flickr shirt in the mail today for fixing a bug in the YUI Compressor. Thanks, @rharmes!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/please-dont-interrupt-what-im-doing-to-tell-me/"/>
		<updated>2009-07-31T00:10:52Z</updated>
		<id>https://blog.izs.me/2009/07/please-dont-interrupt-what-im-doing-to-tell-me/</id>
		<content type="html">&lt;p&gt;Please don&amp;rsquo;t interrupt what I&amp;rsquo;m doing to tell me to do what I&amp;rsquo;m doing.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/just-wrote-a-narwhal-script-to-update-adium-status/"/>
		<updated>2009-07-31T00:10:52Z</updated>
		<id>https://blog.izs.me/2009/07/just-wrote-a-narwhal-script-to-update-adium-status/</id>
		<content type="html">&lt;p&gt;Just wrote a narwhal script to update Adium status from my tweets. JS on the CLI, FTW!!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/i-really-wish-javascript-had-support-for-heredoc/"/>
		<updated>2009-07-31T00:10:52Z</updated>
		<id>https://blog.izs.me/2009/07/i-really-wish-javascript-had-support-for-heredoc/</id>
		<content type="html">&lt;p&gt;I really wish javascript had support for heredoc or something similar.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Once is an accident</title>
		<link href="https://blog.izs.me/2009/07/once-is-an-accident/"/>
		<updated>2009-07-30T19:13:03Z</updated>
		<id>https://blog.izs.me/2009/07/once-is-an-accident/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i love cats&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;we were talking yesterday about how perfect they are&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;they&#39;re self-cleaning!!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;can you name one other animal that can realistically go months or years without a bath?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;a dog would be stinking up your shit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i mean i guess you wouldn&#39;t bathe a hamster but they&#39;re lame anyway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;they are.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;isaac_schlueter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;the best thing about hamsters is feeding them to cats.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;i did that accidentally once!&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;richtaur&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;actually twice&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/aes-128-gives-me-a-warm-snuggly-feeling-mmm/"/>
		<updated>2009-07-30T02:25:33Z</updated>
		<id>https://blog.izs.me/2009/07/aes-128-gives-me-a-warm-snuggly-feeling-mmm/</id>
		<content type="html">&lt;p&gt;AES-128 gives me a warm snuggly feeling. Mmm, cryptographically strong protection!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/lazyweb-where-can-i-find-statistics-on-height-and/"/>
		<updated>2009-07-30T00:21:15Z</updated>
		<id>https://blog.izs.me/2009/07/lazyweb-where-can-i-find-statistics-on-height-and/</id>
		<content type="html">&lt;p&gt;lazyweb: Where can I find statistics on height and weight, by gender and location? I want the mean, std dev, all that jazz.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/re-yhoo-and-msft-its-like-watching-old-people/"/>
		<updated>2009-07-29T19:31:14Z</updated>
		<id>https://blog.izs.me/2009/07/re-yhoo-and-msft-its-like-watching-old-people/</id>
		<content type="html">&lt;p&gt;Re $yhoo and $msft — It&amp;rsquo;s like watching old people out on a date. Just thinking &amp;ldquo;Good for you guys!&amp;rdquo; and don&amp;rsquo;t really care what comes of it.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/ha-just-realized-that-yui-yuilibrary/"/>
		<updated>2009-07-29T19:31:12Z</updated>
		<id>https://blog.izs.me/2009/07/ha-just-realized-that-yui-yuilibrary/</id>
		<content type="html">&lt;p&gt;Ha. Just realized that @yui ≠ @yuilibrary&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/ca-has-moved-from-whether-to-how-in-the-legal/"/>
		<updated>2009-07-29T08:00:17Z</updated>
		<id>https://blog.izs.me/2009/07/ca-has-moved-from-whether-to-how-in-the-legal/</id>
		<content type="html">&lt;p&gt;CA has moved from &amp;ldquo;whether&amp;rdquo; to &amp;ldquo;how&amp;rdquo; in the legal debate over marijuana. &lt;a href=&quot;http://tr.im/uy7A&quot;&gt;http://tr.im/uy7A&lt;/a&gt; Big step in the right direction. (via @linklog)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/trying-to-get-the-twitteradium-plugin-to-work-so/"/>
		<updated>2009-07-29T07:00:04Z</updated>
		<id>https://blog.izs.me/2009/07/trying-to-get-the-twitteradium-plugin-to-work-so/</id>
		<content type="html">&lt;p&gt;Trying to get the TwitterAdium plugin to work so that I can have my twitter set my IM status again. &lt;a href=&quot;http://tr.im/uxqG&quot;&gt;http://tr.im/uxqG&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/why-i-use-facebook/"/>
		<updated>2009-07-29T03:48:26Z</updated>
		<id>https://blog.izs.me/2009/07/why-i-use-facebook/</id>
		<content type="html">&lt;p&gt;Facebook is not perfect.  It has a lot of problems, technological and philosophical.  It&amp;rsquo;s a walled garden.  It&amp;rsquo;s easy to put content in, but hard to get it out.  You can&amp;rsquo;t delete anything that goes into their system, no matter how hard you try.  It provides a way for people to pester you who you&amp;rsquo;d perhaps rather forget.  People use it as a proxy for the entire internet, and in so doing, provide a single corporation with control over their communication, and thus, in a way, their very lives.&lt;/p&gt;
&lt;p&gt;But every once in a while, something magical happens.  There is a person living across the country.  We&amp;rsquo;re pretty much strangers now, but we knew each other as children, for a few years in passing.  She was randomly reminded of me, and of a memory of our shared childhood, and Facebook gave her an easy way to share this memory without having to commit to much.&lt;/p&gt;
&lt;p&gt;Facebook has significantly increased my nostalgia net, and the things that get caught in that net are surprising, intense, and emotionally satisfying in a unique way.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/its-like-seeing-people-i-know-on-tv-seriously/"/>
		<updated>2009-07-28T20:23:09Z</updated>
		<id>https://blog.izs.me/2009/07/its-like-seeing-people-i-know-on-tv-seriously/</id>
		<content type="html">&lt;p&gt;It&amp;rsquo;s like seeing people I know on TV. Seriously, these guys are very good at what they do. It&amp;rsquo;s impressive. &lt;a href=&quot;http://tr.im/ush6&quot;&gt;http://tr.im/ush6&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/back-to-work-again-its-too-dry-here-no-sun/"/>
		<updated>2009-07-28T20:23:09Z</updated>
		<id>https://blog.izs.me/2009/07/back-to-work-again-its-too-dry-here-no-sun/</id>
		<content type="html">&lt;p&gt;Back to work again. It&amp;rsquo;s too dry here. No sun. Lots of clothes.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/wanna-know-why-newspapers-are-dying-because-they/"/>
		<updated>2009-07-28T20:23:08Z</updated>
		<id>https://blog.izs.me/2009/07/wanna-know-why-newspapers-are-dying-because-they/</id>
		<content type="html">&lt;p&gt;Wanna know why newspapers are dying? Because they suck. &lt;a href=&quot;http://tr.im/ut7A&quot;&gt;http://tr.im/ut7A&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Television</title>
		<link href="https://blog.izs.me/2009/07/television/"/>
		<updated>2009-07-25T17:00:11Z</updated>
		<id>https://blog.izs.me/2009/07/television/</id>
		<content type="html">&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;message&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;izs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;hahahah: &amp;quot;What percentage of people who don&#39;t own a TV, like to tell you at every single opportunity that they don&#39;t own a TV.&amp;quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TV is evil.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TV is the mind-killer.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;izs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TV is the little death that brings total obliteration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;seldo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Now shut up, I&#39;m watching Hulu.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/fyi-yuicompressor-is-on-github-now/"/>
		<updated>2009-07-23T23:48:32Z</updated>
		<id>https://blog.izs.me/2009/07/fyi-yuicompressor-is-on-github-now/</id>
		<content type="html">&lt;p&gt;FYI: YUICompressor is on @github now.&lt;br /&gt;
&lt;a href=&quot;http://tr.im/tL6W&quot;&gt;http://tr.im/tL6W&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://tr.im/tL6V&quot;&gt;http://tr.im/tL6V&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>2616</title>
		<link href="https://blog.izs.me/2009/07/2616/"/>
		<updated>2009-07-23T21:54:23Z</updated>
		<id>https://blog.izs.me/2009/07/2616/</id>
		<content type="html">&lt;p&gt;Hey web programmers:&lt;br /&gt;
Read the HTTP spec. It’s short, understandable, and it’s something we should all be fluent in. &lt;a href=&quot;http://tr.im/tKKd&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://www.ietf.org/rfc/rfc2616.txt&quot;&gt;https://www.ietf.org/rfc/rfc2616.txt&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/i-see-idempotent-gets-as-a-big-invitation-to/"/>
		<updated>2009-07-23T19:39:46Z</updated>
		<id>https://blog.izs.me/2009/07/i-see-idempotent-gets-as-a-big-invitation-to/</id>
		<content type="html">&lt;p&gt;I see idempotent GETs as a big invitation to molest the shit out of your website. Wearing my grey hat over at @raptr. &lt;a href=&quot;http://tr.im/tJyd&quot;&gt;http://tr.im/tJyd&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/did-you-mean-recursion-httptrimtiwu/"/>
		<updated>2009-07-23T17:46:37Z</updated>
		<id>https://blog.izs.me/2009/07/did-you-mean-recursion-httptrimtiwu/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;Did you mean recursion?&amp;rdquo; &lt;a href=&quot;http://tr.im/tIwU&quot;&gt;http://tr.im/tIwU&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/hey-raptr-users-got-manicadoed-keep-this-link/"/>
		<updated>2009-07-23T09:35:00Z</updated>
		<id>https://blog.izs.me/2009/07/hey-raptr-users-got-manicadoed-keep-this-link/</id>
		<content type="html">&lt;p&gt;Hey, @raptr users: Got ManicAdo&#39;ed? Keep this link handy: &lt;a href=&quot;http://tr.im/tEbd&quot;&gt;http://tr.im/tEbd&lt;/a&gt; @raptr devs: nonidempotent GETs! Doing It Wrong!!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/dustin-isaac-mike-stephanie/"/>
		<updated>2009-07-23T08:08:15Z</updated>
		<id>https://blog.izs.me/2009/07/dustin-isaac-mike-stephanie/</id>
		<content type="html">&lt;p&gt;&lt;b&gt;Dustin, Isaac, Mike, Stephanie&lt;/b&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title></title>
		<link href="https://blog.izs.me/2009/07/once-again-work-too-late-try-to-squeeze-in-too/"/>
		<updated>2009-07-23T06:26:44Z</updated>
		<id>https://blog.izs.me/2009/07/once-again-work-too-late-try-to-squeeze-in-too/</id>
		<content type="html">&lt;p&gt;&amp;ldquo;once again, work too late, try to squeeze in too much, end up awake way too late. the circle of derp.&amp;rdquo; (RT @inflammatoryrit)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Sharing</title>
		<link href="https://blog.izs.me/2009/07/sharing/"/>
		<updated>2009-07-10T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/07/sharing/</id>
		<content type="html">&lt;p&gt;Sharing code is like sharing minds.  It is every bit as intimate as a relationship with a lover — moreso, perhaps.&lt;/p&gt;
&lt;p&gt;Unlike the things we share in other areas of our lives, there is no option for dishonesty, no artifice in which to hide.  By your comments, patterns, and bugs, your deepest and most intimate truths are exposed.  The very working of your mind is laid out in the editor&#39;s colored monotype for all to see, tracked in meticulous detail by your source control system, critiqued in cold honesty by the heartless computer.&lt;/p&gt;
&lt;p&gt;It is possible to develop a deep love or profound disdain for someone, simply by reading their code.  You can get a sense of intellects far above or beneath your own.  Our minds laid bare in the pursuit of beauty and magic, yearning for appreciation, correction, growth.  I am convinced: there is no other way on earth to achieve this level of naked vulnerability.  The connection is frightening and life affirming, powerful and cruel, lovingly cold.&lt;/p&gt;
&lt;p&gt;Perhaps it is right that programmers seem to give up a piece of their humanity in the pursuit of their craft.  What we get in return is worth the price.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Topics</title>
		<link href="https://blog.izs.me/2009/07/topics/"/>
		<updated>2009-07-02T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/07/topics/</id>
		<content type="html">&lt;p&gt;I keep coming back to one singular topic.&lt;br /&gt;
So I tell myself that I&#39;m not going to write about that.&lt;br /&gt;
But then, I don&#39;t write anything.&lt;/p&gt;
&lt;p&gt;The purpose of this is to unblock, and it has no other purpose.  I&#39;m writing for no audience, and only capturing the output because it may be interesting to see what unblocking uncovers.&lt;/p&gt;
&lt;p&gt;So write about whatever you want.  Obsession is obsessed, but it&#39;s honest about it, at least, and that&#39;s the point.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Bees</title>
		<link href="https://blog.izs.me/2009/05/bees/"/>
		<updated>2009-05-25T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/05/bees/</id>
		<content type="html">&lt;p&gt;We shared our chapstick.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Foo Hack 4.0</title>
		<link href="https://blog.izs.me/2009/05/foo-hack-40/"/>
		<updated>2009-05-05T06:21:15Z</updated>
		<id>https://blog.izs.me/2009/05/foo-hack-40/</id>
		<content type="html">&lt;p&gt;Partly because I haven’t been writing much CSS these days, and partly because it’s been just over a year since the &lt;a href=&quot;http://foohack.com/2008/02/foo-hack-redesign-30/&quot;&gt;last redesign&lt;/a&gt;, I felt like this site needed a face lift.&lt;/p&gt;
&lt;h2 id=&quot;fonts&quot;&gt;Fonts&lt;/h2&gt;
&lt;p&gt;I’ve been getting more and more excited about the impending freedom of the @font-face CSS declaration.  The prospect using any true-type or open-type font in a web page without resorting to flash or images is incredible.  If you’re viewing this site in Safari 4 or the latest beta releases of Firefox, Opera, and MSIE, you’ll have a much improved experience.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;The body text is set in &lt;a href=&quot;http://www.abstractfonts.com/search/bodoni%20svtytwo%20itc%20tt-book&quot;&gt;Bodoni SvtyTwo OS&lt;/a&gt;, chosen for its beautiful italics &lt;small&gt;(not an oblique, but a true italic)&lt;/small&gt;, dramatic hinting, and straightforward lines.  I chose the OS over the regular Bodoni SvtyTwo because of the more stylish “lower case” numerals: 1234567890.&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;ins&gt;Update&lt;/ins&gt;: I decided to go with Hoefler Text instead of Bodoni.  Bodoni looks nice, but without the stronger hinting, it was hard to read on some monitors, especially for folks who are crazy enough to browse the web on Windows.  Hoefler Text has a lot of what I liked about Bodoni, and was a strong contender, but it&amp;rsquo;s not free-as-in-speech.  However, it is &lt;a href=&quot;http://twitter.com/izs/status/2752553503&quot;&gt;free-as-in-MP3&lt;/a&gt;, so I&amp;rsquo;ll use it until Hoefler &amp;amp; Frere-Jones send me a &lt;abbr title=&quot;Cease and Desist&quot;&gt;C&amp;amp;D&lt;/abbr&gt;.  I also widened the column a bit to accommodate the wider typeface.&lt;/p&gt;
&lt;p&gt;The headings are set in &lt;a href=&quot;http://www.fontsquirrel.com/fonts/Qlassik-Medium&quot;&gt;Qlassik Medium&lt;/a&gt;, by Dimitri Castrigue.  It has just enough fun to make it stand out, but not so much as to be ridiculous.&lt;/p&gt;
&lt;p&gt;Code snippets are set in the famous &lt;a href=&quot;http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/&quot;&gt;Bitstream Vera Sans Mono&lt;/a&gt;.  I’d initially planned to set all things monotype in my favorite coding font, &lt;a href=&quot;http://www.google.com/search?q=centschbook+mono&quot;&gt;Century Schoolbook Mono&lt;/a&gt;.  Once you get used to coding with serifs, nothing else feels right.  Unfortunately, it doesn’t include bold and italic versions.  While the OS will “fake” bold and italics with fonts that it has installed, it won’t play ball when asked to manipulate dynamic fonts linked from a CSS file.  I put CentSchBook Mono first, so if you have it &lt;small&gt;(which you should!)&lt;/small&gt;, it&amp;rsquo;ll work.  Otherwise, you&amp;rsquo;ll get Bitstream.&lt;/p&gt;
&lt;p&gt;If you don’t have a browser that understands dynamic fonts, you can grab them from &lt;a href=&quot;http://foohack.com/tpl/fonts/&quot;&gt;http://foohack.com/tpl/fonts/&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;layout&quot;&gt;Layout&lt;/h2&gt;
&lt;p&gt;I really wanted to stretch my CSS abilities a bit, and also apply some of the principles of typographic design that I’d been learning about lately.  The single-column is about 66 characters wide in the target font, and feels about “right” for readability.&lt;/p&gt;
&lt;p&gt;Despite my best intentions, a lot of feature creep had somehow taken over, prompting the last revamp.  In this version, I put back some features that I’d removed, and removed some things I’d left in.&lt;/p&gt;
&lt;p&gt;The vertical measure is set at 30px, with a font-size of 20px.  While that’s a bit large, I’ve always favored erring on the side of “too big”, and the Bodoni just felt too cramped at 16/24.&lt;/p&gt;
&lt;p&gt;I’ve also taken a lesson from the print world, and set all my bullets and other adornments off into the margins, such that the text is kept strictly flush left.  The only element that I couldn’t figure out how to do this with is the &lt;code&gt;&amp;lt;q&amp;gt;&lt;/code&gt; element when it starts a paragraph.  In that case, it should have a text-indent somewhere around -0.5ex, but I couldn’t manage to do that without borking quotes that start somewhere in the middle of the paragraph.&lt;/p&gt;
&lt;p&gt;Since all the major browsers support resizing fonts that are set in pixels, and “zooming” is now preferred over simple font resizing, I went ahead and set everything in pixels so that the math would be easier.  There’s really no benefit to so-called “fluid” layouts that are set in ex or em measurements.  Plus, browsers that support dynamic fonts seem to have a really hard time with ex/em measurements, since the layout is rendered before the font has downloaded.  I do hope that gets fixed at some point, but doing layout in pixels was a welcome return to basics.&lt;/p&gt;
&lt;h2 id=&quot;supported_browsers&quot;&gt;Supported Browsers&lt;/h2&gt;
&lt;p&gt;The luxury of a personal site: I didn’t test even once in MSIE, and I don’t plan to.&lt;/p&gt;
&lt;p&gt;Also, since a lot of the style is in the typography, anyone with a browser older than 6 months isn’t going to see my beautiful styles.  But they’ll see their own default font settings, I suppose, and that’s probably fine.  &lt;/p&gt;
&lt;p&gt;What do you think?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Fish Sticks</title>
		<link href="https://blog.izs.me/2009/04/fish-sticks/"/>
		<updated>2009-04-17T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/04/fish-sticks/</id>
		<content type="html">&lt;p&gt;&amp;quot;I don&#39;t know why your fried potato story made me think of donuts.&amp;quot;&lt;/p&gt;
&lt;p&gt;&amp;quot;I know! That&#39;s why I&#39;m having fish sticks.&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Responsibility</title>
		<link href="https://blog.izs.me/2009/04/responsibility/"/>
		<updated>2009-04-09T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/04/responsibility/</id>
		<content type="html">&lt;p&gt;Sometimes I just can&#39;t believe how much Yahoo trusts me.  I&#39;m basically rewriting the core javascript for a major project, and the justification is that I said we had to.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Kind of Awesome</title>
		<link href="https://blog.izs.me/2009/04/kind-of-awesome/"/>
		<updated>2009-04-01T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/04/kind-of-awesome/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;(adj.)&lt;/em&gt; A goodness that is worthy of awe, and yet subtle and/or understated.  A deep wonderousness that seems effortless, even obvious.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Robots, Ninjas, and Bears</title>
		<link href="https://blog.izs.me/2009/03/robots-ninjas-and-bears/"/>
		<updated>2009-03-30T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/robots-ninjas-and-bears/</id>
		<content type="html">&lt;h2 id=&quot;ninjas&quot; tabindex=&quot;-1&quot;&gt;Ninjas &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2009/03/robots-ninjas-and-bears/#ninjas&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ninjas are mammals.&lt;/li&gt;
&lt;li&gt;Ninjas fight ALL the time.&lt;/li&gt;
&lt;li&gt;The purpose of the ninja is to flip out and kill people.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;http://realultimatepower.net/&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;robots&quot; tabindex=&quot;-1&quot;&gt;Robots &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2009/03/robots-ninjas-and-bears/#robots&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Robots say that they love you.&lt;/li&gt;
&lt;li&gt;Robots pretend to be your friend.&lt;/li&gt;
&lt;li&gt;Robots might kill you in the end.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=tb2Pzl1U0sY&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;bears&quot; tabindex=&quot;-1&quot;&gt;Bears &lt;a class=&quot;direct-link&quot; href=&quot;https://blog.izs.me/2009/03/robots-ninjas-and-bears/#bears&quot; aria-hidden=&quot;true&quot;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Bears are mammals.&lt;/li&gt;
&lt;li&gt;Bears eat fish.&lt;/li&gt;
&lt;li&gt;The purpose of a bear is to flip out and maul everyone.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=YtmmefcJbMc&quot;&gt;Source&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Calm of Exertion</title>
		<link href="https://blog.izs.me/2009/03/the-calm-of-exertion/"/>
		<updated>2009-03-29T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/the-calm-of-exertion/</id>
		<content type="html">&lt;p&gt;Exerted and spent, and yet filled up and satisfied.&lt;br /&gt;
Like a cat in the sun.&lt;br /&gt;
It is work that brings this calm, strengthens the body and mind for another round.&lt;br /&gt;
This is the reward of your effort.&lt;br /&gt;
&lt;strong&gt;Do not squander it!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;How often have I burnt myself out, and felt so overwhelmed, like there was never enough time, never enough of me to cover all the corners, spread and stretched as a sheet over too large a bed, butter across too much bread, thin and weary, cracking and torn, pulled to shreds.  So many times I&#39;ve forgotten this lesson, forgotten to pick up my reward, and paid the price for it.&lt;/p&gt;
&lt;p&gt;I&#39;ve told myself that work is to blame.  I point the finger at the likely suspect, but the fact of the matter is that &lt;em&gt;I&lt;/em&gt; was to blame, and didn&#39;t want to admit I&#39;d caused my own pain.&lt;/p&gt;
&lt;p&gt;There is plenty of time.&lt;br /&gt;
Everyone will get by just fine.&lt;/p&gt;
&lt;p&gt;Work hard, and rest deeply.  That is the Key.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Discipline</title>
		<link href="https://blog.izs.me/2009/03/discipline/"/>
		<updated>2009-03-29T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/discipline/</id>
		<content type="html">&lt;p&gt;Find the minimum valuable creation.&lt;br /&gt;
Entities must not be multiplied beyond necessity.&lt;br /&gt;
Minimalism is power.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Uhoh?</title>
		<link href="https://blog.izs.me/2009/03/uhoh/"/>
		<updated>2009-03-28T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/uhoh/</id>
		<content type="html">&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; I &lt;em&gt;might&lt;/em&gt; have just lost the whole archiving thing with &lt;code&gt;git rebase&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Or not.  Let&#39;s see.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A New Structure</title>
		<link href="https://blog.izs.me/2009/03/a-new-structure/"/>
		<updated>2009-03-28T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/a-new-structure/</id>
		<content type="html">&lt;p&gt;I updated the structure of my snips.&lt;/p&gt;
&lt;p&gt;As part of the commit of this change, I&#39;m going to also have this snip.&lt;/p&gt;
&lt;p&gt;Then, I&#39;m going to post a commit message about the change, and about the fact that this snip is commenting on the change.&lt;/p&gt;
&lt;p&gt;The metaness of this blog pleases me.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>On Leadership</title>
		<link href="https://blog.izs.me/2009/03/leadership/"/>
		<updated>2009-03-27T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/leadership/</id>
		<content type="html">&lt;p&gt;Report down, not up.
Change direction, don&#39;t ask someone else to.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Bruce Lee on Limits</title>
		<link href="https://blog.izs.me/2009/03/bruce-lee-on-limits/"/>
		<updated>2009-03-23T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/bruce-lee-on-limits/</id>
		<content type="html">&lt;p&gt;“If you always put limits on everything you do, physical or anything else, it will spread into your work and into your life. There are no limits. There are only plateaus, and you must not stay there, you must go beyond them.”&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Rainbows</title>
		<link href="https://blog.izs.me/2009/03/rainbows/"/>
		<updated>2009-03-04T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/03/rainbows/</id>
		<content type="html">&lt;p&gt;We&#39;ve seen 4 rainbows in the last few days at work.  Now I&#39;m worried that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rainbows don&#39;t impress me any more.&lt;/li&gt;
&lt;li&gt;If I don&#39;t see one today, I&#39;ll be depressed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rainbows have undone my happiness.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Thanks</title>
		<link href="https://blog.izs.me/2009/02/thanks/"/>
		<updated>2009-02-28T20:00:00Z</updated>
		<id>https://blog.izs.me/2009/02/thanks/</id>
		<content type="html">&lt;p&gt;I&#39;m smitten.  It&#39;s overwhelming.  Definitely more smit than I can whelm.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://github.com/isaacs/snips&quot;&gt;snip&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>1234567890</title>
		<link href="https://blog.izs.me/2009/02/1234567890/"/>
		<updated>2009-02-13T23:31:30Z</updated>
		<id>https://blog.izs.me/2009/02/1234567890/</id>
		<content type="html">&lt;p&gt;Right now, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Unix_time&quot;&gt;Unix Epoch Time&lt;/a&gt; is 1234567890.&lt;/p&gt;
&lt;p&gt;Is it excessively nerdy that I&amp;rsquo;ve been looking forward to this for the past few years?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>CSS vs Tables: You&#39;re Doing It Wrong</title>
		<link href="https://blog.izs.me/2009/02/css-vs-tables-youre-doing-it-wrong/"/>
		<updated>2009-02-03T07:40:22Z</updated>
		<id>https://blog.izs.me/2009/02/css-vs-tables-youre-doing-it-wrong/</id>
		<content type="html">&lt;p&gt;
    Definitions first.
&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;
        Table
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            A specified set of columns and rows with cells that automatically and fairly smartly expand to fit their contents; cells can span rows or columns; the table as a whole can be treated as one block, and cells can contain tables. A table is a metaphor for visually laying out 2-dimensional content.
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        CSS
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            &lt;em&gt;cascading style sheets&lt;/em&gt;; not floating divs, not any specific markup, but &lt;em&gt;just&lt;/em&gt; the concept of the visual display of markup specified by a series of rules that are kept separate from the markup they operate on, generally in an external linked file or a style tag in the head of the document.
        &lt;/p&gt;
    &lt;/dd&gt;
&lt;/dl&gt;&lt;h3 id=&quot;talking_past_each_other&quot;&gt;
    Talking Past Each Other
&lt;/h3&gt;
&lt;p&gt;
    CSS is (for various reasons cited elsewhere ad nauseam), in most cases, the more optimal technological approach. That’s not to say that the existing state of the CSS language is perfect. In fact, even the most vocal CSS advocates regularly assert that there are deep problems with the existing spec and browser support.
&lt;/p&gt;
&lt;p&gt;
    Tables are (for various reasons cited elsewhere ad nauseam), in most cases, a more optimal metaphor than any of its rivals. There’s nothing inherently wonderful about the tags themselves. In fact, even the most vocal table advocates regularly assert that the markup is ugly.
&lt;/p&gt;
&lt;p&gt;
    Therein lies the crux of the problem. CSS is a great technological approach, and tables are a great metaphor. The question then usually becomes, &lt;q&gt;Should I mark up my content using &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; tags or &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; tags?&lt;/q&gt;, which really means, &lt;q&gt;Is the separation of style from content more or less important than using the optimal layout metaphor?&lt;/q&gt; The debate goes a little like this:
&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;
        tables
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            This layout metaphor is better, so you should use these tags. All you idealists are unrealistic! (Also, if you think markup matters, you believe in fairies. It so doesn&amp;rsquo;t!)
        &lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;
        CSS
    &lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;
            Metaphor shmetaphor! You don’t care about the sanctity of data or code quality. Think of the maintenance! (Also, if you can’t do it with divs, you’re stupid. It&amp;rsquo;s so easy!)
        &lt;/p&gt;
    &lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;
    The Right Answer, it would seem, is to use the table metaphor with the CSS technology. In the ideal world, you’d always mark up your content using the tags that would communicate your meaning most clearly to your intended user agents. Then you’d tell user agents how to treat those tags visually. To describe this visual display, you should be able to use the table metaphor, or the float metaphor, or absolute and relative positioning, or anything else, &lt;strong&gt;but that should not be done by your markup&lt;/strong&gt;.
&lt;/p&gt;
&lt;h3 id=&quot;getting_real&quot;&gt;
    Getting Real
&lt;/h3&gt;
&lt;p&gt;
    In the real world, it’s not so nice. The CSS specification has a set of display values designed to mimic the table tags, but they aren’t well supported, and anyway, it’s an imperfect imitation of a hack that was not really intended to be used the way we all ended up using it.
&lt;/p&gt;
&lt;p&gt;In other words, CSS is not an ideal example of what CSS aims at, and the table/tr/td tags are not an ideal implementation of the table/grid metaphor.  CSS tables, though they &lt;em&gt;are&lt;/em&gt; clever and in some cases quite useful, take it from bad to worse.&lt;/p&gt;
&lt;p&gt;
    The state of the CSS art is not at a point where you can realistically expect to make any significant stylistic changes to your pages without altering the markup. If you need to move the navigation bar from the right to the left, or re-skin the page with dropshadows instead of rounded corners, or convert your gradients from 2-tone to 3-tone, or make your boxes vertically centered instead of top-aligned, you’re probably going to have to change your markup, at least a little.
&lt;/p&gt;
&lt;p&gt;
    In theory, it’s possible. I know a handful of my colleagues will vehemently disagree and point at countless approaches to enable virtually any kind of reskinning using only CSS changes. (I’ve used &lt;a href=&quot;http://www.lesliesommer.com/wdw07/html/&quot;&gt;Leslie Sommer’s CSS Mojo&lt;/a&gt; technique to great success in the past; we used it for pretty much everything on &lt;a href=&quot;http://buzz.yahoo.com/&quot;&gt;Yahoo! Buzz&lt;/a&gt;.) But let me tell you, from years of experience building production sites with CSS, most of the time, in reality &lt;strong&gt;it just doesn’t work that way.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    And why should it? What kind of crazy lunatic writes &lt;em&gt;all their HTML by hand in text files&lt;/em&gt;, anyhow? Clearly you have some kind of back-end engine spitting it out from templates, so you just change the template, and &lt;em lang=&quot;fr&quot;&gt;voilà!&lt;/em&gt;, the markup is changed everywhere.
&lt;/p&gt;
&lt;h3 id=&quot;a_very_blue_bike_shed&quot;&gt;
    A Very Blue Bike Shed
&lt;/h3&gt;
&lt;p&gt;
    Working at Yahoo, I’ve met some webdevs with truly incredible CSS ability, who crank out live code under real deadlines to exacting standards. They use CSS, and not tables, and they Get Shit Done. There are a lot of them, more than I can list here, but &lt;a href=&quot;http://nate.koechley.com/blog/&quot;&gt;Nate Koechley&lt;/a&gt;, &lt;a href=&quot;http://github.com/msweeney&quot;&gt;Matt Sweeney&lt;/a&gt;, &lt;a href=&quot;http://blog.hedgerwow.com/&quot;&gt;Hedger Wang&lt;/a&gt;, and &lt;a href=&quot;http://www.lesliesommer.com/&quot;&gt;Leslie Sommer&lt;/a&gt; all deserve a special mention.  I came to Yahoo knowing CSS pretty well, but I became an expert largely as a result of working in such a highly skilled community of developers.
&lt;/p&gt;
&lt;p&gt;
    Also due to my time at Yahoo, I’ve seen some absolutely &lt;em&gt;crazy&lt;/em&gt; debates about markup and coding standards on the devel-frontend mailing list. I mean, you think this little flare-up in the blogosphere is anything? You got no idea, buddy. Seriously. And these are coworkers who (for the most part) really like and respect one another.
&lt;/p&gt;
&lt;p&gt;
    You wanna know a secret? &lt;strong&gt;It makes no difference.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    Language is as language does. If everyone uses the &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; tag for markup, guess what happens: &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; is now a semantically meaningless (or at least, semantically vague) tag, and any user agents that might care about navigating tabular data have to deal with that fact. It becomes just another &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, for all intents and purposes, but a little less flexible, and with a default styling that makes it handy for layout.
&lt;/p&gt;
&lt;p&gt;
    The passion for the rants &lt;em&gt;comes from&lt;/em&gt; the fact that it is meaningless! Of &lt;em&gt;course&lt;/em&gt; it’s a fertile ground for &lt;a href=&quot;http://www.bikeshed.com/&quot;&gt;bikeshedism&lt;/a&gt;!
&lt;/p&gt;
&lt;h3 id=&quot;that8217s_right_it_doesn8217t_matter&quot;&gt;
    That’s right: It doesn’t matter.
&lt;/h3&gt;
&lt;p&gt;
    Use whatever tags work for you. I don’t care. You’ll still be a good person.
&lt;/p&gt;
&lt;p&gt;
    I &lt;em&gt;can&lt;/em&gt; tell you from experience that a deep knowledge of CSS is essential for serious front-end development. (Most so-called DHTML is actually just manipulating CSS with Javascript, and the Javascript is pretty light.) CSS can do some things that table tags can’t, so you ought to learn it. The reverse is also true, so you should know how to use tables, too.
&lt;/p&gt;
&lt;p&gt;
    Write code that you can maintain, that is flexible enough to let you change it without sacrificing the stability of your product. Test it in the user agents that you expect to support. Stop debating the color of this bikeshed.
&lt;/p&gt;
&lt;p&gt;
    If there’s ever a good reason to go back and change your tables to divs, or vice versa, you can do that. Hell, plan for that, because whether you use CSS for layout or not, you’re going to need to touch your markup sometimes. It is much much harder to build a product people want than it is to build a product that works in Browser X.
&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Nerdery</title>
		<link href="https://blog.izs.me/2008/12/nerdery/"/>
		<updated>2008-12-05T18:00:00Z</updated>
		<id>https://blog.izs.me/2008/12/nerdery/</id>
		<content type="html">&lt;p&gt;David Spade will forever have a special place in my heart for what he did in the movie &lt;a href=&quot;http://www.imdb.com/title/tt0114694/&quot;&gt;Tommy Boy&lt;/a&gt;.  I’m not sure if it was his creation, but in that movie, Spade delivered a line that added one of my favorite words to the english language:&lt;/p&gt;
&lt;blockquote cite=&quot;http://www.imdb.com/title/tt0114694/quotes&quot;&gt;My fellow nerds and I will retire to the &lt;strong&gt;nerdery&lt;/strong&gt; with our calculators.&lt;/blockquote&gt;
&lt;p&gt;I saw the movie back in high school when it was in the theater.  &lt;em&gt;Immediately&lt;/em&gt;—I mean, &lt;em&gt;before we had gotten out of our seats&lt;/em&gt;—we were using “nerdery” to refer to our pack of nerds &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#fn-1&quot; id=&quot;n1&quot;&gt;[1]&lt;/a&gt;.  It’s like there was a linguistic void waiting to be filled, one that we had somehow never noticed before, and that term came to our rescue, identifying and defining a concept that we all knew but could never properly articulate.&lt;/p&gt;
&lt;p&gt;It’s interesting that he’s clearly talking about a location in the quote, and not necessarily a pack.  Nevertheless, the longing for this term is clear in the fact that literally every single person I know has exactly the same concept of what it means &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#fn-2&quot; id=&quot;n2&quot;&gt;[2]&lt;/a&gt;, despite having grown up in different parts of the world.  That’s pretty rare for a concept so squishy, even if the term is only 13 years old.&lt;/p&gt;
&lt;h3 title=&quot;Zōon politikon - Social Animal&quot;&gt;ζῷον πολιτικὸν&lt;/h3&gt;
&lt;p&gt;Nerds are humans, and &lt;a href=&quot;http://www.randsinrepose.com/archives/2008/05/15/we_travel_in_tribes.html&quot;&gt;humans travel in tribes&lt;/a&gt;.  Nerds may &lt;a href=&quot;http://www.paulgraham.com/nerds.html&quot;&gt;fail at popularity&lt;/a&gt;, but the &lt;a href=&quot;http://en.wikipedia.org/wiki/Politics_(Aristotle)&quot; title=&quot;Human as Politikon&quot;&gt;human qua πολιτικὸν&lt;/a&gt; phenomenon is inescapable. We are social creatures, by our nature. &lt;a href=&quot;http://gee.ky/2008/03/information-versus-knowledge/&quot;&gt;You can’t keep up with it all&lt;/a&gt; on your own, which is why &lt;a href=&quot;http://www.seldo.com/feed/item/a_vc_on_the_virtues_of_the_lazy_web_your_social_network_is_smarter_than_google/639c99c745f3b7865aeee75c3a0afcf0&quot;&gt;your lazyweb is smarter than google.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It’s kind of easy bait to just say that nerds fail at people, but to stop there is missing the point &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#fn-3&quot; id=&quot;n3&quot;&gt;[3]&lt;/a&gt;.  The lack of popularity doesn’t change the need for polis; it simply changes the types of people that nerds tend to associate with.  Given the right conditions, we clump together, and form nerderies.&lt;/p&gt;
&lt;p&gt;If nerds &lt;em&gt;didn’t&lt;/em&gt; need people, we wouldn’t clump.  We’d all be loners.  And really, deep down, we’re not, no matter what we may tell ourselves.&lt;/p&gt;
&lt;p&gt;You can do things with a nerdery that you can’t do alone.  Hacking on your own can be fun, but no matter what it is, projects really &lt;strong&gt;take the fuck off&lt;/strong&gt; when a few heads are working together.  That’s how you get explosive momentum.  No matter how smart or driven you are, &lt;strong&gt;you cannot do it alone.&lt;/strong&gt;  &lt;a href=&quot;http://www.newyorker.com/online/video/conference/2007/gladwell&quot;&gt;The genius of the future stands on the shoulders of everyone.&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Connecticut&lt;/h3&gt;
&lt;p&gt;In high school, I was a part of a quality nerdery.  We were the kids who sat in the back of the class in AP Calculus, who stopped doing homework so we could study harder and get a 5/5 on The Test.  We made web pages and played dungeons and dragons.  We ran with the artists and freaks.&lt;/p&gt;
&lt;p&gt;But it was high school.  Things were awkward and weird.  We knew each other too well, and yet not at all.  After graduation, I fell out of touch with most of those guys.  Maybe there was a really strong tribe there, and I was just never quite in it.  Or maybe we just grew up, and our interests diverged.&lt;/p&gt;
&lt;p&gt;In college, I lived in &lt;a href=&quot;http://www.southernct.edu/residencelife/on-campushousing/residencehalls/neffhall/&quot; title=&quot;TRE NEFF!&quot;&gt;Neff Hall&lt;/a&gt;, the designated geek dorm.  &lt;small&gt;It really was. The top two floors were even preferentially assigned to Honors College students.&lt;/small&gt;  In my second year, we reached Critical Mass.  We were a tribe, Tre Neff.  We had a call.  We organized acts of benevolent mischief.  A decade later, I follow a bunch of them on twitter, and comment on their blogs.  I moved to California with one of them, and we all know each other, an extended family of sorts.&lt;/p&gt;
&lt;h3&gt;California&lt;/h3&gt;
&lt;p&gt;Connecticut is beautiful, and great for a lot of things. I’m glad to have grown up there, and I would recommend that anyone spend their college years in New Haven.  But it’s a terrible place to be a grown-up hacker.  When I moved out to San Diego, I was sans-nerdery.  Lone wolves catch no caribou.&lt;/p&gt;
&lt;p&gt;Transporting my tribe to California was a pleasant fantasy, but not realistic.  They all had their own lives.  Some of them moved to Boston.  Others were still in school in New Haven or elsewhere.  Wasn’t gonna happen.  Even if we were all local, we’d grown up, and we weren’t into the same things any longer.  We were still friends, but not a nerdery.&lt;/p&gt;
&lt;p&gt;So, that meant building a new one.  When I got a job at a little windows shop, I thought &lt;q&gt;Well, a nerdery just kinda happened in high school, and another one just kinda happened in college, seems reasonable that I’ll find one at a software company.  Lotta geeks there.&lt;/q&gt;  Ha.  How very naïve.  &lt;small&gt;My god, we &lt;strong&gt;do&lt;/strong&gt; fail at people.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;There were about 30 people at that company, and I did meet more nerds there.  A few became friends and are still.  But somehow, it lacked cohesion.&lt;/p&gt;
&lt;p&gt;After a few years, that job wasn’t doing it for me anymore.  I focused all my time and energy on learning the latest in web development.  PHP, CSS, Javascript,  semantic markup, XML, and so on.  I started writing a blog, reading blogs, commenting, conversing, everything I could do to tap into this tribe and be one of its members.&lt;/p&gt;
&lt;p&gt;One day, a woman named Amy emailed me about a position at Yahoo.  I interviewed, and an invitation to the technopolis fell into my lap.  3 years later, I’m still here, and my unwillingness to leave has even &lt;a href=&quot;http://valleywag.com/5040787/yahoo-engineer-take-your-job-offer-and-shove-it&quot;&gt;attracted some attention&lt;/a&gt;, &lt;a href=&quot;http://foohack.com/2008/08/why-im-not-working-on-my-startup-yet/&quot;&gt;temporary though it may be&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Stars and Nets&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://schillmania.com/&quot;&gt;I’ve&lt;/a&gt; &lt;a href=&quot;http://curtisharvey.com/&quot;&gt;met&lt;/a&gt; &lt;a href=&quot;http://www.wait-till-i.com/&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://seldo.com/&quot;&gt;lot&lt;/a&gt; &lt;a href=&quot;http://scriptnode.com/&quot;&gt;more&lt;/a&gt;  &lt;a href=&quot;http://juilin.net/&quot;&gt;high&lt;/a&gt; &lt;a href=&quot;http://www.gamaielzavala.com/&quot;&gt;quality&lt;/a&gt; &lt;a href=&quot;http://nczonline.net/&quot;&gt;nerds&lt;/a&gt; &lt;a href=&quot;http://nate.koechley.com/&quot;&gt;here&lt;/a&gt; &lt;a href=&quot;http://crockford.com/&quot;&gt;at&lt;/a&gt; &lt;a href=&quot;http://davglass.com/&quot;&gt;this&lt;/a&gt; &lt;a href=&quot;http://www.andrewwooldridge.com/blog/&quot;&gt;company&lt;/a&gt;, &lt;a href=&quot;http://www.dustinwhittle.com/&quot;&gt;more&lt;/a&gt; &lt;a href=&quot;http://www.8bitkid.com/&quot;&gt;than&lt;/a&gt; &lt;a href=&quot;http://www.aaroncole.com/&quot;&gt;I&lt;/a&gt; &lt;a href=&quot;http://ryo.iloha.net/&quot;&gt;can&lt;/a&gt; &lt;a href=&quot;http://daaku.org/&quot;&gt;link&lt;/a&gt; &lt;a href=&quot;http://www.stephenwoods.net/&quot;&gt;to&lt;/a&gt; &lt;a href=&quot;http://wonko.com/&quot;&gt;in&lt;/a&gt; &lt;a href=&quot;http://eldub.com/&quot;&gt;one&lt;/a&gt; &lt;a href=&quot;http://www.julienlecomte.net/blog/&quot;&gt;sentence&lt;/a&gt;.  Since moving to Silicon Valley, I’ve also found other &lt;a href=&quot;http://entrepreneur.meetup.com/1737/&quot;&gt;hacker groups&lt;/a&gt; and &lt;a href=&quot;http://javascript.meetup.com/4/&quot;&gt;interest meetups&lt;/a&gt; and &lt;a href=&quot;http://news.ycombinator.com/&quot;&gt;so on&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For whatever reason, it seems like only about 10% of the people we meet have friend potential, and only maybe 10% of those fall into the right blend of coincidence to actually result in any kind of useful relationship.  Maybe these numbers are skewed down by the fact that I’m talking specifically about nerds, but I suspect that, for anyone, the vast majority of acquaintances and colleagues never make it to “friends”.  There are only so many hours in the day, and relating takes time.  We are limitful creatures.&lt;/p&gt;
&lt;p&gt;When it comes to functional groups, &lt;a href=&quot;http://www.lifewithalacrity.com/2008/09/group-threshold.html&quot;&gt;size matters&lt;/a&gt;.  A lot.  The ideal size for a nerdery seems to be about 7 people, and it &lt;a href=&quot;http://foohack.com/2007/12/surgical-team-or-motley-crew-of-adventurers/&quot;&gt;needs the right balance of skills&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Nevertheless, that 1% turns out to be quite enough, if you’ve got access to a big enough population.  It’s quite helpful to start out at a large software company or a college that attracts technical talent.  It’s easy to meet a few like-minded friends if you are exposed to a few hundred likely contacts.  I didn’t realize at the time that the difference between college and that first software company was mostly scale; 30 employees vs 30,000 students.  (It was a state university—at a place like MIT or Stanford, the pool would probably not need to be so large.)&lt;/p&gt;
&lt;p&gt;Cohesion happens in &lt;a href=&quot;http://www.43things.com/entries/view/3411000&quot;&gt;the progression from “star” to “net”&lt;/a&gt;.  In this extremely technical diagram, the red dots are people, and the blue lines are relationships between them.  A person’s group of friends and associates starts out as a star.  We relate to people who might not relate much with one another, and who have associations with other people outside the group, that we don’t know.&lt;/p&gt;
&lt;p&gt;The ideal net is where each of the points interacts with all or most of the others.  &lt;em&gt;That’s&lt;/em&gt; where the good stuff happens.  We can spend less time relating, and get more value from it.  See how all the blue lines cross over one another?  Ideas flow across those channels, and they pollute one another as they bounce around.  &lt;a href=&quot;http://seldo.com/weblog/2008/08/04/how_to_get_an_idea_for_a_startup_move_to_the_bay&quot;&gt;Conversations produce accidental ideas&lt;/a&gt;, and the more collisions, the more accidents are liable to occur.  Nets tighten.  Things get caught in nets.  Tasty things.&lt;/p&gt;
&lt;p&gt;I suspect that a functional group also can’t really be without a function.  It has to start as bonding over some purpose, or else it just doesn’t get there.  It’s hard to organically attract the right blend of skills without some &lt;em&gt;need&lt;/em&gt; for those skills.&lt;/p&gt;
&lt;p&gt;The way to get from star to net is just to get bigger.  Meet more people, stick with the ones that seem the most interesting.  As the star grows more dense, the spokes bump into one another, and it collapses in gradual steps.  At some point, it’s ripe for being drawn together by some unifying project or task, and the right members join together to make it happen.  Some pieces fly off, and the rest is pulled into the new shape.&lt;/p&gt;
&lt;p&gt;The best communities organize themselves.&lt;/p&gt;
&lt;h3&gt;Footnotes&lt;/h3&gt;
&lt;ol&gt;&lt;li id=&quot;fn-1&quot;&gt;For the sake of brevity, I’ve skipped the tired and boring “nerd vs geek” semantic hair-splitting.  They mean roughly the same thing, depending on who you ask, and that’s not what this is really about, anyhow. &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#n1&quot;&gt;#back&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;fn-2&quot;&gt;A friend of mine pointed out that “nerdery” is like “club”, in that it can both refer to the location where the group congregates, as well as the group that congregates in the location. Seems reasonable. &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#n2&quot;&gt;#back&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;fn-3&quot;&gt;It is not my intention to imply that &lt;a href=&quot;http://www.paulgraham.com/nerds.html&quot;&gt;Paul Graham’s nerds essay&lt;/a&gt; misses any kind of point.  He does some very good analysis of the reasons behind the phenomenon. &lt;a href=&quot;https://blog.izs.me/2008/12/nerdery/#n3&quot;&gt;#back&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</content>
	</entry>
	
	<entry>
		<title>How Not to Get Real (and die trying)</title>
		<link href="https://blog.izs.me/2008/11/how-not-to-get-real-and-die-trying/"/>
		<updated>2008-11-11T22:36:17Z</updated>
		<id>https://blog.izs.me/2008/11/how-not-to-get-real-and-die-trying/</id>
		<content type="html">&lt;p&gt;Recently, Auston of the &lt;a href=&quot;http://getrealordie.com/&quot;&gt;&lt;del datetime=&quot;2008-11-12T16:30:10+00:00&quot;&gt;Dashboard&lt;/del&gt; Leadlog startup&lt;/a&gt; in Florida posted a &lt;a href=&quot;http://getrealordie.com/?p=12&quot;&gt;somewhat snarky&lt;/a&gt; blog post about one of the responses to a &lt;a href=&quot;http://www.krop.com/jobs/n6ky3/&quot;&gt;job opening at their company&lt;/a&gt;.  I more or less said the same things that appeared &lt;a href=&quot;http://news.ycombinator.com/item?id=360574&quot;&gt;on Hacker News&lt;/a&gt;.  Eventually my comment may show up, but it&amp;rsquo;s &lt;a href=&quot;http://getrealordie.com/?p=12#comment-20&quot;&gt;buried at #20&lt;/a&gt;, so I thought I&amp;rsquo;d post it here, as well.&lt;/p&gt;
&lt;p&gt;Auston, this is for you.&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;While his tone was a little condescending, I completely see where this person was coming from.  I have all of these skills, and if I was on the market, I&amp;rsquo;d skip right over your ad.  I wouldn&amp;rsquo;t even consider it, and I probably wouldn&amp;rsquo;t be kind enough to tell you why.  If anything, he wasn&amp;rsquo;t harsh enough, and you&amp;rsquo;d be wise to find the grain of truth in his criticism.&lt;/p&gt;
&lt;p&gt;Money isn&amp;rsquo;t just important as a way to pay the bills.  I could pay my bills on a lot less than I make today.  Money is important because it shows how much an employer values me and my skills, which is also an indication of the work environment.  Moreover, labor is a market.  I&amp;rsquo;m not even going to consider an employer who can&amp;rsquo;t pay what the market will bear.  Put another way, why would I want to work for anyone other than the employer who values me the most?&lt;/p&gt;
&lt;p&gt;When you hire someone, however you&amp;rsquo;re compensating them, &lt;strong&gt;it&amp;rsquo;s more than they could get anywhere else&lt;/strong&gt;.  Think about that for a moment.  If you get a Porche at a Honda price, don&amp;rsquo;t be surprised if the motor doesn&amp;rsquo;t live up to the salesman&amp;rsquo;s promises.  You offered the highest price he could get for it, and it wasn&amp;rsquo;t a very good price.  Maybe the other buyers know something you don&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Of course, salary isn&amp;rsquo;t the only kind of compensation.  If they really believe in your company, they&amp;rsquo;ll push for equity, because they&amp;rsquo;ll believe that the equity is more valuable than the paycheck.  If that&amp;rsquo;s the kind of belief you want, then you need to structure the compensation to be competitive to people who feel that way.&lt;/p&gt;
&lt;p&gt;Your ad describes an expert frontend/backend guru-level ops/designer/architect (who also doesn&amp;rsquo;t mind slogging through maintenance tasks).  And to compensate them, you&amp;rsquo;re offering&amp;hellip;. a big monitor? Ping pong? JOKES!? Are you SERIOUS?  Talking about a &amp;ldquo;comfortable and fun work environment&amp;rdquo; is a red flag.  If you have to go out of your way to keep your engineers entertained and comfortable, that usually means that your product very boring and unpleasant.  No thanks.&lt;/p&gt;
&lt;p&gt;It sounds like you want a CTO or chief architect.  If you can&amp;rsquo;t afford several hundred thousand per year in salary (which most startups can&amp;rsquo;t), you&amp;rsquo;d better be prepared to hand over a sizable chunk of your company to them.  Skip the stuff about your killer break rooms, they probably have better chairs and toys at home.  Sell them on the concept and the business plan instead.  Anyone with those skills knows what they&amp;rsquo;re worth.  You&amp;rsquo;re recruiting a partner, not an employee, but your ad clearly shows that you don&amp;rsquo;t get that.&lt;/p&gt;
&lt;p&gt;If you balk at giving up so much, then ask yourself this: why else would someone with with that value choose to invest it in YOU, when they can do half the work and make 4 times as much at Google or Yahoo, or probably start their own company and compete with you directly?  You&amp;rsquo;re hunting tigers, and frankly, it doesn&amp;rsquo;t sound like you&amp;rsquo;re up to the task.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t &lt;em&gt;need&lt;/em&gt; that level of expertise, then don&amp;rsquo;t &lt;em&gt;ask&lt;/em&gt; for it.  When you want a Honda, and you can afford a Honda, you go to a Honda dealership.  Job ads are not the place to shoot for stretch goals.  This is the equivalent of the resumes that list every buzzword under the sun, when the person has real experience in maybe two or three.&lt;/p&gt;
&lt;blockquote&gt;We&amp;rsquo;re two biz dev guys, a ux guru and a hacker with solid business experience.&lt;/blockquote&gt;
&lt;p&gt;So, you&amp;rsquo;re 4 people, and only one of you writes code?  Good luck with that.  No wonder you need so much help.  One of the biz dev guys should probably sell their equity to the other three, and go &amp;ldquo;dev&amp;rdquo; some other &amp;ldquo;biz&amp;rdquo;.  Then maybe you&amp;rsquo;d be able to afford the CTO you need.  It&amp;rsquo;s going to be a tough sell, though, given the childish attitude towards compensation.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>My Letter to Obama</title>
		<link href="https://blog.izs.me/2008/11/my-letter-to-obama/"/>
		<updated>2008-11-10T22:36:59Z</updated>
		<id>https://blog.izs.me/2008/11/my-letter-to-obama/</id>
		<content type="html">&lt;p&gt;It&amp;rsquo;s a bit off-topic for this blog, but it&amp;rsquo;s important.&lt;/p&gt;
&lt;p&gt;Please head over to &lt;a href=&quot;http://change.gov/page/s/yourstory&quot;&gt;Obama&amp;rsquo;s website&lt;/a&gt; and let the new administration know what you expect from your government.&lt;/p&gt;
&lt;p&gt;This is the letter I just sent.&lt;/p&gt;
&lt;blockquote&gt;Mr. President Elect Barack Obama,
&lt;p&gt;We spend far too much money on policing the world with a network of bases.  Our military empire is a liability.  We can’t afford it.  It doesn’t actually make America safer.  It provides a way for crooked individuals to bilk the American taxpayer out of billions of dollars through anti-competitive contracts.&lt;/p&gt;
&lt;p&gt;America could cut its military spending by a very significant amount, and still remain an overwhelmingly powerful world leader.  Our economy cannot support the expense of tyranny, especially if you are going to actually accomplish half of what you’ve promised.&lt;/p&gt;
&lt;p&gt;The cold war is over.  The worst ever foreign attack on American civilians was orchestrated with airplanes and box cutters.  Wars of the future will be won and lost through diplomacy and intelligence, and those can be had at a relative bargain.  An arms race is a fruitless waste of money, paid for by the sweat and time of the people who have given you a clear mandate to improve their lives.&lt;/p&gt;
&lt;p&gt;What’s worse, our military empire is perversely un-American.  The nation that once ran the banner of “no taxation without representation” is now using its military weight to enforce policy on nations whose citizens do not get a representative in the American congress, a vote in our elections, or the protection of the Bill of Rights.  Even if it seems expedient at times, oppression never ultimately furthers the American agenda.  It alienates and disenfranchises the very people whose help we most need in future conflicts.&lt;/p&gt;
&lt;p&gt;Please put an end to this outdated, immoral, and expensive offense against humans everywhere.  We’ve hired you to change things.  Please change this.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Haiku OOO Email</title>
		<link href="https://blog.izs.me/2008/11/the-haiku-ooo-email/"/>
		<updated>2008-11-03T18:00:35Z</updated>
		<id>https://blog.izs.me/2008/11/the-haiku-ooo-email/</id>
		<content type="html">&lt;p&gt;When I started at Yahoo on the &lt;a href=&quot;http://games.yahoo.com/&quot;&gt;Games&lt;/a&gt; team, there was a custom that resonated deeply with me, which was started by Dean Yu.&lt;/p&gt;
&lt;p&gt;All &amp;ldquo;work from home&amp;rdquo; emails or &amp;ldquo;out of office&amp;rdquo; emails had to be sent in the form of a &lt;a href=&quot;http://en.wikipedia.org/wiki/Haiku&quot;&gt;haiku&lt;/a&gt;.  This rule was not enforced, but it&amp;rsquo;s the kind of thing that one person does, and then a few others pick up.  Once someone starts doing it, they rarely stop.&lt;/p&gt;
&lt;p&gt;Here are some examples:&lt;/p&gt;
&lt;pre&gt;Sick on an airplane.
Second carry-on: virus.
Infect passengers.&lt;/pre&gt;
&lt;pre&gt;OS API:
Sadly, not writing itself.
Avoid distractions.&lt;/pre&gt;
&lt;pre&gt;Roommate needs his car.
Internet works in new place.
May as well use it!&lt;/pre&gt;
&lt;pre&gt;Nothing in iCal:
Must take advantage of this.
Work in pajamas.&lt;/pre&gt;
&lt;pre&gt;Still not feeling well
Resting and working from home
Please ping or call me&lt;/pre&gt;
&lt;pre&gt;Have suffered relapse
To this weekend&#39;s brief illness
So I work from home&lt;/pre&gt;
&lt;pre&gt;Sneezing mightily
Wish not to infect colleagues
Thus working from home&lt;/pre&gt;
&lt;p&gt;A couplet for my recent vacation:&lt;/p&gt;
&lt;pre&gt;Been a busy year.
No vacations since ’06
Burnt out: Do not want.

Visit with old friends.
New England trees in autumn.
Rejuvenation.&lt;/pre&gt;
&lt;p&gt;Having worked on a bunch of teams, I&amp;rsquo;ve taken this custom with me as much as possible, to the Brand Universe team, and the Buzz team, and most recently the YAP team.  There&amp;rsquo;s no proselytizing involved.  I just send a haiku I&amp;rsquo;m working from home.  Some people think it&amp;rsquo;s fun, and play a round of &amp;ldquo;speaking in poetry&amp;rdquo; via email.  Some people adopt the custom, and it sticks.  Others, for whatever reason, never get involved.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure why some seem to instinctively carry it on, and others instead prefer just the subject of &amp;ldquo;wfh&amp;rdquo; or &amp;ldquo;ooo&amp;rdquo; with no message body.  I&amp;rsquo;ve been told that there are other teams at Yahoo and elsewhere that this custom has spread.  In Games, it&amp;rsquo;s all but gone, now that Dean has moved on.&lt;/p&gt;
&lt;p&gt;Like the Twitter of the Edo Period, haiku (then called &lt;a href=&quot;http://en.wikipedia.org/wiki/Haikai&quot;&gt;haikai&lt;/a&gt;) used terse imagery to elevate the normal and mundane to the deep and meaningful.&lt;/p&gt;
&lt;p&gt;Most people learn in grade school that a haiku is 3 lines, with syllables numbering 5/7/5.  While this is the typical standard, it&amp;rsquo;s not just about fitting into the right number of syllables.&lt;/p&gt;
&lt;p&gt;The goal of haiku is to find powerful expression in a small intense dose, to elicit an &amp;ldquo;AH HA!&amp;rdquo; experience by virtue of succinctly expressing meaning via simple language and powerful imagery.&lt;/p&gt;
&lt;p&gt;Limitation—whether 5/7/5 or 140 characters—is part of the equation.  Because the limits are so draconian, the writer is forced to be clear.  &lt;strong&gt;Squeezing ideas into uncomfortably small packages shaves off the excess.&lt;/strong&gt;  When the excess is removed, enlightenment remains.&lt;/p&gt;
&lt;p&gt;Like Twitter, haiku can be terribly inane and useless.  That is bad haiku.  Truth be told, most WFH emails basically are expressing a single sentiment, and the form adds little to the composition.  It&amp;rsquo;s just fun.&lt;/p&gt;
&lt;p&gt;Good programming is like good poetry.  The best programmers I&amp;rsquo;ve known are obsessively minimalist in their code, and do tremendously powerful things with simple logic and short functions.  The same can be said for all levels of design: a simple business model, a straightforward user flow, a clean visual treatment.&lt;/p&gt;
&lt;p&gt;Less is more.  Like the kendō master who practices calligraphy, or the actor who studies yoga, the pursuit of excellence in one area can balance and ready the mind for one&amp;rsquo;s primary activity.&lt;/p&gt;
&lt;p&gt;The next time you have to send an email to your team telling them that you&amp;rsquo;ll be out of the office for some reason, put it in the form of a haiku.  Don&amp;rsquo;t explain it or call attention to it.  It will be your gift.  Watch how it is received.&lt;/p&gt;
&lt;p class=&quot;small&quot;&gt;In case you&amp;rsquo;ve never hit them organically: &lt;a href=&quot;http://foohack.com/error/missing.html&quot;&gt;404&lt;/a&gt; &lt;a href=&quot;http://foohack.com/error/authorization.html&quot;&gt;401&lt;/a&gt; &lt;a href=&quot;http://foohack.com/error/forbidden.html&quot;&gt;403&lt;/a&gt; &lt;a href=&quot;http://foohack.com/error/gone.html&quot;&gt;410&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Software Development Meme</title>
		<link href="https://blog.izs.me/2008/09/software-development-meme/"/>
		<updated>2008-09-27T21:35:55Z</updated>
		<id>https://blog.izs.me/2008/09/software-development-meme/</id>
		<content type="html">&lt;p&gt;I’ve been tagged by fellow yahoo and javascript hacker extraordinaire &lt;a href=&quot;http://scriptnode.com/article/software-development-meme/&quot;&gt;Matt Hackett&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;how_old_were_you_when_you_first_started_programming&quot;&gt;How old were you when you first started programming?&lt;/h3&gt;
&lt;p&gt;I guess I was about 7 or so when I first typed BASIC commands into my dad’s DOS computer.  Back then, buying a “computer game” meant you bought a book and typed it up.  And then it didn’t work, most of the time.&lt;/p&gt;
&lt;p&gt;In High School, I got into programming for the Ti-8x series of graphing calculators, so that I didn’t have to memorize any of the equations in Calculus or Physics.  Mostly, those programs were designed to let you enter all but one or two of the variables in an equation, and then they’d solve for the missing piece, so that I could finish my tests in record time.  One teacher accused me of cheating once, but she let it slide when I showed her how I wrote the program.&lt;/p&gt;
&lt;p&gt;I also wrote a few simple games for the Ti, and heavily modded Drug Wars to add graphics and some new game mechanics.&lt;/p&gt;
&lt;h3 id=&quot;what_was_your_first_language&quot;&gt;What was your first language?&lt;/h3&gt;
&lt;p&gt;QBASIC was the first language I was exposed to, but the Ti’s BASIC-esque language was the first one I ever got creative with.&lt;/p&gt;
&lt;p&gt;After that, it was nothing but C and C++ in college.&lt;/p&gt;
&lt;h3 id=&quot;what_was_the_first_real_program_you_wrote&quot;&gt;What was the first real program you wrote?&lt;/h3&gt;
&lt;p&gt;I consider those physics and calculus shortcut programs in High School were “real”, because I ended up with customers, and having to do tech support and take feature requests.  The Ti had a data port that would let you send programs from one calculator to another, so other students started passing my programs around, and bugging me for new ones.  Early on, I learned the importance of “no warrantee expressed or implied”.&lt;/p&gt;
&lt;h3 id=&quot;what_languages_have_you_used_since_you_started_programming&quot;&gt;What languages have you used since you started programming?&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;C/C++ in college&lt;/li&gt;
    &lt;li&gt;VisualBasic, in its ASP, compiled, and Script forms&lt;/li&gt;
    &lt;li&gt;php&lt;/li&gt;
    &lt;li&gt;javascript&lt;/li&gt;
    &lt;li&gt;bash&lt;/li&gt;
    &lt;li&gt;perl&lt;/li&gt;
    &lt;li&gt;sql&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;and strictly dabbling for fun or education:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;erlang&lt;/li&gt;
    &lt;li&gt;python&lt;/li&gt;
    &lt;li&gt;ruby&lt;/li&gt;
    &lt;li&gt;ada&lt;/li&gt;
    &lt;li&gt;lisp (scheme and arc)&lt;/li&gt;
    &lt;li&gt;java&lt;/li&gt;
    &lt;li&gt;flash&lt;/li&gt;
    &lt;li&gt;haxe&lt;/li&gt;
&lt;/ul&gt;&lt;h3 id=&quot;what_was_your_first_professional_programming_gig&quot;&gt;What was your first professional programming gig?&lt;/h3&gt;
&lt;p&gt;At &lt;a href=&quot;http://elligence.net/&quot;&gt;Data Strategies&lt;/a&gt;, I started out in technical support, and after a few years, did some part-time programming. Eventually, I became the “web guy”, in charge of the help pages and website, doing everything from server-side programming to javascript to graphic design to technical writing.&lt;/p&gt;
&lt;h3 id=&quot;if_you_knew_then_what_you_know_now_would_you_have_started_programming&quot;&gt;If you knew then what you know now, would you have started programming?&lt;/h3&gt;
&lt;p&gt;Yes.  In fact, I would have probably pursued it a bit more aggressively.  A lot of my education amounted to various forms of underwater basket weaving.  But a lot of education is really about self-discovery, not just learning skills, and so maybe it’s better that I didn’t.&lt;/p&gt;
&lt;h3 id=&quot;if_there_is_one_thing_you_learned_along_the_way_that_you_would_tell_new_developers_what_would_it_be&quot;&gt;If there is one thing you learned along the way that you would tell new developers, what would it be?&lt;/h3&gt;
&lt;p&gt;Read a lot of code.&lt;/p&gt;
&lt;p&gt;Go to college, but don’t stress too much if you don’t, or if you don’t finish.  It’s no big deal, really.  College is a great forum to learn about yourself, what you like, what you’re good at, etc.&lt;/p&gt;
&lt;p&gt;Learn to talk to people, both online and in person.  Programming is a team sport most of the time.&lt;/p&gt;
&lt;p&gt;Deal with real live customers as early in your career as possible.&lt;/p&gt;
&lt;p&gt;Be compassionate.  The user has entrusted you with their time and data.  Care about that.&lt;/p&gt;
&lt;p&gt;Program for fun.  Fall in love with coding, but not with code.  Never be afraid to rewrite something.&lt;/p&gt;
&lt;h3 id=&quot;whats_the_most_fun_youve_ever_had_programming&quot;&gt;What’s the most fun you’ve ever had… programming?&lt;/h3&gt;
&lt;p&gt;The most fun thing in the world is making something work that didn’t work a little while ago.  It’s a high that’s disturbingly akin to hard drugs.  It keeps you up, makes you forget to sleep, subsumes all other pleasures, and is never enough.&lt;/p&gt;
&lt;p&gt;Of all the projects I’ve been a part of so far, &lt;a href=&quot;http://buzz.yahoo.com/&quot;&gt;Yahoo! Buzz&lt;/a&gt; was the most fun to work on.  But really, my favorite kind of programming, the thing that recharges my soul, is just wiling away a Saturday hacking on something without any constraints or compromises or deadlines.&lt;/p&gt;
&lt;h3 id=&quot;whos_next&quot;&gt;Who’s next?&lt;/h3&gt;
&lt;p&gt;I’m going to keep this inside the yahoo garden for now, and kick it over to another cubicle neighbor &lt;a href=&quot;http://seldo.com/&quot;&gt;Laurie called Seldo&lt;/a&gt;, a very talented writer and programmer.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A Conversation about Redux Getting Their Users Laid</title>
		<link href="https://blog.izs.me/2008/08/a-conversation-about-redux-getting-their-users/"/>
		<updated>2008-08-17T21:03:41Z</updated>
		<id>https://blog.izs.me/2008/08/a-conversation-about-redux-getting-their-users/</id>
		<content type="html">&lt;p&gt;When I was at GoogleIO, I received an email from Brent Griffith, one of the guys on the team behind &lt;a href=&quot;http://redux.com/&quot;&gt;Redux.com&lt;/a&gt;.  Redux was &lt;a href=&quot;http://news.ycombinator.com/item?id=278501&quot;&gt;mentioned recently on Hacker News&lt;/a&gt;, and rather than rewrite much of this commentary, I figured it would be more interesting to just post the conversation here.&lt;/p&gt;
&lt;p&gt;Slightly edited to remove non-public and irrelevant bits. All substantive content is left completely unchanged.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;Savvy readers will note that I basically just took something &lt;a href=&quot;http://www.jwz.org/&quot;&gt;jwz&lt;/a&gt; said 3 years prior, and applied it to this situation.  Shoulders, giants, etc.&lt;/small&gt;&lt;/p&gt;
&lt;h3&gt;Subject: Hi Isaac&lt;/h3&gt;
&lt;h4&gt;9 messages&lt;/h4&gt;
&lt;hr /&gt;&lt;h4&gt;Brent Griffith
Wed, May 28, 2008 at 1:46 PM&lt;/h4&gt;
&lt;p class=&quot;greeting&quot;&gt;Hi Isaac,&lt;/p&gt;
&lt;p&gt;My name is Brent and I noticed from your site, foohack, that we both share an interest in technology. I am always looking to network with other passionate individuals in this industry. I&amp;rsquo;m an early employee at Redux, a startup in the discovery space. We just raised&amp;hellip; &lt;small&gt;[some specifics about their funding which might not be public, I&amp;rsquo;m not sure.]&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re a group of mostly engineers, and we&amp;rsquo;re always looking out for super-motivated, talented and outstanding developers to work with us.&lt;/p&gt;
&lt;p&gt;Please let me know if you&amp;rsquo;re up for chatting sometime about Redux.&lt;/p&gt;
&lt;p&gt;(if you would like to read more about Redux before we chat, you can go to &lt;a href=&quot;http://www.redux.com/about.html&quot;&gt;http://www.redux.com/about.html&lt;/a&gt;. I can also give you an account to our private beta)&lt;/p&gt;
&lt;p&gt;&lt;small&gt;[contact info removed]&lt;/small&gt;&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;Best,
Brent&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;&lt;small&gt;[Times and when to talk. Brent sends me a link to the beta.  We fail at IM.]&lt;/small&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Isaac Schlueter
Wed, May 28, 2008 at 6:06 PM&lt;/h4&gt;
&lt;p&gt;&lt;small&gt;[Final &amp;ldquo;I&amp;rsquo;ll call you at this date/time&amp;rdquo;. Giving up on IM.]&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;FYI, not that this was necessarily your aim, I&amp;rsquo;m really not interested in leaving Yahoo any time in the near future.&lt;/p&gt;
&lt;p&gt;I signed up for the beta. Looks interesting. Speaking of GoogleIO, is open social on your radar? Seems like OpenID/OAuth/OpenSocial could add an awful lot to your application with minimal overhead on your part. My gut reaction when it asked for a profile and avatar was &amp;ldquo;Aw, jeez, another one?&amp;rdquo; Seems like it would be a better strategy for you guys to focus on just the parts of your app that are unique and interesting, and outsource the rest. Again, just a 10-second reaction, I&amp;rsquo;ll delve into it more later.&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;Cheers!
&amp;ndash;i&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Brent Griffith
Wed, May 28, 2008 at 6:54 PM&lt;/h4&gt;
&lt;p&gt;&lt;small&gt;[Availability confirmation.  Acknowledgement of total IM fail.]&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Yes, very perceptive. For sure, we are definitely watching Open Social and especially Facebook&amp;rsquo;s &amp;ldquo;opening moves&amp;rdquo; (lol). I agree with you about the focus statement. We are actually in a debate currently about whether/how to simplify and &amp;ldquo;go back to basics.&amp;rdquo; I hope we do.&lt;/p&gt;
&lt;p&gt;I look forward to our talk,&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;Cheers,
-Brent&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Isaac Schlueter
Thu, May 29, 2008 at 11:27 AM&lt;/h4&gt;
&lt;p&gt;Some other thoughts on Redux, no doubt influenced by thinking and talking intensely about the social web for a while, especially today and yesterday.&lt;/p&gt;
&lt;p&gt;Have you read this article?  &lt;a href=&quot;http://www.jwz.org/doc/groupware.html&quot;&gt;http://www.jwz.org/doc/groupware.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I stumbled across it a few years ago, and it provides an absolutely brilliant razer for developing software with any kind of social component. (Which, today, is almost all software, period.)&lt;/p&gt;
&lt;p&gt;It seems like there&amp;rsquo;s something oddly promising in Redux, but the value that it adds doesn&amp;rsquo;t seem like it&amp;rsquo;s exposed very well, or like it&amp;rsquo;s somehow unfocused. It almost seems at first like it&amp;rsquo;s trying to be YouTube or iLike or Facebook&amp;hellip; but the vitality and social-ness isn&amp;rsquo;t done as well as Facebook, and the ratings and recommendations interaction isn&amp;rsquo;t on par with iLike, and the videos are all available on YouTube anyhow&amp;hellip; It feels like I&amp;rsquo;m missing something. I suspect that if I&amp;rsquo;m missing it, then the average 20-something in his dorm room will miss it too, and instead of telling you, he&amp;rsquo;ll just go back to using Facebook, because that&amp;rsquo;s how he meets girls, and that&amp;rsquo;s all he cares about. (I&amp;rsquo;m guessing from the &amp;ldquo;chick&amp;rdquo; and &amp;ldquo;dude&amp;rdquo;, he&amp;rsquo;s who you&amp;rsquo;re going after?)&lt;/p&gt;
&lt;p&gt;The design is certainly nicer looking than any of those sites (by a wide margin!) but I suspect that most people don&amp;rsquo;t much care about that. They&amp;rsquo;ve used plain text email and SMS forever, and MySpace is still extremely popular, despite looking like absolute hell. As an artist who cares about nice-looking and well-structured web pages (kudos on the clean semantic markup, btw), that matters a lot to me. But I&amp;rsquo;m in a very tiny minority. That 20-something is using MySpace for one reason, which is the only thing that he cares about. (Actually, these days, it&amp;rsquo;s a 30-something using MySpace, but let&amp;rsquo;s face it, that guy didn&amp;rsquo;t change much in 10 years.)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re going to be a value-added aggregator that looks nice, why not actually be an aggregator, and aggregate really well? Use OAuth to link up with my Facebook or Twitter profile, and get my status/vitality events from there. Let me similarly link up with my Flickr account, and get a photo stream. If I have a friend on Facebook or Twitter or Myspace or, eventually, any OpenSocial container site, then show me their updates on Redux, so you &amp;ldquo;redux&amp;rdquo; the social graph as well as the content. (I think that Google FriendFinder might be useful or at least instructive, but I&amp;rsquo;m not terribly familiar with what they&amp;rsquo;ve done.) Try to pull their ratings and reviews from Yelp or CitySearch or Yahoo Local. And so on.&lt;/p&gt;
&lt;p&gt;My suggestion would be to try to do as little as possible&amp;ndash;and more importantly, ask your &lt;em&gt;users&lt;/em&gt; to do as little as possible outside of their ordinary routine&amp;ndash;in order to bring all these aspects of personal brand to one slick interface. Redux could be essentially a nice set of CSS styling around a collection of curl calls to various web services that &lt;em&gt;other&lt;/em&gt; people (with deeper pockets) build and maintain for you, combined with an incredibly easy interface for users to add content to their personal list. So incredibly easy, in fact, that it&amp;rsquo;s painful by comparison to go post a video on Facebook. That&amp;rsquo;s a tall order, but I&amp;rsquo;m sure there are creative ways to do it. (Perhaps by tying into Facebook with an app that posts your Redux stuff to Facebook and vice-versa.)&lt;/p&gt;
&lt;p&gt;But, of course, if you&amp;rsquo;re &lt;em&gt;just&lt;/em&gt; an aggregator, then that&amp;rsquo;s boring. It only gets exciting when you start showing me other people&amp;ndash;especially strangers (or even better, FOAFs) of similar age and opposite sex&amp;ndash;who like the same things. Then the value proposition is, &amp;ldquo;Do whatever you want anywhere, but come here to find people who are into the same things.&amp;rdquo; It seems like that&amp;rsquo;s closer to the core value proposition of Redux, surfacing people based on interests, but it&amp;rsquo;s hidden under a lot of copycat baloney.&lt;/p&gt;
&lt;p&gt;That will help your users get laid, because:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;it will help them traverse the search space more efficiently,&lt;/li&gt;
&lt;li&gt;it will help them create an advertisement to attract attention, and&lt;/li&gt;
&lt;li&gt;it will provide them with a selection of ice-breakers for potential partners.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;By the way, being able to view a person&amp;rsquo;s profile, and click the name of a thing, and then add it to my profile&amp;hellip; deviously brilliant. &lt;q&gt;You like XYZ? Oh my god, I do too!&lt;/q&gt; or on the flip side, &lt;q&gt;He seems nice, but on his profile, he just has everything I do, even misspelled the same way. How pathetic.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;If it sounds crude to reduce product decisions to &amp;ldquo;get my users laid,&amp;rdquo; I think it&amp;rsquo;s worthwhile to remember that this is just a stand-in for ALL social interaction. It just so happens that attracting a mate is about the most challenging and high-priority sort of human interaction, so if you can manage to help people out with that, you&amp;rsquo;ll also help them connect with their friends and family and coworkers. That&amp;rsquo;s why Facebook and MySpace are more far popular than any dating site; it&amp;rsquo;s like comparing meeting someone at work or school with meeting them at a singles bar.&lt;/p&gt;
&lt;p&gt;I guess what I&amp;rsquo;m saying is that I hope you decide to go back to basics as well, largely because I think Redux seems to have the potential to be extremely cool, and I&amp;rsquo;d like to use it. As a young small company, you have the advantage of being able to identify the key area of differentiation, focus on it, and out-iterate the big guys. Pick the wrong area, and you lose. Pick the right area, and they can&amp;rsquo;t hope to keep up with their army of feature-happy and eyeball-greedy product managers. The open source community in the social web space is coming to the point where you don&amp;rsquo;t need to re-invent the other bits. Along with product managers, the big guys have armies of developers to do all the mundane stuff, and can run in many more directions at once than you can.&lt;/p&gt;
&lt;p&gt;&amp;lt;/$0.02&amp;gt;&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;Cheers!
&amp;ndash;i&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Brent Griffith
Thu, May 29, 2008 at 4:25 PM&lt;/h4&gt;
&lt;p class=&quot;greeting&quot;&gt;Isaac,&lt;/p&gt;
&lt;p&gt;Wow, just wow. Amazing, yours is probably the most thoughtful feedback we have received from any of our beta users. I really appreciate you taking your time to do that.&lt;/p&gt;
&lt;p&gt;Great article. Thanks for sharing. I had never read that before, but it gets right at the heart of it. I particularly like that part, &lt;q&gt;The trick you want to accomplish is that when one person is using your software, it suddenly provides value to that person and their entire circle of friends, without the friends having had to do anything at all. Then, later, you pull the friends into the fold: if one of them starts using the software, they become their own hub, and get the benefit they have already witnessed from a distance.&lt;/q&gt; I believe that should be our goal and I think that with the new iteration of the site we are moving towards it.&lt;/p&gt;
&lt;p&gt;I agree about your discussion on focus. I think that this is what we will accomplish by stripping down the site from the bloated legacy code that Redux is in its current state. We built the current version of Redux on top of our previous iteration and this was probably a mistake, thus why we have decided to simplify and refocus and build on top of that. We are also planning on aggregating like you said, linking up with Facebook and other networks. We&amp;rsquo;re very excited about the refocus and where our site is headed.&lt;/p&gt;
&lt;p&gt;Once again, thank you immensely for your insightful and thoughtful feedback. I have distributed it throughout the organization for people to think about.&lt;/p&gt;
&lt;p&gt;I look forward to our conversation tomorrow.&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;-Brent Griffith&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;The phone conversation was interesting, but since it wasn&amp;rsquo;t recorded digitally like the email thread, I forgot most of it.  I remember being entertained by it, which is all I&amp;rsquo;d been looking for.  Hopefully it was worth Brent&amp;rsquo;s time.&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Isaac Schlueter
Sun, Aug 17, 2008 at 1:27 PM&lt;/h4&gt;
&lt;p class=&quot;greeting&quot;&gt;Brent,&lt;/p&gt;
&lt;p&gt;Now that Redux is getting a bit more attention, I&amp;rsquo;m considering working this into an article on Foohack. (With all contact info stripped out, of course.) Any objections?&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;&amp;ndash;i&lt;/p&gt;
&lt;hr /&gt;&lt;h4&gt;Brent Griffith
Mon, Aug 18, 2008 at 10:39 AM&lt;/h4&gt;
&lt;p class=&quot;greeting&quot;&gt;Isaac,&lt;/p&gt;
&lt;p&gt;Good to hear from you. Absolutely, go for it, no objections here. If you have any questions that you&amp;rsquo;d like answered, shoot them my way.&lt;/p&gt;
&lt;p class=&quot;signoff&quot;&gt;-Brent&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why I&#39;m Not Working on My Startup (Yet)</title>
		<link href="https://blog.izs.me/2008/08/why-im-not-working-on-my-startup-yet/"/>
		<updated>2008-08-04T17:00:11Z</updated>
		<id>https://blog.izs.me/2008/08/why-im-not-working-on-my-startup-yet/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;m not sure if it&amp;rsquo;s nature or nurture, but either way, the savvy gambler will bet that I&amp;rsquo;m going to run my own company at some point.  I grew up in an entrepreneurial house.  I share a Y-chromosome with a guy who built up a company and made it work with the (un)usual combination of moxie and dedication and wit that makes any business work.  And, he did so with two small children.  No small feat.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve always planned on starting my own company.  I&amp;rsquo;ve been a fan of &lt;a href=&quot;http://www.paulgraham.com/articles.html&quot;&gt;Paul Graham&amp;rsquo;s writing&lt;/a&gt; ever since I discovered it.  I live in Silicon Valley, and the startup vibe is in the air.  I work as a web developer, and I&amp;rsquo;m good at what I do.  I am very interested in the business of software, and have a lot of ideas about how things could be done in new and better ways.  It&amp;rsquo;s not so much &amp;ldquo;if&amp;rdquo;, but &amp;ldquo;how&amp;rdquo; and &amp;ldquo;when&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked at Yahoo for 2.5 years now, already about 6 months longer than I&amp;rsquo;d initially expected to.  Compared with working at a small company, it has many advantages.  I&amp;rsquo;ve had the opportunity to be a part of several different projects, and Yahoo can afford to pay quite a bit more than my former employer ever could.  I&amp;rsquo;ve been able to talk to and work with some of the most gifted hackers I could ever hope for.  When I got the job, it was really a dream come true, and I&amp;rsquo;m still proud to be one of the cogs in this engine.  It&amp;rsquo;s been even more satisfying than I&amp;rsquo;d thought it would be.&lt;/p&gt;
&lt;p&gt;But there are drawbacks as well.  In a company of Yahoo&amp;rsquo;s size, bureaucracy creeps in.  Decisions are sometimes made very far from the code, and even further from the users.  Despite Jerry&amp;rsquo;s and Ari&amp;rsquo;s best intentions&amp;mdash;and sternest directives&amp;mdash;when they talk about Open Initiatives, the &amp;ldquo;not invented here&amp;rdquo; syndrome can cause big problems.  I don&amp;rsquo;t think I coined the term, but I&amp;rsquo;ve taken to referring to the malaise as the &amp;ldquo;purple cloud&amp;rdquo;, a stifling and noxious gas that obscures reason and reduces visibility.  No doubt about it: that part of the job sucks.&lt;/p&gt;
&lt;p&gt;On an almost daily basis, I&amp;rsquo;m tempted to quit and strike out on my own.  Yahoo is an unusually good employer.  But despite the perks, as long as I work at Yahoo, I don&amp;rsquo;t work for Isaac.  I might love the company, love what we&amp;rsquo;re doing, love the opportunities it affords, but there is a definite lack of control and lack of ownership that leaves me unsatisfied sometimes.  Being a manager wouldn&amp;rsquo;t solve the problem; it would make it much much worse.  At least as a hacker, I fully own the code I write.  If I can&amp;rsquo;t be on the top, I&amp;rsquo;d rather be as close to the code as possible.  (Best would be both at once, of course.)&lt;/p&gt;
&lt;h3&gt;So Why Not Leave?&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve been reading a lot of articles recently with titles like &lt;q&gt;Why you should quit your job and start a company&lt;/q&gt; and &lt;q&gt;Why you should keep your day job and work on your startup at night&lt;/q&gt;.  I know my hacking rhythm pretty well by this point.&lt;/p&gt;
&lt;p&gt;What I&amp;rsquo;ve gathered from these resources and my own introspection is:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;It&amp;rsquo;s incredibly hard to focus on a startup and also have a separate full-time job.&lt;/li&gt;
    &lt;li&gt;It&amp;rsquo;s even harder to focus on a startup and not pay rent or eat.&lt;/li&gt;
    &lt;li&gt;If I spend less than 50 hours a week working, I&amp;rsquo;ll go crazy.&lt;/li&gt;
    &lt;li&gt;If I spend more than 30 hours a week working on something I don&amp;rsquo;t love, I&amp;rsquo;ll go crazy.&lt;/li&gt;
    &lt;li&gt;If I&amp;rsquo;m working on something I love, and I&amp;rsquo;m not working on it all the time, I&amp;rsquo;ll go crazy.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Going crazy is not an option.  This isn&amp;rsquo;t the fun crazy with mania and interesting delusions; more like the super-depressed, hate-my-life, stop-communicating-with-other-humans kind of crazy.  I&amp;rsquo;ve been there before.  Life&amp;rsquo;s too short for that.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;8+2&amp;rdquo; workday wouldn&amp;rsquo;t work for me.  I&amp;rsquo;ve tried it.  I hated it, with a burning passion.  I&amp;rsquo;ve always had side projects, but they remain on the side (like this blog.)  I go through phases of being very interested and working hard on them, and completely ignore them at other times.  If I had to focus on them enough to turn them into something that users would pay money for, it would have to turn into a full-time gig.  My ventures into paying side-projects were tremendous failures for that reason.&lt;/p&gt;
&lt;p&gt;Even more importantly, I can&amp;rsquo;t work just 8 hours a day.  Either you ride the biorhythm, with its highs and lows, and capitalize on every bit of go-time that your brain gives you, or you crank out boring hours for your handful of dimes.  &amp;ldquo;Healthy work-life balance&amp;rdquo; is for bank tellers.  An artist doesn&amp;rsquo;t stop being an artist when he goes home.&lt;/p&gt;
&lt;p&gt;I love what I do at Yahoo, and I care enough about what we create that I want to focus all my energy on creating value for users.  It&amp;rsquo;s good practice.  But as long as I work at this job, I won&amp;rsquo;t have enough left over at the end of the day to seriously invest in anything else.  Some people can find a middle ground there; I&amp;rsquo;ve learned that I can&amp;rsquo;t, and I&amp;rsquo;m ok with that.&lt;/p&gt;
&lt;p&gt;I also really hate worrying about bills.  One joy of working for Yahoo is that I get paid enough that I don&amp;rsquo;t know exactly how much a cup of coffee costs.  In poorer times in my life, I was acutely aware of every nickel increase in the cost of a pack of cigarettes.  That sucks.  Living economically is just good sense; deciding whether your last $10 should be spent on gas or dinner seriously gets in the way of enjoying life.&lt;/p&gt;
&lt;h3&gt;Having My Cake&amp;hellip;&lt;/h3&gt;
&lt;p&gt;Here&amp;rsquo;s my plan: keep working at Yahoo for the next 2-3 years or so.  Pare down my expenses as much as possible during that time, and sock away as much money as I can.  When I have enough saved to live for at least a year without a job, I&amp;rsquo;ll quit my job and work on whatever idea seems the most promising at that time.&lt;/p&gt;
&lt;p&gt;You see, the idea is the cheapest part.  Ideas are so plentiful once you learn how to cultivate them, they may as well be falling from the sky.  And my ideas have tended to be at least good enough, even if they&amp;rsquo;re not exactly earth-shattering.  In the last year, I&amp;rsquo;ve seen two startups execute on ideas I&amp;rsquo;d had, and they seem to be having some success, which I find extremely comforting.  I&amp;rsquo;m not trying to claim that I could have had the same success, but clearly, &amp;ldquo;finding an idea&amp;rdquo; isn&amp;rsquo;t a limiting factor.&lt;/p&gt;
&lt;p&gt;So, assuming that my idea will be there when I&amp;rsquo;m ready to work on it, I&amp;rsquo;m saving up to buy myself a year off to work on it, whatever it ends up being.  I&amp;rsquo;ve considered getting a part-time job when the date rolls around, just to bring in enough of a baseline income to pay a few bills without sapping my creativity too much.  In a way, it&amp;rsquo;s a bit like creating an angel investor, one who believes in me 100% and is 100% committed to my success like no one else ever could be.&lt;/p&gt;
&lt;p&gt;I realize that this plan is a bit risky.  The risk is laziness.  A dream without execution has a funny way of staying a dream forever.  But I&amp;rsquo;ve made plans like this in the past, and have managed to be ready when the time came to act.  That&amp;rsquo;s how I got to California, after all.&lt;/p&gt;
&lt;p&gt;The real challenge is that I&amp;rsquo;m really not sure exactly what a year costs.  I can sit down and crunch numbers, but everything seems way off.  I don&amp;rsquo;t have nearly enough hard data about my lifestyle, and even less about what it &lt;em&gt;could&lt;/em&gt; be.  Depending on how I spin my estimates, the range ends up being about ±50% or so, which is useless.&lt;/p&gt;
&lt;p&gt;I know that I can live cheaper than I am, but I&amp;rsquo;m not sure which things ought to be cut, and which things are worth the cost.  Maybe coffee is worth $1.46, but not $1.55, when balanced against the PITA of brewing it myself and the joy I get from drinking it, multiplied by the number of cups of coffee I buy.  I&amp;rsquo;m not sure.  I do know that, while nicotine is a pleasure I deeply enjoy, there&amp;rsquo;s really no way to justify the physical and financial cost, and withdrawal will be a serious distraction.  So, I&amp;rsquo;ve been wearing a patch&amp;mdash;and breathing easier&amp;mdash;since June 1, 2008.&lt;/p&gt;
&lt;p&gt;A wise man once said, &lt;q&gt;Never optimize before you profile.&lt;/q&gt;  &lt;small&gt;Then he said it again and again, because no one seems to listen.&lt;/small&gt;  When it comes to optimization, our intuitions and guesswork are almost always wrong, and only hard data can be trusted.  For the last few months, I&amp;rsquo;ve been tracking my expenses using &lt;a href=&quot;http://mint.com/&quot;&gt;mint.com&lt;/a&gt; and trying to just &amp;ldquo;act naturally&amp;rdquo;.  Over the next 6 months, I hope to collect enough information about my habits to make wise adjustments.&lt;/p&gt;
&lt;p&gt;The 6 months after that will be spent living-as-if, and trying to strike a workable balance.  Considering that I make more than double the national household average, and don&amp;rsquo;t have any kids, I should be able to save enough within 2 years to be able to coast for at least a year, if I just make a concerted effort to stop pissing away so much of it, even at SFBay prices.&lt;/p&gt;
&lt;h3&gt;Advice Welcome&lt;/h3&gt;
&lt;p&gt;This sort of plan flies in the face of the white-knuckle hardcore hacker work ethic that seems so prevalent in the startup culture of Silicon Valley.  In a way, this is just a rationalization for wimping out.  Why put it off until my 30s when I could take that leap of faith now?  The way I see it, if a bus is coming along later, why run?&lt;/p&gt;
&lt;p&gt;It strikes me as foolish and irresponsible to throw away the opportunity that Yahoo gives me just because I have a distaste for being an employee.  (The fact that I have a non-trivial pile of stocks vesting at the end of next year speaks to the wisdom of procrastination, as well.)&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t suspect that Foo Hack really draws in the financial planner crowd, but if anyone has any suggestions or experience that might help in the temporary-retirement project, I&amp;rsquo;d love to hear it.  Is this crazy?  Am I going about this all wrong?  Have you ever done anything like this?&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Routers and Ethics</title>
		<link href="https://blog.izs.me/2008/07/routers-and-ethics/"/>
		<updated>2008-07-25T17:35:46Z</updated>
		<id>https://blog.izs.me/2008/07/routers-and-ethics/</id>
		<content type="html">&lt;p&gt;I just moved into a new apt, and my neighbor has a wireless router that is completely open (no MAC whitelist, not even WEP or WPA).  &lt;a href=&quot;http://192.168.1.1/&quot;&gt;192.168.1.1&lt;/a&gt; shows me the Netgear login screen, and the default Netgear password works.  Curious and a little concerned, I logged in and poked around.&lt;/p&gt;
&lt;p&gt;They have all the default settings, and the logs just show the same two computers connecting over and over again.  Clearly, they bought it, plugged it in, it worked, and so they stopped caring.&lt;/p&gt;
&lt;p&gt;We all know what the &lt;em&gt;un&lt;/em&gt;ethical course of action would be.  You could easily route every bank&amp;rsquo;s IP address to a phishing site.  Or, just install a packet sniffer on the router that will faithfully log any POST requests that they make, then look for anything looking like a password.  If they use the same password twice, try that password everywhere.  Once you have access to their email, game over.&lt;/p&gt;
&lt;p&gt;If you just wanted to be annoying, you could block access to all the most popular websites for the 15 minutes when they always seem to connect, so that it&amp;rsquo;ll start working seemingly randomly just about the time that they&amp;rsquo;re calling the cable or DSL company in a huff.  Or, expose their computer to the internet and just wait for various bits of malware to wriggle in.&lt;/p&gt;
&lt;p&gt;Those are all of course completely evil.  The real question is, do you protect them from their own ignorance?  Do you leave their wifi network completely open, or lock it down?  And, do you change the password?&lt;/p&gt;
&lt;p&gt;I decided to leave their network open.  If they want to share their internet connection with the world, far be it from me to tell them they can&amp;rsquo;t.  That&amp;rsquo;s a lovely thing to do for the universe.  And I don&amp;rsquo;t see a problem with using it once in a while until I get my own set up.&lt;/p&gt;
&lt;p&gt;I did change their password.  Clearly, that doesn&amp;rsquo;t matter to them.  I know better, they don&amp;rsquo;t, I&amp;rsquo;d want someone to do that kind of thing for me.  It&amp;rsquo;s a little presumptuous, but it also might keep them from being victimized by identity theft.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an interesting lesson here.  &lt;strong&gt;No one likes your control panel.  Most users will use the defaults, always.&lt;/strong&gt;  These kinds of things are nice when you really want fine-grained control, but completely annoying, complicated, and tedious for most users.  They just wanna check their email, play some scrabulous, download some porn, and go back to their normal non-technical lives.&lt;/p&gt;
&lt;p&gt;We can of course blame the victim.  &lt;q&gt;How could they be so stupid to have their router open to the world.  Don&amp;rsquo;t people think?!?&lt;/q&gt;  But it would be very hypocritical for me to say that, and I don&amp;rsquo;t think I&amp;rsquo;m unusual.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;I have never read the owner&amp;rsquo;s manual of a car I&amp;rsquo;ve driven.  &lt;/li&gt;
    &lt;li&gt;I have only a few times read the full drug information on any medications I&amp;rsquo;ve been prescribed, and then only because I was &lt;em&gt;really&lt;/em&gt; bored.&lt;/li&gt;
    &lt;li&gt;I plug it in.  I turn it on.  I only mess with it if it&amp;rsquo;s broken (or interesting.)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The difference is that, in any of these cases, the &lt;em&gt;default&lt;/em&gt; value is not likely to be harmful.  If you don&amp;rsquo;t change your oil at the right time, your car&amp;rsquo;s performance will suffer; but as long as you change it once in a while, it&amp;rsquo;ll keep moving.  If a doctor is prescribing a medication, it&amp;rsquo;s probably not going to kill you, and if there&amp;rsquo;s any serious risk, they&amp;rsquo;ll usually tell you what to watch out for.  Most electronic devices don&amp;rsquo;t have access to your bank accounts.&lt;/p&gt;
&lt;p&gt;As software and hardware engineers, if our &lt;em&gt;defaults&lt;/em&gt; put users in an unsafe situation, where their credit and savings are placed at risk, then we&amp;rsquo;ve failed them, and we&amp;rsquo;ve acted unethically.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Programming Puzzles and Our Mismatch Problem</title>
		<link href="https://blog.izs.me/2008/07/programming-puzzles-and-our-mismatch-problem/"/>
		<updated>2008-07-07T17:00:46Z</updated>
		<id>https://blog.izs.me/2008/07/programming-puzzles-and-our-mismatch-problem/</id>
		<content type="html">&lt;p&gt;In interviewing candidates for programming jobs, a common technique is to ask them to solve some programming puzzle.  Makes sense, right?  If the guy&amp;rsquo;s smart enough solve random silly questions, he&amp;rsquo;s probably good at programming, since that&amp;rsquo;s most of what programming is.&lt;/p&gt;
&lt;p&gt;As it turns out, this bit of common sense is common bullshit.  It&amp;rsquo;s just another &lt;a href=&quot;http://www.newyorker.com/online/video/conference/2008/gladwell&quot;&gt;mismatch problem&lt;/a&gt;, along with requiring elementary school teachers to have lots of formal education, cops to be big and strong, and law school applicants to have great grades in high school.  It doesn&amp;rsquo;t predict success &lt;strong&gt;even a little&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;A Tale of Two Coders&lt;/h3&gt;
&lt;p&gt;&lt;small&gt;Feel free to &lt;a href=&quot;https://blog.izs.me/2008/07/programming-puzzles-and-our-mismatch-problem/#p73_some_puzzles&quot;&gt;skip to the fun stuff&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Let me tell you about two programmers I&amp;rsquo;ve worked with.&lt;/p&gt;
&lt;p&gt;The first graduated from Stanford University in the top 10% of his class with a degree in Computer Science, and went on to get an Master of Science in the subject.  He knew about B+ trees and maps.  He could tell you what a &lt;a href=&quot;http://en.wikipedia.org/wiki/Directed_acyclic_graph&quot;&gt;directed acyclic graph&lt;/a&gt; was, and what it should be used for.  He built an MVC system from scratch to design business cards in a web browser, 2 years &lt;em&gt;before&lt;/em&gt; Ajax was &amp;ldquo;teh new hotness&amp;rdquo;.  He interviewed well, and had a host of companies to choose from.  He chose a job, and was one of the highest paid new hires in the history of the company.&lt;/p&gt;
&lt;p&gt;The second graduated from high school, and had absolutely no intentions of ever taking classes again if he could help it.  Not sure what to do with his life, he worked at a local electronics store (Circuit City, I believe) for a few years.  He&amp;rsquo;d messed around with computers plenty, programmed a bit, but nothing serious.  A friend of his worked at a software company, and managed to get him a job, despite his lack of experience and education, and despite the fact that he interviewed terribly.  He came in at the low end of the pay scale.&lt;/p&gt;
&lt;p&gt;Who was the better programmer?&lt;/p&gt;
&lt;p&gt;Since I tipped my hand by talking about the mismatch problem, you&amp;rsquo;re probably guessing that the second one was better.  You&amp;rsquo;d be right.  But I doubt you&amp;rsquo;d realize just HOW right you are.&lt;/p&gt;
&lt;p&gt;Despite the fact that I think he deserves any reputation his lack of skill earns him in life, it strikes me as being in poor taste to name him here.  Let&amp;rsquo;s call the first programmer &amp;ldquo;X&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Over a year after X left the company, one of the other guys found that he could reliably predict and fix crazy strange bugs by searching for the guy&amp;rsquo;s initials in the codebase.  (There was a fairly strict rule about commenting changes in existing code, which, thankfully, X followed.)  I&amp;rsquo;m talking real bone-headed stuff like:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;vb block&quot;&gt;If Len(&quot;.837&quot;) = 3 Then&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When is &amp;ldquo;.837&amp;rdquo; &lt;strong&gt;ever&lt;/strong&gt; 3 characters?!  To make matters worse, that &lt;code class=&quot;vb&quot;&gt;If&lt;/code&gt; block was wrapping about 250 lines of code, some of it &lt;em&gt;essential to our customers getting paid&lt;/em&gt;.  X was clearly operating in some kind of alternate universe.  Real &lt;a href=&quot;http://thedailywtf.com/&quot;&gt;DailyWTF&lt;/a&gt; type shit.  And, he was the kind of asshat who was nearly impossible to work with.  I mean, imagine any quality that a programmer needs to have, except for IQ, and he lacked it.  He was arrogant, rude, passive aggressive, and lazy.  He was a bully who would go out of his way to make people feel uncomfortable once he decided that he didn&amp;rsquo;t like them.  Every design discussion was an Argument from Intimidation&amp;mdash;either you agreed with his idea and stroked his ego, or you were an idiot, plain and simple.  He was good at (useless) puzzles, but his attention to detail in real work was beyond terrible.&lt;/p&gt;
&lt;p&gt;Within 2 years at the company, the second guy&amp;mdash;the uneducated, inexperienced, bad interviewer&amp;mdash;was one of the go-to architects who really grokked how everything was supposed to work.  He picked up Visual Basic fast enough to pass by most of the existing team, some of whom had been writing code since he was in high school.  He was responsible for designing and implementing a part of the software that was the primary killer feature.  He redesigned a huge chunk of the program that never quite worked right.  He was in databases, in the presentation layer, and in between.  By any estimation, a very significant portion of the product&amp;rsquo;s value was entirely his doing.&lt;/p&gt;
&lt;p&gt;After we&amp;rsquo;d both left that place, I referred him to Yahoo.  Despite not having very much experience in front-end web development, and again interviewing terribly, the hiring manager was wise enough to heed my very strong recommendation.  And good thing, because he very quickly became one of the most important members of the Yahoo Games team.  (And he occasionally reads this blog and comments on stuff.  Hi, Geoff.)&lt;/p&gt;
&lt;p&gt;So, at this point, you might be thinking, &lt;q&gt;Well, if the super educated brainiacs are bad programmers, and the lazy hobbyists are good programmers, then we just need to flip the test around, and use it in reverse.  Then we&amp;rsquo;ll find the Geoffs, and avoid the Xes.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;If only it was that easy.&lt;/p&gt;
&lt;p&gt;You see, there actually are quite a few very good programmers that are very good at silly puzzles and have degrees in Computer Science.  Almost every problem has some kind of mathematical component; a lot of the theories were discovered because they&amp;rsquo;re true and relevant.  Some of X&amp;rsquo;s abilities &lt;em&gt;are&lt;/em&gt; quite useful, so having both the will and the skill is best.  The hobbyists eventually find that they have to hit the books and learn theory at some point, or else they get passed by.&lt;/p&gt;
&lt;p&gt;But those skills aren&amp;rsquo;t nearly &lt;em&gt;as&lt;/em&gt; useful or predictive of programming ability as we might think.  Geoff has the attitude of a great hacker and a mind that is capable of learning quickly, which, as it turns out, is much more useful in the long run, and much harder to test for.  X had a big brain and a bad attitude.  &lt;strong&gt;Most of programming is not solving puzzles with algorithms.  Most of programming is communication, attention to detail, and a relentless desire to build something beautiful.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id=&quot;p73_some_puzzles&quot;&gt;Some Puzzles&lt;/h3&gt;
&lt;p&gt;Despite the fact that programming puzzles are almost 100% useless in the hiring process, they&amp;rsquo;re fun, and a good mental work-out to keep your thinking sharp.  They&amp;rsquo;re a good part of a practice regimen.  Here are a few that I&amp;rsquo;ve come across lately that were pretty interesting.  (Sadly, my beliefs about the foolishness of puzzles-as-hiring-tool are not shared by all of my managers, and I learned about two of these because they are used in our interview process.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll edit this post to include solutions later.  I didn&amp;rsquo;t make up any of these, but I did revise them somewhat.  The goal in each of them is to devise a program or algorithm that will find a solution in the least number of steps/iterations/whatever.&lt;/p&gt;
&lt;h4&gt;Square the Sum&lt;/h4&gt;
&lt;p&gt;For all 6-digit numbers from 100000 to 999999, find the numbers that, if you add the top three digits to the bottom three digits, and square the result, it will equal the original number.&lt;/p&gt;
&lt;p&gt;For example, for 123456, you&amp;rsquo;d add 123 and 456, which equals 579.  Then, square that sum, which yields 579 * 579 = 335241.  335241 ≠ 123456, so 123456 is not in the set.&lt;/p&gt;
&lt;h4&gt;Dropping Eggs&lt;/h4&gt;
&lt;p&gt;Let&amp;rsquo;s say that you have 2 eggs, and a building that is 100 floors tall.  You need to figure out how high up you have to drop the egg to have it break when it hits the pavement.  Assume that the egg either breaks completely or is completely undamaged.  That is, repeatedly dropping from the second floor will not make it more likely to break.  (Hypothetical eggs are very hard, but when they break, they really BREAK.)&lt;/p&gt;
&lt;p&gt;For example, if you drop the egg from floor #50 or below, it won&amp;rsquo;t break.  But if you drop it from floor #51 or above, it will break.&lt;/p&gt;
&lt;p&gt;What is the optimal approach to testing floors?  Assuming that you take that approach, and the egg breaks on the last floor you test, how many times did you have to drop it?&lt;/p&gt;
&lt;h5&gt;Part 2&lt;/h5&gt;
&lt;p&gt;As the number of floors &lt;em&gt;n&lt;/em&gt; increases to a very large number (millions, billions, whatever&amp;mdash;since it&amp;rsquo;s really not floors and eggs but a sorted database of records or something), how does your solution scale?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say that you have 3 eggs.  What&amp;rsquo;s the value now?&lt;/p&gt;
&lt;p&gt;As the number of eggs increases, how does the worst-case number of tests change?  If you had an unlimited supply of eggs, is there a better solution?&lt;/p&gt;
&lt;p&gt;&lt;small&gt;I heard this one at work, and it sounded kind of familiar, but I didn&amp;rsquo;t remember the solution right away.  I dug up my textbook from &amp;ldquo;CSC212: Data Structures and Algorithm Analysis&amp;rdquo;, and sure enough, it was one of the examples Dr. Sayed used to teach us big-O notation.&lt;/small&gt;&lt;/p&gt;
&lt;h4&gt;Non-Repeating Digits (&lt;a href=&quot;http://beust.com/weblog/archives/000491.html&quot;&gt;Cedric&amp;rsquo;s Challenge&lt;/a&gt;, slightly revised)&lt;/h4&gt;
&lt;p&gt;Find the count of all natural numbers below a certain number of digits that have no repeated digits.  For example, for length=2, the following numbers all satisfy: 10, 12, 21, 23, 32, 34; but these don&amp;rsquo;t: 11, 22, 33.  For length=3, 97 and 102 are valid, but 99, 100, and 101 are not.&lt;/p&gt;
&lt;p&gt;Additionally, find the two consecutive numbers that are furthest from one another, and the difference between them.  For example, in the length=3 case, the greatest difference between two consecutive numbers is 4, between 98 and 102.&lt;/p&gt;
&lt;p&gt;For example, in length=2, there are 90 matches.  (1-99, except for 11,22,33,44,55,66,77,88,99.)  The biggest jump between two consecutive numbers is 2, between 10 and 12.&lt;/p&gt;
&lt;h5&gt;Part 2&lt;/h5&gt;
&lt;p&gt;In addition to specifying the length in digits, also make the base variable.  For example, in the (base=3,length=3) set, the following numbers are valid: 10, 12, 20, 21, 102, 201.&lt;/p&gt;
&lt;p&gt;Compute the values for length=100,base=1000.  Speed matters.&lt;/p&gt;
&lt;h5&gt;Part 3 (&lt;a href=&quot;http://beust.com/weblog/archives/000491.html&quot;&gt;Cedric&amp;rsquo;s Challenge&lt;/a&gt; + arbitrary bases)&lt;/h5&gt;
&lt;p&gt;Print all the numbers in order before printing the count and difference. (Hint: if this doesn&amp;rsquo;t make it any more complicated, then you didn&amp;rsquo;t do parts 1 and 2 properly.)&lt;/p&gt;
&lt;p&gt;Since the base can be arbitrarily high, express numbers in bases greater than 10 as a comma-delimited tuple rather than using character digits, optionally with a trailing comma.  For example, the base-16 number normally written as &amp;ldquo;FA9&amp;rdquo; could be printed as either &amp;ldquo;15,10,9,&amp;rdquo; or &amp;ldquo;15,10,9&amp;rdquo;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Birthdays, 10,000 Hours, and the Myth of the Ding</title>
		<link href="https://blog.izs.me/2008/07/birthdays-10000-hours-and-the-myth-of-the-ding/"/>
		<updated>2008-07-01T17:00:41Z</updated>
		<id>https://blog.izs.me/2008/07/birthdays-10000-hours-and-the-myth-of-the-ding/</id>
		<content type="html">&lt;p&gt;My earliest &amp;ldquo;motion picture&amp;rdquo; memory is from the afternoon of my 3rd birthday.  The footage is shot in a fish-eye lens, and a bit blurry, either because of the age of the memory or because I was always a bit nearsighted.  &lt;small&gt;I guess hindsight isn&amp;rsquo;t always 20/20, eh?&lt;/small&gt;  It&amp;rsquo;s only a few seconds long, but there&amp;rsquo;s a bunch of embedded context attached.&lt;/p&gt;
&lt;p&gt;We were sitting at the kitchen table.  I was playing with a new toy I&amp;rsquo;d gotten, some kind of plastic action figure &lt;small&gt;(“dolls” are girl toys)&lt;/small&gt;, and some lady I didn&amp;rsquo;t know was talking to my dad.  I found myself woefully underwhelmed at the fact that not much seemed to have changed that day.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not sure what I was expecting to happen upon turning 3.  Wings?  X-ray vision?  A car?  Something to justify the big deal everyone was making, I guess.  I was happy to have gotten toys and to have been the center of attention for a while, but I remember a distinct feeling of disappointment that not much seemed to have &amp;ldquo;turned&amp;rdquo; when I &amp;ldquo;turned 3&amp;rdquo;.  I expected a &lt;a href=&quot;http://forums.worldofwarcraft.com/thread.html?topicId=102785281&quot;&gt;ding&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The lady stopped talking to my dad and looked at me, saying in that lilting talking-to-a-little-kid voice,  &amp;ldquo;And &lt;em&gt;how&lt;/em&gt; old are &lt;em&gt;you&lt;/em&gt; today, birthday &lt;em&gt;boy&lt;/em&gt;!?&amp;rdquo;  I liked being called birthday boy, because that was a Special Status, but even then, I hated that voice.  I remember always being glad that my mom and dad never used that voice when they talked to us, and as an adult, I&amp;rsquo;ve made a point to never talk to children in that voice.&lt;/p&gt;
&lt;p&gt;&lt;q&gt;Aha&lt;/q&gt;, I thought (though of course not in these words).  &lt;q&gt;An interested adult who will understand and explain this strangeness.&lt;/q&gt;  What I wanted to say, but didn&amp;rsquo;t have the vocabulary for, was something along the lines of &lt;q&gt;So, what&amp;rsquo;s this all about?  I&amp;rsquo;m supposed to be 3 now.  Everyone said I&amp;rsquo;d change, that I&amp;rsquo;d be a Big Boy now, and nothing changed at all.  Did I miss something, or is this &amp;ldquo;birthday&amp;rdquo; thing just a very silly custom that makes no real sense?  Can you please explain it to me?&lt;/q&gt;  What I actually did was hold up 3 fingers and say, &amp;ldquo;3.  I just &lt;em&gt;turned&lt;/em&gt; it.&amp;rdquo; and scrunched up my face like I did when something confused me and my mom would explain it to me.&lt;/p&gt;
&lt;p&gt;But this lady didn&amp;rsquo;t explain it.  She made some stupid human noises out of her stupid face hole about how great it was and that I&amp;rsquo;m such a Big Boy now, and went back to ignoring me.  She didn&amp;rsquo;t get it at all!  Either that, or she just didn&amp;rsquo;t care enough to explain it to me.  Frustrated, I resumed working out my existential dilemma alone with my plastic superhero, now faced with the additional oddness that apparently some adults are &lt;em&gt;not&lt;/em&gt; all-knowing benevolent gods like mom and dad.  That&amp;rsquo;s where the tape cuts out.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve met other 3 year olds since, and my hindsight tells me that I must have been a pretty weird kid.&lt;/p&gt;
&lt;h3&gt;Flash Forward 26 Years&lt;/h3&gt;
&lt;p&gt;Today &lt;small&gt;(July 1, 2008)&lt;/small&gt;, I turn 29 years old.  Usually, a month or two before a birthday, I start thinking of myself as the new number, and reflecting on where I am in my life and how the last year has gone.  In the last 26 years, I&amp;rsquo;ve gotten a bit more used to the fact that it&amp;rsquo;s pretty much just another day.  No wings, no super powers, same empty &amp;ldquo;turning&amp;rdquo;.  Granted, it&amp;rsquo;s a day that friends buy me things, and I get to do whatever I want without being hassled, but once you get to be about 20 or so, people tend to stop hassling you about your daily routines anyhow.&lt;/p&gt;
&lt;p&gt;In reality, you don&amp;rsquo;t do all your learning and growing and aging on one day each year; you do it bit by bit every minute you&amp;rsquo;re alive, and just reserve a day each year to celebrate the process.  If a little kid ever makes that scrunchy confused face at me about &amp;ldquo;turning&amp;rdquo; a particular age, I&amp;rsquo;m going to tell them this.  It would have saved me a lot of angst that day.&lt;/p&gt;
&lt;p&gt;This year, I&amp;rsquo;ve been busy enough with work and personal matters that I hadn&amp;rsquo;t really had much time to reflect on it.  Today, however, something about it hit me that seemed to coincide in an interesting way with some other recent events.&lt;/p&gt;
&lt;p&gt;A few weeks ago, a &lt;a href=&quot;http://www.newyorker.com/online/video/conference/2008/gladwell&quot;&gt;talk by Malcolm Gladwell&lt;/a&gt; floated into the &amp;ldquo;find cool stuff&amp;rdquo; network that I&amp;rsquo;ve built up (a combination of &lt;a href=&quot;http://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt;, &lt;a href=&quot;http://buzz.yahoo.com/&quot;&gt;Yahoo! Buzz&lt;/a&gt;, and several valued friends and associates, all fed through my &lt;a href=&quot;http://twitter.com/izs/with_friends&quot;&gt;twitter stream&lt;/a&gt;).  The talk was about hiring and the &amp;ldquo;mismatch problem&amp;rdquo;, and came around the same time that my manager was working on adding some people to our team at Yahoo.  In another synchronous aspect to this story, just prior to seeing this talk, a friend of mine had mentioned Malcolm Gladwell to me, and suggested that I take a look at his work.  Impressed by his talk, I found a free podcast of all the talks in the conference, &lt;a href=&quot;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=254501184&quot;&gt;Stories from the Near Future&lt;/a&gt;.  Definitely worth the download time.&lt;/p&gt;
&lt;h3&gt;10,000 Hours&lt;/h3&gt;
&lt;p&gt;I don&amp;rsquo;t remember if it was in the mismatch talk or in his discussion of genius, but he mentioned a point that I had heard tossed around before.  Apparently, in almost any discipline with a significant level of complexity, whether you&amp;rsquo;re talking about chess masters or black belts or neurosurgeons or tennis pros, it takes about 10,000 hours of practice to become an expert.  Doing your day job doesn&amp;rsquo;t count; those 10k hours only take into consideration diligent focused study, actively working to become better at what you do.&lt;/p&gt;
&lt;p&gt;This works out to around 10 years, if you spend an average of about 3 hours per day at it.  While our species does seem produce the occasional old style &amp;ldquo;lightning bolt&amp;rdquo; genius, to whom inspiration seems to come inexplicably from the ether, most &amp;ldquo;talent&amp;rdquo; is just work in disguise.  Tiger Woods makes golf look easy because he&amp;rsquo;s spent so much time training.  It&amp;rsquo;s not magic.  If you threw 10,000 hours at the task of becoming a better golfer, and you&amp;rsquo;re in reasonably good physical shape, you would probably play at his level.&lt;/p&gt;
&lt;p&gt;While 10,000 hours is a daunting figure, this is actually encouraging information.  Many people go to college, and some time after, pick a career, and more or less stick with it for the rest of their lives.  You may end up going in unexpected directions, but the basic skill set, the things that you would be practicing, people don&amp;rsquo;t tend to switch that.  It also means that, with little more than a willingness to practice, anyone can become great at almost anything.&lt;/p&gt;
&lt;p&gt;But you &lt;em&gt;do&lt;/em&gt; need a willingness to practice.  A lot.  For 10 years.  So it&amp;rsquo;d better be something your really love, or else you may as well quit now.&lt;/p&gt;
&lt;p&gt;Thankfully, it&amp;rsquo;s not like you&amp;rsquo;d have to suffer through 10 years of utter n00bish novicehood.  David Seah &lt;a href=&quot;http://davidseah.com/blog/building-a-niche-of-one/&quot;&gt;wrote a pretty good break down of rough levels&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;at 1 hour … you know some basics&lt;/li&gt;
    &lt;li&gt;at 10 hours … you have a pretty good grasp of the basics&lt;/li&gt;
    &lt;li&gt;at 100 hours … you are fairly expert&lt;/li&gt;
    &lt;li&gt;at 1000 hours … you are an experienced expert&lt;/li&gt;
    &lt;li&gt;at 10000 hours … you are a master&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;h3&gt;Practicing Programming&lt;/h3&gt;
&lt;p&gt;Recently, Jeff Atwood &lt;a href=&quot;http://www.codinghorror.com/blog/archives/001138.html&quot; title=&quot;Coding Horror - Code Katas&quot;&gt;wrote about &amp;ldquo;code katas&amp;rdquo;&lt;/a&gt; (reviving the old programming/martial arts analogy that programmers love, since it makes us seem way cooler and less beat-up-able).  Back in 2005, Steve Yegge &lt;a href=&quot;http://steve.yegge.googlepages.com/practicing-programming&quot; title=&quot;Stevie&#39;s Drunken Blog Rants - Practicing Programming&quot;&gt;wrote about &amp;ldquo;practicing programming&amp;rdquo;&lt;/a&gt;.  They&amp;rsquo;re two of my favorite bloggers, so I feel like I&amp;rsquo;m in pretty good company talking about this subject.  &lt;small&gt;Jeff Atwood is kind of like a &amp;ldquo;Steve Yegge for the masses&amp;rdquo;.  Same basic idea, but more frequent and much shorter, kind of like when a good movie gets repackaged into an equally good but lighter TV series.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Steve Yegge captured the difference between doing and practicing pretty eloquently:&lt;/p&gt;
&lt;blockquote&gt;Picture the average amateur guitarist: A teenager. Messy hair. Cheap guitar. Plays alone, or for baked friends in bedroom in parents&amp;rsquo; house. Knows a few riffs, a few licks. Can play almost every track on the first two Nirvana CDs. Puts on a good show for an hour, if you&amp;rsquo;re a forgiving listener.&lt;/blockquote&gt;
&lt;p&gt;The point that I think both of them make in their different ways is that, &lt;strong&gt;if you are a programmer, and you want to suck as little as possible, you&amp;rsquo;d better practice.&lt;/strong&gt;  Just doing your job is not enough, unless you want to waste away in anonymity maintaining someone else&amp;rsquo;s code base and doing one-off features whenever the business people make some new deal.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s the other hidden piece of the 10,000 hours message, I think.  It&amp;rsquo;s not enough to put in your 10 years and attain mastery and be done.  If you don&amp;rsquo;t keep practicing, skill will fade over time; the greater the mastery, the faster it fades.  I once saw an interview on television with Yo-Yo Ma, where he said, &lt;q&gt;If I don&amp;rsquo;t practice for 1 day, I notice.  If I don&amp;rsquo;t practice for 2 days, the musicians I perform with will notice.  If I don&amp;rsquo;t practice for 3 days, other musicians will notice.  If I don&amp;rsquo;t practice for 4 days, the whole world will notice.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Clearly Ma was either exaggerating for effect, or he had an absurdly high opinion of the common person&amp;rsquo;s appreciation of cello mastery&amp;mdash;he could probably take a few years off before my ears would detect any change.  But the point is valid.  &lt;strong&gt;Enlightenment is a myth.  Every day that you don&amp;rsquo;t get better, you get a little worse.&lt;/strong&gt;  As you get better at something, this fact increases in relevance, despite the common sense belief that some day, you&amp;rsquo;ll be &amp;ldquo;so good that you won&amp;rsquo;t have to practice any more&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;So, you&amp;rsquo;d better &lt;strong&gt;REALLY&lt;/strong&gt; love whatever field you pick, because you won&amp;rsquo;t ever be done training.  Even Einstein kept at it.&lt;/p&gt;
&lt;h3&gt;The Past 10 Years&lt;/h3&gt;
&lt;p&gt;When I started college, I was a cocky 18 year old who knew &lt;em&gt;almost&lt;/em&gt; everything there was to know about programming, and just needed to learn a little more so I could go out and do it.  I&amp;rsquo;d been making web pages for a few years already, and was a whiz with BASIC.  I added graphics to DrugWars on my Ti-82.  My physics teacher only allowed a 3x5 index card of notes for tests, a rule that I circumvented by writing programs on my calculator for all the relevant equations; I remember finishing one test in about 5 minutes, and getting 100% on it.  (She accused me of cheating, but let me by when I pointed out that I&amp;rsquo;d actually written the program I was using, so clearly knew the material well enough.)&lt;/p&gt;
&lt;p&gt;My first programming class only encouraged this hubris.  After Programming in C &lt;abbr title=&quot;1&quot;&gt;I&lt;/abbr&gt; and &lt;abbr title=&quot;2&quot;&gt;II&lt;/abbr&gt;, I could do everything there was to do in C as well as BASIC.  I was unstoppable.  I had structs and subroutines, I was running code on DOS and Unix and VAX.  Sadly, I was also a bit bored.  But computers were cool, and there was still a few things that I didn&amp;rsquo;t quite know how to do yet, so I didn&amp;rsquo;t change my major.  After the next few classes, I&amp;rsquo;d be able to crank out any program that exists, that much was obvious.&lt;/p&gt;
&lt;p&gt;Sophomore year was a humbling dose of reality.  We started in on Big O() notation, complex data structures, tree walking algorithms, recursion, strange non-procedural languages, and a bunch of other concepts that were brand new to me.  I&amp;rsquo;ll remember 19 as the year that I actually had to study in order to get good grades.  To use Stevie&amp;rsquo;s analogy, that&amp;rsquo;s the year I stopped banging out Nirvana songs and started learning to read music.&lt;/p&gt;
&lt;p&gt;Two or three years later, I remember reading Peter Norvig&amp;rsquo;s &lt;a href=&quot;http://norvig.com/21-days.html&quot;&gt;Teach Yourself Programming in 10 Years&lt;/a&gt;, which is still, in my opinion, the best &amp;ldquo;how to not suck at programming&amp;rdquo; guide that has ever been written.  A lot of it was over my head at the time, but I&amp;rsquo;ve come back to it every few years or so.  It&amp;rsquo;s brilliant.&lt;/p&gt;
&lt;h3&gt;No Ding&lt;/h3&gt;
&lt;p&gt;When I sat down to write about Gladwell and practicing and the 10,000 hours phenomenon, it occurred to me that I&amp;rsquo;d passed the 10,000 hour mark myself fairly recently.  Partly because it&amp;rsquo;s something I&amp;rsquo;m just interested in, and partly because I always want to be better, I&amp;rsquo;ve been practicing for about the last 10 years.&lt;/p&gt;
&lt;p&gt;Again, I heard no ding.  No wings.  No glowy effects to signify the XP bonus at the completion of the quest.  Nada.  Just more work, more practicing, more gradually finding one thing after another to investigate, more new nuggets that haven&amp;rsquo;t yet been cracked.&lt;/p&gt;
&lt;p&gt;My conclusion is that the ding is a myth, for expertise just as much as for birthdays.  10,000 hours is a very approximate measure of what it takes to be good enough at something that you have to look a little harder to keep being challenged, and you can do a few tricks that impress novices.  After 10 years, I still learn new things every day, I still get frustrated sometimes, I still routinely feel that sense of needing to catch up, still looking up to programmers much better than myself.&lt;/p&gt;
&lt;p&gt;Even Newton said that he felt like a boy on the shore amused by the next interesting pebble while the great ocean of wisdom lay at his back, and that if he saw any greater distance, it was only by standing on the shoulders of giants.  If there was ever a person arrogant enough to claim expertise, or more deserving of such a claim, Newton was it.&lt;/p&gt;
&lt;p&gt;There is no ding.  Just one day after another, in a gradual progression that hopefully leads in a beneficial direction.  So keep practicing.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Hacking the Google Favicon</title>
		<link href="https://blog.izs.me/2008/06/hacking-the-google-favicon/"/>
		<updated>2008-06-07T01:36:37Z</updated>
		<id>https://blog.izs.me/2008/06/hacking-the-google-favicon/</id>
		<content type="html">&lt;p&gt;There&amp;rsquo;s been a lot of nerd rage about the &lt;a href=&quot;http://google.com/favicon.ico&quot;&gt;new google favicon&lt;/a&gt;.  I joined in with &lt;a href=&quot;http://twitter.com/isaacschlueter/statuses/824260982&quot;&gt;a rationalization for my distaste&lt;/a&gt; for their new design.  After a few days of the lower-case &amp;ldquo;g&amp;rdquo; on a gray background, I decided today that I just couldn&amp;rsquo;t take it.  Here&amp;rsquo;s how I fixed it, so my Mac shows the old logo.&lt;/p&gt;
&lt;p&gt;Certainly, any company ought to think long and hard about any branding change so fundamental and wide-reaching as a change in logo.  If you&amp;rsquo;re a web company, then &lt;strong&gt;your favicon IS your logo, and everything else is secondary&lt;/strong&gt;.  For Google&amp;rsquo;s sake, I sure hope they understand just how significant this change was, and weighed the pros and cons carefully.&lt;/p&gt;
&lt;p&gt;While I recognize my position deep in peanut-gallery territory, I simply cannot accept that it was a good move.  A favicon needs to be:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Far from gray.&lt;/strong&gt;  Browser tabs are gray, and the purpose of a favicon is to let the faster right-brain processes identify your site in a list of tabs or bookmarks.  If I can&amp;rsquo;t see it, it&amp;rsquo;s useless.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Mostly not transparent.&lt;/strong&gt;  If you&amp;rsquo;re going to use a gray logo, fine. Put it on a white background, so you know it will stand out.  A small logo in a transparent background is invisible.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Evoke your corporate branding.&lt;/strong&gt;  I should be able to associate your favicon with your brand without thinking about it.  If, for example, your corporate branding is focused on lots of bright colors on a white background, your favicon should echo this.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Use big, simple shapes.&lt;/strong&gt;  Fine details (like those in the double-curl style of lower-case &amp;ldquo;g&amp;rdquo;) get lost at 16x16 size.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Yahoo and Google are effectively equivalent in terms of the objective quality of their search results.  Scores of user-studies have shown that our perception in SERP quality is due primarily to brand loyalty and nothing else.  If you&amp;rsquo;re a Yahoo searcher, and you see a red Y, your comfort filter tells you it&amp;rsquo;s good, no matter where the results actually came from.  You can&amp;rsquo;t tell the difference, because, for the most part, there isn&amp;rsquo;t one.  Most of the time, Yahoo and Google search pull up &lt;em&gt;exactly&lt;/em&gt; the same sites, or close to it.  They&amp;rsquo;re both very very good, and search is a case where there is a right answer, even if the method of finding it is a bit fuzzy.&lt;/p&gt;
&lt;p&gt;For some searches, it seems that Yahoo is even significantly better than Google.  &lt;a href=&quot;http://twingine.no/&quot;&gt;Compare for yourself.&lt;/a&gt;  Somewhat humorously, the results for &lt;a href=&quot;http://twingine.no/search.php?q=%22yahoo+is+better+than+google%22&quot;&gt;&amp;ldquo;yahoo is better than google&amp;rdquo;&lt;/a&gt; seems to yield much better results on Yahoo.  I tried &lt;a href=&quot;http://twingine.no/search.php?q=%22google+is+better+than+yahoo%22&quot;&gt;the reverse search&lt;/a&gt;, expecting to see some kind of amusing self-bias, but actually Yahoo did that better, too.  From my cursory non-scientific view, it seems like Yahoo puts a bit more weight on the title, and there are probably other slight differences.  But the point is, the differences are slight enough to be overlooked.  They&amp;rsquo;re both pretty damn good at finding what you ask for.&lt;/p&gt;
&lt;p&gt;I work at Yahoo.  But I use Google for search.  I perhaps ought to bleed a little more purple than I do.  I also own stock in Yahoo, so in a small way, using Google for search is not a financially rational move.  So why do I do it?&lt;/p&gt;
&lt;p&gt;Brand loyalty.  I was using Google ever since it&amp;rsquo;s been around, and I&amp;rsquo;ll probably keep using it for a long time.  I imprinted early on that big G in the white square, and some very low-level neural systems tell me loud and proud that, when it comes to searching, that G means Good.  Frankly, rewiring all that stuff isn&amp;rsquo;t worth the effort.&lt;/p&gt;
&lt;p&gt;I think that brand loyalty explains a lot of the nerd rage over the new favicon.  Yes, it doesn&amp;rsquo;t affect the results. Yes, it&amp;rsquo;s just a case of &lt;a href=&quot;http://en.wikipedia.org/wiki/Who_Moved_My_Cheese&quot;&gt;cheese moving&lt;/a&gt;, and not even a very relevant one.  And, face it, you&amp;rsquo;re not going to stop using Google over it if you&amp;rsquo;re already a Google user.  But you may be consistently annoyed for several months while the brain circuits rewire themselves to imprint on the new design.&lt;/p&gt;
&lt;p&gt;Unacceptable.  I&amp;rsquo;m a web geek.  I&amp;rsquo;m a hacker.  There is no way in hell that I should have to put up with something I find even slightly distasteful in my regular internet experience.  I refuse to be subjected to some marketing exec&amp;rsquo;s idea of what is best for me, when I clearly know my needs better.  &lt;small&gt;I don&amp;rsquo;t even care if he went to Stanford AND coded a rocket ship in Python.&lt;/small&gt;&lt;/p&gt;
&lt;h3 style=&quot;color:#900&quot;&gt;Warning&lt;/h3&gt;
&lt;p&gt;If you use any Google services that require a login (such as GMail, Groups, Orkut, or pretty much anything other than Search), then you&amp;rsquo;ll need Apache 2.  I tried really hard to make it work with Apache 1.3, but no dice.&lt;/p&gt;
&lt;p&gt;The good news is, Apache 2 comes standard with Leopard.  The bad news is, it &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; come standard with Tiger.&lt;/p&gt;
&lt;p&gt;Since I was using Tiger, and Apache 1.3, this was a much more involved hack than I&amp;rsquo;d anticipated going in.  Luckily, it&amp;rsquo;s just a matter of change one line in the &lt;code&gt;/etc/hosts&lt;/code&gt; file to turn it off, which is good, because I had other things to do before I could fix it.  I use &lt;a href=&quot;http://www.macports.org/&quot;&gt;MacPorts&lt;/a&gt; for a bunch of stuff, so I figured I&amp;rsquo;d just install Apache 2 that way.&lt;/p&gt;
&lt;p&gt;Easier said than done, at least in my case.&lt;/p&gt;
&lt;p&gt;I already had PHP and MySQL running a local copy of this site, and some other stuff.  MacPorts really shines if you use it for everything&amp;mdash;try to run Apache on MacPorts and run PHP and MySQL from some other location, and you&amp;rsquo;re in for a world of hurt.  It took a lot of SFTW and learning about reconfiguring to get it all working properly.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not the best guy in the world to critique package management systems, but I&amp;rsquo;ve got some end-user experience.  I use apt-get on my web server, MacPorts on my laptop, and of course, yinst on all the Yahoo! machines I work on.  Of course, that&amp;rsquo;s not counting the Registry and Add/Remove programs dialog from Windows Land (which is hell), and the much more user-friendly &amp;ldquo;Applications&amp;rdquo; folder on the Mac (which is lovely, but not really a full-featured package manager).  Of these, yinst is the best, hands down.  Powerful, simple, effective, and sadly, 100% closed-source and proprietary.  If you&amp;rsquo;re not at Yahoo, you&amp;rsquo;re not using yinst.&lt;/p&gt;
&lt;p&gt;But enough about installing stuff.  Long story short, you need Apache 2, or don&amp;rsquo;t go any further.  If you primarily use Firefox, you can just follow &lt;a href=&quot;http://paulirish.com/&quot;&gt;Paul&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://foohack.com/2008/06/hacking-the-google-favicon/#comment-672&quot;&gt;advice&lt;/a&gt;, and &lt;a href=&quot;http://userscripts.org/scripts/show/27548&quot;&gt;install this Greasemonkey script&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I still recommend doing this, especially if you write code for the web, and you&amp;rsquo;re not normally a &amp;ldquo;back end guy&amp;rdquo;.  It&amp;rsquo;s good to tinker with this stuff, and even break it once in a while in your own little sandbox.  Unless you tinker, you never learn anything new.  Newton did revolutionary work in optics, largely motivated by his need for a better telescope to look at the planets.  It&amp;rsquo;s good to have a working knowledge of the tools of your trade, even if they&amp;rsquo;re just a means to an end.&lt;/p&gt;
&lt;p&gt;So, fixing the G favicon&amp;hellip;&lt;/p&gt;
&lt;h3&gt;mod_proxy to the rescue!&lt;/h3&gt;
&lt;p&gt;The premise of this hack is pretty simple:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Edit the &lt;code&gt;/etc/hosts&lt;/code&gt; file to point &amp;ldquo;www.google.com&amp;rdquo; to your local machine.&lt;/li&gt;
    &lt;li&gt;Use &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/mod_proxy.html&quot;&gt;mod_proxy&lt;/a&gt; to transparently send all requests for &amp;ldquo;www.google.com&amp;rdquo; on to Google&amp;rsquo;s actual IP address, except for &lt;code&gt;/favicon.ico&lt;/code&gt;&lt;/li&gt;
    &lt;li&gt;Point &lt;code&gt;/favicon.ico&lt;/code&gt; at the old favicon file, sitting on your local machine.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The interesting thing is that you can do this for &lt;em&gt;any&lt;/em&gt; file or url out there that you want to swap in your local machine.  Don&amp;rsquo;t like the favicon that a given site uses?  Change it!  You have the power!  That&amp;rsquo;s the beauty of the web.&lt;/p&gt;
&lt;h3&gt;Prereqs&lt;/h3&gt;
&lt;p&gt;For this hack, you&amp;rsquo;ll need:&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;Apache 2 with mod_proxy, mod_ssl, and mod_rewrite&lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;If you have a Mac with Leopard and the developer tools stuff on it, you probably already have this, and might just need to enable them.  I&amp;rsquo;ll tell you how.&lt;/p&gt;
        &lt;p&gt;If you don&amp;rsquo;t already have Apache 2 and/or mod_proxy installed, then that&amp;rsquo;s outside the scope of this post, like I said above.  Sorry.&lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;About &lt;del&gt;15&lt;/del&gt; 30 minutes&lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;&lt;del&gt;Yes, it&amp;rsquo;s really that easy.&lt;/del&gt; It&amp;rsquo;s fairly easy, but a bit trickier than I&amp;rsquo;d originally thought.&lt;/p&gt;
    &lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;I use a Mac, and these instructions are fairly mac-centric.  If you use a Linux or Unix machine, then most of it will still make sense.  If you use a Windows machine, then a lot of it won&amp;rsquo;t apply, but the basic idea should still be possible if you use Apache and install mod_proxy.&lt;/p&gt;
&lt;p&gt;Some Apache setups install the Apache Control script as &lt;code class=&quot;bash&quot;&gt;apache2ctl&lt;/code&gt;, and others call it &lt;code class=&quot;bash&quot;&gt;apachectl&lt;/code&gt;.  Since I used MacPorts, I&amp;rsquo;ve got &lt;code class=&quot;bash&quot;&gt;apachectl&lt;/code&gt; on my machine.  Substitute as required for your setup.&lt;/p&gt;
&lt;p&gt;If you run into any sticky points you can&amp;rsquo;t get out of, post a comment.  I&amp;rsquo;d like to hear it.  If you run into any sticky points and DO get out of it, then &lt;em&gt;definitely&lt;/em&gt; post a comment!  I&amp;rsquo;ll update this post with your info.&lt;/p&gt;
&lt;h3&gt;Get the old favicon&lt;/h3&gt;
&lt;p&gt;I couldn&amp;rsquo;t find the actual ico file, but I found some screenshots on the internet talking about the favicon change.  I got a pretty good png, and lifted out just the 16x16 piece from the address bar in the screenshot.&lt;/p&gt;
&lt;p&gt;Then, I used &lt;a href=&quot;http://www.winterdrache.de/freeware/png2ico/&quot;&gt;png2ico&lt;/a&gt; to convert that png to an ico file.  It&amp;rsquo;s a great tool that I use all the time to make favicons.  It lets you embed multiple pngs into the ico, but in this case, all that I really care about is the 16x16 that shows up in my address bar and on the tabs in Firefox and Safari.&lt;/p&gt;
&lt;p&gt;All in all, that took probably less than 10 minutes.  But you can do this step even faster by just downloading the &lt;a href=&quot;http://foohack.com/blog/wp-content/uploads/2008/06/old-google-favicon.tgz&quot;&gt;Old Google Favicon&lt;/a&gt;.  Extract it in Terminal or iTerm by doing this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;bash block&quot;&gt;tar -xzvf old-google-favicon.tgz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;ll get a file called &lt;code&gt;old-google-favicon.ico&lt;/code&gt;.  Put that under the &amp;ldquo;Sites&amp;rdquo; folder in your home directory.  If you just un-tarred it using the command above, then it would be:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;bash block&quot;&gt;mv old-google-favicon.ico ~/Sites/&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Turn on Apache&lt;/h3&gt;
&lt;p&gt;If you already run web pages and whatnot on your local machine, then you are already set.  Skip to the next step.&lt;/p&gt;
&lt;p&gt;To see if Apache is running, fire up a web browser and go to &lt;a href=&quot;http://localhost/&quot;&gt;localhost&lt;/a&gt;.  If you see the default Apache startup screen, then you&amp;rsquo;re all set.  If it redirects to &lt;a href=&quot;http://localhost.com/&quot;&gt;localhost.com&lt;/a&gt; or a web search, or you get a &amp;ldquo;could not connect to server&amp;rdquo; message, then you need to enable Apache.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re running Leopard, open up System Preferences, and click on Sharing.  Click the little lock in the lower-left corner, and enter your password. Check &amp;ldquo;Personal Web Sharing&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Try hitting &lt;a href=&quot;http://localhost/&quot;&gt;localhost&lt;/a&gt; again.  If it still doesn&amp;rsquo;t work, then do this in a terminal:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apachectl graceful&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If that doesn&amp;rsquo;t work, try:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apache2ctl graceful&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s still not working, sorry, don&amp;rsquo;t know what to tell ya.  Good luck.&lt;/p&gt;
&lt;h4&gt;Test&lt;/h4&gt;
&lt;p&gt;At this point, you should be able to see the desired favicon at &lt;code class=&quot;url&quot;&gt;http://localhost/~&lt;strong&gt;YOUR_USER_NAME&lt;/strong&gt;/old-google-favicon.ico&lt;/code&gt;, where YOUR_USER_NAME is the username that you log in with.  (If you&amp;rsquo;re not sure what that is, open up a terminal, and type &lt;code class=&quot;bash&quot;&gt;whoami&lt;/code&gt;, and it&amp;rsquo;ll tell you.)&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve configured Apache to have some different document root, then adjust the path accordingly.  For example, since my Mac is effectively a single-user machine, I just have the default document root pointed at &lt;code&gt;/Users/isaacs/Sites/&lt;/code&gt;, so the favicon is at &lt;code class=&quot;url&quot;&gt;http://localhost/old-google-favicon.ico&lt;/code&gt;.  Your setup may vary.&lt;/p&gt;
&lt;p&gt;Ultimately, it doesn&amp;rsquo;t much matter where you put it, since we&amp;rsquo;ll be telling Apache exactly where to find it later.&lt;/p&gt;
&lt;h3&gt;Enable Apache Modules&lt;/h3&gt;
&lt;p&gt;Fire up your favorite text editor, and open your &lt;code&gt;httpd.conf&lt;/code&gt;.  By default, this file is in &lt;code&gt;/etc/httpd/&lt;/code&gt; or &lt;code&gt;/etc/apache2/&lt;/code&gt;; if you installed with MacPorts, then it&amp;rsquo;s in &lt;code&gt;/opt/local/etc/apache2/&lt;/code&gt;.  (You&amp;rsquo;ll have to save it as the super-user, since it&amp;rsquo;s a root-owned file, so that means vi and emacs users will have to open it with &lt;code&gt;sudo&lt;/code&gt;.  GUI editors will usually prompt for your password when you try to save the file.)&lt;/p&gt;
&lt;p&gt;Each of these lines have to be in there somewhere.  If they&amp;rsquo;re missing, add them.  If they&amp;rsquo;re commented-out, un-comment them.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block apache&quot;&gt;LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule rewrite_module modules/mod_rewrite.so&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you notice that these rules look &amp;ldquo;out of place&amp;rdquo; for the stuff that&amp;rsquo;s already there, then modify to match.  For example, if the other rules are all loading the .so files out of &amp;ldquo;libexec&amp;rdquo;, then change &amp;ldquo;modules&amp;rdquo; to &amp;ldquo;libexec&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Restart apache by running this command in a terminal:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apachectl graceful&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If it tells you that the server couldn&amp;rsquo;t be restarted, try this to get a more helpful error message:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apachectl configtest&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If it&amp;rsquo;s not working, sorry, don&amp;rsquo;t know what to tell ya.  You may need to install some of the required modules using the apxs utility.&lt;/p&gt;
&lt;h3&gt;SSL&lt;/h3&gt;
&lt;p&gt;Because we&amp;rsquo;ll be proxying an SSL (ie, https://&amp;hellip;) connection, your server will have to be able to do SSL so that it can maintain the level of encryption.&lt;/p&gt;
&lt;p&gt;I followed &lt;a target=&quot;_new&quot; href=&quot;http://developer.apple.com/internet/serverside/modssl.html&quot; title=&quot;Using mod_ssl on Mac OS X&quot; rev=&quot;vote-for&quot;&gt;these instructions&lt;/a&gt; to create SSL keys.  It directs you towards a &lt;code&gt;sign.sh&lt;/code&gt; script, and finding that was a bit tricky.  For your convenience, I&amp;rsquo;ve &lt;a href=&quot;http://foohack.com/blog/wp-content/uploads/2008/06/sign.sh&quot;&gt;provided it here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also, I put the &lt;code&gt;ssl.key&lt;/code&gt; folder in the same folder as the other Apache stuff, the location of the &lt;code class=&quot;apache&quot;&gt;ServerRoot&lt;/code&gt; directive.  That way, I can refer to it by a relative path.  If you prefer to have it in a separate location, that&amp;rsquo;s fine, but you&amp;rsquo;ll need to refer to it by the complete path in the configs below.&lt;/p&gt;
&lt;h3&gt;Get Google&amp;rsquo;s IP Addresses&lt;/h3&gt;
&lt;p&gt;In a terminal, run this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;bash block&quot;&gt;nslookup &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You&amp;rsquo;re looking for the &amp;ldquo;Address&amp;rdquo; lines, not the &amp;ldquo;Server&amp;rdquo; line.  In &lt;a href=&quot;http://foohack.com/tests/bash_extras&quot;&gt;my bash profile&lt;/a&gt;, I have a handy shortcut for this, so I just type &lt;code class=&quot;bash&quot;&gt;getip &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;&lt;/code&gt; to see the results from both nslookup and ping.&lt;/p&gt;
&lt;p&gt;Make a note of those IP addresses.  As of this writing, from my location, I got these:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;66.249.89.104
66.249.89.147
66.249.89.99&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re actually going to define a load balancer to distribute your requests between these three.  While that&amp;rsquo;s probably overkill, part of the benefit of this is educational, and that&amp;rsquo;s what a proxy would normally do.&lt;/p&gt;
&lt;h3&gt;Host File&lt;/h3&gt;
&lt;p&gt;Open up your &lt;code&gt;/etc/hosts&lt;/code&gt; file in a text editor, and add this line:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block hosts&quot;&gt;127.0.0.1 &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Then, in a terminal, run this command to refresh your IP caches:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;lookupd -flushcache&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Bring up &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt; in a web browser, and you should be looking at that default Apache page again.  If so, you&amp;rsquo;re on track.  If not, figure out what went wrong.  You can see if Apache is in trouble by running this command and then hitting the url again:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;bash block&quot;&gt;tail -f /var/log/apache2/error_log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;MacPorts users: &lt;code class=&quot;bash&quot;&gt;tail -f /opt/local/apache2/logs/error_log&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You may need to comment that line out with a # and do the &lt;code class=&quot;bash&quot;&gt;lookupd -flushcache&lt;/code&gt; if you want to search google while doing this.  Or you could just use &lt;a href=&quot;http://ysearch.com/&quot;&gt;Yahoo! Search&lt;/a&gt; temporarily.  Maybe in the process, you&amp;rsquo;ll get used to Yahoo search and even find that you like it better.  (See?  I&amp;rsquo;m a good little purple-blooded corporate monkey!)&lt;/p&gt;
&lt;h3&gt;Set up mod_proxy&lt;/h3&gt;
&lt;p&gt;So, now let&amp;rsquo;s take your new and un-improved &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;, and turn it into a proxy for the actual &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have a separate conf file where you keep your Apache customizations (which I highly recommend), then add this stuff in there.  If you don&amp;rsquo;t, then you can just add it to &lt;code&gt;/etc/httpd/httpd.conf&lt;/code&gt; or &lt;code&gt;/etc/apache2/httpd.conf&lt;/code&gt; or &lt;code&gt;/opt/local/apache2/conf/httpd.conf&lt;/code&gt;.  Either way should work, as long as Apache finds out about it somehow.&lt;/p&gt;
&lt;p&gt;Stuff that you may need to change wrapped in &lt;strong&gt;strong tags&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block apache&quot;&gt;#google proxy stuff
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/run/ssl_scache
SSLMutex file:/var/run/ssl_mutex
SSLRandomSeed startup builtin
&amp;lt;VirtualHost &lt;em&gt;:80&amp;gt;
    # the place where you put the .ico file.
    DocumentRoot &lt;strong&gt;/Users/isaacs/Sites/&lt;/strong&gt;
    ProxyPreserveHost On
    ProxyRequests Off
    ServerName &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;
    &amp;lt;LocationMatch .&lt;/em&gt;&amp;gt;
        Order deny,allow
        Allow from 127.0.0.1
    &amp;lt;/LocationMatch&amp;gt;
    SSLProtocol all -SSLv2
    SSLSessionCacheTimeout 300
    AllowCONNECT 443 563 80
    SSLEngine on
    # enable SSLv3 but not SSLv2
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile &lt;strong&gt;ssl.key/server.crt&lt;/strong&gt;
    SSLCertificateKeyFile &lt;strong&gt;ssl.key/server.key&lt;/strong&gt;
    # correction for browsers that don&#39;t always handle SSL connections well
    # You don&#39;t really use MSIE on your own machine, though, do you??
    SetEnvIf User-Agent &quot;.&lt;em&gt;MSIE.&lt;/em&gt;&quot; &#92;
        nokeepalive ssl-unclean-shutdown &#92;
        downgrade-1.0 force-response-1.0
    SSLProxyEngine on
    &amp;lt;Proxy balancer://googlecluster&amp;gt;
        # the IP addresses you fetched before.
        BalancerMember http://&lt;strong&gt;66.249.89.104&lt;/strong&gt;
        BalancerMember http://&lt;strong&gt;66.249.89.147&lt;/strong&gt;
        BalancerMember http://&lt;strong&gt;66.249.89.99&lt;/strong&gt;
    &amp;lt;/Proxy&amp;gt;
    # Browsing History seemed broken unless it proxies back to https.
    # This is probably safer anyhow, for privacy.
    ProxyPass /history &lt;a href=&quot;https://www.google.com/history&quot;&gt;https://www.google.com/history&lt;/a&gt;
    ProxyPassReverse /history &lt;a href=&quot;https://www.google.com/history&quot;&gt;https://www.google.com/history&lt;/a&gt;
    RewriteEngine On
    RewriteRule /favicon.ico /old-google-favicon.ico [L]
    ProxyPass / balancer://googlecluster/
&amp;lt;/VirtualHost&amp;gt;
&amp;lt;VirtualHost &lt;em&gt;:443&amp;gt;
    # the place where you put the .ico file.
    DocumentRoot &lt;strong&gt;/Users/isaacs/Sites/&lt;/strong&gt;
    ProxyPreserveHost On
    ProxyRequests Off
    ServerName &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;
    &amp;lt;LocationMatch .&lt;/em&gt;&amp;gt;
        Order deny,allow
        Allow from 127.0.0.1
    &amp;lt;/LocationMatch&amp;gt;
    &amp;lt;Proxy balancer://googlecluster&amp;gt;
        # the IP addresses you fetched before.
        # note the &quot;http&lt;strong&gt;s&lt;/strong&gt;&quot; on these ones.
        BalancerMember https://&lt;strong&gt;66.249.89.104&lt;/strong&gt;
        BalancerMember https://&lt;strong&gt;66.249.89.147&lt;/strong&gt;
        BalancerMember https://&lt;strong&gt;66.249.89.99&lt;/strong&gt;
    &amp;lt;/Proxy&amp;gt;
    SSLProtocol all -SSLv2
    SSLSessionCacheTimeout 300
    AllowCONNECT 443 563 80
    SSLEngine on
    # enable SSLv3 but not SSLv2
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile &lt;strong&gt;ssl.key/server.crt&lt;/strong&gt;
    SSLCertificateKeyFile &lt;strong&gt;ssl.key/server.key&lt;/strong&gt;
    # correction for browsers that don&#39;t always handle SSL connections well
    # You don&#39;t really use MSIE on your own machine, though, do you??
    SetEnvIf User-Agent &quot;.&lt;em&gt;MSIE.&lt;/em&gt;&quot; &#92;
        nokeepalive ssl-unclean-shutdown &#92;
        downgrade-1.0 force-response-1.0
    SSLProxyEngine on
    RewriteEngine On
    RewriteRule /favicon.ico /old-google-favicon.ico [L]
    ProxyPass / balancer://googlecluster/
&amp;lt;/VirtualHost&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Save the file, and then restart Apache:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apachectl graceful&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Again, if it doesn&amp;rsquo;t work, try this to figure out what&amp;rsquo;s wrong:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block bash&quot;&gt;sudo apachectl configtest&lt;/code&gt;&lt;/p&gt;
&lt;h4&gt;Test&lt;/h4&gt;
&lt;p&gt;Now, go to &lt;a href=&quot;http://www.google.com/&quot;&gt;www.google.com&lt;/a&gt;.  You should see the google home page, complete with the old lovable [G] favicon.  If you see google, but not the old favicon, go &lt;a href=&quot;http://www.google.com/favicon.ico&quot;&gt;directly to the favicon.ico&lt;/a&gt; and refresh a whole bunch.  Clear your cache, etc.&lt;/p&gt;
&lt;p&gt;If you get the new favicon, try running some tests.  Search, go to &lt;a href=&quot;https://www.google.com/account/ManageAccounts&quot;&gt;your account&lt;/a&gt;.  Make sure everything works.&lt;/p&gt;
&lt;p&gt;When you hit an https address, you&amp;rsquo;ll get a prompt that the certificate is issued by an untrusted authority.  This is good!  Check the cert details, and make sure that they&amp;rsquo;re what you typed when you created the certificate.  Now, the question, do you trust yourself?  (I&amp;rsquo;d already added myself as a trusted authority, so didn&amp;rsquo;t get this problem in Firefox, but I did see it in Safari.)&lt;/p&gt;
&lt;p&gt;If it doesn&amp;rsquo;t show you the new favicon, then you might have put the virtual host config someplace where it doesn&amp;rsquo;t belong, or where it won&amp;rsquo;t be picked up.  Tail the error_log file and see if Apache tells you anything is wrong.  Note that some Apache configurations use &amp;ldquo;apache.conf&amp;rdquo; instead of &amp;ldquo;httpd.conf&amp;rdquo;, so maybe try that.&lt;/p&gt;
&lt;p&gt;If it doesn&amp;rsquo;t load at all, tail the apache logs again, and see if anything is barfing.&lt;/p&gt;
&lt;h3&gt;Done&lt;/h3&gt;
&lt;p&gt;You may now resume your google usage as normal, before the disruptive new favicon appeared.&lt;/p&gt;
&lt;p&gt;Note: The Google Notifier won&amp;rsquo;t work, because it checks the certificate, and doesn&amp;rsquo;t give you the option to trust another authority, which is, in my opinion, very bad design.  Also, the Google Notifier sends your password and username out in clear text by default, so it&amp;rsquo;s very insecure.  You shouldn&amp;rsquo;t be using it in the first place.&lt;/p&gt;
&lt;p&gt;Instead, you can use the &lt;a href=&quot;https://mail.google.com/mail/feed/atom&quot;&gt;RSS feed&lt;/a&gt; to get inbox alerts without exposing your info.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Internet is (today) a 16 year old child</title>
		<link href="https://blog.izs.me/2008/06/the-internet-is-today-a-16-year-old-child/"/>
		<updated>2008-06-01T06:28:43Z</updated>
		<id>https://blog.izs.me/2008/06/the-internet-is-today-a-16-year-old-child/</id>
		<content type="html">&lt;p&gt;The web today is in its teenage years.&lt;/p&gt;
&lt;p&gt;When you were a baby, you had one name (if even that, as far as you were concerned), and a very small network of people that you knew and trusted completely.  Access equals trust for a baby.  Identity is not worth thinking about, because it&amp;rsquo;s so simple.  Exploration is everything, and while every step is clumsy and every word garbled, it&amp;rsquo;s all happening for the first time, so it&amp;rsquo;s magnificent and beautiful.  Meaningful accomplishments happen almost daily, and every advance is huge.&lt;/p&gt;
&lt;p&gt;The advent of TCP/IP and the HTTP protocol; DNS protocols; the HTML language, and powerful browsers to interpret it; email; the migration of a bunch of different networks into a single over-arching network.  These were the internet&amp;rsquo;s baby steps and first words.&lt;/p&gt;
&lt;p&gt;The web entered the &amp;ldquo;I WANT&amp;rdquo; phase of toddlerhood through the 90s.  Suddenly, the notion that you could actually BUY and SELL things on the web hit the fan. People made &lt;strong style=&quot;color:green&quot;&gt;MONEY&lt;/strong&gt;, and that opened up all these doors.  Everyone got crazy with the frenzy of it.  Venture capital poured into the valley, backed by the absolutely magical idea that advertisers&amp;rsquo; budgets would grow as fast as online advertising space.  Instead, the simple and timeless rules of supply and demand kicked in, and the bubble burst.  The web got put on time-out, and pouted for a while about it.&lt;/p&gt;
&lt;p&gt;In the bubble, as in childhood, there were some fantasies crushed, and some lessons learned.  We got Yahoo and Google and Amazon out of that frenzy, and a bunch of other technologies and companies and insights that I&amp;rsquo;m sure we&amp;rsquo;re all really glad to have.  Pets.com didn&amp;rsquo;t make it, but let&amp;rsquo;s face it, Pets.com was pretty damn stupid.  &lt;small&gt;I pick on Pets.com unfairly, because it&amp;rsquo;s one of the only failed bubble companies that I remember.  But I &lt;strong&gt;do&lt;/strong&gt; remember Pets.com, and that&amp;rsquo;s actually pretty respectable, compared to all the other failures that are completely forgotten.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Between the bubble bursting and today, the web has been in Junior High.  Angsty, a bit more aware of the world, and just starting to make the first groping steps towards self-identification and social activity; but it&amp;rsquo;s still essentially immature.  Friendster and Blogging and MySpace and Facebook got everyone realizing that the web really is a person-to-person thing, and not just a company-to-consumer thing.  And of course, there have been posers at the party, just trying to look and act like the popular kids to get attention.  You know the sites I mean.  &lt;q&gt;It&amp;rsquo;s a revolutionary new site!  It&amp;rsquo;s got badges, and you can build a friend list!  Upload your avatar!&lt;/q&gt;  But you do that, and realize, &lt;q&gt;there&amp;rsquo;s nothing here&lt;/q&gt;.&lt;/p&gt;
&lt;p&gt;As in junior high, splitting the quality from the chaff is pretty tricky.  I didn&amp;rsquo;t sign up for &lt;a href=&quot;http://twitter.com/&quot;&gt;Twitter&lt;/a&gt; for a long while, just because I&amp;rsquo;ve gotten burned by the early adopter tax too many times.  Yes, I know all these sites don&amp;rsquo;t cost money, but they do cost time, and that&amp;rsquo;s a limited resource.  If I sign up and enter my info and upload an avatar and find my friends, and then never use the site, I&amp;rsquo;ve just wasted a lot of time.  And it&amp;rsquo;s not fun enough to justify the expense.&lt;/p&gt;
&lt;p&gt;The High School years, and especially the &amp;ldquo;tweens&amp;rdquo; from about 9 to 13, are often marked by exactly this sort of constant self re-invention, but it&amp;rsquo;s very superficial.  You identify with a tribe based on music, or hair styles, or clothing.  It&amp;rsquo;s practice for the real world when no one will establish our identities for us.  Since they don&amp;rsquo;t really understand yet who they are as people, or what kinds of people they really want to be around long-term, kids in this age tend to get by with trial and error.  Before this age, children don&amp;rsquo;t really &amp;ldquo;own&amp;rdquo; their identity; they are what their parents say they are.  By the time they get to High School, they&amp;rsquo;re driving the identity ship, even if they do sail it around in circles.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;social networking&amp;rdquo; sites, even the &lt;a href=&quot;http://linkedin.com/&quot;&gt;more&lt;/a&gt; &lt;a href=&quot;http://twitter.com/&quot;&gt;useful&lt;/a&gt; or &lt;a href=&quot;http://myspace.com/&quot;&gt;popular&lt;/a&gt; &lt;a href=&quot;http://facebook.com/&quot;&gt;ones&lt;/a&gt;, are essentially shallow.  There is a concept of a &amp;ldquo;friend&amp;rdquo;, and that&amp;rsquo;s it.  Either we are friends, or we aren&amp;rsquo;t; maybe there&amp;rsquo;s 2 or 3 groups that I can put my friends in, but that&amp;rsquo;s just 2 or 3 binary choices instead of 1&amp;mdash;there&amp;rsquo;s still very little richness.  We need to invent our identity and pick our clothes every time we want to use a website.  Without a lot of formal introductions, this group of friends knows nothing about my other groups.  And so on.&lt;/p&gt;
&lt;p&gt;Some people make a few life-long friends in High School, but that&amp;rsquo;s pretty rare, I think.  More common are people who part ways, and then meet again after college, and find that they once again enjoy each others&amp;rsquo; company.  Far more common than that, though, are people who branch off after high school, and never look back, (except when they get a friend request on Facebook, that is, and even then it&amp;rsquo;s just a bit of &lt;q&gt;Oh, you&amp;rsquo;re doing good?  Me, too.  You hear Joe had a kid? Yeah, I know.  Well, take care!&lt;/q&gt; and then they go back to doing their own separate lives again.)&lt;/p&gt;
&lt;p&gt;In college, things generally change.  Some kids keep experimenting with different faces for a while, but at some point, they realize that they&amp;rsquo;re going to have to be grown-ups, and they&amp;rsquo;re hopefully faced with enough challenging work that the games get to be less relevant.  When you have to keep a C+ average to stay on the football team and keep your scholarship, it doesn&amp;rsquo;t make much sense to be mean to nerds.  The adults around you gradually stop telling you what to do, and instead tell you to pick what &lt;em&gt;you&lt;/em&gt; want to do.  The depth of our social interaction changes, as well.  People date in high school; in college, people get married and have kids.  (Not many of them any more, but we all probably knew someone who graduated pregnant.  I was born while my parents were both students at USD.)&lt;/p&gt;
&lt;p&gt;When you get out of college, they stop telling you to pick what you want to do.  If you don&amp;rsquo;t want to do it, you don&amp;rsquo;t.  The relationships are as deep or meaningless as you want them to be.  You&amp;rsquo;re limited only by your own imagination.&lt;/p&gt;
&lt;p&gt;I think that, today, we&amp;rsquo;re somewhere close to the highschool/college cusp.  If the web is a child, it&amp;rsquo;s about 16; just got its drivers&amp;rsquo; license, but still doesn&amp;rsquo;t have anywhere really worthwhile to go.  The most interesting aspects of the web&amp;rsquo;s maturation are, in my opinion:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;
&lt;p&gt;Consistent, user-owned identity, which doesn’t change from place to place.  I’m talking about OpenID, but OpenID is just part of the solution.  OpenID is a name, but identity is also a whole brand.  We’re not quite there yet, but the OpenSocial API specification and Facebook’s opening up of their APIs promises to lead towards some portability.  And of course, there’s &lt;a href=&quot;http://www.ownyouridentity.com/&quot;&gt;Own Your Identity&lt;/a&gt; and their yet-to-be released &lt;a href=&quot;http://chi.mp/&quot;&gt;Chi.mp&lt;/a&gt; product, which looks very interesting.  I’m definitely keeping my eye on that.&lt;/p&gt;
&lt;p&gt;The challenge will be to eliminate the management overhead of multiple personas, without eliminating the expressive power it affords.  Your profile on LinkedIn might not be quite the same as your profile on &lt;a href=&quot;http://bdsm-speed-dating.com/&quot;&gt;bdsm-speed-dating.com&lt;/a&gt;.  Without user-controlled privacy, there’s no ownership in any meaningful sense, and thus, limited relevance.  And, if it’s not easy, it’s not a solution.&lt;/p&gt;
&lt;/li&gt;
    &lt;li&gt;
&lt;p&gt;Many shallow social networks merging into a single rich matrix.  While each site may only have one concept of “friend”, every one of their implications are a little different, and when I can link them all up to a single point of identification, it becomes very powerful and expressive.  Just as you can have coworkers, friends, and family, and some coworkers are friends, some friends are family, and so on; if identity was user-owned and consistent, I’d be able to have twitter friends, some of whom I’m also connected to on Flickr, or talk to on IM, and so on.  That social matrix exists today, but it’s very difficult to leverage.&lt;/p&gt;
&lt;p&gt;It’s yet to be shown (or even, fully conceived) what kind of information and usefulness can be teased out of this matrix.  First, we need straightforward protocols to get at the data, and then I think we’ll all be surprised at how it can be used to enrich our lives.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That&amp;rsquo;s really what it&amp;rsquo;s all about: enriching the quality of our lives.  People like to bitch about technology, but I think that&amp;rsquo;s just because people like to bitch.  Remember in 1990, when you didn&amp;rsquo;t have a cell phone?  What a compete and utter pain in the ass it was to meet someone at the movie theater?  Remember when, if you wanted to show someone a document, you had to print it out&amp;mdash;or, worse yet, &lt;em&gt;photocopy&lt;/em&gt; it&amp;mdash;and physically bring it to them?  &lt;small&gt;These are my &amp;ldquo;uphill both ways in the snow&amp;rdquo; stories for future generations.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;The fact is, these things &lt;em&gt;do&lt;/em&gt; make our lives better, overall, even with the new ways that we find to get annoyed by them.  I&amp;rsquo;m very excited about what the Internet will look like when it&amp;rsquo;s all grown up.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Steal My Bash Profile</title>
		<link href="https://blog.izs.me/2008/05/steal-my-bash-profile/"/>
		<updated>2008-05-07T03:32:22Z</updated>
		<id>https://blog.izs.me/2008/05/steal-my-bash-profile/</id>
		<content type="html">&lt;p&gt;&lt;small&gt;Feel free to skip the monologue and just &lt;a href=&quot;http://github.com/isaacs/dotfiles/tree/master&quot;&gt;get the goodies&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I am in love with the &lt;a rev=&quot;vote-for&quot; href=&quot;http://www.gnu.org/software/bash/manual/bashref.html&quot;&gt;Bourne Again Shell&lt;/a&gt;.  Bash is a fantastic terminal environment, and a very interesting programming language in its own right.&lt;/p&gt;
&lt;p&gt;I grew up using DOS.  Unix shells always seemed scary and foreign, for some reason.  I think a big part of the reason that I stayed on Windows for as long as I did was that I knew DOS, and could always resort to it in times of need.  As a support tech in college, I got very familiar with DOS.  It was comfortable and handy.&lt;/p&gt;
&lt;p&gt;When I got into web programming, I had no choice but to learn at least the rudimentary basics of a unix-style environment.  At that time, I was as a support tech at a software company whose product uses VisualBasic ASP over IIS, and had started playing around in that environment.  However, I had no money, and web hosts that support ASP cost money.&lt;/p&gt;
&lt;p&gt;By some stroke of luck or persistence, I managed to find a host that was free, &lt;a href=&quot;http://beigetower.org/&quot;&gt;Beigetower&lt;/a&gt;. &lt;small&gt;That link doesn&amp;rsquo;t work any more, of course.  I don&amp;rsquo;t know how long that server&amp;rsquo;s been down.  Cuong Nghiem&amp;rsquo;s still listed as the owner on whois, though.)&lt;/small&gt;  On top of that, they provided shell access.  Not being able to resist the temptation to tinker with a real live web server, I learned enough Bash to poke around.  As I learned more PHP, I picked up more bits and pieces along the way.&lt;/p&gt;
&lt;p&gt;When I started at Yahoo, it was sink or swim to some extent.  I was issued a FreeBSD dev box, and a windows desktop.  I did most of my development in my safe windows world, but there are &lt;em&gt;a lot&lt;/em&gt; of things you have to do on your dev box as an engineer at Yahoo that simply can&amp;rsquo;t be done in any other way.  Bash was a regular part of my daily routine almost from the first day.&lt;/p&gt;
&lt;p&gt;Eventually, I fell so head over heels in love with Bash that I had to say goodbye to Windows and get a Mac.&lt;/p&gt;
&lt;p&gt;There are many good reasons to get a Mac instead of a PC. They&amp;rsquo;re easier and more intuitive in a lot of ways.  They certainly look a lot nicer on almost every level.  But I&amp;rsquo;d be lying if I said that having Bash right there all the time wasn&amp;rsquo;t the ultimate dealmaker.&lt;/p&gt;
&lt;p&gt;One of the best things about Bash, in my opinion, is the fact that you can add shortcuts to your &lt;code&gt;.profile&lt;/code&gt; (or &lt;code&gt;.bash_profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt;, of course) that will be loaded every time you log in.  As soon as I learned this, I started adding stuff.&lt;/p&gt;
&lt;p&gt;Eventually, I had my profile so tricked out that it was hideously painful to have to work on a machine that didn&amp;rsquo;t have my shortcuts.  Without my customized prompt, I&amp;rsquo;d get really confused about which directory I was currently in, and have to type &lt;code&gt;pwd&lt;/code&gt; every three seconds just to not get lost.  The sequence would usually go like this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;$ la
-bash: la: command not found
$ la
-bash: la: command not found
$ la
-bash: la: command not found
$ alias la=&quot;ls -laF&quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Those first few entries of &lt;code&gt;la&lt;/code&gt; were accompanied by plenty of growling and confusion, &lt;em&gt;every. single. time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;So, I got into the habit of using &lt;code&gt;scp&lt;/code&gt; or &lt;code&gt;rsync&lt;/code&gt; to send my bash profile to any machine that I&amp;rsquo;d have to work on.  However, some machines have &lt;code&gt;vi&lt;/code&gt;, and some don&amp;rsquo;t.  I&amp;rsquo;d make a change on the profile on my mac, and forget to sync it to my dev box.  Machines that I didn&amp;rsquo;t log into often would be so far out of date that it was the &amp;ldquo;la&amp;rdquo; situation all over again.  What&amp;rsquo;s worse, I put some stuff in other shell script files that were called by the profile to do other things, so it was no longer straightforward to keep them in sync.  I&amp;rsquo;d send half the package, and then log in, and be inundated with errors all over the place.&lt;/p&gt;
&lt;p&gt;When I switched from FreeBSD to a Red Hat Linux box, half my stuff didn&amp;rsquo;t work quite the same way.  Also, I moved Foo Hack to a great &lt;a rev=&quot;vote-for&quot; href=&quot;http://www.slicehost.com/&quot;&gt;new host&lt;/a&gt;, which is running Ubuntu.  On the Mac, I use &lt;a href=&quot;http://macports.org/&quot;&gt;MacPorts&lt;/a&gt;, and the Ubuntu slice uses &lt;a href=&quot;http://www.debian.org/doc/manuals/apt-howto/&quot;&gt;apt-get&lt;/a&gt;, and the RHEL of course uses yinst, the Yahoo! package management tool that quite simply makes all others look like crap by comparison.  (Sadly, yinst is not open source.  There&amp;rsquo;s &lt;a href=&quot;http://svn.marc.abramowitz.info/projects/hacks/yinst&quot;&gt;this hack&lt;/a&gt; to simulate yinst on top of apt, though.)  The Ubuntu and RHEL environments used vi as the default editor, but I&amp;rsquo;d changed that on the Mac to point to &lt;code&gt;mate&lt;/code&gt;, the command-line interface to &lt;a href=&quot;http://macromates.com/&quot;&gt;TextMate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To say the least, a simple sync wasn&amp;rsquo;t cutting it even a little.&lt;/p&gt;
&lt;p&gt;I re-wrote all my bash profile goodies to fit in a single file.  Shell scripts were replaced with functions so that they could all live together.  The &lt;code&gt;edit&lt;/code&gt; command was defined to use the first available editor from a list of alternatives.  Then, I put it in a file that was external from the main &lt;code&gt;.profile&lt;/code&gt; or &lt;code&gt;.bashrc&lt;/code&gt; file, so that it could be synced without overwriting anything that the OS placed in there by default.  The only thing to do on a new server was to add &lt;code&gt;. ~/.extra.bashrc&lt;/code&gt; to the bottom of whatever profile script it was already using.&lt;/p&gt;
&lt;p&gt;I had already added a command called &lt;code&gt;editprof&lt;/code&gt; that would bring my profile up in an editor.  All that was needed then was a &lt;code&gt;pushprof&lt;/code&gt; command that would rsync the .extra.bashrc file to a given host.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m releasing it under the &lt;a href=&quot;http://sam.zoy.org/wtfpl/&quot;&gt;WTFPL&lt;/a&gt;.  There are actually a few files, since some stuff simply didn&amp;rsquo;t make any sense to have in certain environments.  The copy &lt;del&gt;here on foohack.com&lt;/del&gt; &lt;ins&gt;on github&lt;/ins&gt; is &lt;del&gt;symlinked from my home directory&lt;/del&gt; &lt;ins&gt;updated frequently&lt;/ins&gt;, so it&amp;rsquo;ll stay pretty up to date.  Feel free to copy, learn, fork, or, like the license says, just do &lt;abbr title=&quot;what the fuck&quot;&gt;wtf&lt;/abbr&gt; you like with it.&lt;/p&gt;
&lt;p&gt;A word of warning: like government regulation, this file increases in size but rarely gets revised.  Some stuff may be completely useless or pointless.  Some of it I hardly ever use any more.  Figuring out better solutions to these problems is left as an exercise for the reader.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://github.com/isaacs/dotfiles/tree/master&quot;&gt;Get my bash extras.&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Open in TextMate in Finder for Tiger</title>
		<link href="https://blog.izs.me/2008/04/open-in-textmate-in-finder-for-tiger/"/>
		<updated>2008-04-09T09:03:49Z</updated>
		<id>https://blog.izs.me/2008/04/open-in-textmate-in-finder-for-tiger/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://henrik.nyh.se/2007/10/open-in-textmate-from-leopard-finder&quot;&gt;This post&lt;/a&gt; has a great little droplet that can be added to the Finder toolbar to open either the selected items or the current Finder folder in TextMate.&lt;/p&gt;
&lt;p&gt;Sadly, it doesn&amp;rsquo;t work in Tiger, and I haven&amp;rsquo;t made the jump to Leopard yet.  If you&amp;rsquo;re a TextMate user who&amp;rsquo;s still on Tiger, and wants this feature, I tweaked Henrik&amp;rsquo;s AppleScript to play nice with Tiger.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://foohack.com/blog/wp-content/uploads/2008/04/open-in-textmate-tiger.dmg&quot;&gt;Open in TextMate (for Tiger)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;ins datetime=&quot;2008-05-04T06:50:12+00:00&quot;&gt;&lt;strong&gt;Update&lt;/strong&gt;: Just fixed the script to work with folders and files that have spaces in the name.&lt;/ins&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>OpenSocial, Meetings, and Success</title>
		<link href="https://blog.izs.me/2008/04/opensocial-meetings-and-success/"/>
		<updated>2008-04-03T19:20:41Z</updated>
		<id>https://blog.izs.me/2008/04/opensocial-meetings-and-success/</id>
		<content type="html">&lt;p&gt;It’s a very interesting time for me at Yahoo! right now.  I’d been keeping quiet about what’s going on for two big reasons.  First, I’ve been too busy working to write about it.  Second, it’s secret.&lt;/p&gt;
&lt;p&gt;Well, as of 2008 March 25, it &lt;em&gt;was&lt;/em&gt; a secret.  &lt;a href=&quot;http://yhoo.client.shareholder.com/press/releasedetail.cfm?ReleaseID=301421&quot;&gt;This press release&lt;/a&gt; broke the news a few days ago, so I doubt I’m giving anything away to say that Yahoo! is busy working on implementing a framework for &lt;a href=&quot;http://code.google.com/apis/opensocial/&quot;&gt;OpenSocial&lt;/a&gt; applications that tie into various sorts of Yahoo! data.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://buzz.yahoo.com/&quot;&gt;Buzz&lt;/a&gt; was a very fun project to work on.  After games’ mountain of legacy and the brand universe fiascos, it was really great to be able to have a hand in developing a site from scratch and also have enough space and resources to really create quality.  (It has its problems, but they’re being worked out, and overall I’m quite proud of the site we built.)&lt;/p&gt;
&lt;p&gt;However, the really interesting parts of Buzz are all behind the scenes.  The front end was an exercise in the complicated and delicate art of engineering simplicity and eliminating redundant effort.  Even in the face of exacting requirements and changing specifications, we ended up releasing a site that performs well and is relatively easy to work on.  On some level, I feel like it was my &lt;dfn title=&quot;The kid you have and treat really nicely to make up for their older sibling that turned into a drug addict due to your shoddy parenting&quot;&gt;karma baby&lt;/dfn&gt; for some of the complicated monstrosities that I’ve left in my wake as a developer.&lt;/p&gt;
&lt;p&gt;But, with Buzz behind me, creating and maintaining yet another website has gotten a bit old.  Nothing wrong with that work, but I’m done with it for now.  Time to do something else.&lt;/p&gt;
&lt;h2 id=&quot;opensocial_and_mash_ups&quot;&gt;OpenSocial and Mash-ups&lt;/h2&gt;
&lt;p&gt;Douglas Crockford has called mash-ups &lt;a href=&quot;http://blog.360.yahoo.com/blog-TBPekxc1dLNy5DOloPfzVvFIVOWMB0li?tag=mashups&quot;&gt;One of the most exciting features of WEB 2.x&lt;/a&gt;, and I couldn’t agree more.  The vision of the web from the get-go was a distributed platform for innovation.  As client technology and usage advanced, dynamic features followed naturally.  The ability to mix-and-match data and functionality into new applications is a &lt;em&gt;very&lt;/em&gt; exciting prospect.&lt;/p&gt;
&lt;p&gt;However, like so much potential innovation on the web, this effort is severely hampered by the same system that makes it possible.  The browser Dom was designed by committee, and the committee didn’t actually meet for a while, and the members of the committee were trying to kill one another.  Throughout the browser wars, IE and Netscape introduced features in a frantic arms race to try to shut one another out of the browser market.  Many of those features were not really ready for prime time, and many others probably should have been wiped off the whiteboard and never made it into the code.&lt;/p&gt;
&lt;p&gt;On the plus side, browsers and web pages were able to innovate much faster than the w3c’s crawl.  Much of the time, the “official” specs only included a feature because a few browsers had already implemented it and it was in widespread use.  That speed got us to where we are, but lots of important things were sacrificed or forgotten along the way.  Among the missing: a proper permission model.  Same-domain restriction works to some degree, but it makes mashups trickier and there are still big holes.  In particular:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Scripts run with the same access permission as the page that invokes them, even if they’re hosted elsewhere.&lt;/li&gt;
&lt;li&gt;&lt;abbr title=&quot;XML HTTP Request&quot;&gt;XHR&lt;/abbr&gt; calls can’t get data asynchronously from external domains.&lt;/li&gt;
&lt;li&gt;The Dom is one big global that all scripts have access to.&lt;/li&gt;
&lt;li&gt;Iframes restrict permission, but they’re a pain to work with.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Sadly, this means that mash-ups are faced with the choice of:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Only accessing public data, lest some untrusted third party get ahold of something it shouldn’t have.&lt;/li&gt;
&lt;li&gt;Running the risk that a third party might steal some data.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Essentially, mash-ups are thus restricted from really doing anything interesting.  PayPal or Amazon or Yahoo—-that is, sites with money and interesting private data—-could never risk exposing their data to a mash-up.  Their visibility, and the value of the private data they hold, makes them prime targets for attack.  And, since they have money, and visibility, they’re also prime targets for lawsuits if a user was damaged by a mistake.&lt;/p&gt;
&lt;p&gt;OpenSocial represents a concerted effort by some very big players on the web to make severely interesting and useful mash-ups not just a reality, but common and relatively easy to create and host.  API layers will sit between the developer and the browser, and between the developer and the container page, allowing them to code as if it’s 2099 and the browser is sane.  It’s no small task.  When Hao asked me to join the team, and told me what they were doing, my initial reaction was &lt;q&gt;Well, it might end up a total failure.  But it’ll be one hell of a fun problem to work on.  I’m in.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;There were hints and rumors that Yahoo was doing something with OpenSocial a while back.  (We were.)  But, the main reaction to the press release really should be &lt;q&gt;Well, spluh.&lt;/q&gt;  Yahoo’s all about social; it may have started with indexing the web into searchable categories, but some of its earliest and most popular applications are mail, instant messaging, and groups.  Yahoo’s all about open; we invest countless developer-hours into the open source technology that we use.  Yahoo has a lot to gain from a more exciting social internet; when the ocean rises, the bigger fish benefit the most.&lt;/p&gt;
&lt;h2 id=&quot;warnings_wrapped_in_compliments&quot;&gt;Warnings Wrapped in Compliments&lt;/h2&gt;
&lt;p&gt;For a month or so, I’ve been transitioning off the Buzz team and onto the team that’s doing the OpenSocial container stuff.  As people found out that I was joining that team, I heard this line a lot from various people: &lt;q&gt;Oh, thank god.  They really need a good front-end.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;There’s a very flattering element to that, and I’m not trying to brag.  Objectively speaking, I know I’m good at what I do.  I love doing it, and I work hard at it, and that’s just what happens when you work hard at what you love.  No magic at all.&lt;/p&gt;
&lt;p&gt;At the risk of sounding like a falsely modest blow hard, though, on a more moment-to-moment basis in my own world, I focus on many of my own failings that others rarely see, and I am always very impressed when someone solves a problem that I was stuck on.  I often feel like I’m still new at Yahoo, and on some very insecure level, I’m waiting for them to find out that I’m just playing at this stuff and tell me I’ve fooled the real adults for long enough, and it’s time to go home.&lt;/p&gt;
&lt;p&gt;But I &lt;em&gt;am&lt;/em&gt; good at what I do.  It’s real.  These skills are rare, and they’re worth money.  When others acknowledge it, though, I kind of feel embarrassed and get all “aw, shucks, twern’t nuttin’” and find myself unable to make eye contact.  (A few times, this reaction has evoked a &lt;q&gt;No, seriously!  I mean that!&lt;/q&gt; which just adds to the effect.)&lt;/p&gt;
&lt;p&gt;So, the flip side of that comment… yes yes, I’m a great webdev, blah blah, but say that first part again?  It’s a bit like hearing, &lt;q&gt;Oh, thank god they picked you to wrestle that giant raptor.  He’s been killing one guy after the next, so I’m really glad that they finally picked someone who can take him down.&lt;/q&gt;  Why couldn’t it have been &lt;q&gt;That’s great!  There’s a lot of great talent on that team, I’m sure you’ll fit right in!&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Well, that’s the cards that life deals you sometimes.  Impossible problems are the most fun, anyway.&lt;/p&gt;
&lt;p&gt;And I’ve found that there really are a lot of talented developers on this team.  Some more have joined it recently.  I’m really happy to be able to be working in this group.&lt;/p&gt;
&lt;h2 id=&quot;meetings&quot;&gt;Meetings&lt;/h2&gt;
&lt;p&gt;Somehow, I managed to work myself into a role on this team where most of my time is spent in meetings.  Some of them were soul-sapping and boring, as meetings can be sometimes, but lately, they’ve seemed to focus more and more on solving front-end problems at an architectural level.  After almost every one, someone whips out a phone to take a picture of the whiteboard, lest our valuable work be lost to the eraser.  &lt;/p&gt;
&lt;p&gt;Additionally, I’ve been attending the &lt;a href=&quot;http://developer.yahoo.com/yui/&quot; title=&quot;Yahoo User Interface&quot;&gt;YUI&lt;/a&gt; team meetings, as they’re interested in knowing what they can do to aid Yahoo’s big bets.  Through that, and by virtue of working on a product that promises to push the limits of what the browser can safely do, I’m finding myself consulted because Microsoft is asking Yahoo what we think of the IE 8 beta, and what we’d like to see in it.  I’ve been asked to teach a CSS class for the next round of incoming junior/trainee webdevs (Jukus, as they’re called).  I’m meeting with other groups and helping to figure out what OpenSocial means for their product’s context, and how they’ll use what we’re building.  Today, we’ve got a meeting at the Googleplex.&lt;/p&gt;
&lt;p&gt;It certainly looks like success.  And the pay is pretty good.  The product is fun and open and creative.  It’s one puzzle after another.&lt;/p&gt;
&lt;p&gt;But, I’m feeling a bit envious of the other developers I talk to who get more time to write code.  From Tuesday to Thursday of last week, iCal was booked solid from 11-5 every day, I ended up in ad hoc discussions about things (or dealing with email) until about 7 or 8 each night.&lt;/p&gt;
&lt;p&gt;I have tried hard not to become a manager at Yahoo.  Perhaps a management path is in my future somewhere, but right now, it just seems like a job I would not enjoy.  Programming is a very social activity if you’re doing it right.  With a new team and a new product, there’s plenty of architecture and designs to figure out, and I’ll be coding again soon enough.&lt;/p&gt;
&lt;p&gt;I hope.&lt;/p&gt;
&lt;h2 id=&quot;hey_one_more_thing8230&quot;&gt;Hey, one more thing…&lt;/h2&gt;
&lt;p&gt;We have openings for great engineers and webdevs.  If any of this sounds like something you’d be interested in, &lt;a href=&quot;http://foohack.com/contact/&quot;&gt;let me know&lt;/a&gt;.  I’m 100% serious.  Javascript and PHP experts, we need you.  Yahoo is, in my opinion, one of the best places for talented engineers to work.  They generally treat their employees very well, and this is a product that is just full of fascinating puzzles.  &lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Needed: chpass, finger, and pw for the web</title>
		<link href="https://blog.izs.me/2008/03/needed-chpass-finger-and-pw-for-the-web/"/>
		<updated>2008-03-10T17:00:38Z</updated>
		<id>https://blog.izs.me/2008/03/needed-chpass-finger-and-pw-for-the-web/</id>
		<content type="html">&lt;p&gt;It’s &lt;a href=&quot;http://radar.oreilly.com/archives/2007/03/sfearthquakes-on-twitter.html&quot;&gt;been said&lt;/a&gt; that the best startups take a popular Unix command and bring it to the web.  But there are a few that are poorly represented.  I understand that I may be making a bad career move by discussing this openly on a blog, but quite honestly, my desire as a consumer for a satisfying product is enough to risk—-nay, &lt;em&gt;hope&lt;/em&gt;—-that someone else makes a million dollars doing this before I get a chance to.&lt;/p&gt;
&lt;p&gt;I’m thinking specifically  &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=chpass&amp;amp;sektion=1&quot;&gt;chpass&lt;/a&gt;, &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=finger&quot;&gt;finger&lt;/a&gt;, and &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=pw&amp;amp;sektion=8&quot;&gt;pw&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I know what you’re thinking.  There have been a few forays into this arena.  MySpace, Facebook, and Plaxo come to mind, not to mention whatever else some MBA has stuck to a “social network” this week.  (&lt;q&gt;It’s just like a regular duck, but this one swims around the lake &lt;strong&gt;and&lt;/strong&gt; lets you put all your friends in a list! I’ll be rich!&lt;/q&gt; The sad thing isn’t that he thinks it; the sad thing is that he just might be right.)&lt;/p&gt;
&lt;p&gt;The social-for-the-sake-of-being-social sites tragically miss the point.  I have resisted getting a Facebook account for a few years now, and even deleted my MySpace account.  They seemed to require a lot of time and effort doing basically nothing, and didn’t give me what I really want.&lt;/p&gt;
&lt;h3 id=&quot;managing_data_is_not_necessarily_enjoyable&quot;&gt;Managing data is not (necessarily) enjoyable&lt;/h3&gt;
&lt;p&gt;I &lt;strong&gt;hate&lt;/strong&gt; managing contact lists.  The worst contact list, the one that is the hardest to manage, is the one in my head.  Every day I get older, I get worse at remembering phone numbers, and I like to know who’s calling me.  I like to see your picture when you call, see your real name when you email.  I want my email program or my phone to know who you are when I start to type the three letters of your name that I can remember off-hand, even (especially!) if you’re someone I don’t talk to often.&lt;/p&gt;
&lt;p&gt;That’s why I shelled out $40 for &lt;a href=&quot;http://radar.oreilly.com/archives/2007/03/sfearthquakes-on-twitter.html&quot;&gt;Missing Sync&lt;/a&gt; so that my phone and computer can share an address book.  I have an Applescript program sitting on my back burner that will sync any contacts I add in Adium into this same collection, and even look up their contact details from Yahoo’s corporate intranet (since most of the time, they’re work mates.)  Automated replication is still not great, but it eases the pain of managing multiple lists.&lt;/p&gt;
&lt;p&gt;Facebook and MySpace are software platforms designed around the premise that &lt;em&gt;managing&lt;/em&gt; a contact list is fun.  And it can be in that 12-23 age range where we attempt to define ourselves and carve out our place in the world through our social connections.  That’s a key demographic for advertisers.  Good for you, Facebook.  But if I wanted to spend all this time managing my friendships, I’d have more of them in real life.  &lt;small&gt;Ooh, burn! i mean… hey, wait a second..&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://plaxo.com/&quot;&gt;Plaxo&lt;/a&gt; is actually a pretty good approximation of what I’d like to see, at least on the “managing contacts” side of things.  Granted, I’ve been spamvited to their service by half a dozen people I hardly know, which is a classic example of “let’s be viral” gone horribly horribly wrong.  But their product offering is pretty close.  You get one contact list online, and it syncs with other areas.  It’s unfocused since they’ve added “Pulse” (basically an RSS aggregator for your other web profiles), but still pretty good.&lt;/p&gt;
&lt;p&gt;However, even Plaxo misses a key point, and makes several fatal flaws.  I’m actually talking about a profile and contact management system that is much grander.&lt;/p&gt;
&lt;h3 id=&quot;dry_8212_what_changed&quot;&gt;&lt;abbr title=&quot;don&#39;t repeat yourself&quot;&gt;DRY&lt;/abbr&gt; — What Changed&lt;/h3&gt;
&lt;p&gt;In a relational database or data map, the idea is to keep a piece of data in only one place, and store the relationships between entities rather than making multiple copies.  Most contact management systems, from a little black book to the cell phone contact list to Outlook to Plaxo, fail to implement this simple principle.  Instead of making each node in the network keep track of all the data about all the other nodes in which it is interested, instead let each node control its own data, and store links to the nodes in which it is interested. &lt;/p&gt;
&lt;p&gt;In the old days of land lines, the phone book was enough.  If you knew someone’s name and city, you could get their phone number and, perhaps, their street address by performing a simple lookup.  Each user had the option to control how much information was shared with the public.  Until the autodialer came to telemarketing, the abuse rate was limited by the cost of using the technology.&lt;/p&gt;
&lt;p&gt;Today, each person has many more pieces of contact information, and the cost of abuse is virtually zero.  There is no way in hell that I’d let anyone publish my actual cell phone number, and once an email address is exposed, it’s basically useless.  Spam fighting is an arm’s race, and an unfair one even for Google and Yahoo to fight.&lt;/p&gt;
&lt;h3 id=&quot;why_we_need_those_commands_on_the_web&quot;&gt;Why we need those commands on the web&lt;/h3&gt;
&lt;p&gt;Back to my original point: &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=chpass&amp;amp;sektion=1&quot;&gt;chpass&lt;/a&gt;, &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=finger&quot;&gt;finger&lt;/a&gt;, and &lt;a href=&quot;http://www.freebsd.org/cgi/man.cgi?query=pw&amp;amp;sektion=8&quot;&gt;pw&lt;/a&gt;.&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;chpass&lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;add or change user database information&lt;/p&gt;
        &lt;p&gt;In other words, manage my info in one place.&lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;finger&lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;The finger utility displays information about the system users.&lt;/p&gt;
        &lt;p&gt;In other words, look up the information that other have made available.&lt;/p&gt;
    &lt;/dd&gt;
    &lt;dt&gt;pw&lt;/dt&gt;
    &lt;dd&gt;
        &lt;p&gt;create, remove, modify &amp;amp; display system users and groups&lt;/p&gt;
        &lt;p&gt;In other words, specify who has permission to what.&lt;/p&gt;
    &lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;Many large companies have some sort of online system like this.  At Yahoo, it’s the almighty Backyard, the corp website that started as a list of email addresses and grew into a full-scale intranet with contact lookup and LDAP access.  (It also features conference room booking and documentation searching and plenty of other handy things.  But mostly, it’s still all about the mega employee contact list.)&lt;/p&gt;
&lt;p&gt;You manage your own profile, and make sure that your numbers and whatnot are up to date.  No one else ever has to worry about how to contact you, because it’s all in one place.  However, that only works because access to the backyard system is tightly limited to current employees, so abusing the system would entail serious consequences for the abuser’s reputation (and career).&lt;/p&gt;
&lt;p&gt;In other words, we have finger and chpass, but pw is being done manually by the &lt;abbr title=&quot;Human Resources&quot;&gt;HR&lt;/abbr&gt; department, which limits the possible size of the network considerably.&lt;/p&gt;
&lt;h3 id=&quot;abuse_prevention_is_extremely_non_trivial&quot;&gt;Abuse Prevention is Extremely Non-Trivial&lt;/h3&gt;
&lt;p&gt;The easier it is to use a networked contact management system, the easier it is to abuse.  The more useful it is for you and your friends and associates, the more useful it is for spammers and scammers.  Already, we have to keep our email addresses hidden from strangers.  Imagine how much worse it would be if a &lt;abbr title=&quot;Porn, Pills, and Credit&quot;&gt;PPC&lt;/abbr&gt; pusher could just e-finger “isaac.schlueter” and have my home address, email, phone number, instant messenger alias, birthday, and photo.  Yes this is &lt;em&gt;exactly&lt;/em&gt; the sort of information that I’d like to easily share with everyone else.&lt;/p&gt;
&lt;p&gt;Everything that has been done so far in the area of email spam, while impressive and necessary, is &lt;strong&gt;fundamentally&lt;/strong&gt; inadequate.  As long as it remains profitable for a spammer to send out 100 billion emails every day, it will happen.  Any attempts to prevent or avoid this behavior run counter to the incentives of the market; which is to say that it’s a bit like building a dam of sand and expecting to stop the Mississippi.  Won’t happen.  A bigger dam will take longer, but eventually, they’ll all crumble.&lt;/p&gt;
&lt;p&gt;In order to truly divert human behavior, the &lt;em&gt;incentive&lt;/em&gt; must be dealt with at the source.  Direct attacks against the offenders (ie, shutting down their accounts) are not effective in the long run (they just get new accounts.)  Negative incentives, such as putting spammers in jail, are not going to be effective in the long run, because it doesn’t push the &lt;em&gt;cost&lt;/em&gt; of spamming up high enough.  John Q. Spammer doesn’t think he’ll be the one to get caught, and he’s probably right.&lt;/p&gt;
&lt;p&gt;I don’t claim to have this bit of the system figured out, not by a long shot.  But I have a few ideas.&lt;/p&gt;
&lt;h4 id=&quot;irl&quot;&gt;IRL&lt;/h4&gt;
&lt;p&gt;In real life, we meet a lot of people, and many of them can and do annoy us by contacting us in unwanted, if mostly harmless, ways.  The foul smelling man who stops babbling for a second to ask me for a quarter.  The smiling woman who shoves a tract at me and tells me I’m going to hell.  Sadly, the list goes on and on and on.&lt;/p&gt;
&lt;p&gt;However:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;It’s easy to size someone up quickly, because:&lt;/li&gt;
&lt;li&gt;Annoying people build a reputation for being annoying, because:&lt;/li&gt;
&lt;li&gt;They’re real people and you can see who they are.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;There are still, of course, the violent offender and the con man.  However, in real life, direct attacks incur a high degree of risk, due to the chances of being caught or retaliated against, and so law enforcement has a relatively easy time keeping serious criminals in check.  And those looking to do you harm by gaining confidence and taking advantage of it, well, they’ll always be around, but they’re pretty rare and the reputational aspects keep them somewhat in check as well.&lt;/p&gt;
&lt;h4 id=&quot;so8230&quot;&gt;So…&lt;/h4&gt;
&lt;p&gt;Entrance into this global open personnel file would require that an account be tied to a single real person, who doesn’t have any other account in the system.  Accounts that are not “backed” by some kind of reliable identity are only given some kind of limited provisional access—-perhaps they can email a user through the system, but they cannot get the user’s “real” email address, and users would be able to deny access altogether to unidentified strangers if they chose.&lt;/p&gt;
&lt;p&gt;Identification is itself a non-trivial task requiring a high degree of trust from the web site.  Even if you know it’s 100% secure, being asked for your date of birth, &lt;abbr title=&quot;Social Security Number&quot;&gt;SSN&lt;/abbr&gt; or passport, and a major credit card is a tall order.  Without biometrics, it must come down to discrete bits of information at some point, which can be (and often are) faked.&lt;/p&gt;
&lt;p&gt;A rinky-dink fly-by-night startup can’t hope to achieve this level of trust quickly.  And, without getting a critical mass of users, the value proposition to new users is a lot tougher.&lt;/p&gt;
&lt;p&gt;The company to build this system would need:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;A huge base of existing users and preferably their contact details, too.&lt;/li&gt;
&lt;li&gt;A strong reputation for protecting user data.&lt;/li&gt;
&lt;li&gt;Impressive engineering resources and domain knowledge in the areas of spam protection and social networking.&lt;/li&gt;
&lt;li&gt;A serious commitment to open APIs that help the web as a whole.&lt;/li&gt;
&lt;/ol&gt;&lt;h3 id=&quot;if_it8217s_not_everywhere8230&quot;&gt;If it’s not everywhere…&lt;/h3&gt;
&lt;p&gt;…then it may as well not be anywhere.  The goal of this system would be to revolutionize contact management the same way that email and hypertext revolutionized written communication.&lt;/p&gt;
&lt;p&gt;Just as email works in any email client, and web pages work can be viewed by any browser, the APIs provided by this system would have to be completely open.  Any application must be allowed to interact with them, both to change data and fetch it.&lt;/p&gt;
&lt;p&gt;In order for it to work, and &lt;em&gt;really&lt;/em&gt; have the effect that I’m talking about, there must be absolutely no lock-in, no up-sell, and reasonably liberal rate limits.&lt;/p&gt;
&lt;h3 id=&quot;&quot;&gt;$$$&lt;/h3&gt;
&lt;p&gt;How does something like this make money?  That’s an open question, and a big one, probably part of the reason why I’m still pushing bits in a day job and not out getting VC to build this thing.  &lt;small&gt;I also happen to really like what I do at that day job.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;Maybe it would have to be something built under the Apache foundation or some other OSS group, and sponsored by donations of capital and resources from some major players in the online social arenas.  Maybe there’s some clever way in which smaller users and early adopters get the API for free, but then charge everyone else.&lt;/p&gt;
&lt;h3 id=&quot;who_could_do_this_what8217s_going_on_now&quot;&gt;Who could do this?  What’s going on now?&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://openid.net/&quot;&gt;OpenID&lt;/a&gt; is a great start, but what we really need is an open &lt;em&gt;profile&lt;/em&gt; and open &lt;em&gt;contact list&lt;/em&gt; system, and OpenID doesn’t provide that.&lt;/p&gt;
&lt;p&gt;Google’s &lt;a href=&quot;http://code.google.com/apis/opensocial/&quot;&gt;Open Social&lt;/a&gt; is an interesting product, but the more I read about it, the more I think it’s not quite low-level enough to really deliver on what I’d like to see here.  While it promises to expose social data to third-party applications in an API that could be consistent across social websites, it doesn’t fully address the issue of being able to manage contact data in a distributed way.&lt;/p&gt;
&lt;p&gt;As I said above, the company to do this will need: &lt;/p&gt;
&lt;ol&gt;&lt;li&gt;A huge base of existing users and preferably their contact details, too.&lt;/li&gt;
&lt;li&gt;A strong reputation for protecting user data.&lt;/li&gt;
&lt;li&gt;Impressive engineering resources and domain knowledge in the areas of spam protection and social networking.&lt;/li&gt;
&lt;li&gt;A serious commitment to open APIs that help the web as a whole.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Yahoo has all four of these, but that whole China escapade has damaged Yahoo’s reputation in the eyes of many users.  Of any company on the web, however, Yahoo has perhaps the most to gain from such a system and a lot of resources and domain knowledge to throw at the problem.&lt;/p&gt;
&lt;p&gt;Even if they only share user information when presented with a subpoena, that means that using this system exposes my information to governmental intrusion, which is deeply problematic.  In order to be truly trustworthy, a stronger commitment to protecting privacy needs to be in place than just words on a corporate press release.  The officers of the company to provide this service should enter into a binding agreement that they will not knowingly expose user information, even in the face of governmental pressure.&lt;/p&gt;
&lt;p&gt;Like I said, I don’t have all the answers to this product.  But I know that, as a user, I’d be absolutely delighted to see something like this take hold.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Yahoo! Buzz</title>
		<link href="https://blog.izs.me/2008/02/yahoo-buzz/"/>
		<updated>2008-02-28T04:19:01Z</updated>
		<id>https://blog.izs.me/2008/02/yahoo-buzz/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;m a little behind in posting this, since it&amp;rsquo;s been live and in the media for a while now. &lt;a href=&quot;http://buzz.yahoo.com/&quot;&gt;Go check it out: http://buzz.yahoo.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It took a lot of work to pull this thing together.  Monday night was the craziest month of my web development career, culminating in &lt;a href=&quot;http://twitter.com/isaacschlueter/statuses/759204492&quot;&gt;this tweet&lt;/a&gt; posted as I finished pushing the last packages out into production.  &lt;small&gt;I managed to ignore the page that came in 5 hours later. I wonder if it was some kind of subconscious self-preservation that made me leave my phone on vibrate when I finally went to bed.  Sorry bout that, Trang.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;And despite the &lt;a href=&quot;http://valleywag.com/357006/screenshots-of-yahoo-buzz-a-digg-competitor&quot;&gt;rather disappointing leak&lt;/a&gt;, it seems to have been &lt;a href=&quot;http://www.readwriteweb.com/archives/why_yahoo_buzz_is_a_brilliant_idea.php&quot;&gt;pretty well received&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We worked really hard on this project, and while it&amp;rsquo;s definitely still a &amp;ldquo;beta&amp;rdquo;, the feature set is enough to be interesting, in my opinion.  All in all, this has been a highly rewarding product to be a part of, and I&amp;rsquo;m extremely proud to have been a part of the team that built it.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m in the process of moving onto a different team, and I have mixed feelings about the transition.  On the one hand, the team I&amp;rsquo;m joining is doing some truly ambitious and interesting things, and it&amp;rsquo;s more in the direction that I want to go.  I&amp;rsquo;ve been starting to get tired of building one web site after another, and this will be an opportunity to do something much more in the &amp;ldquo;web application&amp;rdquo; direction.  On the other hand, the Orion team is one of the best groups of developers I&amp;rsquo;ve ever worked with, and it&amp;rsquo;s sad to leave them.&lt;/p&gt;
&lt;p&gt;But that&amp;rsquo;s the joy of working at a company like Yahoo&amp;mdash;if you get bored of doing one thing, then there&amp;rsquo;s always something else, and no matter which team you&amp;rsquo;re on, there are lots of top-notch developers among your coworkers.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Foo Hack Redesign 3.0</title>
		<link href="https://blog.izs.me/2008/02/foo-hack-redesign-30/"/>
		<updated>2008-02-04T18:00:41Z</updated>
		<id>https://blog.izs.me/2008/02/foo-hack-redesign-30/</id>
		<content type="html">&lt;p&gt;So, it started out as just a few font changes.  I&amp;rsquo;d been growing less and less pleased with Trebuchet MS, and had found a few cases where it broke the &lt;a href=&quot;http://foohack.com/2007/08/marching-to-a-vertical-cadence/&quot;&gt;militant line-height rules&lt;/a&gt; I&amp;rsquo;d set for this site.  In general, I felt that it was too crowded, and the gray hash textured background was (in my opinion) a contrived and artless approach.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not a very understanding end-user when it comes to this site.  The Foo Hack design team got fed up with my complaints, and decided to give in and make some changes.&lt;/p&gt;
&lt;p&gt;Feature creep is a bitch when you have a deadline.  For personal projects, there is no deadline, and so a bit of feature creep is fun, within reason.  That&amp;rsquo;s a big part of the reason why I have so many back-burner projects that are almost finished; just as I near the finish line, I decide that it needs a little more, or another project gets more interesting for a while.  So, on to what changed.&lt;/p&gt;
&lt;h3&gt;Fonts&lt;/h3&gt;
&lt;p&gt;I was a computer geek first, but when my dad replaced our DOS home computer with a Windows 3.1 box, I fell in love with fonts.  I can waste an afternoon surfing the web downloading fonts that I&amp;rsquo;ll probably rarely (if ever) use.  Web design is about 90% typography, and it is an art that blends strict perfectionism and fluid acceptance in a beautiful way.&lt;/p&gt;
&lt;p&gt;For the main body text, I wanted something subtle and easy on the eyes.  Something that would let the writing speak in the voice that I intend, without getting in the way.  For the &amp;ldquo;small&amp;rdquo; items of diminished importance (asides and things in &lt;code&gt;&amp;lt;small&amp;gt;&lt;/code&gt; tags) I wanted a serif font with a very thin ex measurement, so that the text could &amp;ldquo;feel&amp;rdquo; smaller without altering the line-height.  For the headings, I wanted a rounder, more open font that could evoke a sense of boldness without being too heavy.  Subheadings and meta items (the date, &amp;ldquo;comment&amp;rdquo; link, etc.) should use the same font, but with less letter space and a subtler color.&lt;/p&gt;
&lt;p&gt;For the body text, I decided to go with Helvetica, the classier old-world cousin of Arial.  I was initially pleased with the results.&lt;/p&gt;
&lt;p&gt;Cliché though it may be, Times New Roman was the perfect choice for the diminished items.  It&amp;rsquo;s very light, yet still fairly readable, and when italicized, it practically disappears.  I was already using it for that reason, but since I don&amp;rsquo;t love &lt;abbr title=&quot;Times New Roman&quot;&gt;TNR&lt;/abbr&gt; all that much, I was willing to entertain other possibilities.&lt;/p&gt;
&lt;h3&gt;If Helvetica is so great, why do I see Arial?&lt;/h3&gt;
&lt;p&gt;A problem came up when I noticed that the line-height was getting messed up whenever a TNR inline element would wrap to the next line.  I figured out the problem.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you have font A and font B.  You create a block-level element using font A.  Then, you have an inline element using font B, which wraps to the next line.&lt;/p&gt;
&lt;p&gt;If A and B don&amp;rsquo;t put their letters on exactly the same point in the line-block, then the line-height will &lt;em&gt;adjust&lt;/em&gt; up or down, as the next line is set by the position of the letters in B instead of the position of letters in A.  Since the B element isn&amp;rsquo;t a block-level element, it won&amp;rsquo;t create a whole new block, and will have the effect of adding or removing a few pixels from the overall height of the A element.&lt;/p&gt;
&lt;p&gt;To correct this problem, and still have 2 fonts sharing the same block-level element, you need to find two fonts that have exactly the same vertical letter placement on the line block.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not exaggerating when I say that I created a test page and exhaustively tested every combination of serif and sans-serif fonts on my Mac.  It took about a week.  There was only one combination that worked.&lt;/p&gt;
&lt;p&gt;Arial and Times New Roman.&lt;/p&gt;
&lt;p&gt;Ah, compromise, my old nemesis. You strike again.  Not willing to give up the line-height strictness, I gave in and decided to use Arial instead of Helvetica.  On the bright side, Windows users were mostly going to see Arial anyway, and they&amp;rsquo;re both tried and true web-safe fonts.  And, at typical screen resolutions, it&amp;rsquo;s hard to tell the difference anyway.  But still, it&amp;rsquo;s a bit of a sore point.&lt;/p&gt;
&lt;h3&gt;Gotham, Large and Small&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.typography.com/fonts/font_overview.php?productLineID=100008&quot;&gt;Gotham&lt;/a&gt;, the masterpiece homage to urban signage by &lt;a href=&quot;http://www.typography.com/&quot;&gt;Hoefler &amp;amp; Frere-Jones&lt;/a&gt;, is quite possibly the best font ever devised.  It&amp;rsquo;s open and confident even when it&amp;rsquo;s not bold, balanced and practical.  I went with this as the headings, and it also was the best candidate for the smaller informational bits.  (After all, it seemed fitting to put navigational links in a font designed for signage.&lt;/p&gt;
&lt;p&gt;The downside of such a perfect font is that it&amp;rsquo;s not free.  It would be fantastic if Apple or Microsoft were to license Gotham for their respective operating systems, but I don&amp;rsquo;t see that happening any time soon.  Those that don&amp;rsquo;t want to install Gotham will see Century Gothic (if it&amp;rsquo;s installed, most likely because they got it bundled with Microsoft Office), or something in the Lucida family.&lt;/p&gt;
&lt;h3&gt;Accentuate the Important, Diminish the Rest&lt;/h3&gt;
&lt;p&gt;I brought down the contrast a bit, and did away with the background graphic.  Some color was sprinkled around to help create a meaningful mental model of each page.  I got the idea for the categories above the titles from &lt;a href=&quot;http://randsinrepose.com/&quot;&gt;Rands in Repose&lt;/a&gt;, one of my favorite regular reads.&lt;/p&gt;
&lt;p&gt;The default set of post meta info that Wordpress provides is far more than necessary.  I got rid of everything that didn&amp;rsquo;t directly benefit the goals of conversing with the world through this blog.&lt;/p&gt;
&lt;h3&gt;Comments&lt;/h3&gt;
&lt;p&gt;It seems awkward that my comments should have a blue left border, and reader comments are unadorned.  Simply using random colors wouldn&amp;rsquo;t do.  So, I wrote a function that will hash a string into a color value.  A simpler hash would have sufficed, but I wanted more control over the range of colors that it selects, and &lt;code&gt;&lt;a href=&quot;http://php.net/rand&quot;&gt;rand()&lt;/a&gt;&lt;/code&gt; was a good fit.  So, your comment will always have the same color (unless you use a different email address, of course) and all the colors will be in a particular mid-range of luminosity that is bold, but not overpowering.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve already run into a few situations on this blog where I felt that threaded comments would have been helpful. However, the threaded forum-style comments would be complex and counterproductive.  I grabbed a standard threaded-comment plugin, and tweaked it to replace the interface with a few hyperlinks.  Since conversations are more naturally many-to-many, I&amp;rsquo;d like to implement something along the lines of what &lt;a href=&quot;http://1976design.com/blog/archive/2003/11/12/comments/&quot;&gt;Dunstan Orchard used to have on his blog&lt;/a&gt;, but doing that the right way means a bit more investment, and this project was dangerously close to being back-burnered forever.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Going Fast, Frankenstein, and Refactoring</title>
		<link href="https://blog.izs.me/2008/01/going-fast-frankenstein-and-refactoring/"/>
		<updated>2008-01-21T18:00:48Z</updated>
		<id>https://blog.izs.me/2008/01/going-fast-frankenstein-and-refactoring/</id>
		<content type="html">&lt;p&gt;Very soon now, the project that has consumed my days for the last 6 months will go into public beta.  It&amp;rsquo;s too early to pop the champagne, and that&amp;rsquo;s not what this post is about.  However, the newness of this project is worth pointing out for the following reason: We&amp;rsquo;re &lt;em&gt;already&lt;/em&gt; planning a fairly major refactoring effort to take care of a lot of code rot that has crept into the designs.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s right.  We haven&amp;rsquo;t released anything, and there&amp;rsquo;s already enough bloat to justify spending at least 2 weeks cleaning it up.&lt;/p&gt;
&lt;p&gt;Of course, due to the pressures of market, and the morale effects of delaying the release, we&amp;rsquo;re buttoning up what we have now as much as possible, and planning to work on the refactor once the beta is out there.  It may actually help a lot, since the gigantic firehose of traffic that Yahoo! points at sites has a way of helping even the most egotistical of developers realize that their clever baby needs some serious surgery.&lt;/p&gt;
&lt;p&gt;This post is going somewhere, I swear, but I can already tell it&amp;rsquo;s going to take me a while to get there.  Go get some coffee and a snack and come back.  I&amp;rsquo;ll wait.&lt;/p&gt;
&lt;h3&gt;Build Fast&lt;/h3&gt;
&lt;p&gt;In my opinion, the core of good software development methodology comes down to two basic questions that should be asked daily:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;What portion of your time is spent focused on the task of creating software?
        (That includes planning, discussion, and thinking as well as coding, provided that these non-coding activities are focused and aimed at creating software.)&lt;/li&gt;
    &lt;li&gt;Does it work today?
        (If you don&amp;rsquo;t know, then you are full of Fail.  Get on that right away.)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I call this the &lt;strong&gt;Go Fast&lt;/strong&gt; method.  The goal is to efficiently create software with &lt;strong&gt;minimum long-term cost and maximum long-term benefit, without driving away your best talent.&lt;/strong&gt;  &lt;small&gt;(Have I got the attention of the business and product people in the audience?  Good.  Please stay for the rest of the show.)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I know that someone out there is bound to point out the obvious parallels between my &amp;ldquo;go fast&amp;rdquo; methodology and Agile, and maybe they&amp;rsquo;re right.  To the extent that Agile accepts these premises as important, it is correct.  But I&amp;rsquo;m claiming that &lt;em&gt;everything else&lt;/em&gt; stands or falls based on how it affects these questions.  Stand-ups, planning meetings, org charts, IDEs, frameworks; they&amp;rsquo;re all only as good as their effect on the principles of speed and stability in development.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re developing software properly, you should be creating software that does something as soon as possible, and keep it up as much of the time as you can.  Until there&amp;rsquo;s something to look at, you&amp;rsquo;re just spinning your wheels.  Nowhere is this more true than on the web.  Photoshop comps don&amp;rsquo;t break in different browsers.  Product presentation decks don&amp;rsquo;t &amp;ldquo;feel klunky&amp;rdquo; when pieces load out of order.  Grand visions promise to solve all your problems and make you biscuits for breakfast, but they don&amp;rsquo;t deliver.&lt;/p&gt;
&lt;p&gt;You make software for a living?  So make software, already.  You wanna build a website?  What&amp;rsquo;s stopping you?  You don&amp;rsquo;t have designs yet?  Build the parts that you do have.  &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000809.html&quot;&gt;Always be releasing,&lt;/a&gt; even if your actual release date is months away.&lt;/p&gt;
&lt;p&gt;Build the core, and grow the other pieces up around it.  Every minute spent waiting, instead of actually building something, is worse than wasted.  When you live in the code day by day, it becomes a part of you.  You learn how the pieces work, and the knowledge is automatic.  When you get too far from it, it becomes foreign, like driving a car for the first time.&lt;/p&gt;
&lt;p&gt;The agilistas call this &amp;ldquo;shippable code.&amp;rdquo;  In my opinion, that&amp;rsquo;s a horrible term.  The vast majority of code that I&amp;rsquo;ve seen released into the wild was not even close to what I&amp;rsquo;d call &amp;ldquo;shippable,&amp;rdquo; but it got shipped just the same.  Most of the time, the prototypes leading up to the release were significantly worse.  Some agilistas are quick to point out that &amp;ldquo;shippable&amp;rdquo; doesn&amp;rsquo;t always really mean &amp;ldquo;that you would actually ship it.&amp;rdquo;  Sorry, but drivable means that you can drive it, and drinkable means that you can drink it, and flyable means that you can fly it, so if &amp;ldquo;shippable&amp;rdquo; doesn&amp;rsquo;t mean &amp;ldquo;you can ship it,&amp;rdquo; then they picked a bad term.&lt;/p&gt;
&lt;p&gt;I suspect the ambiguity is intentional on some level.  I think the claim that &amp;ldquo;Agile makes software faster&amp;rdquo; is a myth.  Agile methodologies, used in moderation by a well-balanced team of dedicated and talented individuals, &lt;em&gt;do&lt;/em&gt; tend to result in higher quality software, greater management visibility, and a happier bunch of people than any alternative, but that means that the overall development time can be significantly longer.  And if you&amp;rsquo;re not on a well-balanced team of dedicated and talented individuals, then no methodology is going to save that sinking ship, so dust off the CV and bail out ASAP.  But I digress, and besides, you already know that I think &lt;a href=&quot;http://foohack.com/2007/11/agile-scrum-sucks-but-so-do-the-alternatives/&quot;&gt;Agile sucks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I prefer to call it a running prototype, or an integration environment, or anything else that&amp;rsquo;s more, well, accurate.  &amp;ldquo;Shippable code&amp;rdquo; tells overeager managers that they can just press &amp;ldquo;stop&amp;rdquo; at any point and ship what they&amp;rsquo;ve got.  Nice dream land, hot shot, but it doesn&amp;rsquo;t actually work quite like that.  Nevertheless, a good integration development environment, where everyone&amp;rsquo;s code gets placed and which is subjected to regular updates and testing&amp;mdash;that&amp;rsquo;s important, almost as important as CVS and a decent build script, and for a lot of the same reasons.  If the team&amp;rsquo;s code isn&amp;rsquo;t conversing regularly, then the team may as well not be, either.  The best way to prevent blockages is to prevent assumptions; the best way to prevent assumptions is to check them &lt;em&gt;every single day&lt;/em&gt;.  So: &lt;q&gt;Does it work today?&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Completion feels good.  Getting something that works feels good.  That&amp;rsquo;s why we got into this business.  Because, despite all the pain and frustration and work that goes into developing software, &lt;a href=&quot;http://www.randsinrepose.com/archives/2007/11/11/the_nerd_handbook.html&quot;&gt;The High&lt;/a&gt; here is about as good as it gets.&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t get that waiting.  You don&amp;rsquo;t get that talking.  You get that when you are immersed in building something.&lt;/p&gt;
&lt;p&gt;From a team dynamic perspective, I can&amp;rsquo;t even find words to express how it makes people gel when we each do our little pieces, and plug them in, and see a site come up with data and styles and behavior and images and everything.  It&amp;rsquo;s a pretty marvelous event that makes everyone even more eager to get to work.  If you&amp;rsquo;re a web developer, don&amp;rsquo;t wait for your designer or back-end engineer to give you what you need.  Make an unstyled page with dummy data, if you have to, but make &lt;em&gt;something&lt;/em&gt; on day 1 if possible.  Then make a list of what you need.  When everyone can see their effect on the product, it&amp;rsquo;s amazing how fast they tend to deliver.&lt;/p&gt;
&lt;p&gt;Going fast and pushing to milestones also forces everyone on the team to prioritize.  There may be plenty of features that might be &lt;em&gt;nice&lt;/em&gt; to implement, but if speed is a priority, then it forces you all to work on the things that really &lt;em&gt;need&lt;/em&gt; to be implemented.  By raising red flags whenever something doesn&amp;rsquo;t work, the whole project stays in sync most of the time, and assumptions never get too far out of whack.  But, of course, that&amp;rsquo;s not the whole story.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignright&quot; src=&quot;https://blog.izs.me/2008/01/going-fast-frankenstein-and-refactoring/victor-frankenstein.jpg&quot; alt=&quot;Gene Wilder as Victor Frankenstein&quot; /&gt;Software development is a lot like building Frankenstien&amp;rsquo;s monster.  You start out with a pile of useless ugly pieces, and try to turn it into something beautiful.  Along the way, it&amp;rsquo;s a monstrosity, and tends to get uglier as you tack new bits onto it.  Then it kills people.&lt;/p&gt;
&lt;p&gt;In Mary Shelly&amp;rsquo;s classic, everyone Victor loves is killed by the eloquent and sensitive creature, who was turned evil by his creator&amp;rsquo;s neglect and hatred.  If software could walk and talk, how many developers would still be alive today?&lt;/p&gt;
&lt;h3&gt;Slow Down&lt;/h3&gt;
&lt;p&gt;Don&amp;rsquo;t build Frankenstein&amp;rsquo;s monster, or at least, don&amp;rsquo;t figure you&amp;rsquo;re &amp;ldquo;mostly done&amp;rdquo; once it walks and talks, as the strict waterfall process proposes.  Going fast is important, and necessary.  You can&amp;rsquo;t fix pure ideas very easily, because it&amp;rsquo;s hard to see what&amp;rsquo;s wrong with them.  Write the code.  But know that it&amp;rsquo;s going to have to be rewritten, possibly several times.  Plan for it, and keep it in the back of your mind.&lt;/p&gt;
&lt;p&gt;The hazard of moving quickly is that we tend to go with the &lt;em&gt;easy&lt;/em&gt; choice, rather than the &lt;em&gt;good&lt;/em&gt; choice.  Adding one more method onto the class I&amp;rsquo;ve already got is easier than creating a whole new class; nevermind that it doesn&amp;rsquo;t really &amp;ldquo;fit&amp;rdquo; with what this type of object is supposed to be doing.  Do that once, and it&amp;rsquo;s probably a lot simpler and clearer than any alternative.  Do that 50 times, and you end up with a &lt;a href=&quot;http://en.wikipedia.org/wiki/God_object&quot;&gt;theological problem&lt;/a&gt;, or something else &lt;a href=&quot;http://en.wikipedia.org/wiki/Code_smell&quot;&gt;equally pungent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This will happen.  Every time.  If you don&amp;rsquo;t have some downright embarrassing shit-tastic WTF-worthy code lurking in your project&amp;mdash;I mean, the kind of thing where you see a bug report go to your coworker, and you say to him, &lt;q&gt;Oh, I&amp;rsquo;ll take that one, I know that feature&lt;/q&gt;, but really, you&amp;rsquo;re saying &lt;q&gt;Please don&amp;rsquo;t look at that code, or at least, if you do, please don&amp;rsquo;t judge me&lt;/q&gt;&amp;mdash;then you probably weren&amp;rsquo;t going fast enough.  The remarkable thing isn&amp;rsquo;t that this team has produced a product that &amp;ldquo;already&amp;rdquo; needs a cleanup; the remarkable thing is that we all seem to recognize that we need to clean things up, before it&amp;rsquo;s blown up in any serious way yet.  That&amp;rsquo;s why I&amp;rsquo;m thankful to be on the team that I am.  I&amp;rsquo;ve heard it said that the difference between a good programmer and a bad programmer is that a good programmer feels pain when he looks at ugly code he&amp;rsquo;s written, while a bad programmer thinks everything he&amp;rsquo;s done is great.&lt;/p&gt;
&lt;p&gt;I used to be proud of every bit of code I&amp;rsquo;d written, like a two-year-old who just learned how to use the potty.  Then I grew up a little bit, and realized that my shit stinks, and hoped no one would ever see it.  I&amp;rsquo;ve grown up a little more, and realized that everyone shits, so there&amp;rsquo;s nothing to be ashamed of.  I try to work towards a point where my actually shit doesn&amp;rsquo;t stink at all, but I&amp;rsquo;m not all that hopeful about that.  The fecality of this line of metaphor, while a bit disgusting, is meant to highlight an important point.&lt;/p&gt;
&lt;p&gt;You want to create code that is nice to be around?  Do your best to build quality in from the start.  The more you learn, the better you&amp;rsquo;ll be at it, especially if you manage to code yourself into some truly awful maintenance nightmares, where you can&amp;rsquo;t walk away and can&amp;rsquo;t blame anyone else.  But no matter how good you get, it&amp;rsquo;s still gonna stink most of the time.  &lt;a href=&quot;http://scribesonic.com/Blog/Archive/2007/10/04/Coding-Horror-Interview.aspx&quot;&gt;Everyone&lt;/a&gt; writes &lt;a href=&quot;http://thedailywtf.com/Articles/What_Could_Possibly_Be_Worse_Than_Failure_0x3f_.aspx&quot;&gt;bad code&lt;/a&gt;.  So fix it.&lt;/p&gt;
&lt;h3&gt;Refactoring&lt;/h3&gt;
&lt;p&gt;Wikipedia &lt;a href=&quot;http://en.wikipedia.org/wiki/Refactoring&quot;&gt;says&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite=&quot;http://en.wikipedia.org/wiki/Refactoring&quot;&gt;Refactoring neither fixes bugs nor adds new functionality. Rather it improves the understandability of the code or changes its internal structure and design, and removes dead code, to make it easier for human maintenance in the future.&lt;/blockquote&gt;
&lt;p&gt;To relate to the twin principles of software development, &amp;ldquo;Go fast&amp;rdquo; and &amp;ldquo;Does it work?&amp;rdquo;, refactoring is not important early on.  Surely, doing things as close as possible to The Right Way is usually a big help.  But &lt;a href=&quot;http://www.jwz.org/doc/worse-is-better.html&quot;&gt;The Right Way&lt;/a&gt; almost always flies in the face of the &amp;ldquo;Go Fast&amp;rdquo; maxim.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been privy to a few refactoring projects, I think I can safely say that almost every single one was an utter disaster.  Without naming names, here&amp;rsquo;s how a few turned out:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Lead engineer spent 3 months internally redesigning a feature with the intent of making it more extensible in the future.  Released.  Numerous bugs and problems.  When I left the company, it was still unstable.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;The product has grown into an amalgam of junk, and no one knows how to maintain all the disparate pieces. Can&amp;rsquo;t add features easily.  Needs to be re-architected.  [[numerous planning meetings]] OK, management says we have 2 months, so let&amp;rsquo;s just add another layer on it, change how it looks, and call it a day. Result was even more disorganized and difficult to extend.  &lt;strong&gt;FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;#2, again, with new people driving it, who insisted that the last ones were all wrong.  Same result.  &lt;strong&gt;DOUBLE FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Repeat, &lt;em&gt;again&lt;/em&gt;.  &lt;strong&gt;TRIPLE SUPER DUPER FAIL&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Last, but oh, so certainly not least, there were all the refactorings that didn&amp;rsquo;t even make it to a real execution.  The times when the development team was so fed up that they pushed to change things, and were told repeatedly that they could get to that just as soon as the next project got done&amp;mdash;there was always a &amp;ldquo;next project.&amp;rdquo;  &lt;q&gt;It works now, what&amp;rsquo;s the matter with it?&lt;/q&gt;  To the best of my knowledge, of three teams where I saw this pattern, (a) one company no longer exists, (b) another company lost all their best talent, and &amp;copy; in the third case, the team dissolved and everyone moved onto other projects (it was at Yahoo!, so it&amp;rsquo;s not like they were going to go under.)  For failing before they&amp;rsquo;d even gotten started, these refactoring projects are &lt;strong&gt;QUADRUPLE UBER KAMEHAMEHA FAIL!!!&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I strongly doubt that any of these cases were rare.  In fact, I think they&amp;rsquo;re the norm.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easy to cite bad management, and in a few of the above cases, management was to blame.  They put a high premium on getting new features, without recognizing the hidden costs down the road of dealing with the increasing instability.  However, the fact that I&amp;rsquo;ve come to realize is that most developers don&amp;rsquo;t really understand &lt;a href=&quot;http://foohack.com/2007/06/the-most-important-things-they-don%e2%80%99t-teach-in-compsci-101-but-should-maintainability/&quot;&gt;maintainability&lt;/a&gt;, and thus, tend to completely miss the point of what the purpose of refactoring should be.  As a result, their attempts at refactoring end up being worse than failures, because they are interpreted as success.&lt;/p&gt;
&lt;p&gt;I did get to see one significant refactoring project that I&amp;rsquo;d consider a success.  It was done in an under-the-radar sort of way, simply because it was the only way to add new features to a product that had grown frightfully unwieldy.  Also, I&amp;rsquo;ve seen and done a lot of small scale refactorings that were executed well and increased the quality of the product as a result.  (These, as the Wikipedia article mentions, are usually referred to as simply &amp;ldquo;cleaning up&amp;rdquo; the code base.)&lt;/p&gt;
&lt;p&gt;Refactoring can only be justified in the &amp;ldquo;Go Fast&amp;rdquo; methodology on the condition that it makes a more stable product, thus enabling developers to more efficiently create working software.  Elegance is not an end in itself.  The end goal is a working product, and &lt;a href=&quot;http://steve-yegge.blogspot.com/2007/12/codes-worst-enemy.html&quot;&gt;code is the enemy&lt;/a&gt;.  The vast majority of software development is about modifying an existing product.  The short-term memory of a human is limited and fleeting.  The less information that must be held in mind to understand a given section of code, the more quickly code can be modified, the lower the likelihood of introducing bugs with any given change.  So, there is, ultimately, only one purpose that Refactoring should serve:&lt;/p&gt;
&lt;div class=&quot;important&quot;&gt;&lt;p&gt;Be more obvious.&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;Love Your Monster&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;alignleft&quot; href=&quot;http://foohack.com/blog/wp-content/uploads/2008/01/frankenstein1831inside-cover.jpg&quot; title=&quot;Inside cover of the original 1918 Frankenstein by Mary Shelly.&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2008/01/going-fast-frankenstein-and-refactoring/frankenstein1831inside-cover.thumbnail.jpg&quot; alt=&quot;Inside cover of the original 1918 Frankenstein by Mary Shelly.&quot; /&gt;&lt;/a&gt;Victor was so consumed by his desire to create something new that he ended up rushing the job and not thinking ahead.  When his creature opened its eyes, he feared it, and fled, and tried to hide from his sin.  Shunned from the world, the creature asked Victor to make him a companion.  When his request was denied, he proceeded to destroy everything Victor loved.&lt;/p&gt;
&lt;p&gt;The moral of the story: Don&amp;rsquo;t ignore the ugliness you create.  It will find you.&lt;/p&gt;
&lt;p&gt;Refactoring should make the code simpler.  Complexity is the demon that we fight in writing code.  It is the enemy.  It opens the doors to bugs; it increases the difficulty in fixing problems and adding features; it raises the learning curve for new developers.  Sadly, a lot of refactoring seems to make code more complex rather than less.&lt;/p&gt;
&lt;p&gt;In my opinion, there are a few guidelines that work well when changing around existing code.  These guidelines apply equally well when creating new code, but since it&amp;rsquo;s harder to see the whole picture in that scenario, mistakes and shortcuts are more forgivable.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;There should be as few layers as possible, and no fewer.&lt;/li&gt;
    &lt;li&gt;There should be as few objects as possible, and no fewer.&lt;/li&gt;
    &lt;li&gt;Each object should be as small as possible, and no smaller.&lt;/li&gt;
    &lt;li&gt;Each object should know as little as it needs to, and no less.&lt;/li&gt;
    &lt;li&gt;Each piece should have a job, and should stick to it.&lt;/li&gt;
    &lt;li&gt;Comments should be mostly unnecessary.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Refactoring isn&amp;rsquo;t about using the coolest object oriented tricks that you just learned.  It&amp;rsquo;s not about making the code &amp;ldquo;more abstract.&amp;rdquo;  Abstraction is a necessary evil, in my opinion, not a feature.  Like Victor, it&amp;rsquo;s easy to get wrapped up in testing out new discoveries.  Most of us got into this job because we like playing with new puzzles, and that&amp;rsquo;s a great thing.  But one of the most satisfying puzzles is to reduce the complexity of an implementation without reducing the problems that it can solve.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m a big fan of &amp;ldquo;comment-driven development&amp;rdquo;.  That is, write out the pseudo-code in comment form first, stubbing out the functions that need to be implemented.  It helps to separate the design and implementation phases, since it can be hard to do both simultaneously.  As implementation kinks are getting worked out, the design might change slightly, but it helps to have the comments there as a guide to what I was originally thinking.  Once a module moves into a more stable place, the comments are a liability.  At best, they&amp;rsquo;re clutter; at worse, misleading.&lt;/p&gt;
&lt;p&gt;I like using those comments to clean up the code as well.  The process goes like this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Read through the code, starting at the entry point, and opening each file as it&amp;rsquo;s referenced.&lt;/li&gt;
    &lt;li&gt;If a section of code has a shit-ton of comments, then it needs work.  If it&amp;rsquo;s clean, just make sure it makes sense.&lt;/li&gt;
    &lt;li&gt;Make sure the comments match what the code is doing.&lt;/li&gt;
    &lt;li&gt;Remove any incorrect comments (comments that are lying.)&lt;/li&gt;
    &lt;li&gt;If the code isn&amp;rsquo;t understandable without the comments, then dig in and clean it up.  Rename methods, sort things better, etc.&lt;/li&gt;
    &lt;li&gt;Remove any and all implementation-related comments.  Those are dangerous.&lt;/li&gt;
    &lt;li&gt;Repeat until the file is almost comment free, and understandable.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;rsquo;m not so certain on the common refactoring claim that it should not change any existing functionality.  Sometimes, this is of vital importance.  However, there are plenty of times where the feature set of a bit of code simply needs to be trimmed or revised.  For public-facing APIs and products, either the functionality should not be changed, or interfaces should be publicly deprecated long before they are actually removed.&lt;/p&gt;
&lt;p&gt;For internal code, or APIs that are only used by a small number of consumers, my favorite approach is to just change it, and then see what breaks.  This should never be done in a way that affects customers, of course, but in a development environment, it&amp;rsquo;s quite appropriate to just change the back-end, and then update the front-end once it&amp;rsquo;s fixed.  Defensive coding is a good practice, but &lt;em&gt;overly&lt;/em&gt; defensive coding, where errors are not surfaced at all, can hide problems that may turn up later in unexpected ways.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t bother refactoring something you just wrote.  You&amp;rsquo;ll only make it worse.  You have to wait until you don&amp;rsquo;t remember how it works before you look at it again, or else you won&amp;rsquo;t be able to appreciate the difficult bits.  If you don&amp;rsquo;t have time for that, then make someone else do it, and tell them to be as harsh as possible.&lt;/p&gt;
&lt;h3&gt;Ego&lt;/h3&gt;
&lt;p&gt;As &lt;a title=&quot;&amp;quot;they&amp;quot; == Gerald M. Weinberg&quot; href=&quot;http://www.softwarequotes.com/ShowQuotes.asp?ID=605&amp;amp;Name=Weinberg,_Gerald_M.&amp;amp;Type=Q&quot;&gt;they say&lt;/a&gt;, &lt;q&gt;No matter what the problem is, it&amp;rsquo;s always a people problem.&lt;/q&gt;  The first and most important step in any refactoring effort is to detach our egos from our code.  This is even more of an issue if something you wrote is being refactored by someone else, or worse, if you are refactoring someone else&amp;rsquo;s code.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worked hard to develop a pretty good understanding of software development.  I&amp;rsquo;ve found that the technology side is easy&amp;mdash;on the human side, I still have a lot to learn, and probably always will.  Like a lot of geeks, I didn&amp;rsquo;t really get into the whole &amp;ldquo;social&amp;rdquo; thing in a serious way until I was almost an adult, and even today, I tend to focus on The Project and keep my distance from the rest of the world.  So, I suppose I don&amp;rsquo;t know the best way to handle this part of the problem.&lt;/p&gt;
&lt;p&gt;&lt;abbr title=&quot;Tim Berners-Lee&quot;&gt;TBL&lt;/abbr&gt;&amp;rsquo;s classic recommendation to be &lt;q&gt;loose in what you accept, and strict in what you send&lt;/q&gt; seems to apply well to this case.  On a healthy team, everyone is committed to a successful product, and leaves their egos at home when they come to work.  Code is passed around and everyone seeks as much input as possible.  On a dysfunctional team, everyone&amp;rsquo;s sense of self-worth is tied up in the appraisal of their work by others&amp;mdash;which has the twin effect of making them overly sensitive to criticism, and overly critical of their teammates.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s natural to put up resistance to the prospect of your code being modified.  After all, you wrote it that way for a reason.  Sit down with the other developer, and try to hash out the best approach.  If arbitrary decisions have to be made, explain that the best approach is to make them consistently.  Don&amp;rsquo;t focus on the problems in their code, but rather on the need for consistency and abstraction throughout the product.&lt;/p&gt;
&lt;p&gt;If someone won&amp;rsquo;t listen to reason, frankly, the only solution I&amp;rsquo;ve ever found is to either leave or wait for them to.  Hopefully they&amp;rsquo;re a contractor or something, so you can just wait, and do your best to isolate and minimize the damage as much as possible in the meantime.  If not, then the issue should be escalated, if only because it&amp;rsquo;s polite to tell your manager that their ship is in danger of sinking.&lt;/p&gt;
&lt;h3&gt;Oh, right, that book&amp;hellip;&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;alignright&quot; href=&quot;http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/isaacschlcom-20&quot;&gt;&lt;img src=&quot;https://blog.izs.me/2008/01/going-fast-frankenstein-and-refactoring/refactoring.thumbnail.jpg&quot; alt=&quot;Refactoring, by Martin Fowler&quot; /&gt;&lt;/a&gt;I read &lt;a href=&quot;http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672/isaacschlcom-20&quot;&gt;Refactoring&lt;/a&gt; about 5 years ago, but I&amp;rsquo;ve been meaning to pick it up again, since I&amp;rsquo;ve gotten a fair amount of real-world development experience since then, and have seen my share of dismal failures.  But this isn&amp;rsquo;t supposed to be a &lt;a href=&quot;http://books.slashdot.org/article.pl?sid=08/01/09/1515240&quot;&gt;book review&lt;/a&gt;, so I won&amp;rsquo;t review it in any detail.  It&amp;rsquo;s a good read, though, and I highly recommend it, even though it is mostly in Java, and seemed (to me at least) to simply highlight a lot of design problems inherent in the Java language that lead inevitably to bloated over-sized code.  But that&amp;rsquo;s a post for another day.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Surgical Team or Motley Crew of Adventurers?</title>
		<link href="https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/"/>
		<updated>2007-12-03T20:10:17Z</updated>
		<id>https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;ve read &lt;a href=&quot;http://www.amazon.com/dp/0201835959/?tag=isaacschlcom-20&quot;&gt;The Mythical Man-Month&lt;/a&gt; lately (at &lt;a href=&quot;http://foohack.com/2007/10/required-reading-for-web-developers-the-fountainhead-by-ayn-rand/#comment-132&quot;&gt;Geoff&amp;rsquo;s suggestion&lt;/a&gt;, among others) and it&amp;rsquo;s great.  I definitely recommend it highly to anyone in the software development field.&lt;/p&gt;
&lt;p&gt;In particular, I was struck by the idea of Mills and Brooks that software development could be done more effectively by a &amp;ldquo;surgical team.&amp;rdquo;  That is, the experienced lead developer writes all or most of the code, and is supported by a team of people to make him more effective.  While this is perhaps an effective way to capitalize on the significant difference between excellence and mediocrity in coders, it seems to me that most of the jobs on the team are today either (a) made obsolete by technological advancements, or (b) best done by specialists who float between teams.  For example, Yahoo! has some of the best Javascript and CSS &amp;ldquo;language lawyers&amp;rdquo; in the world&amp;mdash;but does every team really need one?  The need for a full-time toolsmith has been all but completely surpassed by the customizability of workstations and the availability of many high-quality tools for coding and such.&lt;/p&gt;
&lt;p&gt;The nature of software development has changed somewhat as well.  We aren&amp;rsquo;t writing assembly code any more; not only do we have high-level languages, in my current project, there are no fewer than 9 different languages in use, 10 if you count regular expressions, which we all use quite frequently.  &lt;a href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#ft1&quot; id=&quot;n1&quot; title=&quot;MySQL, PHP, Javascript, HTML, CSS, Bash, Perl, XML, yinst, regular expressions. Actually, 11 if you count Apache config directives.&quot;&gt;[1]&lt;/a&gt;  We aren&amp;rsquo;t all creating the same kind of stuff.  Thus, there is a strong need for &lt;em&gt;all&lt;/em&gt; of us to be experts, surgeons if you will, in our respective areas.  In addition, the non-coding jobs require their own sort of specialized focus.&lt;/p&gt;
&lt;p&gt;It occurred to me that this division of labor, where everyone depends on everyone else but everyone has a very different job, is more like a Dungeons and Dragons party than a surgical team.  Each member plays a vital but remarkably different role, each owns what they do, and each is the team&amp;rsquo;s expert in what they do.  As a webdev, I get consulted about front-end concerns, and am quick to ask a back-end engineer about things that touch their domain.  UI questions are decided by the interaction designer; questions of product features are handled by the product manager, etc.  I suspect that this is not unique to software for the web; a similar metaphor exists (or at least, &lt;em&gt;could&lt;/em&gt; exist) for application software.&lt;/p&gt;
&lt;p&gt;The best D&amp;amp;D parties are a bit formulaic, but that&amp;rsquo;s simply because a certain distribution of talents tends to be most adaptable to the most different kinds of problems.&lt;/p&gt;
&lt;h3&gt;Fighter&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/fighter-20071202-031522.jpg&quot; alt=&quot;fighter&quot; width=&quot;300&quot; height=&quot;365&quot; style=&quot;float:right&quot; /&gt; Not the flashiest or most prestigious role, Fighters have the lowest barrier to entry.  They accumulate experience quickly, and don&amp;rsquo;t have a lot of class bonuses.  (Until 3&lt;sup&gt;rd&lt;/sup&gt; Edition made them into action heroes, that is.)  But their simplicity belies a focus and strength that is crucial.  The fighter is the guy in the party that protects the more &amp;ldquo;thinky&amp;rdquo; types from anything that might get in their way.  There can be honor and satisfaction in bashing orcs one at a time.&lt;/p&gt;
&lt;p&gt;On a web development team, there are two archetypes that sometimes satisfy this role.  The first is the diligent code monkey who might not be the most ambitious or inventive, but is good at getting things done.  They are perfectly happy to churn through buglists, knocking down whatever they can.  If you show them how to do something, they&amp;rsquo;ll make it work however it has to through sheer force of will&amp;mdash;not always fast or elegant, but functional.  When depended upon properly, code monkeys are a great and valuable asset.&lt;/p&gt;
&lt;p&gt;Also in the fighter category are the producers who manage the content of the site, use the admin tools, troll for spammers, and do all the other busywork of web site maintenance.  When the programmers have moved on to the next problem, they&amp;rsquo;re still working.  Don&amp;rsquo;t forget them.  Whenever possible, make their lives easier.  They are the ones that keep your product shiny, so you can continue to be proud to have the URL sitting there on your resume.&lt;/p&gt;
&lt;h3&gt;Ranger&lt;/h3&gt;
&lt;p&gt;Rangers are good at surviving on their own.  They shun convention and human society. &lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/ranger-20071202-031443.jpg&quot; alt=&quot;ranger&quot; height=&quot;344&quot; width=&quot;300&quot; style=&quot;float:left&quot; /&gt; Often a bit wild themselves, they feel more comfortable in the company of nature.  Their chaotic bent can sometimes be a liability in an adventuring party, but their wide-ranging knowledge makes them hard to discount.  They are fiercely independent and difficult (if not impossible) to tame.&lt;/p&gt;
&lt;p&gt;In a programming team, this is the quintessential hacker.  Most mashups are created by a single ranger acting alone.  They are great at creating new things, and no browser quirk or network irregularity will stand in their way.  On the other hand, they don&amp;rsquo;t always follow convention, and have a tendency to create overly clever code that is unintelligible to anyone who follows in their wake.  Thus, they have to be watched closely lest they venture off.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve learned a lot of great tricks and techniques from the Ranger programmers I know.  I&amp;rsquo;m always a bit envious of their free approach to things, but I guess I&amp;rsquo;m just too timid to abandon convention completely.  Make sure that you understand their code before you try to adapt it to your own ends&amp;mdash;wild animals turn vicious when handled improperly.&lt;/p&gt;
&lt;h3&gt;Paladin&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/paladin-20071202-031508.jpg&quot; alt=&quot;paladin&quot; width=&quot;300&quot; height=&quot;435&quot; style=&quot;float:right&quot; /&gt; The paladin is the character class with the most stringent requirements.  They must conform to the strictest of moral codes and demanding attribute requirements.  As such, they&amp;rsquo;re rare, and respected.  The paladin&amp;rsquo;s job is twofold.  As a warrior subclass, he protects the party members from outside threats.  However, he&amp;rsquo;s also a healer, and a leader.  Charismatic and compassionate, he holds the party together by negotiating internal conflicts.  Unshakably positive, he nonetheless keeps everyone going with firm conviction in the mission.&lt;/p&gt;
&lt;p&gt;The best project managers aspire to paladin-like grace in their roles.  They defend the team from the pressures of management and the monotony of GANT and PERT charts, and make sure that everyone is able to work at their top potential.  When there&amp;rsquo;s a problem, they are approachable and always seek a win-win situation.  By being consistently honest and righteous, they earn the respect and admiration of those both below and above them on the management totem pole.&lt;/p&gt;
&lt;p&gt;When someone leads like a paladin, you &lt;em&gt;want&lt;/em&gt; to get your tasks done and meet your deadlines.  Not because you&amp;rsquo;re afraid of the consequences, but simply because their drive and attitude are contagious.&lt;/p&gt;
&lt;p&gt;There are some managers that are decidedly un-paladin-like.  Few things are as hazardous on a project as leadership that does not inspire confidence and commitment.  Attitude is everything in a leader.&lt;/p&gt;
&lt;h3&gt;Rogue&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/rogue-20071202-031430.jpg&quot; height=&quot;427&quot; width=&quot;300&quot; alt=&quot;rogue&quot; style=&quot;float:right&quot; /&gt; The rogue is a highly adaptable character.  They can pick locks and disarm traps, making them essential in any dungeon-faring party.  Surviving in the streets and cities on his wit and stealth, a rogue comes to know the different factions and groups, and learns to navigate the urban waters.  He knows how to make a buck, how to make a friend, and how to sell, and where to buy.&lt;/p&gt;
&lt;p&gt;The product manager takes on this role for a programming team.  They are often the ones who first envision the product and pitch it to management.  Often the only member of a programming team with a business background &lt;a href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#ft2&quot; id=&quot;n2&quot; title=&quot;Unless the webdev is a business school drop-out, that is.&quot;&gt;[2]&lt;/a&gt;, they settle questions of business goals and product requirements.  They make the powerpoint presentations that eventually drive the development of a real software product.&lt;/p&gt;
&lt;p&gt;The product manager, like a rogue, also sings the song of the party, talking them up when necessary and interacting with foreign powers &lt;a id=&quot;n3&quot; href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#ft3&quot; title=&quot;Some teams, of course, have a dedicated business development person, or &amp;quot;BizDev&amp;quot; who handles outside relationships so that the product manager can focus on product development. I realize that I&#39;m blurring the distinction, but I don&#39;t think it&#39;s a big deal.&quot;&gt;[3]&lt;/a&gt;.  If a product requires buy-in from another team, whether it&amp;rsquo;s a standards group in the same company or a potential outside partner, these are the people who make the calls and settle the deal.  Their day is usually full of meetings.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve known some developers who look down on product managers as being less technical.  This is a big mistake.  Their job is every bit as intellectually rigorous as ours, due to the huge amount of information that they need to be able to call forth on demand.  Since they deal with features and requirements that have not even been fully envisioned, and might not exist in any form whatsoever in the market, they are even more in the world of pure thought-stuff than programmers.  Make friends with your product manager, and you&amp;rsquo;ll find that they often do actually know their stuff.  And after all, some rogues will stab you in the back if you cross them ;)&lt;/p&gt;
&lt;h3&gt;Mage&lt;/h3&gt;
&lt;p&gt;The mage is the general purpose wizard.  They are resourceful and possess a broad understanding of all types of magic.  While not specialized in their studies, they are deeply theoretical, research oriented, and possess incredible focus and discipline.  Their power comes from being able to summon a wide variety of spells, but they tend to be weak and vulnerable in the chaos of melee, since they must prepare spells ahead of time.&lt;/p&gt;
&lt;p&gt;Many experienced back-end engineers fit into this role.  They tend to prefer structured approaches and strongly typed languages, and produce exceptionally high-quality code. &lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/wizard-20071202-031243.jpg&quot; width=&quot;300&quot; height=&quot;393&quot; alt=&quot;wizard&quot; style=&quot;float:left&quot; /&gt; They often have advanced degrees in computer science and are knowledgeable in the intricacies of design patterns and memory management.  They excel in areas that are somewhat regular and predictable, where the environment can be controlled, and the assumptions and edge-cases checked accurately.&lt;/p&gt;
&lt;p&gt;Dedicated programming wizards are obviously important on any programming team.  However, as much as &amp;ldquo;laymen&amp;rdquo; tend to see all software as a form of magic, the truth is that mages are actually pretty rare in the development world.  They are the core of the &amp;ldquo;20%&amp;rdquo; of developers who truly care about what they create and diligently work to improve their abilities.  Their craft is important to them, and they approach each problem with care and precision.  It is much more than just a way to pay the bills.&lt;/p&gt;
&lt;p&gt;While dedication is important, it comes at a price.  Many back-end engineers come to get out of touch with the way that &amp;ldquo;normal&amp;rdquo; people think and interact with software.  Most are pretty aware of this fact; I once knew an engineer who complained that bugzilla&amp;rsquo;s user interface was &lt;q&gt;obviously designed by a database expert&lt;/q&gt;.&lt;/p&gt;
&lt;h3&gt;Specialist Wizard (illusionist, abjurer, conjurer, etc.)&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/specialist_wizard-20071202-031311.jpg&quot; width=&quot;300&quot; height=&quot;421&quot; alt=&quot;specialist_wizard&quot; style=&quot;float:right&quot; /&gt; These are the wizards that have selected a certain area of magic in which to specialize, at the expense of reduced ability in some other area.  They have the same theoretical focus as a mage, but instead of having a broad understanding of every type of magic, they work to gain a much deeper understanding of a single area.  When it comes to solving that sort of problem, they are the best&amp;mdash;however, in other areas, they may be lacking.&lt;/p&gt;
&lt;p&gt;There are many &amp;ldquo;specialist wizards&amp;rdquo; in the programming world.  Here at Yahoo!, there are teams that focus 100% of their time on developing PHP, or MySQL, or Apache.  (&lt;a href=&quot;http://lerdorf.com/&quot;&gt;Rasmus&lt;/a&gt; comes to mind.)  The &amp;ldquo;Paranoids&amp;rdquo; team sits in the cubes adjacent to ours, and they work to make sure that all the software at Yahoo! is as bulletproof as possible.  The exceptional performance team does research to help us webdevs make our pages load and run faster.&lt;/p&gt;
&lt;p&gt;When you have a hammer, the world can begins to look like a nail.  A MySQL specialist will be tempted to suggest a database schema to solve any problem, even perhaps if the problem would be better solved by some other method.  You may be asking for trouble if you ask them to do something outside their specialization.  However, if you have a certain task that you&amp;rsquo;re certain to need, they can be invaluable.  Database optimization is a highly developed science, and it&amp;rsquo;s not always easy or simple.  Good programmers are rarely security experts (or even security knowledgeable!)&lt;/p&gt;
&lt;p&gt;If you aren&amp;rsquo;t likely to have a lot of problems in their specialty, it&amp;rsquo;s often better to consult with a specialist only if and when they&amp;rsquo;re necessary.  That way a single specialist can service multiple different teams.&lt;/p&gt;
&lt;h3&gt;Sorcerer&lt;/h3&gt;
&lt;p&gt;Sorcerers are similar to mages in the types of spells that they can cast, but instead of preparing spells from a spellbook, they simply select from the spells that they know, calling them when needed.  As such, they tend to be much more spontaneous.  However, they do not cultivate the discipline or depth of understanding of the wizards, and so they are limited in the number of spells that they can learn.  The sorcerer excels in areas that are uncharted, and their spontaneous approach to magic allows them to quickly adapt to any situation, no matter how unpredictable.&lt;/p&gt;
&lt;p&gt;The sorcerer is the perfect corollary to the webdev, &lt;abbr title=&quot;also known as&quot;&gt;aka&lt;/abbr&gt; the front-end engineer.  Web browsers are a constantly moving target, with each behaving a little differently and new versions being released all the time. &lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/sorceror-20071202-031341.jpg&quot; height=&quot;425&quot; width=&quot;300&quot; alt=&quot;sorcerer&quot; style=&quot;float:left&quot; /&gt; While programming patterns and the &amp;ldquo;right&amp;rdquo; ways of doing things can be useful, they are often too bulky for Javascript that has to be delivered, parsed, and executed on demand.  Essentially, the webdev creates software in an environment where the rules often make no sense; where the code has to work on different platforms with conflicting requirements; where speed and features are both must-haves.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve only recently heard of any colleges that make any serious attempt to teach courses on web development.  From what I have heard, the things they teach are pretty bad&amp;mdash;at best out of date, at worst outright harmful.  Most professional web developers that I&amp;rsquo;ve met didn&amp;rsquo;t learn their craft in school.  Like the sorcerer, they simply picked up their craft as they could, and learned techniques by studying &amp;ldquo;in the wild&amp;rdquo;; that is, by viewing source and reading websites and trying things out.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve said before, it takes a certain kind of crazy to want to write software in the browser.  You have to love the chaos and enjoy pulling out tricks and coming up with new hacks to work around impossibly ridiculous requirements.  At the same time, unlike the ranger&amp;rsquo;s free-wheeling wildness, the team&amp;rsquo;s sorcerer must have enough discipline to tame the chaos and create software with whatever degree of stability he can, in order to help create a functional and stable site.&lt;/p&gt;
&lt;p&gt;It can be a challenge at times to find stability and see the bigger picture and not write code for a single case.  Yes, yes, that hack made it work in Safari.  Lovely.  But it&amp;rsquo;s also going to be a nightmare to maintain, or you just ruined the accessibility.  Trade-offs are always present, and as far as I can tell, only experience and a lot of mistakes can teach you how to choose wisely.&lt;/p&gt;
&lt;h3&gt;Cleric&lt;/h3&gt;
&lt;p&gt;Diligent and committed to the ethos of their higher power, the cleric summons heavenly forces to do his bidding.  By making himself an instrument of the divine, he can accomplish great things.  A cleric&amp;rsquo;s power comes from their will and common sense (in D&amp;amp;D, this is the Wisdom score), as opposed to the cleverness and wit that Wizards rely on.  The cleric has the power to vanquish undead through the force of their convictions, and their healing spells make them a must-have for any party.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/cleric-20071202-031607.jpg&quot; alt=&quot;cleric&quot; height=&quot;395&quot; width=&quot;300&quot; style=&quot;float:right&quot; /&gt; In a programming party, this is the role of the &lt;abbr title=&quot;Quality Assurance&quot;&gt;QA&lt;/abbr&gt; tech.  These noble souls must possess tenacity and diligence far beyond what is normal or sane.  They must have the conviction and tenacity to insist that every test case be faithfully executed, even if it&amp;rsquo;s &amp;ldquo;impossible&amp;rdquo; that this-or-that change would have caused a regression.  When they see something in the product that doesn&amp;rsquo;t look right, they must get to the bottom of it, carefully catalog the event, and enter it into the bug queue.  They help banish the skeletons by exposing them to the light, no matter where they may try to hide.&lt;/p&gt;
&lt;p&gt;Many a programmer, close to a deadline, has remarked with exasperation, &lt;q&gt;Jeez, %$!@# QA keeps making me revisit this thing, I fixed that already!&lt;/q&gt;, only to find, when they go through the steps in the bug report, that yes, it &lt;em&gt;is&lt;/em&gt; indeed broken.&lt;/p&gt;
&lt;p&gt;While they may seem difficult or inefficient or outright stubborn at times, they&amp;rsquo;re vital.  Their wisdom is a balance to the programmers&amp;rsquo;&lt;/p&gt;&lt;noscript&gt;Certaines se réfèrent à des &lt;a href=&quot;http://www.glavaflex.com/casino-gratuit-liste.html&quot;&gt;casino gratuit&lt;/a&gt; qui ne jette pas frappé le mur opposé comme &amp;ldquo;Mellenberg Rolls.&lt;/noscript&gt; wit, and they keep teams from burning up.  Budget plenty of time for QA.  Start it early.  Get someone who knows what they&amp;rsquo;re doing, and use a proper bug tracking system.  Your customers won&amp;rsquo;t thank you for it, but they&amp;rsquo;ll certainly come to hate you if you don&amp;rsquo;t.
&lt;h3&gt;Druid&lt;/h3&gt;
&lt;p&gt;Free from any affiliations or alignment, the druid transcends the simple human existence to become one with the natural world.  Unlike the clerics who request their power from a deity, the druid opens themselves up to be nature&amp;rsquo;s instrument.  It is an understatement to say that they know about the wild world; they understand the ways of the animals and plants intuitively and instinctively.  Always seeking the way of balance and harmony and simplicity, they do not try to change or restrict the chaos of nature, nor do they rebel against the order that sometimes comes out of that chaos.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/druid-20071202-031538.jpg&quot; alt=&quot;druid&quot; height=&quot;347&quot; width=&quot;300&quot; style=&quot;float:left&quot; /&gt; Designers are called by many names in our industry.  &lt;abbr title=&quot;User Experience Designer&quot;&gt;UED&lt;/abbr&gt;s, Visual Designers, User Interface Architects, &lt;abbr title=&quot;Human Computer Interface&quot;&gt;HCI&lt;/abbr&gt; Specialists, Interaction Designers, &lt;abbr title=&quot;Information Architect&quot;&gt;IA&lt;/abbr&gt;s.  (Indeed, these roles are somewhat different, as the task of designing the user interface has many facets.)  Whatever they&amp;rsquo;re called, their job is to understand the expectations and habits of people they&amp;rsquo;ve never met, and shape the product into something that will fit the user&amp;rsquo;s mental model.  At the same time, they must understand how those models change in the face of new problems and new solutions, and be able to adapt their software properly.&lt;/p&gt;
&lt;p&gt;Like the druid, the UED must be free from any biases that may impede their ability to find the best solution for the user, even if that sometimes means that they may take issue with business objectives.  (If the business goals and the user goals cannot both be met, then the product is in real trouble, anyhow!)&lt;/p&gt;
&lt;p&gt;Part of the UED&amp;rsquo;s task is to map out the competition&amp;rsquo;s sites, to determine where this new product fits into the current ecosystem and how the target market&amp;rsquo;s expectations may have already been set.  They must sometimes balance the &amp;quot;ideal&amp;rdquo; way of doing something with the &amp;ldquo;common&amp;rdquo; way of doing it, simply because users have been trained in a certain way.&lt;/p&gt;
&lt;h3&gt;More Similarities&lt;/h3&gt;
&lt;p&gt;A lot of the same characteristics that make up a good party are also true of a good programming team.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;A team should have enough members to get the job done, and no more.&lt;/li&gt;
    &lt;li&gt;Each member should know his role, and enjoy doing it&lt;/li&gt;
    &lt;li&gt;Balance is key.  Each part of the task should be accounted for, and no one area should have more resources than is needed&lt;/li&gt;
    &lt;li&gt;Druids make so-so healers; UEDs are usually pretty good at QA.  A really good sorcerer might be able to handle the magic support if it&amp;rsquo;s not too intensive; most webdevs can usually throw some kind of back-end support together.  But, if a certain area of the project is significant, then it&amp;rsquo;s worth having someone who knows it best.&lt;/li&gt;
    &lt;li&gt;Multiclassing can make a character more diverse, but they won&amp;rsquo;t increase in levels as quickly.&lt;/li&gt;
    &lt;li&gt;Treasure should be distributed fairly.&lt;/li&gt;
    &lt;li&gt;If you have more than one mage (or sorcerer, or cleric, or druid, or whatever), they should either divide responsibilities or one should be in charge.  Same for the roles on a programming team.&lt;/li&gt;
    &lt;li&gt;It&amp;rsquo;s hard for a fighter to know how good a wizard is, or vice versa.  It takes one to know one.  Make sure your team helps interview new hires.&lt;/li&gt;
    &lt;li&gt;Raising levels and carefully assigning skill points will lead to a more powerful character.  We &lt;a href=&quot;http://en.wikipedia.org/wiki/Min-maxing&quot;&gt;min-max&lt;/a&gt; in real life, which is why we do it in RPGs.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Like most of the essays in &lt;a href=&quot;http://www.amazon.com/dp/0201835959/?tag=isaacschlcom-20&quot;&gt;The Mythical Man-Month&lt;/a&gt;, the fundamental principles of the surgical team are valid, even if the specific roles are mostly out of date.  Within each class on the adventuring party, you can sometimes see a combination of surgeon and co-pilot; sometimes the co-pilot is unnecessary, or there are two surgeons who divide up the work.&lt;/p&gt;
&lt;p&gt;The basic idea of thinking about the programming organization in a creative way is also worthwhile, even if only as a mental exercise.  I&amp;rsquo;m sure that there are other metaphors that would work equally well.&lt;/p&gt;
&lt;p&gt;In general, I think that the motley crew of adventurers is a lot more fun than the surgical team.&lt;/p&gt;
&lt;div class=&quot;small&quot;&gt;
&lt;h3&gt;Disclaimer&lt;/h3&gt;
&lt;p&gt;All images copyright © 2007 Wizards of the Coast.  Please don’t sue me, WotC!  We love you!&lt;/p&gt;
&lt;p&gt;I’ve taken some liberties with the images used.  The Rogue is actually a Bard.  The Specialist Wizard is some kind of psionicist.  The Ranger is actually a Scout.  I picked more for style than accuracy.&lt;/p&gt;
&lt;h3&gt;Footnotes&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#n1&quot; id=&quot;ft1&quot;&gt;[1]&lt;/a&gt; MySQL, PHP, Javascript, HTML, CSS, Bash, Perl, XML, yinst, regular expressions. Actually, 11 if you count Apache config directives.
&lt;a href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#n2&quot; id=&quot;ft2&quot;&gt;[2]&lt;/a&gt; Unless the webdev is a business school drop-out, that is.
&lt;a href=&quot;https://blog.izs.me/2007/12/surgical-team-or-motley-crew-of-adventurers/#n3&quot; id=&quot;ft3&quot;&gt;[3]&lt;/a&gt; Some teams, of course, have a dedicated business development person, or “BizDev” who handles outside relationships so that the product manager can focus on product development. I realize that I’m blurring the distinction, but I don’t think it’s a big deal.&lt;/p&gt;
&lt;/div&gt;
</content>
	</entry>
	
	<entry>
		<title>CSS Modal Dialog that Works Right</title>
		<link href="https://blog.izs.me/2007/11/css-modal-dialog-that-works-right/"/>
		<updated>2007-11-26T19:13:04Z</updated>
		<id>https://blog.izs.me/2007/11/css-modal-dialog-that-works-right/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;Note: This method has a few problems.  Scrolling breaks on the iPhone, and the test page has some issues with tabbing through links.  See &lt;a href=&quot;http://foohack.com/2007/11/css-modal-dialog-that-works-right/#comment-422&quot;&gt;my comment&lt;/a&gt; below.  A new version will be posted soon. &amp;ndash;i&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In my &lt;a title=&quot;Cross Browser Support for inline-block Styling&quot; href=&quot;http://foohack.com/2007/11/cross-browser-support-for-inline-block-styling/&quot;&gt;last post&lt;/a&gt;, I touched on a method to get different browsers to handle the inline-block display style.  I decided to use that on a project that I&amp;rsquo;m working on now that has a few &lt;a href=&quot;http://en.wikipedia.org/wiki/Modal_dialog&quot;&gt;modal dialogs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Feel free to skip all this and go &lt;a href=&quot;http://foohack.com/tests/vertical-align/dialog.html&quot;&gt;straight to the example&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the application world, creating a modal is pretty straightforward.  Here are some features that every modal window should have:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Interaction with the contents of the parent window should be *impossible* until the modal is dealt with.  Scroll-mouse should not scroll the background page, clicking should not click the background page, tabbing should not get you there, etc.&lt;/li&gt;
    &lt;li&gt;When you dismiss the modal, the parent window should be *exactly* how you left it.&lt;/li&gt;
    &lt;li&gt;The parent window should be dimmed, or there should be some other indicator that it is currently not available for interaction.  This has the corollary effect of making the modal &amp;ldquo;pop&amp;rdquo; a bit more.&lt;/li&gt;
    &lt;li&gt;In a web page, a modal should be constrained within the viewport.  Opening a new window just to show a dialog box is ugly as a bucket of slugs.&lt;/li&gt;
    &lt;li&gt;The modal should be placed consistently.  If it is not movable, then it should be centered vertically and horizontally.  This positioning should be consistent if the parent window is resized or moved.&lt;/li&gt;
    &lt;li&gt;The modal should be smaller than the parent window.  If the viewport is resized smaller than the modal, then scrollbars should appear that allow the user to see the rest of the modal.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The rule of thumb: The modal should be visible always and in every situation, the parent should be dimmed and preserved.  Almost every modal dialog I could find online broke a few of these rules.&lt;/p&gt;
&lt;p&gt;In some, the html and body elements have their overflow set to hidden when the modal is shown, so the current scroll position of those elements is lost.  If you were looking through a list of items, and you brought up a modal dialog related to one of them, then you&amp;rsquo;re back to the start of the list when the modal is dismissed. Annoying.&lt;/p&gt;
&lt;p&gt;In others,  you CAN scroll the background, but the modal is set to respond to the onscroll event to try to stay in place.  Some of the time, they use display:fixed to behave a little nicer in non-IE browsers.  At worse, you get a jumpy seizure-inducing experience; at best, you accidentally scroll the background and lose your place without realizing it.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a bit of an edge case, but you do have to handle cases where the modal might be taller/wider than the viewport.  As a test, I tried resizing the viewport down on a bunch of modal approaches.  Vertical centering often doesn&amp;rsquo;t do too well unless the contents are smaller than the viewport, so the top and bottom of the modal were cut off.  Unacceptable.&lt;/p&gt;
&lt;p&gt;It wasn&amp;rsquo;t terribly difficult to create one that obeyed these rules.  Here&amp;rsquo;s the approach that I took.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Build it with tables.&lt;/li&gt;
    &lt;li&gt;Replace the tables with divs, and give them the appropriate display:table, display:table-cell CSS rules.&lt;/li&gt;
    &lt;li&gt;Fret and hack to try to get it to work in IE, unsuccessfully.&lt;/li&gt;
    &lt;li&gt;IM &lt;a href=&quot;http://hedgerwow.com/&quot;&gt;another yahoo&lt;/a&gt; who has a reputation for being a great webdev hacker.&lt;/li&gt;
    &lt;li&gt;Adapt what he did to my needs.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;For the non-IE browsers, it&amp;rsquo;s pretty straightforward.  Take the scrollbars off of the HTML and BODY elements, and put them on #body instead.  #modal is a sibling of #body, so when it is 100% height and width, it will cover it up.  Then #modal will overlap the scrollbars of #body, without losing the scroll position.  Also, that means there&amp;rsquo;s no need to do any trickery with a negative right margin to try (unsuccessfully, on the mac) to overlap the scrollbars.&lt;/p&gt;
&lt;p&gt;Since .overlay element in the modal has a display:table, it will always expand to fit its contents.  .overlay&amp;rsquo;s parent is overflow:auto, so if .overlay is too big, it&amp;rsquo;ll let you scroll to see the rest.&lt;/p&gt;
&lt;p&gt;What this means is that you can&amp;rsquo;t cut off the top and bottom of the modal. It&amp;rsquo;ll be vertically centered if there&amp;rsquo;s room, and if not, it&amp;rsquo;ll be flush to the top and scrollable.  Perfect.&lt;/p&gt;
&lt;p&gt;For IE it gets trickier.  &lt;a href=&quot;http://www.hedgerwow.com/temp/css-vertical-align-center-overlay.html&quot;&gt;Hedger&amp;rsquo;s example&lt;/a&gt; showed 2 great ideas, though.  Basically, if you have 2 siblings that are display:inline-block, then, in IE at least, the line-block will expand to fit both of them.  So, they both end up being vertically centered to the height of the taller child.  If that taller element is width:0, then you essentially have an arbitrary line-height setter for the inline-block row.  In this case, the height is set to 100%.&lt;/p&gt;
&lt;p&gt;The other child will be whatever height it is based on its contents.  If that happens to be taller than 100%, then the line-height will be taller than the viewport.  At that point, the overflow:auto parent shows a scrollbar to let you see the rest.  Identical behavior to the standards browsers!&lt;/p&gt;
&lt;p&gt;The second problem arises with IE&amp;rsquo;s peculiarities when it comes to percentage heights.  For whatever reason, if you have a position:absolute element, it doesn&amp;rsquo;t like to do height:100% unless some parent has a fixed height value, like 500px.  100% of 100% doesn&amp;rsquo;t compute, for some reason.  Sadly, that means that the element that does the overlay wouldn&amp;rsquo;t be able to properly do its job in IE.  So, instead of using a separate transparent layer with a background image, Hedger used the &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms532997.aspx&quot;&gt;DXImageTransform.Microsoft.gradient&lt;/a&gt; filter on the modal container itself.  However, since the gradient filter doesn&amp;rsquo;t actually prevent interaction with the background, I added a 1 pixel transparent gif as the background image.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d very much like to not use this transparent pixel.  It feels a bit like a spacer gif to me.  But, all in all, it&amp;rsquo;s a pretty small price to pay.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t bother to tackle the tab-order focus stuff in this little test page, since I wanted to just isolate the stylistic stuff to get it working across browsers.  However, it would be good to put a focus handler on #body, and any time a #body element gets focus, focus the #modal instead.  That way, once you tab off the modal dialog, you&amp;rsquo;d get right back onto it.  In the spirit of being friendly to keyboard users, it would also be a good idea to keep track of the currently focused element when the modal opens, and go back to it once the dialog closes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://foohack.com/tests/vertical-align/dialog.html&quot;&gt;Here it is&lt;/a&gt; for your view-source pleasure.&lt;/p&gt;
&lt;p&gt;Please please feel free use this modal.  Life is too short to futz around trying to see the &amp;ldquo;cancel&amp;rdquo; button that is hiding off the screen so you can go back to reading your page.&lt;/p&gt;
&lt;p&gt;Let me know if you can think of any enhancements or find any problems with it.  Those of you in the US, I hope you had a great Thanksgiving.&lt;/p&gt;
&lt;h3&gt;Update&lt;/h3&gt;
&lt;p&gt;I updated it to add support for focus and blur events.  It works in Firefox, MSIE, and Safari. Opera on the Mac has some really strange behavior regarding focusing on links, and I decided that it just wasn&amp;rsquo;t salvageable.  Safari requires a bit of hacking to get the focus stuff to work properly, but I think it&amp;rsquo;s acceptable.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Cross Browser Support for inline-block Styling</title>
		<link href="https://blog.izs.me/2007/11/cross-browser-support-for-inline-block-styling/"/>
		<updated>2007-11-19T18:06:33Z</updated>
		<id>https://blog.izs.me/2007/11/cross-browser-support-for-inline-block-styling/</id>
		<content type="html">&lt;p&gt;I learned a new CSS trick from &lt;a href=&quot;http://blog.hedgerwow.com/&quot;&gt;one of the best insane inventor webdevs I know&lt;/a&gt;.  The pieces have been &lt;a href=&quot;http://www.google.com/search?q=display%3A-moz-inline-stack%3B+display%3Ainline%3B+display%3Ainline-block%3B+zoom%3A1%3B&quot;&gt;out there for some time&lt;/a&gt;, it seems, but I hadn&amp;rsquo;t ever seen this spelled out as simply and elegantly as he did it.&lt;/p&gt;
&lt;p&gt;Inline-block layout solves a lot of problems.  It lets you do some cool stuff previously thought impossible with CSS.  It makes vertical alignment work properly.  And sadly, it&amp;rsquo;s supported pretty badly.&lt;/p&gt;
&lt;p&gt;Mozilla doesn&amp;rsquo;t support inline-block at all, but they have -moz-inline-stack which is about the same.  Fair enough, since no one else understands -moz-inline-block, you can just do this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block css&quot;&gt;display:-moz-inline-stack;
display:inline-block;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you put inline-block after -moz-inline-stack, then Moz will start using the &amp;ldquo;right&amp;rdquo; one &lt;a title=&quot;That is, with version 3&quot; href=&quot;http://developer.mozilla.org/en/docs/Firefox_3_for_developers&quot;&gt;when it supports it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;IE supports inline-block, but only for elements that are natively inline.  So, if you really want to use inline-block, you&amp;rsquo;re restricted to spans and strongs and ems, when a list or paragraph would perhaps make more semantic sense (and also degrade more nicely for non-CSS users.)&lt;/p&gt;
&lt;p&gt;However, if you trigger &lt;a href=&quot;http://www.satzansatz.de/cssd/onhavinglayout.html&quot;&gt;hasLayout&lt;/a&gt; on a block element, and then set it to display:inline, it magically becomes an inline-block in IE!  By using the *property hack (which I love so well), you can hide the display:inline from all non-IE browsers effortlessly.&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s the code, in all its brief loveliness:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;css block&quot;&gt;display:-moz-inline-stack;
display:inline-block;
zoom:1;
*display:inline;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;From there, it pays to learn a thing or two about &lt;a href=&quot;http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align&quot;&gt;the vertical-align property&lt;/a&gt;.  It lets you do lovely things like &lt;a href=&quot;http://foohack.com/tests/vertical-align/image-labels.html&quot;&gt;this&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Benefits&lt;/h3&gt;
&lt;p&gt;Inline block elements can be vertically centered like display:table-cell, but they wrap when they get to the end of their parent.  Also, it&amp;rsquo;s supported across browsers using this hack, whereas display:table-cell is not supported in IE.&lt;/p&gt;
&lt;p&gt;This technique allows for some very interesting layout approaches that would have required a lot of very tricky use of floats previously.&lt;/p&gt;
&lt;h3&gt;Caveats&lt;/h3&gt;
&lt;p&gt;If an element is inside of an inline block, and lies outside the &lt;a href=&quot;http://www.w3.org/TR/REC-CSS2/visuren.html#inline-formatting&quot;&gt;line box&lt;/a&gt;, then it won&amp;rsquo;t be clickable in Mozilla.  Give the child element &lt;code&gt;position:relative&lt;/code&gt; to correct the problem.&lt;/p&gt;
&lt;p&gt;Elements treated this way will have &lt;a href=&quot;http://www.satzansatz.de/cssd/onhavinglayout.html&quot;&gt;hasLayout&lt;/a&gt; set in MSIE.  This is a weird and esoteric aspect of MSIE&amp;rsquo;s CSS engine that has potentially unforeseen consequences.  Beware.&lt;/p&gt;
&lt;p&gt;If an IMG element is directly inside an inline block element in Mozilla, it will stretch to the full width of that element.  Wrap all IMG tags in a block-level container element to avoid the problem.&lt;/p&gt;
&lt;p&gt;Since inline block elements wrap and flow like inline content, that means that they also respect white space like words on a page would.  That is, if there is &lt;em&gt;any&lt;/em&gt; whitespace between two inline-block elements, then a single space will be added between two inline-block elements.  If this causes a problem, you can either remove the whitespace or comment it out like so:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;html block&quot;&gt;&amp;lt;/div&amp;gt;&amp;lt;!--
--&amp;gt;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;All in all, the caveats are pretty easy to work around, and the benefits allow for some really cool stuff that would be almost impossible or very difficult otherwise.&lt;/p&gt;
&lt;h3&gt;The 2 Faces of vertical-align&lt;/h3&gt;
&lt;p&gt;In &lt;a href=&quot;http://foohack.com/2007/10/top-5-css-mistakes/#p41_vertical_alignment&quot;&gt;a classic CSS blunder&lt;/a&gt;, vertical-align can mean 2 extremely different things, depending on whether an element is display:inline-block or display:table-cell.&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;table-cell&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Align the element&amp;rsquo;s &lt;strong&gt;contents&lt;/strong&gt; according to the element&amp;rsquo;s vertical-align property.  IE, if the cell&amp;rsquo;s vertical-align is set to &amp;ldquo;middle&amp;rdquo;, then vertically center the element&amp;rsquo;s contents.  The height and position of the element itself is determined by the containing display:table element.&lt;/p&gt;&lt;/dd&gt;
&lt;dt&gt;inline-block&lt;/dt&gt;
&lt;dd&gt;&lt;p&gt;Align the &lt;strong&gt;element&lt;/strong&gt; according to the element&amp;rsquo;s vertical-align property.  IE, if the inline-block&amp;rsquo;s vertical-align is set to &amp;ldquo;middle&amp;rdquo;, then the element is vertically centered in the line-block.  The height and position of the element&amp;rsquo;s contents are determined by the standard block-level flow rules.&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;While I personally believe that this was a stupendously bad and confusing approach to take, I believe that the reasoning comes from backwards compatibility.  Inline blocks emulate the behavior of the IMG tag, and the vertical-align CSS property thus mimics the old valign attribute.  Table cells emulate the behavior of the TD tag, and the vertical-align CSS property thus mimics the behavior of the valign attribute on TDs.  In other words, in this way, CSS faithfully reproduces the sloppy errors of HTML.  It would have been better to use two different properties to achieve this effect; after all, vertical-align:baseline hardly makes sense for table cells.  Perhaps the inline-block type of vertical alignment would have been better called &amp;ldquo;line-position&amp;rdquo; or some such, since it is less like a vertical version of the text-align property.&lt;/p&gt;
&lt;p&gt;But, you write code with the language you have, not the language you wish you had, and CSS is what it is, at least for the foreseeable future.&lt;/p&gt;
&lt;p&gt;Recently, I had to achieve &lt;a href=&quot;http://foohack.com/tests/vertical-align/dialog-table.html&quot;&gt;an effect&lt;/a&gt; that was extremely tricky by standard methods, but extremely easy using tables.  I decided to test out a display:table approach, and then try to hack it into place for IE, since it is the only browser that does not support this approach.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://foohack.com/tests/vertical-align/dialog.html&quot;&gt;The result&lt;/a&gt; uses a fairly large number of DIVs, but still fewer than the straight table approach, and without the semantic rubble of tables.  The dialog is vertically and horizontally centered, but if you resize the viewport too small, the dialog will not be hidden permanently, due to the &amp;ldquo;collapse to fit&amp;rdquo; nature of the table display style.  Doing this will an inline-block would have been quite a bit more difficult.&lt;/p&gt;
&lt;p&gt;For IE, I used the 50/50 hack.  Create a position:absolute element at top:50%.  Then, create a position:relative child at top:-50%.  The negative top rule on the position:relative element will be misinterpreted, and result in a vertically centered box.  The downside is that IE gets a scrollbar if the viewport is less than twice the height of the dialog.  But, that&amp;rsquo;s a pretty acceptable down side, in my opinion.&lt;/p&gt;
&lt;p&gt;Sadly, unlike with display:inline-block, it doesn&amp;rsquo;t look like there&amp;rsquo;s any real consistency to support display:table across browsers.  (Except, of course, using table tags.)  You basically just have to hack something for IE that achieves the same effect, and which approach you use varies on the effect you&amp;rsquo;re going for.  In this case, I exploited an IE positioning bug to achieve vertical centering, but other situations would require different approaches.  If you&amp;rsquo;re doing complex layouts using display:table, which in a perfect world would indeed be a great way to do it, you&amp;rsquo;re going to have a lot of work cut out for you hacking away at IE.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s pray that IE 8 supports display:table!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Agile Scrum Sucks (but so do the alternatives)</title>
		<link href="https://blog.izs.me/2007/11/agile-scrum-sucks-but-so-do-the-alternatives/"/>
		<updated>2007-11-12T18:00:38Z</updated>
		<id>https://blog.izs.me/2007/11/agile-scrum-sucks-but-so-do-the-alternatives/</id>
		<content type="html">&lt;p&gt;Software development is not like manufacturing.&lt;/p&gt;
&lt;p&gt;In manufacturing, you build to the same specifications over and over again.
In software development, you create a new thing each time, and the specifications typically change along the way.&lt;/p&gt;
&lt;p&gt;In manufacturing, 100 factories can generally produce 100 times as many things as 1 factory.  Adding a new factory means that more things will be produced.
20 programmers are far less productive than 5.  Adding another programmer often means that the project will be delayed even further.&lt;/p&gt;
&lt;p&gt;In manufacturing, you can gradually tune your methods based on past experience, and become more efficient over time.
In software development, past problems generally have little if anything to do with future problems.  The best you can hope for is to find and learn very broad abstract efficiency boosters like &amp;ldquo;best practices.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Manufacturing and software development are similar in what I think of as the &amp;ldquo;expert effect.&amp;rdquo;  Generally speaking, for a given task and a given group of people, one of them will be best at that task.  If that expert is given control of that task, then they will tend to do it well; if they are forced to take input from everyone else in the group who isn&amp;rsquo;t as good as them, then the task will tend to suffer, if only from the time required to evaluate the input and decide not to use it.  Management is one such task, perhaps the most important one.&lt;/p&gt;
&lt;p&gt;Most people I know seem to accept these premises.  That is, unless you&amp;rsquo;re an Agile Scrum zealot.  Then you may think that:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Specifications change, but that&amp;rsquo;s OK, because it&amp;rsquo;s &amp;ldquo;iterative design&amp;rdquo;.&lt;/li&gt;
    &lt;li&gt;You can predict how long something will take, and your predictions will get better over time.&lt;/li&gt;
    &lt;li&gt;Tasks can be broken down based on the time required, and can be assigned to any &amp;ldquo;qualified&amp;rdquo; person.&lt;/li&gt;
    &lt;li&gt;Programming experts will be happier if they do project management, and are qualified to do so.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This is all 100% bullshit.  In the real world:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Specifications change because it&amp;rsquo;s virtually impossible to design something that&amp;rsquo;s never been done if you can&amp;rsquo;t see it as you go along.  The specs stop changing when the team puts their collective foot down to management and the customer, and that&amp;rsquo;s when &amp;ldquo;research&amp;rdquo; stops and &amp;ldquo;development&amp;rdquo; begins.  The time at which this occurs is flexible, but if you&amp;rsquo;re targeting a fixed release date, it&amp;rsquo;d better be soon!  If you don&amp;rsquo;t build in enough time for research, then the product will not be satisfactory.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.codinghorror.com/blog/archives/000981.html&quot;&gt;Your estimates suck.&lt;/a&gt;  And they&amp;rsquo;ll keep sucking, no matter what you do.  You&amp;rsquo;re probably around 10-15% accurate, and if you work your ass off, you can get up to a 20-25% accuracy rate.  Estimates that aren&amp;rsquo;t even remotely accurate are a waste of everyone&amp;rsquo;s time.&lt;/li&gt;
    &lt;li&gt;I&amp;rsquo;m not the only one, I&amp;rsquo;m sure, who finds that at least 60% of my planned tasks for any given sprint don&amp;rsquo;t get accomplished, either because a) they depend on something else that wasn&amp;rsquo;t evident at the planning meeting, b) they just weren&amp;rsquo;t as high priority as something that came up since the planning meeting, or c) my time estimates suck, and so I budgeted way less time than required for a few of my tasks.&lt;/li&gt;
    &lt;li&gt;No one likes project planning meetings.  But, since project managers typically aren&amp;rsquo;t programmers dealing with the software each day, they need our input.  If you&amp;rsquo;re a product manager, trust me, your team will absolutely love you if you can get these chores down a half hour or less.  Streamline every part of the meeting that requires their attention.  Focus their time on what you actually need them to weigh in on.  Have estimates prepared, and ask them to critique them.  Wrapping it in silly games won&amp;rsquo;t help&amp;mdash;that just makes it take longer.  &lt;strong&gt;Programmers hate project management.&lt;/strong&gt;  So make them do as little of it as possible.  Trust me, if they wanted to be project managers, &lt;strong&gt;they wouldn&amp;rsquo;t have degrees in computer science.&lt;/strong&gt;  Let them get back to work.  There&amp;rsquo;s no worse blocker than having to stop coding for a meeting.  Like torture or invasive surgery, it&amp;rsquo;d better be necessary, otherwise it&amp;rsquo;s all kinds of wrong.  (The &amp;ldquo;5 levels of estimates&amp;rdquo; is the Dread Cthulhu of time-wasters.)&lt;/li&gt;
    &lt;li&gt;Prototypes don&amp;rsquo;t pay the bills.  If you create a bunch of dummy-functional UI screens, you haven&amp;rsquo;t created software, you&amp;rsquo;ve created a demo.  A prototype is an important first step, a valuable communication tool.  But you can&amp;rsquo;t sell a demo, which means you can&amp;rsquo;t create demos forever.  Once the &amp;ldquo;research&amp;rdquo; phase is over, demos are a liability, because they tend to obscure missing functionality.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;There are a few things that scrum gets right:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;When it comes to estimating, often the crowd is smarter than the individual.  &amp;ldquo;Planning poker,&amp;rdquo; though overly goofy and time-consuming, does a pretty good job.  But it takes forever, and while I&amp;rsquo;m waiting to show my card, I&amp;rsquo;m only thinking, &lt;q&gt;I&amp;rsquo;d really rather be coding right now.&lt;/q&gt;  I&amp;rsquo;m not a project manager &lt;small&gt;(that&amp;rsquo;s part of the problem with Agile Scrum)&lt;/small&gt; but I know there simply must be a better way.&lt;/li&gt;
    &lt;li&gt;A daily meeting is &lt;strong&gt;crucial&lt;/strong&gt; if there&amp;rsquo;s more than one person on the team.  It&amp;rsquo;s still best if everyone can physically see the people that they&amp;rsquo;re working with from where they sit, but that&amp;rsquo;s not always possible.  Even in that case, forcing everyone to stand up for a few minutes each morning and tell everyone what they&amp;rsquo;re up to is a good way to make sure that the team doesn&amp;rsquo;t get sidetracked or splintered.  It keeps programmers from &amp;ldquo;going dark&amp;rdquo; and coming back a week later with something that doesn&amp;rsquo;t mesh with the rest of the product.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;It seems that some Scrum Masters are die-hard zealots, and others follow a more &amp;ldquo;pick and choose&amp;rdquo; approach.  The Agile methodology explicitly encourages project managers to use what works, and customize the process to meet their needs.&lt;/p&gt;
&lt;p&gt;In other words, Agile Scrum makes a lot of ridiculous assumptions, and suggests a set of practices&amp;mdash;some harmless, some obvious, some useful, and others specifically counter-productive&amp;mdash;and then says, &lt;q&gt;customize to your team/product/environment.&lt;/q&gt;  If your project fails or misses a deadline, well, you didn&amp;rsquo;t do it right, or the team wasn&amp;rsquo;t committed, or the management was unreasonable.  &lt;em&gt;Anything at all to avoid placing blame on the methodology.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Anyone else see the similarities to a faith healer?&lt;/p&gt;
&lt;p&gt;Ultimately, a successful project that uses Agile Scrum is successful for the same reason that any other project is successful:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;The management managed, and got out of the workers&amp;rsquo; way.&lt;/li&gt;
    &lt;li&gt;The workers were capable of doing what they were called on to do, and happy doing it.&lt;/li&gt;
    &lt;li&gt;The product vision was something the customer wanted&lt;/li&gt;
    &lt;li&gt;No one went dark.  (That goes for upper management, as well!)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;On my current team at Yahoo!, we use Agile Scrum, at least in name.  Ostensibly, Yahoo! officially endorses the use of Agile Scrum.  In my experience, successful use of agile amounts to this:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Every week or two, the team gets together for an hour to talk about where the project is at.&lt;/li&gt;
    &lt;li&gt;Every day, the team spends 15 minutes in the morning with each person telling what they&amp;rsquo;re up to.&lt;/li&gt;
    &lt;li&gt;Throughout the day, everyone is in constant communication via IM, email, and in person.&lt;/li&gt;
    &lt;li&gt;Put your tasks in Bugzilla, and mark them done when they&amp;rsquo;re done.&lt;/li&gt;
    &lt;li&gt;Most important: Management&amp;rsquo;s vision of the product is something that the team is happy building, and the team is selected for their expertise in the kinds of problems that the product raises.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;No one likes to create crap.  No one likes to be surprised with new requirements in the 11th hour.  No one likes to be held responsible for something they&amp;rsquo;re no good at.&lt;/p&gt;
&lt;p&gt;Everyone loves to be a part of a quality product.  Everyone likes to have visibility into their own future.  Everyone likes to be praised and respected for doing what they love.&lt;/p&gt;
&lt;p&gt;By taking credit for the success of projects that use it, Agile Scrum glosses over these fundamental principles and tries to turn the team into a bunch of part-time project managers.  Anything that deviates from the plan is derided as &amp;ldquo;cowboy coding&amp;rdquo; or &amp;ldquo;waterfall process.&amp;rdquo;  Granted, these two paradigms do tend to standardize bad practices, and they do little to encourage communication, but they also admit important aspects of the software development world:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Actual coding, typing characters into an editor, is best done alone without distractions.  You think with your own brain only.  All coding is, at some level, &amp;ldquo;cowboy coding.&amp;rdquo;&lt;/li&gt;
    &lt;li&gt;If piece A depends on piece B, then it makes no sense to start working on A until B is done.  It makes even less sense to QA a half-working early pre-alpha dev version of the product, or worse yet, file bugs against it.  &lt;strong&gt;Of course it&amp;rsquo;s broken.&lt;/strong&gt;  Don&amp;rsquo;t distract your developers telling them what they already know.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Chances are wildly against getting any software product out on time or under budget.  My heart goes out to project managers and executives who are tasked with controlling the chaos.  I understand why many of them might grasp at ideologies that promise to solve the problems, but Scrum rarely helps the odds.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re doing software development right, you&amp;rsquo;re probably doing Agile wrong.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What Makes a Good Web developer, and how can you tell?</title>
		<link href="https://blog.izs.me/2007/11/what-makes-a-good-web-developer-and-how-can-you/"/>
		<updated>2007-11-05T18:00:59Z</updated>
		<id>https://blog.izs.me/2007/11/what-makes-a-good-web-developer-and-how-can-you/</id>
		<content type="html">&lt;p&gt;Luckily, I&amp;rsquo;ve never been a manager with people who report up to me.  I&amp;rsquo;ve been a tech lead on a few teams, and quite frankly, I find that I prefer to be doing the coding than directing it.  Managing is about 10% more money for 100% more work that is 100% less fun.  No thanks.&lt;/p&gt;
&lt;p&gt;Nevertheless, it&amp;rsquo;s always a good idea to take part in the hiring process, and smart managers get their team involved.  I&amp;rsquo;ve sat in on a lot of interviews, and talked and thought a lot about interview processes.  However, despite all the complications inherent in the interview process, it is remarkably difficult to hire web developers.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;A lot of great web developers have very odd educational history.  Querying is hard.&lt;/li&gt;
    &lt;li&gt;Everyone knows what keywords to put in their resume.&lt;/li&gt;
    &lt;li&gt;Some really horrible web developers would be great programmers, but are not of the mindset to deal with in-browser development.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Today, I looked through a stack of resumes from upcoming college grads with my current manager since he&amp;rsquo;s got a requisition open for a front-end engineer.  In the interest of full disclosure on this blog, here&amp;rsquo;s what I was looking for:&lt;/p&gt;
&lt;h3&gt;Education - Lots of topics&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;d rather see a list of minors a mile long than a single major that has anything to do with the subject.  The world&amp;rsquo;s top expert on distributed systems and service oriented architectures probably can&amp;rsquo;t do much else.  When you have a hammer, the world looks like a nail, as they say.&lt;/p&gt;
&lt;p&gt;On the other hand, you have a candidate who started out in graphic design, and then decided that he liked math better, and then took some classes on computer science, and finally started making web pages, and decided that he&amp;rsquo;d like to do that professionally.  Most of the best web developers that I&amp;rsquo;ve met have bounced around a lot in their studies, and only settled on web development because they found it satisfying.&lt;/p&gt;
&lt;p&gt;Web development is a very open and strange discipline, and people who are self-directed and cross-disciplinary tend to excel in it.&lt;/p&gt;
&lt;p&gt;On the other hand, no education at all is also not necessarily a bad thing.  In this case, it didn&amp;rsquo;t apply, since the resumes were all for upcoming college grads.&lt;/p&gt;
&lt;h3&gt;Extra Activities, Other Information, etc. - Play an Instrument&lt;/h3&gt;
&lt;p&gt;It seems like a lot of web developers have some kind of musical inkling.  Either they play an instrument, make electronic mixes, do amateur production for local bands, run a radio show or podcast, something.  Music seems to be a common theme.&lt;/p&gt;
&lt;p&gt;Some of us are terrible at it.  For example, I&amp;rsquo;m a bad-to-moderate guitarist.  But we all seem to enjoy it.&lt;/p&gt;
&lt;p&gt;Put it on your resume.  It matters.&lt;/p&gt;
&lt;h3&gt;Objective - If it&amp;rsquo;s not compelling, skip it.&lt;/h3&gt;
&lt;p&gt;I saw a few objectives that read like carbon copies of one another: &lt;q&gt;An entry level position in a software company.&lt;/q&gt;  Or this one: &lt;q&gt;A job where I can put my education to use.&lt;/q&gt;  Jeezus, why not just put &lt;q&gt;A soul-crushing career kissing the ass of my dipshit manager while I contemplate burning the building down&lt;/q&gt;?&lt;/p&gt;
&lt;p&gt;On the other hand, I saw one that said &lt;q&gt;Remake the web in a groovier image.&lt;/q&gt;  His name got on the callback list.  A lot of them didn&amp;rsquo;t have an objective section, which is perfectly acceptable if it&amp;rsquo;s obvious.&lt;/p&gt;
&lt;p&gt;Ultimately, &lt;a href=&quot;http://blip.tv/file/300883/&quot;&gt;every hiring decision is an exercise in risk management&lt;/a&gt;.  The hiring manager has to ask himself, &lt;q&gt;Does it put my project more or less at risk to hire this person?&lt;/q&gt;  Adding a new team member is a big risk.  They might be a drag, and bring down the productivity of the rest of the team.  On the other hand, you need people on your team, and not having them can be an even bigger drag.  On an emotional level, hiring decisions come down to a question of &lt;q&gt;Will I &lt;strong&gt;enjoy&lt;/strong&gt; the experience of working with this person, or not?&lt;/q&gt;  There are a lot of really smart people out there, and some of them are a chore to work with.&lt;/p&gt;
&lt;p&gt;The resume is a validation key designed to get you in a particular door.  The more it shows off what you&amp;rsquo;re really like and what you&amp;rsquo;re really into, the more likely it is that you&amp;rsquo;ll walk through a door and like what you find.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>ADHD and Web Development</title>
		<link href="https://blog.izs.me/2007/10/adhd-and-web-development/"/>
		<updated>2007-10-22T20:02:43Z</updated>
		<id>https://blog.izs.me/2007/10/adhd-and-web-development/</id>
		<content type="html">&lt;p&gt;I&amp;rsquo;m working on a site right now with Yahoo! that has not yet been released to the public, so I can&amp;rsquo;t say too much about it.  When I first started here, I was on the games team.  Being a fairly avid chess player, &lt;a href=&quot;http://games.yahoo.com/&quot;&gt;the games site&lt;/a&gt; was a haunt of mine as early as 1997.  (In fact, it was the first Yahoo! offering that I used on a regular basis, and human-on-human chess remains one of my favorite Yahoo! products.)  However, most of the actual content on the site was not terribly thrilling to me, since I&amp;rsquo;m not as into video games as I once was, and the latest match-three clone doesn&amp;rsquo;t get me going.  It was a website, with business goals, and technical hurdles, and it was fun to solve the problems, but that&amp;rsquo;s about as deep as it went.&lt;/p&gt;
&lt;p&gt;Later, on the brand universe sites, we never really worked on a brand that I was all that into, and, between you me and the internet, I wasn&amp;rsquo;t really all that happy with the direction that the product went in.  It was fun building modules, and challenging, and there were definite good times, but I definitely never went to those sites except to show someone what I had done.&lt;/p&gt;
&lt;p&gt;This product, however, may well become my new starting page once it releases, or at least a frequently accessed bookmark.  Unfortunately, it&amp;rsquo;s been a real challenge to actually get stuff done instead of just consuming all the great content that it is finding.&lt;/p&gt;
&lt;p&gt;In a fit of cosmic irony, I came across &lt;a href=&quot;http://www.nytimes.com/2006/03/07/health/07essa.html?ex=1189656000&amp;amp;en=f0e1ab4fcd4ed85c&amp;amp;ei=5070&quot;&gt;an article on the New York Times about &lt;abbr title=&quot;Attention Deficit Hyperactivity Disorder&quot;&gt;ADHD&lt;/abbr&gt;&lt;/a&gt;.  While there&amp;rsquo;s really nothing particularly controversial in Peter Steinberg&amp;rsquo;s analysis, I was struck by this:&lt;/p&gt;
&lt;blockquote cite=&quot;http://www.nytimes.com/2006/03/07/health/07essa.html?ex=1189656000&amp;amp;en=f0e1ab4fcd4ed85c&amp;amp;ei=5070&quot;&gt;For those of us who have &amp;ldquo;attention-surplus disorder&amp;rdquo; [&amp;hellip;] this knowledge-based economy has been a godsend. We thrive.
&lt;p&gt;But attention disorder cases, up to 5 to 15 percent of the population, are at a distinct disadvantage. What once conferred certain advantages in a hunter-gatherer era, in an agrarian age or even in an industrial age is now a potentially horrific character flaw, making people feel stupid or lazy and irresponsible, when in fact neither description is apt. &lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve worn a lot of hats in my career.  I&amp;rsquo;ve peddled vacuums, fixed computers, written documentation, led training classes, managed products from concept to deployment, designed logos, and built software in ASP, PHP, Javascript, CSS, VB and C++.  I&amp;rsquo;ve walked a technically illiterate grandmother through a registry patch over the telephone.  I was more successful in some of these roles than in others, but all in all, I&amp;rsquo;ve done alright.  I&amp;rsquo;d definitely say that I&amp;rsquo;m a &amp;ldquo;knowledge worker.&amp;rdquo;  And, I was diagnosed with AD(H)D as a child.  I took Ritalin until I rebelled against the establishment in High School and decided that I didn&amp;rsquo;t need to be dosed.  By all accounts, I still have ADHD.  And, I don&amp;rsquo;t think I&amp;rsquo;d be as good at what I do if I didn&amp;rsquo;t have this so-called &amp;ldquo;disorder.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;In the words of Tyler Durden, &lt;q&gt;You are not a beautiful and unique snowflake.&lt;/q&gt;  While we all have our particular unique combination of traits, I&amp;rsquo;m quite sure that there are lots and lots of people smarter and more successful than I am.  But, not to be too vain, I&amp;rsquo;ve thrived in this knowledge economy, and I&amp;rsquo;m equally sure that I&amp;rsquo;m not the only person with an &amp;ldquo;attention deficit&amp;rdquo; who has managed to turn this mindset to their advantage.&lt;/p&gt;
&lt;p&gt;Why don&amp;rsquo;t people stop to wonder &lt;em&gt;why&lt;/em&gt; their attention deficit child can&amp;rsquo;t sit still and do spelling homework?  Because that crap is &lt;em&gt;&lt;abbr title=&quot;boring&quot;&gt;BOOOOORRRRIIINNNNGGGG&lt;/abbr&gt;&lt;/em&gt;.  Everyone&amp;rsquo;s attention pretty much works the same way.  We all have different levels of instability in our attention.  My wife can start folding clothes, and just keep going until they&amp;rsquo;re done.  She&amp;rsquo;s a teensy bit OCD, which is just the other side of the attention-stability spectrum from ADHD.  (That&amp;rsquo;s probably why we make such a good team.)&lt;/p&gt;
&lt;p&gt;One commonly cited symptom of ADHD is the ability to get deeply immersed in certain tasks, almost to a ridiculous amount.  As a kid in the summer, I would put a new RPG into the Nintendo, and not move until I had beaten it.  I had a deficit of attention like the Pope has a deficit of catholicism.  A meteor could have landed on our roof, and I might not have noticed.  These days, it&amp;rsquo;s web pages.  7:00 rolls around, and it takes an act of extreme willpower to &amp;ldquo;switch off&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;In programming, the right kind of laziness is good.  Each bit of functionality should only have to be written once; copy-and-paste programming is the ultimate in &lt;a href=&quot;http://worsethanfailure/&quot;&gt;wtf-ery&lt;/a&gt;.  A person with ADHD avoids boring behaviors because, to them, &lt;em&gt;boredom feels like dying&lt;/em&gt;, and changing tasks is easy.  While &amp;ldquo;normal&amp;rdquo; people feel a sense of fear or nervousness that the things they leave won&amp;rsquo;t get done, those of us with ADHD are quite content that we&amp;rsquo;ll get to it later, after we do something else.  I&amp;rsquo;m sure that there&amp;rsquo;s some evolutionary justification for this, but all I know is that I&amp;rsquo;d gladly get punched in the nose rather than write out those fucking spelling words 3 times each ever again.  &lt;small&gt;(Incidentally, there&amp;rsquo;s some research out there indicating that childhood spelling education has little if any effect on adult spelling ability.)&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;I often hear this when I tell people that I&amp;rsquo;m glad that I have ADHD: &lt;q&gt;Well, you&amp;rsquo;re high-functioning.  My (sister, nephew, mother, uncle, friend) is so ADHD he can&amp;rsquo;t even hold down a job.&lt;/q&gt;  Listen, either your friend with ADHD hasn&amp;rsquo;t found a job they love, or their problems run deeper than an attention instability.  &amp;ldquo;High functioning,&amp;rdquo; with respect to ADHD, is just a euphemism for &amp;ldquo;found something you like doing that happens to pay well.&amp;rdquo;  I&amp;rsquo;m just as ADHD as I ever was.  My wife knows better than to send me to the store without a list, and is frequently (if understandingly) annoyed at my forgetful and distractable nature.&lt;/p&gt;
&lt;p&gt;Most of the programmers I know, and nearly all of the web developers I know, have been diagnosed at some time or another with ADHD.  Now, of course, this is anecdotal evidence, and utterly painfully unscientific.  I&amp;rsquo;m the first to cast doubt when there is a lack of hard stats on a topic, and I&amp;rsquo;d absolutely love for some sociologist to do a proper study on this.  But how is it that there are so many people working as engineers and artists and executives working and making a living on the web who have been diagnosed with ADHD, if this disorder is such a liability in the Knowledge Economy?&lt;/p&gt;
&lt;p&gt;I suspect that a part of the problem is that many people learn their sense of self-worth and competence at an early age, mostly based on their ability to please their parents and teachers.  A child with ADHD doesn&amp;rsquo;t want to do his spelling homework, and speaking from experience, it was a frustrating and emotionally painful experience.  It&amp;rsquo;s embarrassing.  A child who is embarrassed will naturally begin to think, &lt;q&gt;I&amp;rsquo;m no good at this&lt;/q&gt;.  That thought sticks.  It shapes their choices and the things that they&amp;rsquo;re interested in.  Labeling ADHD a &amp;ldquo;disorder&amp;rdquo; and subjecting children to constant humiliation and parental frustration sends the message to that they aren&amp;rsquo;t good at &lt;em&gt;just about everything&lt;/em&gt;.  At the other extreme, ADHD children are often thought to need special help and attention, and the parent who wants to do right by their child shelters them from any kind of environment where they might fail.  They quickly learn that they&amp;rsquo;re not as good as the other kids, and stop pushing themselves.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The most important thing is for a child to feel competent and successful at something that challenges them.&lt;/em&gt;  This is actually pretty easy with ADHD kids, but only if parents are willing to look beyond the carbon-copy stimulation that most public schools offer.  Competence breeds interest, and interest motivates action, which in turn leads to more competence.  It&amp;rsquo;s a virtuous cycle.  The non-high functioning ADHD patients probably need a shrink more than medication.  Their instability, properly harnessed, could be a source of tremendous power in the world.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll admit, occasionally I just don&amp;rsquo;t feel like doing something, and it&amp;rsquo;s really hard to get moving.  The drive that sustains me for hours of intensity can also turn in the other direction, and creating a new iTunes playlist is so fascinating I can&amp;rsquo;t tear myself away.  But the benefit of web development is that there&amp;rsquo;s always a lot of different things to do and it all tends to feel like playing.  The deadlines just add another element to the process, like the countdown in a video game that makes the adrenaline rise up and sharpen your wits.  But the slow times require you to be a patient teacher with yourself, and be firm but understanding.  So, I take 4 hour days sometimes, or spend the better part of the day reading through my friends&amp;rsquo; twitter updates.  Tomorrow I&amp;rsquo;ll make it up.  This slack-and-attack rhythm isn&amp;rsquo;t so good in some fields, but it actually works quite well in most areas of the Knowledge Economy, since the person with instable attention frequently has a great breadth and depth of knowledge about the many various things that their interest drove them to.  &lt;em&gt;If&lt;/em&gt;, of course, enough time is spent in &amp;ldquo;attack&amp;rdquo; mode to make a difference.&lt;/p&gt;
&lt;p&gt;Speaking of which, we have a demo tomorrow.  So, writing this blog post &lt;em&gt;probably&lt;/em&gt; isn&amp;rsquo;t the best use of my time&amp;hellip;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Top 5 CSS Mistakes</title>
		<link href="https://blog.izs.me/2007/10/top-5-css-mistakes/"/>
		<updated>2007-10-15T17:00:08Z</updated>
		<id>https://blog.izs.me/2007/10/top-5-css-mistakes/</id>
		<content type="html">&lt;p&gt;This is not a post about the top 10 mistakes that developers make when they write CSS.  That&amp;rsquo;s boring.&lt;/p&gt;
&lt;p&gt;The CSS spec &lt;em&gt;itself&lt;/em&gt; is littered with mistakes.  Deep, fundamentally misguided errors.  Real head-slapping WTFs that make you wonder if the people writing the spec had ever created a website in their lives.  I&amp;rsquo;m not exactly following &lt;a href=&quot;http://foohack.com/2007/10/real-world-advice-for-fledgling-web-developers/&quot;&gt;my own advice&lt;/a&gt; by complaining, but I think of these more as the &amp;ldquo;constructive criticism&amp;rdquo; sort of complaints.&lt;/p&gt;
&lt;p&gt;I love making web pages.  And, without being immodest, I&amp;rsquo;m pretty good at CSS.  Not the best in the world, but certainly very familiar with it.  I do enjoy what CSS and semantic HTML lets you do with a web page.  But I am repeatedly annoyed by the language itself.&lt;/p&gt;
&lt;p&gt;The saving grace, if there is one to be found here, is that browser makers are getting better and better at conforming to the spec with each version. Even IE is starting to catch up with the advent of IE 7.  While there will probably always be discrepancies and differences of opinion about how this or that feature should work, they&amp;rsquo;re getting less obnoxious.  However, when the spec itself is broken, what can browser makers do?&lt;/p&gt;
&lt;h3&gt;1. Inheritance&lt;/h3&gt;
&lt;p&gt;Listen, CSS.  You have curly braces, why not use them?  The cascade is a nice feature, as is the default &lt;code&gt;inherit&lt;/code&gt; value for most properties, but they&amp;rsquo;re not enough.  This would be so lovely:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block css&quot;&gt;.some-module {
      font-weight:bold;
      text-align:right;
      p {
            font-weight:normal;
            text-align:center;
      }
      h3 {
            font-size:200%;
      }
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Instead, we have to type &lt;code&gt;.some-module&lt;/code&gt; over and over for every bloody rule.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block css&quot;&gt;.some-module {
      font-weight:bold;
      text-align:right;
}
.some-module  p {
      font-weight:normal;
      text-align:center;
}
.some-module h3 {
      font-size:200%;
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you use classes and descendant selectors properly on a sufficiently complicated page, you can get punished with very long selectors like this one from a site I&amp;rsquo;m working on now: &lt;code class=&quot;css&quot;&gt;.nav .search a, .nav .search input, .nav .search .button, .nav .search label&lt;/code&gt;.  Every freaking rule in the file has &lt;code class=&quot;css&quot;&gt;.nav .search&lt;/code&gt; on the selector.  This simple addition to the spec would have made it so much better:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block css&quot;&gt;.nav {
  .tabs {
    /* css for the &quot;tabs&quot; section of the .nav module &lt;em&gt;/
  }
  .search {
    /&lt;/em&gt; css for the &quot;search&quot; section of the nav module &lt;em&gt;/
    a, input, .button, label {
      /&lt;/em&gt; css rules &lt;em&gt;/
    }
    a:hover, a:active {
      /&lt;/em&gt; other CSS rules &lt;em&gt;/
      /&lt;/em&gt; note the huge reduction in code to be typed! */
    }
  }
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Almost every language supports some version of this kind of semantic inclusion, but for some reason, CSS was created in such a way that every rule lives in its own universe.  Lack of this feature makes CSS far less modular.&lt;/p&gt;
&lt;h3 id=&quot;p41_vertical_alignment&quot;&gt;2. Vertical Alignment&lt;/h3&gt;
&lt;p&gt;Almost &lt;a href=&quot;http://www.google.com/search?q=vertical+centering+css&quot;&gt;2 million pages about centering vertically in CSS&lt;/a&gt;.  This was so unbelievably easy back in the bad old days of layout tables.  The browsers knew how to do it.  But as of the second revision, the CSS spec &lt;em&gt;still&lt;/em&gt; doesn&amp;rsquo;t even suggest a proper way to consistently vertically align one thing inside another.&lt;/p&gt;
&lt;p&gt;Now, I know, there&amp;rsquo;s the &lt;a href=&quot;http://www.w3.org/TR/REC-CSS2/visudet.html#propdef-vertical-align&quot;&gt;&lt;code&gt;vertical-align&lt;/code&gt; property&lt;/a&gt;.  But, that only applies to inline, inline-block, and table-cell elements.  If you want to align one box inside another, you&amp;rsquo;re stuck doing all sorts of hacking to make it work.  If the heights are unknown ahead of time, it gets even more complicated.&lt;/p&gt;
&lt;p&gt;This wouldn&amp;rsquo;t be such a huge problem, except that:&lt;/p&gt;
&lt;h3&gt;3. Table display values should have been done far sooner&lt;/h3&gt;
&lt;p&gt;OK, so step into the wayback machine, and travel to the 90s.  You&amp;rsquo;re looking at an internet that is filled to the brim with poor abused tables.  &amp;ldquo;Web developer&amp;rdquo; basically means &amp;ldquo;someone who knows how to use tables and font tags.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So why did we have to wait until CSS2 before there was &lt;a href=&quot;http://www.w3.org/TR/REC-CSS2/visuren.html#display-prop&quot;&gt;a way to emulate the behavior of the table tags&lt;/a&gt;? If &lt;code class=&quot;css&quot;&gt;display:table&lt;/code&gt; and &lt;code class=&quot;css&quot;&gt;display:table-cell&lt;/code&gt; had been in the first release of CSS, the standards revolution would have gone off without a shot.  That&amp;rsquo;s all it would have taken for the hoards of table masters to be swept up in the semantic content/style division paradigm.  Instead, CSS asked them to grasp &amp;ldquo;floating&amp;rdquo; and &amp;ldquo;position&amp;rdquo; and &amp;ldquo;overflow&amp;rdquo;, which are remarkably non-intuitive concepts when it comes to laying out content on a page.&lt;/p&gt;
&lt;p&gt;By contrast, a grid that holds contents is extremely intuitive.  That&amp;rsquo;s how typesetters had been laying out physical documents for millennia.  That&amp;rsquo;s why &lt;code&gt;&amp;lt;table cellspacing=&quot;0&quot;&amp;gt;&lt;/code&gt; was such a godsend.&lt;/p&gt;
&lt;h3 id=&quot;p41_zindex&quot;&gt;4. &lt;code&gt;z-index&lt;/code&gt; is WAY too complicated&lt;/h3&gt;
&lt;p&gt;If you know CSS, there&amp;rsquo;s a good chance you know about &lt;code&gt;z-index&lt;/code&gt;, or at least, think you do.  Odds are about 4 to 1 that it doesn&amp;rsquo;t work how you think it does.  If you&amp;rsquo;re like most web developers, rather than really understand it, you&amp;rsquo;ve probably just messed with the item in question until the right things showed up.  (It doesn&amp;rsquo;t help that there are tutorials out there that are deeply wrong when it comes to z-index.  If only it was as simple as &lt;a href=&quot;http://www.w3schools.com/css/pr_pos_z-index.asp&quot;&gt;w3schools makes it out to be&lt;/a&gt;!)&lt;/p&gt;
&lt;p&gt;A decent summary can be found &lt;a href=&quot;http://developer.mozilla.org/en/docs/Understanding_CSS_z-index:The_stacking_context&quot;&gt;the Mozilla Developer Center&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite=&quot;http://developer.mozilla.org/en/docs/Understanding_CSS_z-index:The_stacking_context&quot;&gt;In summary:
&lt;ul&gt;&lt;li&gt;Positioning and assigning a z-index value to an HTML element creates a stacking context.&lt;/li&gt;
    &lt;li&gt;Stacking contexts can be contained in other stacking contexts, and together create a hierarchy of stacking contexts.&lt;/li&gt;
    &lt;li&gt;Each stacking context is completly &lt;ins&gt;[sic]&lt;/ins&gt; independent from its siblings: only descendant elements are considered when stacking is processed.&lt;/li&gt;
    &lt;li&gt;Each stacking context is self-contained: after the element&amp;rsquo;s contents are stacked, the whole element is considered in the stacking order of the parent stacking context. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Notes:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The hierarchy of stacking contexts is a subset of the hierarchy of HTML elements, because only positioned and z-indexed elements create stacking contexts. We can say that elements that do not create their own stacking contexts are assimilated by the parent stacking context.&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;p&gt;That&amp;rsquo;s right, this is just the &lt;em&gt;summary&lt;/em&gt;.  The full discussion is much longer and more complicated.&lt;/p&gt;
&lt;p&gt;So, if element A contains X and Y, and element B contains P and Q, and A is above B, then X and Y are also above P and Q, &lt;em&gt;even if P and Q have a much larger z-index than A, X, or Y.&lt;/em&gt;  But, only if A is positioned.  The idea is to keep any stacking &amp;ldquo;local&amp;rdquo; between siblings, so that the stacking of parent elements can be ignored.  I wouldn&amp;rsquo;t be surprised if some browser maker lobbied for this rule because it made their Dom-walking algorithm simpler.  And I can imagine some strange hypothetical super-modular layout situations where it might be handy.  But it&amp;rsquo;s wrong, and exceedingly problematic for the vast majority of situations.  In reality, it leads to newer web developers thinking, &lt;q&gt;What the hell?  I gave this thing z-index 99, and that other thing has z-index:1, and it&amp;rsquo;s above it?&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Why make it so complicated? Back when I was doing technical documentation at a software company, I had a saying: if it&amp;rsquo;s hard to explain, it&amp;rsquo;s probably badly designed. Partly out of laziness, and partly out of responsibility, I&amp;rsquo;d submit bugs to the developers when something was just too damn complicated. Here&amp;rsquo;s a better way:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Any element that is not &lt;code&gt;display:none&lt;/code&gt; has a z-index.&lt;/li&gt;
    &lt;li&gt;Valid z-index values are either an integer, like &lt;code&gt;7&lt;/code&gt;, or the word &lt;code&gt;inherit&lt;/code&gt; and optionally an integer modifier, such as &lt;code&gt;inherit 2&lt;/code&gt; (2 higher than whatever the parent is) or &lt;code&gt;inherit -1&lt;/code&gt; (1 lower than the parent).  If &lt;code&gt;inherit&lt;/code&gt; is used without a number, it defaults to &lt;code&gt;inherit 0&lt;/code&gt;.&lt;/li&gt;
    &lt;li&gt;Elements that don&amp;rsquo;t have an explicit z-index are assumed to have the z-index of their parent. (I.e., &lt;code&gt;z-index:inherit 0&lt;/code&gt;.)&lt;/li&gt;
    &lt;li&gt;Elements stack on the page according to their computed z-index.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;How hard is that to understand?  You can still use stacking contexts if you want, by using relative values, but without all the complications of having to trace through your page and figure out which parent needs to get &lt;code&gt;position:relative&lt;/code&gt; in order to make your overlay lay over the rest of the page.&lt;/p&gt;
&lt;p&gt;The day I grokked z-index is the day I realized that CSS is an insane and over-engineered language.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://seldo.com/&quot;&gt;Laurie&lt;/a&gt; points out that &lt;q&gt;If you have a drop-in html widget that&amp;rsquo;s all nicely z-ordered, you don&amp;rsquo;t want it to accidentally be interleaving with other elements on that page.&lt;/q&gt;  I&amp;rsquo;m sure this was the thinking behind the stacking context in the first place.  However, you would still be able to accomplish this with the &lt;code&gt;inherit&lt;/code&gt; values.  Just give each module a &lt;code&gt;z-index&lt;/code&gt; in multiples of 100, and then use relative z-indexes within the modules.  With all due respect, Laurie, as far as FooHack is concerned, the existing z-index paradigm is wrong, and CSS is being sent to the corner to think about what it&amp;rsquo;s done.&lt;/p&gt;
&lt;h3 id=&quot;quirks_is_right&quot;&gt;5. The Quirks Box Model is Right&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s say that you have a bookshelf that you&amp;rsquo;re going to put in your home.  You measure the space on the wall to know how big of a bookshelf you can fit in the room.  You find that there&amp;rsquo;s a space 34 inches across.  When you go to the store, you get one that says its 33 inches wide, and bring it home, and assemble it, and it doesn&amp;rsquo;t fit!  It&amp;rsquo;s an extra inch too wide, and now your closet door can&amp;rsquo;t open.  You take it back to the store, and the salesperson calmly tells you, &lt;q&gt;Well sir, the edge of the bookshelf is an inch wide.  You see, you can only fit 33 inches of books on this shelf.&lt;/q&gt;  You&amp;rsquo;d probably be quite perplexed, annoyed, and begin to wonder what kind of fairy land you&amp;rsquo;ve fallen into where they measure the insides of things first, and the outsides only as an afterthought.&lt;/p&gt;
&lt;p&gt;In a rare fit of reasonableness, MSIE 5 did it right (and so does MSIE 6 when in Quirks Mode.)  If you set the width to 100px, then it&amp;rsquo;s 100px.  If you put 10px of padding on the box, then it leaves 80px inside for the text.&lt;/p&gt;
&lt;p&gt;CSS disagrees with reason, however, and the spec says that a 100px wide box with 10px of padding will &lt;em&gt;actually&lt;/em&gt; be 120px across, because the width of an element specifies the width of the &lt;em&gt;inside&lt;/em&gt;, not the width of the &lt;em&gt;element&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;For images, this makes sense.  If an image is 50px wide, and has 10px of padding, then you&amp;rsquo;d expect the width to specify the width of the asset itself (the image file) and the padding to get added onto that.  But it would be a far far better decision to make it a little bit tricky for the rare case where you specify the width of images in the CSS rather than tricky for the much more common case where you specify the width of anything else.&lt;/p&gt;
&lt;p&gt;The MSIE Quirks width was right.  Too bad its dead and gone.  Now, simply to get around what, in my opinion, is a horrible paradigm, I never set width or height on the same module where I set borders and padding.  Width goes on the parent, and then borders and padding go on a &lt;code class=&quot;css&quot;&gt;width:auto&lt;/code&gt; child.&lt;/p&gt;
&lt;h3&gt;Other suggestions that didn&amp;rsquo;t make the list&amp;hellip;&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;style block is invalid in the body, just annoying&lt;/li&gt;
    &lt;li&gt;min-height and min-width being unsupported&lt;/li&gt;
    &lt;li&gt;one background per element&lt;/li&gt;
    &lt;li&gt;no background clipping&lt;/li&gt;
    &lt;li&gt;no background-opacity distinct from element opacity&lt;/li&gt;
    &lt;li&gt;% font sizes being relative to parent, not base&lt;/li&gt;
    &lt;li&gt;border treatments&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Special thanks to &lt;a href=&quot;http://twitter.com/pixelarchitect&quot;&gt;my&lt;/a&gt; &lt;a href=&quot;http://www.linkedin.com/in/geoffreyblair&quot;&gt;esteemed&lt;/a&gt; &lt;a href=&quot;http://www.seldo.com/&quot;&gt;colleagues&lt;/a&gt; &lt;a href=&quot;http://gamaiel.zavala.com/&quot;&gt;who&lt;/a&gt; weighed in on this one.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Real World Advice for Fledgling Web Developers</title>
		<link href="https://blog.izs.me/2007/10/real-world-advice-for-fledgling-web-developers/"/>
		<updated>2007-10-08T17:00:55Z</updated>
		<id>https://blog.izs.me/2007/10/real-world-advice-for-fledgling-web-developers/</id>
		<content type="html">&lt;p&gt;&lt;cite&gt;I originally posted this at &lt;a href=&quot;http://isaacschlueter.com/2006/09/advice-for-new-web-developers/&quot;&gt;isaacschlueter.com&lt;/a&gt; on &lt;abbr title=&quot;2006-09-07T18:42:45-07:00&quot;&gt;September 7th, 2006&lt;/abbr&gt;.  I&amp;rsquo;ve updated it slightly.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Today &lt;ins&gt;[that is, on 2006-09-07]&lt;/ins&gt; a fellow front-end engineer here at Yahoo! asked &lt;abbr title=&quot;the webdevs who read devel-frontend&quot;&gt;us&lt;/abbr&gt; for bits of real-world advice that we would give to up-and-coming front-end engineering students.  He&amp;rsquo;s doing a talk at a school, and was curious about what we&amp;rsquo;ve learned.  It struck me as a perfect idea for a blog post.&lt;/p&gt;
&lt;p&gt;Any other front-end professionals out there?  What would be your pieces of advice?&lt;/p&gt;
&lt;p&gt;As front-end engineers, we can&amp;rsquo;t get away with being over-specialized.  We are the ones who talk to everyone.
We integrate with backend engineers.
We get comps from designers.
We tell product managers what can and can&amp;rsquo;t be done in today&amp;rsquo;s browsers.
And, of course, our code is what the user actually gets.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s the most hostile arena &lt;small&gt;(except perhaps mobile)&lt;/small&gt; in which to create software, but it can be deeply rewarding.&lt;/p&gt;
&lt;p&gt;A good front-end engineer is someone with insatiable curiosity and drive.  You can&amp;rsquo;t just be the &amp;ldquo;flash guy&amp;rdquo; or the &amp;ldquo;javascript guy&amp;rdquo; or the &amp;ldquo;css guy&amp;rdquo; if you really want to go far in this discipline.  You can&amp;rsquo;t look at a php bug and say &amp;ldquo;Oh, that&amp;rsquo;s a back-end issue,&amp;rdquo; or look at an image that needs to be sliced up, and say &amp;ldquo;That&amp;rsquo;s a design issue.&amp;rdquo;  You need to be able to work in many different lands.  More and more, web applications are integrating many different technologies within the browser window.&lt;/p&gt;
&lt;p&gt;Learn everything.  Since you can&amp;rsquo;t ever actually do that, learn as much as you can.  Learn how to learn quickly.  Eat, drink, and breathe css and javascript.  Install apache on your home computer and learn how it works.  Play around with PHP and Ruby on Rails and Flash.  Write a blog.  Redesign it on the weekend.  Play around with Photoshop.  Fall in love with this field, and let it consume you.&lt;/p&gt;
&lt;p&gt;Most of the documentation out there is terrible.  Get used to it.  Chances are, the person who developed this-or-that thing was too busy to really explain how it works, or English is his second language, or he just never realized that someone else might find it useful.  The newer the technology is, the more likely it is to be poorly documented.  Learn how to search for your answers within the community, and test everything.  Improve the quality of the knowledge base by adding to it.  Complaining helps no one.&lt;/p&gt;
&lt;p&gt;The specific tricks and languages that you learn in a typical computer science program are almost all useless in front-end engineering.  This is a cutting-edge discipline, and no school could ever hope to keep up with it.  Textbooks are usually written years ago, and every problem in them is already solved.  This field is all about finding and solving new problems that no one has ever thought of.  That sounds cool, but it&amp;rsquo;s also a ton of work.  You need to be a little crazy to want this job.  If you don&amp;rsquo;t love it, you&amp;rsquo;ll hate it.&lt;/p&gt;
&lt;p&gt;Be nice to people.  You never know when they&amp;rsquo;ll come in handy.  Be strict in what you send, and accepting in what you receive, whether you&amp;rsquo;re talking about requests over a network or manners in a meeting.  You don&amp;rsquo;t know what constraints someone had to deal with when they built something.  The classic n00b mistake is to start out criticizing everyone, but that doesn&amp;rsquo;t help anyone.  If you can do it better, do it; and then share it, discuss it, and document it.  You don&amp;rsquo;t know the pressures that others are under, so be gentle when you tell them that something they want is impossible.&lt;/p&gt;
&lt;p&gt;Be ready to compromise, with yourself and with others.  The perfect system may take 10 days to create&amp;mdash;you&amp;rsquo;ll probably have 3.  Learn how to crunch and cut corners without sacrificing the quality of the end result.  Build quality up front, and fill in the details as you go.  Design your code in layers so that you&amp;rsquo;ll have something worthwhile, even if you don&amp;rsquo;t get to the end.  Know how to cut out unnecessary features, and be ruthless with the red pen when necessary.  Know how to say &amp;ldquo;No&amp;rdquo; to a request if it can&amp;rsquo;t be done in time, even if you&amp;rsquo;d really love to do it.  But find out what&amp;rsquo;s really important, and make sure that it gets in there.&lt;/p&gt;
&lt;p&gt;Hack! Play! Innovate!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Applescript for iTerm (and a request for help with it)</title>
		<link href="https://blog.izs.me/2007/10/applescript-for-iterm-and-a-request-for-help-with/"/>
		<updated>2007-10-01T17:00:45Z</updated>
		<id>https://blog.izs.me/2007/10/applescript-for-iterm-and-a-request-for-help-with/</id>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://iterm.sourceforge.net/&quot; rev=&quot;vote-for&quot;&gt;iTerm&lt;/a&gt; is a major part of my workspace.  I&amp;rsquo;m a big fan of tabbed interfaces, and my fingers have gotten really good at the Apple-← and Apple-→ key combos to swap between them.  I usually have three tabs going:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;One that runs &lt;a href=&quot;http://www.cis.upenn.edu/~bcpierce/unison/&quot; rev=&quot;vote-for&quot;&gt;Unison&lt;/a&gt; in batch mode to keep my mac and BSD machines in sync.  I set the title of this one to &amp;ldquo;unisoner&amp;rdquo;.&lt;/li&gt;
    &lt;li&gt;A second logged into my BSD machine in the package folder to easily relink the site package when I add files to it.  This is the &amp;ldquo;relinker&amp;rdquo;.  (Also, this one occasionally is used to &lt;code&gt;tail -f&lt;/code&gt; on the apache log file.)&lt;/li&gt;
    &lt;li&gt;A third sitting in my code folder to do CVS updates, open files, grep for stuff, etc.  This is &amp;ldquo;cvser&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Of course, it&amp;rsquo;s a pain to go through the steps to set all this up.  So, I wrote this Applescript, and it does it all:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block applescript&quot;&gt;tell Application &quot;iTerm&quot;
  activate
  set myterm to (make new terminal)
  tell myterm
    if (count of sessions) &amp;lt; 3 then
      my open_tab(&quot;title unisoner
cd dev/orion
unisonpush
unisondev&quot;)
      my open_tab(&quot;v
yroot orion_front
title relinker-tailer
cd dev/orion/front/package
yapl&quot;)
      my open_tab(&quot;title cvser
cd dev/orion
open -a TextMate orion.tmproj&quot;)
    end if
  end tell
  terminate first session of current terminal
end tell
on open_tab(command)
  tell Application &quot;iTerm&quot; to tell first terminal
    launch session &quot;Default Session&quot;
    tell last session
      write text command
    end tell
  end tell
end run_command&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The only problem is, it requests a password when it ssh&#39;es into my dev box and changes to the project root.  So, that whole piece falls down.&lt;/p&gt;
&lt;p&gt;Anyone out there in geek land know of a way to make an Applescript respond to things like that?  Something like this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block applescript broken&quot;&gt;whenever the last line is &quot;Password:&quot; then
  write text returned of (display dialog &quot;Password:&quot; default answer &quot;&quot;)
end if&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Update:&lt;/h3&gt;
&lt;p&gt;Turns out, what I suggested is pretty close to what works.  However, since there&amp;rsquo;s no event to listen for that would tell the script that the display has been updated, it takes a bit of fudging, and doesn&amp;rsquo;t always work perfectly.  Basically, you put &lt;code&gt;@@@PASSWORD@@@&lt;/code&gt; in the list of commands where you may expect a password prompt, and it&amp;rsquo;ll wait for a second and display a dialog if necessary.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block applescript&quot;&gt;
on open_tab(command)
  set commands to paragraphs in command
  
  tell Application &quot;iTerm&quot; to tell first terminal
    launch session &quot;Default Session&quot;
    repeat with currentCommand in commands
      
      if (text of currentCommand = &quot;@@@PASSWORD@@@&quot;) then
        do shell script &quot;sleep 1&quot;
        set pw to last word of (get contents of last session)
        if pw = &quot;Password&quot; then
          tell Application &quot;Finder&quot;
            activate
            set pw to text returned of (display dialog &quot;Password:&quot; default answer &quot;&quot; with hidden answer)
          end tell
          tell Application &quot;iTerm&quot; to activate
          tell last session to write text pw
        end if
        
      else
        tell last session to write text currentCommand
      end if
      
      
    end repeat
    
  end tell
end open_tab&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Get the finished product: &lt;a href=&quot;http://foohack.com/blog/wp-content/uploads/2007/10/workspace.applescript&quot; title=&quot;Applescript for iTerm&quot;&gt;Applescript for iTerm&lt;/a&gt;.  You&amp;rsquo;ll want to change up the specific commands up near the top, of course.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Fix for Vi&#39;s broken arrow key support in iTerm</title>
		<link href="https://blog.izs.me/2007/09/fix-for-vis-broken-arrow-key-support-in-iterm/"/>
		<updated>2007-09-24T17:00:03Z</updated>
		<id>https://blog.izs.me/2007/09/fix-for-vis-broken-arrow-key-support-in-iterm/</id>
		<content type="html">&lt;p&gt;&lt;cite&gt;I originally posted this at &lt;a href=&quot;http://isaacschlueter.com/2007/04/fix-for-vis-broken-arrow-key-support-in-iterm/&quot;&gt;isaacschlueter.com&lt;/a&gt; on &lt;abbr class=&quot;date&quot; title=&quot;2007-04-17T11:45:36-7:00&quot;&gt;Tuesday, April 17th, 2007&lt;/abbr&gt;.  I&amp;rsquo;ve incorporated the info from the comments into the main post.  Special thanks to: radius, benstiglitz, and Higgaion for helping to provide more information.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;So, I got turned on to &lt;a href=&quot;http://iterm.sourceforge.net/&quot;&gt;iTerm&lt;/a&gt;, a prettier and more user-friendly alternative to Apple&amp;rsquo;s native Terminal.app.&lt;/p&gt;
&lt;p&gt;However, for some reason, I got the following error message whenever I tried to use arrow keys in Vi:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Usage: [[&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The problem is that Vi is faithfully responding to the TERM variable that iTerm is sending.  (I&amp;rsquo;m not sure why Terminal.app and PuTTY don&amp;rsquo;t suffer from this issue, but c&#39;est la vie.)  So, I thought, you &lt;em&gt;should&lt;/em&gt; keep the terminal setting in iTerm to xterm-color, since this is great for most things, but then add this setting to your .exrc file to tame Vi:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;set term=linux&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I wasn&amp;rsquo;t sure why that fixed it, but it did.  &lt;code&gt;set term=cons25&lt;/code&gt; was another fix that I found, but it seemed to break when I had line numbers turned on, because all tab characters are turned into backticks (&lt;code&gt;`&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Of course, that&amp;rsquo;ll break if you use a different terminal setting on another program, so Higgaion suggested putting this into your .vimrc or .exrc instead:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block rc&quot;&gt;if $TERM_PROGRAM == &#39;iTerm.app&#39;
set term=linux
endif&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;However, the same problem occurs when using the &lt;code&gt;more&lt;/code&gt; and &lt;code&gt;less&lt;/code&gt; commands&amp;mdash;the arrow keys are broken, but the hjkl keys worked just like they do in Vi. Since there&amp;rsquo;s no &lt;code&gt;.morerc&lt;/code&gt; or &lt;code&gt;.lessrc&lt;/code&gt; to set the term variable, I was dismayed.&lt;/p&gt;
&lt;p&gt;According to &lt;a href=&quot;http://isaacschlueter.com/2007/04/fix-for-vis-broken-arrow-key-support-in-iterm/#comment-3960&quot;&gt;benstiglitz&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote cite=&quot;http://isaacschlueter.com/2007/04/fix-for-vis-broken-arrow-key-support-in-iterm/#comment-3960&quot;&gt;The default termcap on Mac OS X specifies that applications should enter application-specific cursor mode when capturing the display. iTerm is faithfully sending the application-mode sequences, but most terminal emulators just ignore the app-mode escape sequences and send normal key sequences instead.&lt;/blockquote&gt;
&lt;p&gt;So, this is being determined by iTerm&amp;rsquo;s behavior, so should be fixable in iTerm&amp;rsquo;s settings.  I poked around in iTerm&amp;rsquo;s menus.  Under Bookmarks &amp;gt; Manage Profiles &amp;gt; Terminal Profiles &amp;gt; Default, you can set the default terminal type to &lt;code&gt;linux&lt;/code&gt;.  Then you can enjoy proper arrow key support in every situation under iTerm, without futzing with config files in your home directory.  Incidentally, it seems that &lt;code&gt;linux&lt;/code&gt; has the same color support as &lt;code&gt;xterm-color&lt;/code&gt;, so nothing is lost.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Whiting out ads: Is AdBlock even Necessary?</title>
		<link href="https://blog.izs.me/2007/09/whiting-out-ads-is-adblock-even-necessary/"/>
		<updated>2007-09-17T17:01:49Z</updated>
		<id>https://blog.izs.me/2007/09/whiting-out-ads-is-adblock-even-necessary/</id>
		<content type="html">&lt;p&gt;I read &lt;a href=&quot;http://www.nytimes.com/2007/09/03/technology/03link.html?_r=2&amp;amp;oref=slogin&amp;amp;oref=slogin&quot;&gt;an article&lt;/a&gt; last week in the New York Times about &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/10&quot;&gt;AdBlock&lt;/a&gt;, a Firefox plugin that whites out ads if they are served from certain large advertising servers.  Apparently, a rather large number of people are getting very vocal and outraged at this, calling it theft, and so forth.  They&amp;rsquo;re even &lt;a href=&quot;http://whyfirefoxisblocked.com/&quot;&gt;blocking Firefox users&lt;/a&gt; from visiting their sites.  (Via a &lt;a href=&quot;http://twitter.com/codinghorror/statuses/249767202&quot;&gt;Twitter update&lt;/a&gt; from &lt;a href=&quot;http://codinghorror.com/&quot;&gt;Jeff Atwood&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;I found it somewhat interesting that the Big Three (Google, Yahoo!, Microsoft) in the online advertising business seem to have no comment.  Also, I wasn&amp;rsquo;t surprised.  At least here at Yahoo!, it&amp;rsquo;s pretty well known that online advertising is not as effective as high-quality partnerships when it comes to driving revenue.  The entire &amp;ldquo;brand universe&amp;rdquo; thing is all about getting a brand&amp;rsquo;s fans to interact around the brand, and thus drive interest.  Advertising is secondary to building a strong relationship with the partner.  The reason why search marketing is so much more lucrative than rich media ads is that &lt;em&gt;some users actually notice textual sponsored search results&lt;/em&gt;, because they are so often relevant.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Block Firefox&amp;rdquo; crowd is misguided, but not for the reasons that AdBlock&amp;rsquo;s defenders tend to cite.  Ultimately, AdBlock doesn&amp;rsquo;t matter.  If your main revenue model is from &amp;ldquo;dumb&amp;rdquo; ads&amp;mdash;even if they&amp;rsquo;re YPN or AdSense, which are some of the smartest &amp;ldquo;dumb&amp;rdquo; ads on the market&amp;mdash;then you&amp;rsquo;re bound for failure, or at least mediocrity.  At the best, unless you work the system and create thousands of adsense-spam sites, or you&amp;rsquo;re in the Viagra business, your ads will be ignored and you&amp;rsquo;ll never make very much money.  At the worst, you&amp;rsquo;ll damage your brand and your users will move on.  (Note that &amp;ldquo;smart&amp;rdquo; ads can potentially be much better.  I actually think that &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000893.html&quot; title=&quot;How To Advertise on Your Blog Without (Completely) Selling Out&quot;&gt;Jeff Atwoods ads on Coding Horror&lt;/a&gt; are helpful fairly often&amp;mdash;but I still don&amp;rsquo;t see them most of the time.)&lt;/p&gt;
&lt;h3&gt;Banner-blind&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://www.useit.com/alertbox/9709a.html&quot;&gt;As far back as 1997&lt;/a&gt;, research showed that users ignore advertisements with alarming consistency.  &lt;a href=&quot;http://en.wikipedia.org/wiki/Banner_blindness&quot;&gt;Banner Blindness&lt;/a&gt; is so pervasive that it &lt;a href=&quot;http://www.useit.com/alertbox/fancy-formatting.html&quot;&gt;makes &amp;ldquo;highlighted&amp;rdquo; text invisible&lt;/a&gt; and even &lt;a href=&quot;http://www.useit.com/alertbox/banner-blindness-ballot-design.html&quot;&gt;affected the results of an election&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As Nielsen so aptly pointed out, the election was not a case of &amp;ldquo;stupid voters.&amp;rdquo;  It&amp;rsquo;s a case of normal, intelligent people, habituated to a specific set of situations, falling victim to a &lt;a href=&quot;http://www.useit.com/alertbox/banner-blindness.html&quot;&gt;stupid design&lt;/a&gt; that isn&amp;rsquo;t ergonomic.  &lt;q cite=&quot;http://www.useit.com/alertbox/banner-blindness-ballot-design.html&quot;&gt;&amp;ldquo;In fact, tech-savvy voters are more likely to be hit by banner blindness than people who never use the Internet.&amp;rdquo;&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;There are plenty of cases like this.  The conventional wisdom about the best places to put things is often wrong.  Recently, I needed to look up a word.  I usually use &lt;a href=&quot;http://m-w.com/&quot;&gt;Merriam Webster&lt;/a&gt;, but their site was taking a long time to respond for some reason.  So, I punched up &lt;a href=&quot;http://dictionary.com/&quot;&gt;dictionary.com&lt;/a&gt;.  And I, an extremely web-savvy user who has spent about 70% of his waking hours over the last 15 years online, sat and stared at the screen for a full 5 minutes before I could figure out how to get a word defined.&lt;/p&gt;
&lt;p&gt;That bears repeating:&lt;/p&gt;
&lt;p&gt;On &lt;em&gt;dictionary.com&lt;/em&gt;, it took me &lt;em&gt;5 minutes&lt;/em&gt; to figure out &lt;em&gt;how to get a word defined&lt;/em&gt;.  In that amount of time, I could have found the word in a paper dictionary.  Major catastrophic UI failure.  Dead on the table, flat lining, going towards the light.  The nurses are pumping the bag on its face, but there&amp;rsquo;s no use.  The old battle-hardened UI surgeon comes in the room and proclaims, &amp;ldquo;He doesn&amp;rsquo;t need a doctor, he needs a priest.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;How is this possible?  Well, in a classic fit of hubris, they put the input field up in the header, most likely on the (extremely incorrect) assumption that &amp;ldquo;that&amp;rsquo;s the most visible spot.&amp;rdquo;  Wrong, wrong, wrong!  The header is for your logo, navigation, and maybe some useless doodads.  It is nearly the &lt;em&gt;least&lt;/em&gt; visible spot on your page, especially if its colored differently than the rest of the page!   If your site is called &amp;ldquo;dictionary.com&amp;rdquo;, then the dictionary is main content, and that goes dead-center on the page, where the user&amp;rsquo;s eyeballs will fall if they&amp;rsquo;re looking straight ahead.  In fact, it would be better to take a cue from Google, and have &lt;em&gt;nothing but&lt;/em&gt; the input box on the page.&lt;/p&gt;
&lt;p&gt;To make matters worse, just below the header, they put an advertisement.  My mental adblock kicked in, and blanked out the header and the ad&amp;mdash;&lt;em&gt;completely and organically obscuring the input field from my mental model of the page&lt;/em&gt;.  Worse, the field is labeled &amp;ldquo;search&amp;rdquo;, rather than something more useful like &amp;ldquo;enter your term&amp;rdquo;.  When I did find the field, my instinct was to type &amp;ldquo;get definitions&amp;rdquo; or something like that.  (I didn&amp;rsquo;t, of course&amp;mdash;I&amp;rsquo;ve been trained over the years to cope with bad design.)&lt;/p&gt;
&lt;h3&gt;Fast Forward &amp;mdash; 99.9% Wasted&lt;/h3&gt;
&lt;p&gt;On television, many people either zoom past the commercials on their DVR, or they leave the room, or, even more often, they just ignore them.  The more you watch TV, the less you interact with commercials.  The more often you use the web, the less you need AdBlock, because the easier it gets to ignore the ads, to the point where you don&amp;rsquo;t even notice that they&amp;rsquo;re there.  The thought of intentionally clicking on a banner ad is on par with walking to work naked.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s an old saying, &amp;ldquo;&lt;q&gt;I know half my advertising dollars are wasted, but I don&amp;rsquo;t know which half.&lt;/q&gt;&amp;rdquo;  Online, it&amp;rsquo;s not half, it&amp;rsquo;s 99.9% wasted, and with click-through tracking, you know exactly which 99.9%.  Your money is wasted when you buy banner ads, because users don&amp;rsquo;t see them.  That&amp;rsquo;s not to say that advertising online is a waste&amp;mdash;it just has to be done smarter, because the users adapted almost immediately.&lt;/p&gt;
&lt;p&gt;Take, for example, Smirnoff Green Tea.  &lt;a href=&quot;http://www.youtube.com/watch?v=PTU2He2BIc0&quot;&gt;The &amp;ldquo;ad&amp;rdquo;&lt;/a&gt; (and the West Coast &lt;a href=&quot;http://www.youtube.com/watch?v=GWzNiUXTh7E&quot;&gt;response&lt;/a&gt;) came out long before you could buy &lt;a href=&quot;http://www.teapartay.com/&quot;&gt;the product&lt;/a&gt; in stores.  They uploaded the videos to the internet, and let users pass them around.  The trick is, &lt;em&gt;users wanted to see these ads&lt;/em&gt;, because they provided real entertainment value in addition to very subtly pushing a product.  Or, look at the &lt;a href=&quot;http://www.youtube.com/watch?v=srrbvNNUKrA&quot;&gt;BMW short directed by Guy Richie and starring Madonna&lt;/a&gt;, or the &lt;a href=&quot;http://www.youtube.com/results?search_query=bmw+clive+owen&amp;amp;search=Search&quot;&gt;other BMW vids with Clive Owen&lt;/a&gt;.  They&amp;rsquo;re too slick to be an ad, and funny enough for everyone to tell their friends about it.  And they just happen to make the BMW M5 seem like the coolest car on the road.&lt;/p&gt;
&lt;p&gt;In a less high-budget approach, consider the snippets above the message-list in GMail.  About 80% of the time, they&amp;rsquo;re the things that I chose to put there: Slashdot and other news feeds, mostly.  That other 20% of the time, they&amp;rsquo;re contextually related to either the news feeds that I normally view, or the message(s) I&amp;rsquo;m viewing now.  I see those, because my brain doesn&amp;rsquo;t see them as an &amp;ldquo;ad&amp;rdquo;, but rather as potentially relevant content that I may be interested in.&lt;/p&gt;
&lt;h3&gt;Evolved to Ignore&lt;/h3&gt;
&lt;p&gt;Millions of years of evolution has made us very good at picking out relevancy in a sea of details.  Once upon a time, it helped us find the materials to make tools, the footprints of our prey, and the plants that were edible.  Even as you read this sentence, your brain will likely skip right over the spelling error, since it doesn&amp;rsquo;t matter.  A human only has so much attention and mental energy, and survival depends upon the judicious use of it.  The more information you&amp;rsquo;re exposed to, the more noise you have to tune out, and the mental cost of making these choices ads up quick.  So, we delegate certain rules to the subconscious, like &amp;ldquo;Ads are always pointless. Flashy text is a gimmick. Don&amp;rsquo;t bother me with it.&amp;rdquo;  The ad doesn&amp;rsquo;t even make it to the conceptual level of analysis&amp;mdash;somewhere between the eyeballs and the higher brain functions, it hits a spam filter and gets discarded.&lt;/p&gt;
&lt;p&gt;Wladimir Palant &lt;a href=&quot;http://adblockplus.org/blog/mozilla-hurting-google-by-recommending-adblock-plus&quot;&gt;said it well&lt;/a&gt;: &lt;q&gt;[T]here is only one reliable way to make sure your ads aren&amp;rsquo;t blocked — make sure the users don&amp;rsquo;t want to block them.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d go a step further than his statement: Even if the &amp;ldquo;block firefox&amp;rdquo; crowd were to find a way to detect AdBlock, it wouldn&amp;rsquo;t matter.  I used to find online ads annoying.  Now I don&amp;rsquo;t find them anything, because I can&amp;rsquo;t see them, and as such, I&amp;rsquo;ve never felt a need to install AdBlock.  (The occasional rich-media ad that breaks the page layout does annoy the piss out of me, though.)  There will never be a way to block users who ignore ads, and the percentage of people who are completely blind to ads will continue to increase as more people use the web.  The revenue stream, which has been drying up since the 90s, will get ever drier as more brand owners realize that there are more effective ways to meet their marketing objectives.  If AdBlock is relevant to your site, you&amp;rsquo;re already in trouble, and it&amp;rsquo;s just going to get worse from here.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Font Size vs Zoom --- The only thing that&#39;s wrong with YUI&#39;s grids.css</title>
		<link href="https://blog.izs.me/2007/09/font-size-vs-zoom-the-only-thing-thats-wrong/"/>
		<updated>2007-09-10T17:00:54Z</updated>
		<id>https://blog.izs.me/2007/09/font-size-vs-zoom-the-only-thing-thats-wrong/</id>
		<content type="html">&lt;p&gt;In the course of a recent code review, I got into a discussion with fellow Yahoo Webdev &lt;a href=&quot;http://nate.koechley.com/&quot;&gt;Nate Koechley&lt;/a&gt;, the engineer behind the &lt;a href=&quot;http://developer.yahoo.com/yui/grids/&quot;&gt;YUI grids CSS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;YUI Grids is designed to give the developer a few microformat-style grid layouts that can be easily mixed and matched to create many different types of pages.  It does something like what Blueprint does, but without a lot of &lt;a href=&quot;http://foohack.com/2007/08/blueprint-css-framework-vs-yui-grids/&quot;&gt;Blueprint&amp;rsquo;s problems&lt;/a&gt;.  I&amp;rsquo;ve been using it since it was released for internal use back when I was first hired here, and have really come to love the skeleton that it provides for building a page.&lt;/p&gt;
&lt;p&gt;However, there&amp;rsquo;s one mistake about it that I routinely alter in my pages&amp;rsquo; CSS.  Standard or not, I have a personal gripe with flexible layout pages.&lt;/p&gt;
&lt;p&gt;As someone with just-correctible-enough-to-drive vision &lt;small&gt;(and maybe not even&amp;mdash;I have a lot of trouble with street signs at night)&lt;/small&gt;, I frequently bump up the font size in my browser.  A big selling point that got me to use the very buggy beta Firefox 0.2 was that it could increase the font size of ANY web page, whether the designer &amp;ldquo;allowed&amp;rdquo; it or not.&lt;/p&gt;
&lt;p&gt;People like me don&amp;rsquo;t browse from page to page with the font size increased.  I scan through headings and links, and when I find something interesting, I increase the size to read it, and then zoom back out when I&amp;rsquo;m done.  (Sort of like the iPhone: zoom into the newspaper article, read it, and then zooms back out to see the whole page.)&lt;/p&gt;
&lt;p&gt;When I do this, I can&amp;rsquo;t stand for the columns to change widths.  It drives me crazy.  I add this to my CSS almost every time:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block css&quot;&gt;#doc {
  width:950px;
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When I say that it&amp;rsquo;s the &amp;ldquo;only thing that&amp;rsquo;s wrong with grids.css,&amp;rdquo; I really mean it.  I can&amp;rsquo;t praise it enough, and highly recommend that every developer use it on every page they build.  But fix the width.&lt;/p&gt;
&lt;blockquote&gt;&lt;cite class=&quot;hcard&quot;&gt;On Aug 10, 2007, at 9:15 AM, &lt;a class=&quot;fn&quot; href=&quot;http://nate.koechley.com/&quot;&gt;Nate Koechley&lt;/a&gt; wrote:&lt;/cite&gt;
Tell me more about this. In general you prefer the page width to be fixed even as the text within it grows? I definitely understand that the introduction of a horizontal scroll is bad, but you dislike expansion even before it exceeds the vierport&amp;rsquo;s size? &lt;i&gt;[sic]&lt;/i&gt;&lt;/blockquote&gt;
&lt;p&gt;Short Answer: Yes and yes.&lt;/p&gt;
&lt;p&gt;Long Answer:&lt;/p&gt;
&lt;p&gt;This is a tricky issue that the hardware and software worlds just don&amp;rsquo;t address very well.  (Hopefully they will someday.)  To make things more complicated, every user thinks that they&amp;rsquo;re 100% dead-on right, and we all seem to have a slightly different opinion about how it should work.  I don&amp;rsquo;t claim to be an expert typesetter, but it is an ergonomic issue that I regularly run into and think about quite often.&lt;/p&gt;
&lt;h3&gt;Line Length Measurement&lt;/h3&gt;
&lt;p&gt;You hear stuff like, &lt;q&gt;Lines of text should be about 4 inches (500px, 50%, etc.) wide at the most to be readable.&lt;/q&gt;  Really, that&amp;rsquo;s not the case.  Look at a billboard&amp;mdash;the ideal text width there is about 30 feet, some 10000pt font-size, or a skywriter which is even longer and bigger.  Just consider how many millenniums it took for hand-written text to reach a good state, and then how many centuries it took to really apply those learnings to machine-printed text.  If you want to see text layout done very very well, look at the print world.&lt;/p&gt;
&lt;p&gt;Visually, size is measured in degrees.  A column of text should be about 10-15 visual degrees.  (10 degrees is about the width of your fist at full arm&amp;rsquo;s length.)  The font size just needs to be big enough that you can make out the letters at whatever distance away you have to move the page to get it to that 10-15 degree width.&lt;/p&gt;
&lt;p&gt;Lines that are shorter than this are easier to scan for relevant details, but harder to &amp;ldquo;savor.&amp;rdquo;  That&amp;rsquo;s why newspapers usually have very narrow columns and text in books takes up almost the whole page.  If the column is too narrow, you&amp;rsquo;ll tend to bring the page closer to your face&amp;ndash;which is why newspapers can get away with very small text.  It&amp;rsquo;s rare that someone reads a newspaper at arm&amp;rsquo;s length.  (As people get older, and the muscles that focus the eyes on items up close start to weaken, many will wear glasses to zoom the text up to a comfortable width for reading at arm&amp;rsquo;s length.)&lt;/p&gt;
&lt;h3&gt;Physical Resizing&lt;/h3&gt;
&lt;p&gt;So, the width of a column should be about 10-15 degrees for most text (narrower for &amp;ldquo;scannable&amp;rdquo; stuff, like sidebars and alerts, wider when we are being really thoughtful and analyzing the concepts.)  We&amp;rsquo;re unconsciously going to &amp;ldquo;zoom in&amp;rdquo; by moving closer to the target until this ideal width is reached.  The font size should be such that it can be read easily from a distance that brings the visual column width to a comfortable range.  So, you slide your chair until you&amp;rsquo;re at the right width, and then adjust the font size.  Or, you resize the browser until the columns are where you like them, and then move the font around until it&amp;rsquo;s readable.&lt;/p&gt;
&lt;p&gt;Most of the time, this is largely unconscious, which is good.  However, you almost never want the line length to scale up with the font size, because the line length is already good&amp;mdash;but the text is too small for the eyeballs to focus on it.  (If it&amp;rsquo;s not, then you really need zoom, not a font-size change.)  When I bump up the font size on a YUI grids page, the line length expands to occupy about 30 degrees of visual space, which is too much.  The natural instinct is to slide my chair back, which means that I can&amp;rsquo;t read the text easily, or more likely, just get annoyed and move on.&lt;/p&gt;
&lt;p&gt;This also ties into discussions about wide-screen vs. multi-screen, pixel density, and maximize behavior.  Even if we say that we want to always have a fixed width, what may be perfect on one display may be obnoxious on another.  I have a 24&amp;quot; monitor that is 1920px wide, but my browser window is usually around 1024.  Sites that work well on 1024x768 (or 800x600) will be abusive on a 50&amp;quot; 1080p HD display, and vice versa.  What we really need is a way to easily zoom in and out with one action, and adjust the font-size as a separate action.  Also, it has to be so easy to do both that the user is hardly aware of the work involved&amp;mdash;that&amp;rsquo;s the really hard part.&lt;/p&gt;
&lt;h3&gt;Moving Forward&lt;/h3&gt;
&lt;p&gt;Browsers tend to blur the distinction between zoom and font-size; they get users and developers to share in the error by frequently saying one when they mean the other.  Opera Mini on my phone has a &amp;ldquo;zoom&amp;rdquo; feature that only changes the font size.  IE 7 zooms images and column widths when you change View &amp;gt; Font Size.  In the 2 seconds here and there that I&amp;rsquo;ve managed to play with it, it seems like Safari on the iPhone is probably the best implementation to date of zoom and font-size both done independently and well.  OSX provides a &amp;ldquo;zoom&amp;rdquo; feature that&amp;rsquo;s pretty easy to use, but it feels klunky to zoom the whole OS just to read a web page.&lt;/p&gt;
&lt;p&gt;Kathy Marks wrote up a great list of the &lt;a href=&quot;http://www.kathymarks.com/archives/2006/11/best_fonts_for_the_web_1.html&quot;&gt;best fonts for the web&lt;/a&gt;, and also has some great resources at the bottom of that page about typography.  And of course, there&amp;rsquo;s &lt;a href=&quot;http://www.informationarchitects.jp/the-web-is-all-about-typography-period&quot;&gt;iA&amp;rsquo;s classic article: Web Design is 95% Typography&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I should point out that full-width designs are good for &lt;a href=&quot;http://search.yahoo.com/search?p=full+width+css&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://mail.yahoo.com/&quot;&gt;particular&lt;/a&gt; &lt;a href=&quot;http://maps.google.com/maps?q=701+1st+ave+94089&quot;&gt;cases&lt;/a&gt;, but probably wrong for most.  In the cases where it makes sense to size the page to the browser&amp;rsquo;s width, I don&amp;rsquo;t think it falls into this sort of problems.  Flexible-width pages, however, are a nightmare.  Fixed-width isn&amp;rsquo;t perfect either, but it&amp;rsquo;s better.&lt;/p&gt;
&lt;p&gt;What we really need is separation between &amp;ldquo;zoom&amp;rdquo; and &amp;ldquo;font resize.&amp;rdquo;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Squish it good - Code compression for the masses</title>
		<link href="https://blog.izs.me/2007/09/squish-it-good-code-compression-for-the-masses/"/>
		<updated>2007-09-04T21:21:05Z</updated>
		<id>https://blog.izs.me/2007/09/squish-it-good-code-compression-for-the-masses/</id>
		<content type="html">&lt;p&gt;Labor Day came and I completely forgot that it would mean no Monday morning for writing a post.  Hope you all had great beer and burgers, or whatever you were doing.&lt;/p&gt;
&lt;p&gt;In the meantime, I&amp;rsquo;d like to mention something cool.  &lt;a href=&quot;http://www.julienlecomte.net/&quot;&gt;Julien LeComte&lt;/a&gt; has released his &lt;a href=&quot;http://www.julienlecomte.net/yuicompressor/&quot;&gt;YUI Compressor&lt;/a&gt; that includes a CSS minification script that I built here for internal use.&lt;/p&gt;
&lt;p&gt;Compression is a little more than just minifying.  Julien&amp;rsquo;s compressor also shortens all local variable names, resulting in significant improvements over minification alone, but without the bug-risks of obfuscation.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s interesting to me that his tests show that compression is actually more effective than obfuscation when the code is gzipped.  I&amp;rsquo;m not enough of a gzip scholar to know why that is, but in my mind at least, it shuts &lt;a href=&quot;http://dean.edwards.name/packer/&quot;&gt;packer&lt;/a&gt;&amp;rsquo;s Base 62 encoding out of the running.  Additionally, in my &lt;small&gt;(non-scientific, not statistically significant, but probably still accurate)&lt;/small&gt; tests, packer adds &lt;abbr title=&quot;between 100ms and 500ms for any given piece of code&quot;&gt;a significant amount&lt;/abbr&gt; of run-time due to the convolutions of eval and a needless large Regex.  You need to have pretty big download gains in order to make it worth putting the browser through that extra work.&lt;/p&gt;
&lt;p&gt;Say it once, say it forever, say it to yourself at night, teach it to your children: Javascript obfuscation is pointless and dangerous.  You don&amp;rsquo;t get enough download savings to justify the risk of bugs, you can&amp;rsquo;t &lt;em&gt;really&lt;/em&gt; hide your code, and when gzipped, compression is better anyhow.&lt;/p&gt;
&lt;p&gt;The CSS Compressor that I wrote doesn&amp;rsquo;t do what &lt;a href=&quot;http://csstidy.sourceforge.net/&quot;&gt;CSS Tidy&lt;/a&gt; does.  There are a few steps that could be taken from CSS Tidy, like shortening &lt;code&gt;margin:1px 1px 1px 1px&lt;/code&gt; to just &lt;code&gt;margin:1px&lt;/code&gt;.  It doesn&amp;rsquo;t merge properties or background properties.  Like JSMin and the YUI Compressor&amp;rsquo;s javascript minifier, it tries to err on the side of not affecting functionality in any relevant way, while attempting at the maximum compression possible within that boundary.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Blueprint CSS Framework vs YUI Grids</title>
		<link href="https://blog.izs.me/2007/08/blueprint-css-framework-vs-yui-grids/"/>
		<updated>2007-08-27T17:00:11Z</updated>
		<id>https://blog.izs.me/2007/08/blueprint-css-framework-vs-yui-grids/</id>
		<content type="html">&lt;p&gt;I did &lt;a href=&quot;http://foohack.com/2007/08/yui-crockford-module-pattern-vs-prototypes-class-function/&quot;&gt;recently compare YUI with a competitor&lt;/a&gt;, and I don&amp;rsquo;t want this to turn into a &amp;ldquo;&lt;abbr title=&quot;Yahoo User Interface&quot;&gt;YUI&lt;/abbr&gt; vs. X&amp;rdquo; blog.  It&amp;rsquo;s a very limited topic that quickly becomes just one guy&amp;rsquo;s opinion&amp;mdash;and you probably already know that I&amp;rsquo;m a big fan of YUI, so it would just turn into somewhat heavy-handed marketing.  There are more interesting things I could blog about, and so I plan to only compare YUI with a rival framework when there is some relevant point to make besides &lt;q lang=&quot;retarded&quot;&gt;YUI iz teh hotness lolzzzz!!!!!11111&lt;/q&gt;  Also, &lt;a href=&quot;http://mattsnider.com/&quot;&gt;Matt Snider already does a good job of comparing frameworks&lt;/a&gt;, a much better job than I could, so that niche is filled.  &lt;small&gt;While I write this, I have another half-finished draft about a YUI component sitting in my Wordpress dashboard.  What can I say?  I make web pages at Yahoo, so I use it a lot.  But it&amp;rsquo;s not a &amp;ldquo;YUI vs. X&amp;rdquo; article.&lt;/small&gt;&lt;/p&gt;
&lt;p&gt;CSS frameworks in general, and &lt;a href=&quot;http://developer.yahoo.com/yui/grids/&quot;&gt;grids.css&lt;/a&gt; in particular, have &lt;a href=&quot;http://www.elliotswan.com/2006/05/10/yui-grids-css-framework-considered-harmful/&quot;&gt;taken&lt;/a&gt; &lt;a href=&quot;http://vysnu.com/log/2007/08/11/dry-css.html&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://www.thinkvitamin.com/features/javascript/15-things-you-can-do-with-yahoo-ui#comment-3192&quot;&gt;heat&lt;/a&gt;, but I think that the basic concept has been accepted.  The &amp;ldquo;non-semantic class names&amp;rdquo; argument is specious, in my opinion, since the meanings are defined by the grids microformat.  The &amp;ldquo;more code&amp;rdquo; argument is also a bit off, since the verbosity is actually &lt;em&gt;easier&lt;/em&gt; to parse and manage once you get used to it (speaking as a 90&amp;rsquo;s-era table-master.)  Also, downloading code is usually faster than parsing/displaying it&amp;mdash;and divs typically render faster than tables.&lt;/p&gt;
&lt;p&gt;A recent thread in our internal web development mailing list compared &lt;a href=&quot;http://developer.yahoo.com/yui/grids/&quot;&gt;YUI&amp;rsquo;s Grids CSS&lt;/a&gt; with a hot new kid on the CSS framework block, &lt;a href=&quot;http://bjorkoy.com/blueprint/&quot;&gt;Blueprint&lt;/a&gt;.  As I&amp;rsquo;ve &lt;a href=&quot;http://foohack.com/2007/08/yui-crockford-module-pattern-vs-prototypes-class-function/&quot;&gt;said before&lt;/a&gt;, I feel like the YUI Javascript components seem to be created by developers who love the language and want to use it, rather than other frameworks that seem intent on re-inventing Javascript or turning it into some other language.  The same can be said, I think, for YUI Grids as compared to Blueprint; but in this case, the love/hate is towards standards, semantic markup, microformats, and the &amp;ldquo;spirit&amp;rdquo; of CSS layouts.  As its primary author states, Blueprint &amp;ldquo;brings print design on the web one step closer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Haven&amp;rsquo;t we all be working to convince our bosses and stakeholders and users and fellow developers that &amp;ldquo;print design on the web&amp;rdquo; is a fundamentally misguided goal?  Isn&amp;rsquo;t that what the whole &amp;ldquo;web standards movement&amp;rdquo; has been about, really?&lt;/p&gt;
&lt;p&gt;I think that Blueprint is interesting, but it has some pretty major problems as a CSS framework.&lt;/p&gt;
&lt;h3&gt;Pixel-based fonts&lt;/h3&gt;
&lt;p&gt;In principle, using a px measurement for font-size is not a good idea.  A handful of browsers will prevent the font from being resized by the user if you do this.  Others will set a minimum pixel font size, which means that, for example, your 8px font and 12px fonts, which should be different sizes to convey differing importance, could both be 12px.&lt;/p&gt;
&lt;p&gt;The goal of having a consistent vertical grid is a good idea, and very pleasing visually.  &lt;a href=&quot;http://foohack.com/2007/08/marching-to-a-vertical-cadence/&quot;&gt;I did it on this site&lt;/a&gt;, and without a single px font size (except a single setting on the HTML element while debugging, which was removed later.)&lt;/p&gt;
&lt;p&gt;They were wise to attempt it, but misguided in the implementation.  You can do that with flexible fonts just fine, if you&amp;rsquo;re willing to do just a little bit of math.  It won&amp;rsquo;t always round perfectly, but it&amp;rsquo;ll be mostly right most of the time in most browsers, which is all that we can ever hope for as webdevs.&lt;/p&gt;
&lt;p&gt;(To be fair, it looks like support for fully flexible fonts is on the road map.)&lt;/p&gt;
&lt;h3&gt;It&amp;rsquo;s a bit bloated&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m not so sure about the complaint that the YUI CSS is bloated&amp;mdash;next to the CSS that most simple blog templates contain (including this one), it&amp;rsquo;s teensy, especially when served gzipped and concatenated with your other stuff.  Unless you&amp;rsquo;re working on some very-high-volume streamlined-to-ridiculousness site, there are probably better ways to optimize.  Do any kind of profiling on most sites, and you&amp;rsquo;ll find that the CSS and markup is a very small fraction of the loading time.  If the requests are minimized, it&amp;rsquo;s almost instantaneous.  Check out the bloated stuff that we wrote for &lt;a href=&quot;http://harrypotter.yahoo.com/&quot;&gt;the Yahoo! Harry Potter site&lt;/a&gt;.  The images take a while to download, but the CSS and markup is there faster than you can say &amp;ldquo;He Who Must Not Be Named.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;On the other hand, Blueprint CSS is 3 files, one for each of screen and print, and another for IE hacks.  While some will say that having a separate file for IE hacks is a good thing, I much prefer to put all the information for a particular element in one place.  Having a single CSS file makes it easier to concatenate and minify with your own stuff.  And it&amp;rsquo;s just one request, whereas Blueprint is 3.&lt;/p&gt;
&lt;h3&gt;Tabular class names like &amp;ldquo;span-2&amp;rdquo; or &amp;ldquo;append-4&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;While YUI Grids is often accused of using non-semantic class names, I think that it is actually quite tame in this area.  It uses a microformat-style approach, so that the &lt;em&gt;structure&lt;/em&gt; of the data is (ideally) expressed in the class names as they are defined in the microformat, and the visual treatment is defined in the CSS to reflect that structure.  This is in fact the purpose of the div tag and class attribute, and it is wrong to say that it&amp;rsquo;s non-semantic or classitis.  &lt;a href=&quot;http://nate.koechley.com/blog/2006/12/15/divitis_and_correct_div_usage/&quot;&gt;Nate Koechley said it better&lt;/a&gt; than I can.&lt;/p&gt;
&lt;p&gt;On the other hand, while Blueprint CSS results in a shallower hierarchy of nested divs, it uses class names with colspan-esque names like &amp;ldquo;span-2&amp;rdquo; and &amp;ldquo;append-4&amp;rdquo;, or definitive &amp;ldquo;stylistic class names&amp;rdquo; like &amp;ldquo;.clear&amp;rdquo;, and so on.  Have we come so far from &lt;a href=&quot;http://annevankesteren.nl/2004/06/keep-style-out-of-markup&quot;&gt;the sound wisdom that stylistic class attributes are problematic&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;This is &lt;em&gt;exactly&lt;/em&gt; why we don&amp;rsquo;t use tables for layout any more.  Blueprint CSS ends up rendering faster than a layout table, but it still has most of the same problems as layout tables.&lt;/p&gt;
&lt;p&gt;If it is important enough to define your grid layout in the markup, then you should be using a table.  The whole point of CSS layouts is to separate the layout information from the structural semantic markup.&lt;/p&gt;
&lt;h3&gt;Takeaways&amp;hellip;&lt;/h3&gt;
&lt;p&gt;I use YUI grids on production sites.  I love it.  Other webdevs who are familiar with it can pick up my stuff and run with it easily.  It&amp;rsquo;s a great thing.  I know some who &amp;ldquo;only use frameworks to prototype,&amp;rdquo; but I think it&amp;rsquo;s best to write production-quality code for prototypes.  (Perhaps your front-end isn&amp;rsquo;t wired up to live data, but I strive to make all the code I write meet a certain level of quality.)  If it&amp;rsquo;s useful in prototyping, what&amp;rsquo;s the argument to not use it in a live environment?  Is the 6k of gzipped CSS really such a burden on your page?  If we all use the same framework, then we all know what&amp;rsquo;s going on in one another&amp;rsquo;s code.  This doesn&amp;rsquo;t matter for prototypes, but is crucial for live products that need to be maintained.&lt;/p&gt;
&lt;p&gt;All that being said, it would be nice if there was a YUI typography CSS that provided an easy way to achieve consistent vertical spacing without resorting to pixel-sized fonts.  Functionality-wise, that&amp;rsquo;s where Blueprint beats YUI Grids, but I don&amp;rsquo;t think it&amp;rsquo;s a very good implementation, overall.  I&amp;rsquo;m not 100% sure if such a thing is planned for YUI, but I would be surprised if no one on that team has at least thought about it.  As I said before, &lt;a href=&quot;http://?show_lines#post-27-itspossible&quot; id=&quot;post-27-itspossible&quot;&gt;it&amp;rsquo;s possible&lt;/a&gt; without stabbing semantics in the face and setting the standards movement back 10 years.&lt;/p&gt;
&lt;p&gt;A message to all would-be framework developers out there: Please don&amp;rsquo;t rewrite my languages!  I became a web developer because I care about this craft and enjoy doing it.  CSS, HTML, and Javascript are powerful tools to manipulate this very flexible and exciting development platform.  Please don&amp;rsquo;t think that you can make things better by turning them into something else.  Abstract out some of the commonly used functionality, or show us how to do more with what we have, or set a standard that we can all agree upon; that&amp;rsquo;s all fine.  But don&amp;rsquo;t turn my DIVs into TABLEs, or my SPANs into FONTs, or my Javascript into Ruby.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The New Spam: Broken Unsubscribe Methods</title>
		<link href="https://blog.izs.me/2007/08/the-new-spam-broken-unsubscribe-methods/"/>
		<updated>2007-08-20T18:39:00Z</updated>
		<id>https://blog.izs.me/2007/08/the-new-spam-broken-unsubscribe-methods/</id>
		<content type="html">&lt;p&gt;Sometimes, I&amp;rsquo;ll forget to (un)check the box on a form, and inadvertently tell some perfectly well-meaning company that I want to receive their crappy emails in my inbox.  Or, perhaps, I&amp;rsquo;ll think it sounds like a good idea, and even enjoy receiving them for a while, and then get bored or decide that it&amp;rsquo;s not for me.  It&amp;rsquo;s not spam, per se, since I &lt;em&gt;did&lt;/em&gt; ask for it, and the sender isn&amp;rsquo;t some Nigerian banker or penis enlarger, but I no longer want to receive it.&lt;/p&gt;
&lt;p&gt;Today I ran face-first into the fact that Borders Bookstore breaks every rule in this list.  Every single one.  And sadly, they&amp;rsquo;re not that unusual.&lt;/p&gt;
&lt;p&gt;Either way, the result is usually the same: I scroll to the bottom of the message, searching for the url that I have to visit to unsubscribe.  Since I often view my email on my phone in text-only mode, I then find the words &amp;ldquo;click here to unsubscribe&amp;rdquo; that are not hyperlinked.  Strike 1: Sending html email is fine, but make sure that the text-only version has the url and not the link text.  Almost every text-only email reader these days will turn it into a link.&lt;/p&gt;
&lt;p&gt;What&amp;rsquo;s worse is the &amp;ldquo;reply to blah blah with the word &amp;lsquo;unsubscribe&amp;rsquo; in the subject&amp;rdquo;.  Strike 2: Don&amp;rsquo;t make me send you anything.  If I have to send you an email to stop receiving your crappy emails, I&amp;rsquo;ll probably just black-hole that account on general principle.&lt;/p&gt;
&lt;p&gt;Log onto my email in Firefox, and change to the html view.  Click the link.  It says that I have to log in to change my email preferences.  Strike 3: If I&amp;rsquo;m clicking a link from my email address telling you that I want to unsubscribe, don&amp;rsquo;t make me log in and navigate your crappy application to find the unsubscribe link.  You already know who I am, because you sent me something.  Put a key or whatever in the URL.&lt;/p&gt;
&lt;p&gt;I log in, and click the url again.  It says that I have to log in to change my email preferences.  Strike 4: If I&amp;rsquo;m already logged in, why doesn&amp;rsquo;t it just read the cookie or whatever?&lt;/p&gt;
&lt;p&gt;So, I log in again, and look through the options to find the &amp;ldquo;Email preferences&amp;rdquo; link.  I go to the page, uncheck the &amp;ldquo;please send me crap&amp;rdquo; box, and then look for the submit button.  It&amp;rsquo;s nowhere to be found.  I actually resorted to inspecting the HTML in Firebug and finding the submit element in question and tweaking its CSS to pull it out from behind another element so that I could click on it.  Out of curiousity, to research for this article, I tried it in a few other browsers, and it worked in IE 6 on a PC only.  (It was broken in IE 7.)  Strike 5: Please test your pages in something other than last year&amp;rsquo;s IE on Windows.  At least load them up and make sure that the stuff is visible.  It literally takes 5 minutes.&lt;/p&gt;
&lt;p&gt;On the next page, it asks me if I&amp;rsquo;m sure.  It assures me that there is no other way to get coupons and valuable discounts.  Strike 6: If I&amp;rsquo;ve made it this far, I don&amp;rsquo;t care about your stupid offers, I&amp;rsquo;m sure that I don&amp;rsquo;t want them.&lt;/p&gt;
&lt;p&gt;In my opinion, there is only one good way to handle any kind of automated mailing.  At the bottom of every message, in legible font, it should say: &lt;q&gt;You are receiving this message because you signed up for it.  Please visit &lt;a href=&quot;http://example.com/unsubscribe?u=12345&amp;amp;e=blah@blah.com&quot;&gt;http://example.com/unsubscribe?u=12345&amp;amp;e=blah@blah.com&lt;/a&gt; to unsubscribe.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;On the page reached, it says, &lt;q&gt;You have been unsubscribed.  You will receive one more message confirming this, just in case it was an accident.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;It sends you a message that says, &lt;q&gt;You were unsubscribed from the blah blah list.  If this was an accident or a mistake, please visit &lt;a href=&quot;http://example.com/subscribe?u=12345&amp;amp;e=blah@blah.com&quot;&gt;http://example.com/subscribe?u=12345&amp;amp;e=blah@blah.com&lt;/a&gt; to sign up again.&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;Failing that ideal setup, the link should take the user directly to a plain-vanilla page where they can &lt;em&gt;easily&lt;/em&gt; choose what to receive and not receive in a single step.  That&amp;rsquo;s what this blog does, care of my lightly hacked version of &lt;a href=&quot;http://txfx.net/code/wordpress/subscribe-to-comments/&quot;&gt;the Subscribe to Comments plugin&lt;/a&gt;.  As a reader and commenter, I find that it&amp;rsquo;s nice to receive an update if someone leaves a comment on a blog post where I&amp;rsquo;ve commented.  I&amp;rsquo;m writing a comment, so I&amp;rsquo;m interested in the discussion.  As an author, it&amp;rsquo;s nice to know that the readers who leave comments will know that I&amp;rsquo;m responding to them.  And it&amp;rsquo;s easy to avoid, for those who don&amp;rsquo;t want to receive anything, because of the nice &amp;ldquo;Don&amp;rsquo;t ever send me crap&amp;rdquo; option on the subscription management page.&lt;/p&gt;
&lt;p&gt;If you don&amp;rsquo;t want to hurt your brand and anger your customers, ALWAYS err on the side of &lt;em&gt;not&lt;/em&gt; sending them email.  This experience only served to make me more likely to use &lt;a href=&quot;http://amazon.com/?tag=isaacschcom-20&quot;&gt;Amazon&lt;/a&gt; next time.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>YUI&#39;s &quot;Module Pattern&quot; vs. Prototype&#39;s Class Function</title>
		<link href="https://blog.izs.me/2007/08/yuis-module-pattern-vs-prototypes-class/"/>
		<updated>2007-08-13T17:47:36Z</updated>
		<id>https://blog.izs.me/2007/08/yuis-module-pattern-vs-prototypes-class/</id>
		<content type="html">&lt;p&gt;Via &lt;a href=&quot;http://geoffreymoller.com/2007/05/15/when-javascript-libraries-attack/&quot;&gt;Geoffery Moller&lt;/a&gt;, I came across &lt;a href=&quot;http://mattsnider.com/javascript/prototype-vs-yui-round-1-oop-architecture/&quot;&gt;this article&lt;/a&gt; on Matt Snider&amp;rsquo;s blog.  I&amp;rsquo;m surprised that no one noticed what (to me) was the most relevant difference in the libraries that he evaluated.&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;YUI method of class creation&amp;rdquo; is not distinctively YUI&amp;mdash;it&amp;rsquo;s just what Javascript gives you for free.  You can use the &amp;ldquo;Module Pattern&amp;rdquo; alone on a page with no library at all!  You can call it Crockford&amp;rsquo;s Module Pattern, but it seems to me that he discovered or popularized it more than &amp;ldquo;invented&amp;rdquo; it.&lt;/p&gt;
&lt;p&gt;This, to me, highlights the biggest difference in approach between YUI and every other library: YUI doesn&amp;rsquo;t attempt to re-write the language, but rather to show off what the language can do and how those features can be effectively put to use.  My experience with Prototype and Dojo and Mochikit all made me feel a bit like the author must not have liked Javascript very much.  (Dojo actually goes a bit further&amp;mdash;it rewrites HTML as well!)  It seems like the other libraries say, &amp;ldquo;This Javascript language is too hard and confusing.  Let&amp;rsquo;s make it into something else.&amp;rdquo;  YUI says, &amp;ldquo;This language is beautiful and powerful, but it would be handy if we had some conventions and a common approach to these rough edges.  Let&amp;rsquo;s build those common pieces.&amp;rdquo;  It&amp;rsquo;s the difference between teaching someone to fish and giving them a fish, except instead of giving him a fish, you pass the fish through a slow and complex machine that spits out Java code.&lt;/p&gt;
&lt;p&gt;Of course, I&amp;rsquo;m a bit biased.  I &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000921.html&quot;&gt;imprinted upon YUI&lt;/a&gt; at a fairly early stage in my Javascript development.  I work &lt;a href=&quot;http://yahoo.com/&quot;&gt;here&lt;/a&gt;, so I get to request features directly through our internal bugzilla instead of pleading in the public arenas.  But the approach is one that I&amp;rsquo;ve always favored.  If you feel the need to rewrite the language, then just go use another language.  Javascript is the common tongue of the internet, and will remain so for the indefinite future.  Don&amp;rsquo;t fight it. (&lt;a href=&quot;http://www.codinghorror.com/blog/archives/000857.html&quot;&gt;Hat-tip&lt;/a&gt; to Jeff Atwood.)&lt;/p&gt;
&lt;p&gt;Crockford&amp;rsquo;s &amp;ldquo;Module Pattern&amp;rdquo; is a great way to create a singleton that has some private methods.  In fact, in my opinion, it&amp;rsquo;s the best and only way that this task should be done.  (There are others, but they tend to be more obtuse, IMO.)  But that&amp;rsquo;s not the only task of an object-oriented development.  Sometimes, you need to have a bunch of objects, and if they have shared functionality, then that should be handled with a class of sorts.  In Javascript, that means that they&amp;rsquo;re stamped from the same Constructor and Prototype.  The Module Pattern does not address this in a very clear way, but it does highlight the principle of data-hiding through a closure that is the key to OOP in Javascript.&lt;/p&gt;
&lt;p&gt;To create a class, I usually do something like this, which takes the essence of the Module Pattern and uses it to create a reusable class.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;(function () {&lt;br /&gt;
  // these are properly private static, not just private
  // but with scope correction, that&#39;s good enough for functions.&lt;br /&gt;
  // private function, called with privateFunction.call(this, a, b, c);
  var privateFunction = function (a, b) {
    this.a = a;
    this.b = b;
  };&lt;br /&gt;
  // private static data.  Shared between all instances!
  var privateStaticData = &quot;I&#39;m private and static.  All instances share me.&quot;;&lt;br /&gt;
  YAHOO.myProject.myClass = function (a, b, id) {
    // a and b are public, since they&#39;re set on this.
    this.a = a;
    this.b = b;
    YAHOO.myProject.myClass.instances[id] = this;
  };&lt;br /&gt;
  YAHOO.myProject.myClass.instances = {};&lt;br /&gt;
  YAHOO.myProject.myClass.prototype = {
    myPublicProperty : &quot;I&#39;m accessible as &lt;object reference=&quot;&quot;&gt;.myPublicProperty.&quot;,
    myPublicMethod : function () {
      var a = (new Date()).getTime();
      var b = a + 10000;&lt;br /&gt;
      // note the way that private functions are called.
      privateFunction.call(this, a, b);
    }  
  };&lt;br /&gt;
})(); // close the closure and execute the code.&lt;br /&gt;
// later on...
(function () {
  var myInstance = new YAHOO.myProject.myClass(1,2,&#39;blahblah&#39;);
  // now you can deal with it as &quot;myInstance&quot; within this closure,
  // or as YAHOO.myProject.myClass.instances.blahblah elsewhere.
})();&lt;/object&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;(When in doubt, wrap it in a closure.  &lt;a href=&quot;http://yuiblog.com/blog/2006/06/01/global-domination/&quot;&gt;Global variables are evil.&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d rather work with someone who is a bit green with Javascript but can learn, rather than someone who is an expert with Prototype or Dojo.  &lt;em&gt;The more time someone spends building applications with a library like Prototype, the further they get from Javascript, and the more dependent they become on the library.&lt;/em&gt;  By contrast, time spent using YUI tends to breed developers who are experts in &lt;em&gt;Javascript&lt;/em&gt;, and that skill is far more useful than being an expert in a particular library.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>When will the Bubble Bubble burst? (Or: Who really listens to these pundits?)</title>
		<link href="https://blog.izs.me/2007/08/when-will-the-bubble-bubble-burst-or-who-really/"/>
		<updated>2007-08-06T17:00:06Z</updated>
		<id>https://blog.izs.me/2007/08/when-will-the-bubble-bubble-burst-or-who-really/</id>
		<content type="html">&lt;p&gt;So, I stumbled across &lt;a href=&quot;http://www.pcmag.com/article2/0,1895,2164136,00.asp&quot;&gt;an article by John Dvorak&lt;/a&gt;, who seems to think that we&amp;rsquo;re headed for another bubble burst in the next few years, and that it&amp;rsquo;ll be worse than the 2001 tech crash.  In fact, he asserts that &lt;q&gt;&amp;ldquo;Every single person working in the media today who experienced the dot-com bubble in 1999 to 2000 believes that we are going through the exact same process and can expect the exact same results,&amp;rdquo;&lt;/q&gt; an absurdly over-reaching generalization that made me literally laugh out loud.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve heard this before.  Every once in a while, a relative or friend of mine hears someone talking on the news about how Microsoft is going to buy Yahoo, or how we&amp;rsquo;re headed for a crash, or how the internet will be outdated by some new thing in 6 months, or how &amp;ldquo;web2.0 is changing everything,&amp;rdquo; and so on, and sometimes calls me to ask what I think of it, since I&amp;rsquo;m the person they know with some skin in that game.  The vast majority of punditry is utter trash.  Like any fortune teller, they get by on one or two hits, and rely on the short attention span of the crowd to hide their nearly endless string of failed predictions.  The more radical their claim, the more likely it is that they&amp;rsquo;ll get attention, because people so often fall victim to the &amp;ldquo;Cloud Insurance&amp;rdquo; scam.  (&amp;ldquo;What if this guy is right, and the clouds really &lt;em&gt;are&lt;/em&gt; going to fall&amp;hellip; then I&amp;rsquo;ll be glad I bought that insurance!&amp;rdquo;)  The more attention he gets, and the more he can whip the audience up into a frenzy, the more likely it is that the pundits&amp;rsquo; past failed predictions will be forgotten.&lt;/p&gt;
&lt;p&gt;I don&amp;rsquo;t want to come off as decrying punditry as such.  (That would sort of make me like a Dvorak of Pundits, wouldn&amp;rsquo;t it?)  No, there is some very good analysis out there.  One mark of a good analyst is a history of successful predictions.  For example, if you look through the &amp;ldquo;iTulip&amp;rsquo;s Record&amp;rdquo; links at the top of &lt;a href=&quot;http://itulip.com/&quot;&gt;iTulip.com&lt;/a&gt;&amp;rsquo;s homepage, you&amp;rsquo;ll find some very sound predictions that were insightful, well-informed, and ultimately accurate.  In fact, &lt;a href=&quot;http://www.bankrate.com/brm/news/investing/19991129f.asp?keyword=&quot;&gt;this article from November 1999&lt;/a&gt; called the bubble for what it was.&lt;/p&gt;
&lt;p&gt;Back in the 90s, there was a great new thing that changed the way that humans interact, communicate, and generally live their lives.  Big technological innovations rarely come along and change the landscape of daily life.  The railroad, the steam engine, the printing press, the television&amp;mdash;these kinds of things have made our world smaller, and in so doing, have had huge effects on the way that we live and work.  By changing the way that we live, they also made certain skills and commodities much more (or less) valuable than they were prior to the change.  Things that were never possible now are, and there&amp;rsquo;s new money to be made.&lt;/p&gt;
&lt;p&gt;By definition, no one has any experience in a new landscape-changing technology when it shows up.  New ventures cost money, and carry a risk of failure.  Not wanting to be left behind, there is often a frenzy of new ideas, along with a corresponding frenzy of spending and speculation.  Money floods into the market, artificially pushing up prices above their &amp;ldquo;real&amp;rdquo; value.  Most of those ideas fail, and most of that money is thus wasted on unproductive ends.  Eventually, the economy does what economies do, and there is a correction.&lt;/p&gt;
&lt;p&gt;Not all &lt;a href=&quot;http://en.wikipedia.org/wiki/Economic_bubble&quot;&gt;Economic Bubbles&lt;/a&gt; are the same.  Some are big, and some are small.  The stock market crash of 1929 was a bubble that kicked off the start of the &lt;a href=&quot;http://en.wikipedia.org/wiki/Great_Depression&quot;&gt;Great Depression&lt;/a&gt;.  By comparison, the &lt;a href=&quot;http://en.wikipedia.org/wiki/Dot-com_bubble&quot;&gt;dot-com bubble&lt;/a&gt; was pretty tame, though it did reduce quite a few &amp;ldquo;paper millionaires&amp;rdquo; to pennies.  (Not all economic bubbles are &lt;a href=&quot;http://en.wikipedia.org/wiki/Stock_market_bubble&quot;&gt;stock-market bubbles&lt;/a&gt;.  Anything that is overvalued and becomes and object of speculation will eventually come crashing back to reality.  &lt;a href=&quot;http://en.wikipedia.org/wiki/Tulip_mania&quot;&gt;Tulips&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Beanie_Baby&quot;&gt;Beanie Babies&lt;/a&gt; come to mind.)&lt;/p&gt;
&lt;p&gt;A speculative bubble is a dangerous thing to get wrapped up in, and highlights the importance of not betting more than you have and always diversifying your investments.  However, in the long run, it&amp;rsquo;s a necessary part of the feedback-cycle that produces a quality marketplace.  Yahoo, eBay, Amazon, and Google were never going to go under during the dot-com bubble.  They had to tighten their belts a notch or two, but good ideas that are executed on wisely will always do alright.&lt;/p&gt;
&lt;p&gt;I personally think that there really aren&amp;rsquo;t any Amazon- or Google-sized ideas left on the web.  That&amp;rsquo;s not to say that we can&amp;rsquo;t innovate or can&amp;rsquo;t make money, of course, but at this point, it&amp;rsquo;s the 37signals and Twitters and Flickrs and YouTubes, which take a small team to create value with simple good ideas on a shoestring budget, that are making out well.  And of course, Yahoo and Google and them are doing what they do, and buying the successful startups when it makes sense to do so.  VC has been flowing back into Silicon Valley, but in much smaller streams, and with the benefit of a big failure to learn from.  The benefit of doing things on a shoestring is that it doesn&amp;rsquo;t cost as much, and you get to keep more of your purchase price if you are eventually bought.  There is a much more stable ecosystem than there was 6 years ago.&lt;/p&gt;
&lt;p&gt;Granted, &amp;ldquo;Web2.0&amp;rdquo; is a silly marketing buzzword, and I think that most engineers and businesspeople pretty much understood that from the start.  Social networking is an interesting phenomenon, but ultimately nothing new.  (Weren&amp;rsquo;t we networking socially &lt;em&gt;before&lt;/em&gt; web2.0?)  Some things are getting attention and interest and $$$ that probably shouldn&amp;rsquo;t, and there will be corrections in the future.  But the web crash of 2001 is not going to happen again&amp;mdash;at least, not until the next life-changing piece of technology comes by and gets us all excited.&lt;/p&gt;
&lt;p&gt;What I want to know is this:  When will we as a society stop listening to doom-and-gloom pundits like Dvorak?  Did 2001 traumatize us so much that we can&amp;rsquo;t even admit the possibility of a fortunate future?  I think there is a sort of &amp;ldquo;interest bubble&amp;rdquo; that somewhat mirrors the phenomenon of an economic speculative bubble.  You invest your agreement, and in return, you get to say &amp;ldquo;I told you so.&amp;rdquo;  The problem is, when that bubble pops, no one notices.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Phonetic English</title>
		<link href="https://blog.izs.me/2007/08/phonetic-english/"/>
		<updated>2007-08-05T17:00:38Z</updated>
		<id>https://blog.izs.me/2007/08/phonetic-english/</id>
		<content type="html">&lt;p&gt;If there had not been so much money to be so easily acquired in information technology, there&amp;rsquo;s a good chance that I would have pursued a career in linguistics.  I&amp;rsquo;ve always been fascinated by languages, by the different ways that information can be expressed and understood in symbolic forms.  Indeed, I think that&amp;rsquo;s a big part of the reason why computer science appealed to me.&lt;/p&gt;
&lt;p&gt;This post is pretty off-topic for this blog, so it&amp;rsquo;s hidden behind the jump.  You&amp;rsquo;re invited to continue if you&amp;rsquo;d like.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;I need to preface all of this with a huge disclaimer, lest any true linguist geeks see this and lose all respect for me.  I am a linguaphile, but not any kind of serious linguistic scholar.  Like anyone who uses a tool day in and day out, I have a lot of opinions about languages, and I like to think that I perhaps think a bit more than the average joe about the language I speak, but I&amp;rsquo;m certainly not any kind of expert, per se.  If you&amp;rsquo;re looking for very well-written blog posts from lingual experts, check out &lt;a href=&quot;http://itre.cis.upenn.edu/~myl/languagelog/&quot;&gt;The Language Log&lt;/a&gt;.  I can&amp;rsquo;t even pretend to compete with the wonderful authors of that site.  I lose about 6 hours every time I check the bookmark.&lt;/p&gt;
&lt;p&gt;In high school, I studied Latin for 4 years.  In college, I studied Spanish for 2.  Today I couldn&amp;rsquo;t really hold a conversation in either, but what always seemed so interesting to me is that both those languages are almost obsessively phonetic, whereas English is so far from phonetic that native English speakers often don&amp;rsquo;t even really understand what a &amp;ldquo;vowel&amp;rdquo; really is.  They&amp;rsquo;ll happily recite &amp;ldquo;a e i o u and sometimes y&amp;rdquo;, but the &lt;em&gt;concept&lt;/em&gt; is lost.  In fact, y is not &amp;ldquo;sometimes&amp;rdquo; a vowel&amp;mdash;it&amp;rsquo;s &lt;em&gt;always&lt;/em&gt; a vowel, but often part of a diphthong (as in yellow&amp;mdash;or, &amp;ldquo;ielo&amp;rdquo;.)&lt;/p&gt;
&lt;p&gt;In a spoken language, sound is made by passing air over tightened vocal chords through a particularly shaped chamber.  The chamber can be opened and closed in various different ways, and can be shaped in different ways.  Consonants define the method by which the chamber is opened or closed (sound is started or stopped) while vowels define the shape of the chamber while sound is being created.  Nasals are sound that is passed through the nose, where air does not escape the mouth.  When the chamber is changed during the sound from one shape into another, that is a diphthong, or combination of vowels.  If you can pronounce the sound on its own without moving your tongue, and it doesn&amp;rsquo;t have a clear start or end, then it&amp;rsquo;s most likely a vowel.  (It could also be a nasal like n, m, and ng, or a sibilant consonant, like s or z.  Perhaps there are others, I&amp;rsquo;m not sure.)&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been thinking a lot the last few weeks about how English might be made phonetic.  The first step is identifying the vowels and diphthongs that we use in our spoken language, and forget everything we now know about spelling.  Where possible, I believe that it would make sense to use the Spanish vowels, since they are so widely known and seem to be fairly consistent in most languages:&lt;/p&gt;
&lt;p&gt;a = &amp;ldquo;ah&amp;rdquo; as in &amp;ldquo;father&amp;rdquo;
e = &amp;ldquo;eh&amp;rdquo; as in &amp;ldquo;bed&amp;rdquo;
i = &amp;ldquo;ee&amp;rdquo; as in &amp;ldquo;feet&amp;rdquo;
o = &amp;ldquo;oh&amp;rdquo; as in &amp;ldquo;go&amp;rdquo;
u = &amp;ldquo;oo&amp;rdquo; as in &amp;ldquo;boot&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The first thing that struck me is that we have a lot of other vowel sounds that simply don&amp;rsquo;t exist in Spanish.  For example:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;r&amp;rdquo; as in &amp;ldquo;they&amp;rsquo;re grrrrrrreat!&amp;rdquo;
&amp;ldquo;a&amp;rdquo; as in &amp;ldquo;bat&amp;rdquo;
&amp;ldquo;i&amp;rdquo; as in &amp;ldquo;bit&amp;rdquo;&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s already a letter for &amp;ldquo;r&amp;rdquo;, but the &amp;ldquo;short a&amp;rdquo; needs a new symbol.  Since &amp;ldquo;y&amp;rdquo; is wholly unnecessary, being more properly expressed as &amp;ldquo;i,&amp;rdquo; we can use y as the short i sound.  C is always either a &amp;ldquo;k&amp;rdquo; or &amp;ldquo;s&amp;rdquo; sound, except when it&amp;rsquo;s part of &amp;ldquo;ch,&amp;rdquo; so let&amp;rsquo;s make c into &amp;ldquo;ch&amp;rdquo;.  Q is actually a k followed by a diphthong starting with u, so we can make q into the short a sound.  (It&amp;rsquo;s kind of like an a with a tail, anyway.)  The short &amp;ldquo;oo&amp;rdquo; sound is tricky, as well.  X is also just a &amp;ldquo;ks&amp;rdquo;, so we can use that.  The short &amp;ldquo;u&amp;rdquo; as in &amp;ldquo;but&amp;rdquo; is also missing.  W is actually just a diphthong that starts with &amp;ldquo;u&amp;rdquo;, so let&amp;rsquo;s use that.  So:&lt;/p&gt;
&lt;p&gt;y = &amp;ldquo;i&amp;rdquo; as in &amp;ldquo;bit&amp;rdquo;
q = &amp;ldquo;a&amp;rdquo; as in &amp;ldquo;bat&amp;rdquo;
x = &amp;ldquo;oo&amp;rdquo; as in &amp;ldquo;book&amp;rdquo;
w = &amp;ldquo;u&amp;rdquo; as in &amp;ldquo;but&amp;rdquo;
c = &amp;ldquo;ch&amp;rdquo; as in &amp;ldquo;chess&amp;rdquo;&lt;/p&gt;
&lt;p&gt;A lot of the so-called vowels in English are actually diphthongs.  Spanish mostly gets these right  For example,&lt;/p&gt;
&lt;p&gt;&amp;ldquo;i&amp;rdquo; as in &amp;ldquo;bite&amp;rdquo; is actually ai
&amp;ldquo;ai&amp;rdquo; as in &amp;ldquo;wait&amp;rdquo; is actually ei&lt;/p&gt;
&lt;p&gt;So, uat du ui faind hir?  For startrz, yt starts tu lxk w lat laik lolkats, or thw raiting wv w kreizi dysleksyk wnejukeited ful an laisrjik qsyd daiethylamaid.  Houevr, yt dwz get izir tu rid uons u hqv sin mor wv yt.  Thi er yz veri klir tudei, thi wethr meiks mi w hqpi boi.  Ai qm yn iur yntrnets, kloging iur tubz.  Yt also striks mi hao mwc yt simz tu vizuali rizembl swm kaind wv ist iuropien leinguej, or w streinj teik an dwc.&lt;/p&gt;
&lt;p&gt;Thi bygest prablem wyth thys speling yzynt thqt yts hard tu wndrstqnd, bwt rqthr thqt ui form hqbyts uyc ar hard tu breik.  Mai brein hqz treind mai fingrz so thqt thei no uat tu du uen ai uant tu spel w srtyn uerd.  Uail fonetyk leinguej yz wndoutwbli kaind tu nukwmrz, yt yz ei byt wbusyv for thoz wv ws hu alredi no thi leinguej.&lt;/p&gt;
&lt;p&gt;Also, srtyn uerdz bigyn tu sho wp thqt ar shr tu koaz prablemz.  For eksqmpel, thi inglysh &amp;ldquo;we&amp;rdquo; qnd &amp;ldquo;you&amp;rdquo; lwk veri dyfrent.  Houevr, yn fonetyk inglysh, thi seim uerdz ar speld &amp;ldquo;ui&amp;rdquo; qnd &amp;ldquo;iu&amp;rdquo;, rispektyvli.  Ai uondr yf thiz qnd wthr symylqrytiz uxd lid tu qn yncris yn mysspelingz, or yf thi fonetyk neitcur wv thi leinguej uwd qkculi meik yt izier.&lt;/p&gt;
&lt;p&gt;Ok, enough of that craziness&amp;hellip;&lt;/p&gt;
&lt;p&gt;So, why not just use &lt;a href=&quot;http://en.wikipedia.org/wiki/Kirshenbaum&quot;&gt;Kirshenbaum&lt;/a&gt; or some other &lt;a href=&quot;http://en.wikipedia.org/wiki/International_Phonetic_Alphabet&quot;&gt;IPA&lt;/a&gt; for day-to-day writing?  After all, if you&amp;rsquo;re going to be phonetic, why not &lt;em&gt;be&lt;/em&gt; phonetic?&lt;/p&gt;
&lt;p&gt;The problem with that is that, while these alphabets are extremely useful in the analysis of speech and dialects, they are &lt;em&gt;too&lt;/em&gt; precise to serve as a written language, as different dialects would then have completely different spellings.  For example, &amp;ldquo;tour&amp;rdquo; in America is pronouced &amp;ldquo;tʊɹ,&amp;rdquo; but in the UK, it would be pronounced &amp;ldquo;tʊə.&amp;rdquo;  By simply saying that &amp;ldquo;r&amp;rdquo; is &amp;ldquo;r as in tou&lt;strong&gt;r&lt;/strong&gt;&amp;rdquo;, it makes it much easier for different dialects to pronounce each vowel different from one another, and yet have a consistent spelling that all can use.  The &amp;ldquo;r&amp;rdquo; vowel may be pronounced differently in America than England (and indeed, there is a lot of variation with respect to the letter &amp;ldquo;r&amp;rdquo; on this side of the pond,) individual Americans and Brits each pronounce &amp;ldquo;r&amp;rdquo; consistently, and thus, we can all use the same letter for it, even if we sound a little different.&lt;/p&gt;
&lt;p&gt;However, the IPA alphabets do get one thing very right: &amp;ldquo;th&amp;rdquo; should really be either &amp;ldquo;θ&amp;rdquo; (th as in &lt;strong&gt;th&lt;/strong&gt;ing) or &amp;ldquo;ð&amp;rdquo; (th as in brea&lt;strong&gt;th&lt;/strong&gt;e.)  Or, perhaps they should be the same symbol, since some words like &amp;ldquo;the&amp;rdquo; can be pronounced either way, depending on dialect.  Speaking of &amp;ldquo;the,&amp;rdquo; assuming we go with θ as a symbol, would it properly be spelled &amp;ldquo;θi&amp;rdquo; or &amp;ldquo;θw&amp;rdquo;?  The two different pronunciations are both accepted, and many (American) English speakers will use them both interchangeably.  When speaking quickly, as in the middle of this sentence, we tend to say θw.  However, when announcing a title or something of great import, as in &amp;ldquo;President of the United States of America,&amp;rdquo; or when placed before another vowel as in &amp;ldquo;the alphabet,&amp;rdquo; we tend to favor θi.  Perhaps it would be reasonable to just use θi always, and assume that speakers will shorten the &amp;ldquo;i&amp;rdquo; into a &amp;ldquo;ə&amp;rdquo; sound if it is verbally simpler.  However, doesn&amp;rsquo;t that just slide into the same kind of thing that is the reason that English is so non-phonetic in the first place?  Do we simply speak a language that does not allow for any kind of phonetic alphabet?&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re at all interested in this topic, I highly recommend checking out these WikiPedia topics:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Category:English_phonology&quot;&gt;English Phonology&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_phonetics_topics&quot;&gt;List of Phonetics Topics&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Great_vowel_shift&quot;&gt;Great Vowel Shift&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Category:History_of_the_English_language&quot;&gt;History of the English Language&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
	</entry>
	
	<entry>
		<title>Marching to a Vertical Cadence</title>
		<link href="https://blog.izs.me/2007/08/marching-to-a-vertical-cadence/"/>
		<updated>2007-08-01T17:39:31Z</updated>
		<id>https://blog.izs.me/2007/08/marching-to-a-vertical-cadence/</id>
		<content type="html">&lt;p&gt;Regular readers will notice that this blog got a bit of a face-lift today.  The obvious change is the addition of a background texture, but actually the biggest change is that I updated all of the elements to fit into a vertical em grid.  Actually, I&amp;rsquo;m not all that thrilled with the background image, but it was killing me having such a bland vanilla design, so I whipped up something as fast as possible.  (For comparison, &lt;a href=&quot;http://?version=1.0&quot;&gt;here&amp;rsquo;s the old version&lt;/a&gt;.)&lt;/p&gt;
&lt;p&gt;If you &lt;a href=&quot;http://?show_lines&quot;&gt;turn on the lines&lt;/a&gt;, you can see how each line of text, every heading and block, is now lined up so that it will &amp;ldquo;resonate&amp;rdquo; with a consistent vertical spacing.  I&amp;rsquo;m certainly &lt;a href=&quot;http://24ways.org/2006/compose-to-a-vertical-rhythm&quot;&gt;not the first one&lt;/a&gt; to &lt;a href=&quot;http://alistapart.com/articles/settingtypeontheweb&quot;&gt;do something like this&lt;/a&gt;.  However, in the process of figuring out how this could be done, I came up with a few shortcuts to make the math easier.  You&amp;rsquo;ll probably need to have a calculator handy, and building a decent grid tile graphic is key.&lt;/p&gt;
&lt;h3&gt;First step: Build the grid image&lt;/h3&gt;
&lt;p&gt;To make the process somewhat sane, come up with a font-size that&amp;rsquo;s pretty reasonable, and build a background baseline graphic to hold you to that size.  Since I favor readability over teensy designery text, I chose 16px, and built &lt;a href=&quot;http://foohack.com/blog/wp-content/themes/sandbox/line.png&quot;&gt;this image&lt;/a&gt;.  It&amp;rsquo;s 32px tall, with a horizontal line every 8px.  (The color choices are purely for nostalgic reasons.  I can practically smell the #2 pencil in my hand.)&lt;/p&gt;
&lt;p&gt;Going forward, every block element must begin just below a line, and end exactly on a line.  If it&amp;rsquo;s hanging over, there&amp;rsquo;s a problem.  (Adding and removing background colors is a good technique to check things.)&lt;/p&gt;
&lt;p&gt;Set the font size to 16px in the HTML element, and add the background image:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;html {
  background:#fafafa url(line.png) top repeat;
  font-size:16px;
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once everything works, you can pull out the line and the fixed px font-size, and let it resize to whatever the user has set in their browser.  Since everything will be based on ems, it will all scale up and down to any size.  If you sniff the CSS on this page, you&amp;rsquo;ll see that I apply this rule whenever the &amp;ldquo;show-lines&amp;rdquo; class is on the HTML element.&lt;/p&gt;
&lt;h3&gt;The Rules&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Never set font-size without setting line-height (or vice versa.)&lt;/li&gt;
    &lt;li&gt;For simplicity, vertical padding and margin should be avoided when they&amp;rsquo;re not needed, or at the very least not set on an element that has an altered font-size, and must be specified in ems.&lt;/li&gt;
    &lt;li&gt;Top and bottom borders get hairy.  Use outline instead, and let it be a little broken for IE.&lt;/li&gt;
    &lt;li&gt;The horizontal direction is fair game, outside the scope of this article.  Use px or ex or whatever units you want.&lt;/li&gt;
    &lt;li&gt;The big one: font-size * (line-height + vertical padding + vertical margin) must be a whole number.  If you&amp;rsquo;re going to use a double-spacing cadence, then it should ideally also be an even number most of the time.&lt;/li&gt;
    &lt;li&gt;Go to 5 decimal places when you get numbers that repeat.  Browsers only look at the first 4, but most of them will round rather than truncate, so the additional number is worth having.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;So, for example, on the body text, I wanted to have simple double-spacing.  So, this rule was fine:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;p {
  font-size: 1em;
  line-height:2;
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;On some elements, I wanted to drop down the font size a bit, say to 70% of normal body text (or 0.7em.)  If the element had a line-height of 1, and its font-size is 0.7em, then that&amp;rsquo;s a problem, because 0.7 * ( 1 ) = 0.7, which is not a whole number.  If we want to make this element take up 1 row on the baseline grid, then we can say that 0.7 * ( x ) = 1, and solve for x, the line-height.  In this case, 1/0.7 = 1.428571, so we set the line-height to that value, and end up with small text that takes up 1 line on the grid.&lt;/p&gt;
&lt;p&gt;The same technique can be done if you wanted to go even smaller.  The table below has values for various font sizes and double- and single-spacing:&lt;/p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Font-size (in ems)&lt;/th&gt;&lt;th&gt;Line-height (single)&lt;/th&gt;&lt;th&gt;Line-height (double)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;0.5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0.6&lt;/td&gt;&lt;td&gt;1.666667&lt;/td&gt;&lt;td&gt;3.333333&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0.7&lt;/td&gt;&lt;td&gt;1.428571&lt;/td&gt;&lt;td&gt;2.857142&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0.8&lt;/td&gt;&lt;td&gt;1.25&lt;/td&gt;&lt;td&gt;2.5&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;0.9&lt;/td&gt;&lt;td&gt;1.111111&lt;/td&gt;&lt;td&gt;2.222222&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;td&gt;0.909090&lt;/td&gt;&lt;td&gt;1.818181&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.2&lt;/td&gt;&lt;td&gt;0.833333&lt;/td&gt;&lt;td&gt;1.666667&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;0.769231&lt;/td&gt;&lt;td&gt;1.538461&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.4&lt;/td&gt;&lt;td&gt;0.714285&lt;/td&gt;&lt;td&gt;1.428571&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;0.666667&lt;/td&gt;&lt;td&gt;1.333333&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.6&lt;/td&gt;&lt;td&gt;0.625&lt;/td&gt;&lt;td&gt;1.25&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.7&lt;/td&gt;&lt;td&gt;0.588235&lt;/td&gt;&lt;td&gt;1.176471&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.8&lt;/td&gt;&lt;td&gt;0.555555&lt;/td&gt;&lt;td&gt;1.111111&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.9&lt;/td&gt;&lt;td&gt;0.526315&lt;/td&gt;&lt;td&gt;1.0526315&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;0.5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;As you might expect, some of these work better than others.  The funkier looking a decimal is, the greater the chance that it will be improperly rounded.&lt;/p&gt;
&lt;h3&gt;Effects on Layout&lt;/h3&gt;
&lt;p&gt;As you can see in the table above, without the ability to put pixel borders on the tops and bottoms of things, it presents interesting challenges in some cases.  A gradient image can be a little nicer than borders for table cells, and is certainly a lot nicer than not having any kind of vertical breaks.&lt;/p&gt;
&lt;p&gt;Form elements are particularly tricky.  I didn&amp;rsquo;t want to have them borderless, since borderless forms are just visually weird to me.  However, a border on the top and bottom messes with the spacing.  So, I&amp;rsquo;ve used outline, and just passed a border rule to IE 6 via the underscore hack.  It&amp;rsquo;s not a great solution, but it works for now, since outline is drawn outside the element, instead of pushing it further down the page.  When I come up with a more clever way to do this, I&amp;rsquo;ll share it.&lt;/p&gt;
&lt;p&gt;Input elements seemed to need just a shade less padding than the math would indicate.  They seemed to work properly using 0.41em instead of the 0.421758em that my formula would have predicted.  Not sure why that is, but I&amp;rsquo;m OK with the hack.&lt;/p&gt;
&lt;h3&gt;Margins and Padding&lt;/h3&gt;
&lt;p&gt;If you ever have to move something up or down, I find it&amp;rsquo;s useful to figure out how many ems it needs to move, and then convert by the font size.  To keep things easy, you can restrict any font-size changes to inner elements, and apply padding and margin on the container (which always has a font-size of 1em.)  However, some adjustments are just easier to make on an element that has a font size, so the conversion comes in handy.&lt;/p&gt;
&lt;p&gt;For example, let&amp;rsquo;s say that we have an element with a font size of 0.6em, and we want to move it down 1.5ems.  (In the baseline graphic, that would be moving it down 1.5 &amp;ldquo;red lines&amp;rdquo;.)  So, the ratio looks like this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;1.5 * 1 = x * 0.6
1.5 / 0.6 = x = 2.5&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;so we have to give the element a padding or margin of 2.5em.  The simplified formula is:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;distance / font-size = correct em measurement&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;I find that, as I have this style live and notice little errors that need correcting, I&amp;rsquo;m using that formula quite a bit.&lt;/p&gt;
&lt;h3&gt;Update&lt;/h3&gt;
&lt;p&gt;Some browsers do this better than others, of course.  Gecko browsers (Firefox, Camino, etc.) are impeccable with their em-spacing and line-height calculations.  Safari seems to always be a bit off of the lines in the background image, as does MSIE.  Opera is better than those two, but not quite as good as the Geckos.  Even when it&amp;rsquo;s not perfect, though, getting close does seem to feel more &amp;ldquo;right&amp;rdquo; to me.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Companies, Don&#39;t Eat Your Brains</title>
		<link href="https://blog.izs.me/2007/07/companies-dont-eat-your-brains/"/>
		<updated>2007-07-30T19:40:56Z</updated>
		<id>https://blog.izs.me/2007/07/companies-dont-eat-your-brains/</id>
		<content type="html">&lt;p&gt;Until recently, I was spending a lot of time building &lt;a href=&quot;http://pirates.yahoo.com/&quot;&gt;one&lt;/a&gt; &lt;a href=&quot;http://harrypotter.yahoo.com/&quot;&gt;brand site&lt;/a&gt; &lt;a href=&quot;http://gta.yahoo.com/&quot;&gt;after&lt;/a&gt; &lt;a href=&quot;http://starwars.yahoo.com/&quot;&gt;another&lt;/a&gt;.  There&amp;rsquo;s nothing at all wrong about making a big deal and then building a one-off site.  &lt;abbr title=&quot;Yahoo&quot;&gt;We&lt;/abbr&gt; were making money doing this, and making money is what a company is, ultimately, all about.  Anything else is irresponsible and rather mean to our stockholders.  As a stockholder, I am quite personally vested in Yahoo&amp;rsquo;s financial behavior.&lt;/p&gt;
&lt;p&gt;However, as a web developer, our extremely short timelines were rough, and didn&amp;rsquo;t allow any time to re-think the approach and come up with a more sustainable plan.  When the plan was, &amp;ldquo;We&amp;rsquo;re going to do a few of these, and then reevaluate, and build a platform,&amp;rdquo; it was fine.  But &lt;a href=&quot;http://news.com.com/2100-1030_3-6191768.html&quot;&gt;changes in leadership&lt;/a&gt; (and accordingly, &lt;a href=&quot;http://www.eweek.com/article2/0,1895,2159788,00.asp&quot;&gt;changes in strategy&lt;/a&gt;) led to a change in direction for our team.  At least in the near- to mid-term, we would be continuing to build these sorts of (largely, very successful) branded world sites.  After all, if a team of 3 can deliver on a high-six-figure deal in 2 weeks, well, that&amp;rsquo;s the kind of gravy businesses dream about.  Again, as a stockholder and an employee of this company, I think that&amp;rsquo;s great.  But this project certainly didn&amp;rsquo;t scratch my itch as a developer, and the stressful timelines were making me a bit crazy.  I literally had nightmares about these sites.&lt;/p&gt;
&lt;p&gt;The problem with working hard on a team of dedicated engineers is that it can be hard to fail.  How can you hope to learn what&amp;rsquo;s wrong with your process, if it keeps working?  &lt;em&gt;Is&lt;/em&gt; there anything wrong with a process that keeps delivering on its promises?&lt;/p&gt;
&lt;p&gt;Sometimes, yes.  And a good old-fashioned wallop of a failure is traditionally what sets a product back on track.  However, without too much back-patting, the team that I was working on was completely stocked with talented and dedicated engineers who simply would not allow failure to happen, even if it meant working late nights and weekends.  The result?  We worked late nights and weekends, and stressed out over these projects.  This wasn&amp;rsquo;t the project we agreed to work on, and we were getting a bit fed up.  The burn-out was starting to set in.  More than once, my wife got exasperated with me over my lack of enthusiasm about anything.  The body&amp;rsquo;s natural defense against being over-worked is to let all the energy go out of the machine.&lt;/p&gt;
&lt;p&gt;Luckily, I work at &lt;a href=&quot;http://money.cnn.com/magazines/fortune/bestcompanies/2007/snapshots/44.html&quot;&gt;one of the best companies to work for&lt;/a&gt;, and the management here always astonishes me.  Despite the &lt;a href=&quot;http://flickr.com/search/?w=all&amp;amp;q=yahoo+cube&quot;&gt;endless seas of cubes&lt;/a&gt;, this is not a Dilbert-esque code factory where engineers&amp;rsquo; souls are systematically crushed.  Starting today, I&amp;rsquo;m working on a new project (which I don&amp;rsquo;t think I can talk about yet, but I will as soon as I can,) and the work of cranking out brand sites is already being distributed in a more sustainable fashion.&lt;/p&gt;
&lt;p&gt;A message to companies out there: Don&amp;rsquo;t eat your brains.  Your talented workers are what keep you in business.  It is your responsibility to use them, and push them, and guide them in productive directions.  But don&amp;rsquo;t kill the golden goose.  Yahoo probably extended my employment here considerably, and certainly increased my morale greatly, by just finding something else for me to do.  Just ask them now and then what they want and how they feel about what you&amp;rsquo;re doing, and you&amp;rsquo;ll probably find that they could be even more valuable than they are.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Broken Mac Wireless Driver in 10.4.10</title>
		<link href="https://blog.izs.me/2007/07/broken-mac-wireless-driver-in-10410/"/>
		<updated>2007-07-27T00:37:54Z</updated>
		<id>https://blog.izs.me/2007/07/broken-mac-wireless-driver-in-10410/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note&lt;/strong&gt;: This post is regarding an issue that has since been fixed by Apple.  If you&amp;rsquo;ve run this script, then please run the included undo.sh to reverse the changes, and then get the actual patch from the Software Update command in the Apple Menu.&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;&lt;p&gt;If you&amp;rsquo;ve upgraded to 10.4.10, and you use wireless (who doesn&amp;rsquo;t, these days?) and you work off the battery (why else would you have a laptop?), then you&amp;rsquo;ve probably run into issues with kernel panics and fast-dying batteries.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://discussions.apple.com/thread.jspa?threadID=1017323&amp;amp;tstart=50&quot;&gt;The fix&lt;/a&gt; is a bit tricky, and involves finding and downloading 3 different files, and then moving stuff around manually.  Not being able to suffer the thought of doing this by hand, I decided to write a fix that&amp;rsquo;s all packaged up in a single download and one step.&lt;/p&gt;
&lt;p&gt;Download &lt;a href=&quot;http://foohack.com/blog/wp-content/uploads/2007/07/10410_wireless_fix.tgz&quot; title=&quot;10.4.10 Wireless Fix&quot;&gt;the tgz file&lt;/a&gt;.  Unpack it, and run &lt;code&gt;install.sh&lt;/code&gt;.  It&amp;rsquo;ll create a backup of the files that are touched, and can be easily reverted to said backup with &lt;code&gt;undo.sh&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Enjoy using wireless on battery power, &lt;abbr title=&quot;MacBook Pro&quot;&gt;MBP&lt;/abbr&gt; lovers!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Like it says in the script:&lt;/strong&gt; I make &lt;strong&gt;NO&lt;/strong&gt; guarantees about the quality or reliability of this code.  It worked for me, but it might make your machine explode.  &lt;strong class=&quot;warning&quot;&gt;Use at your own risk!&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Edit&lt;/h3&gt;
&lt;p&gt;Updated the scripts to work when run from Terminal.app.  Sorry for the confusion, guys!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>There&#39;s no room for Ego or Zealotry in Software (especially on the web)</title>
		<link href="https://blog.izs.me/2007/07/theres-no-room-for-ego-or-zealotry-in-software/"/>
		<updated>2007-07-16T17:34:31Z</updated>
		<id>https://blog.izs.me/2007/07/theres-no-room-for-ego-or-zealotry-in-software/</id>
		<content type="html">&lt;p&gt;For the last several years, there&amp;rsquo;s been a lot of talk about why web standards are generally a good thing.  And I agree with the vast majority of it.  Writing clean code that sticks to a widely accepted standard is a very good way to help the future programmers who will invariably be touching your stuff once you&amp;rsquo;re gone (or yourself fixing a bug next month or year later.)  In this sense, web standards are a sort of &amp;ldquo;kindness in coding.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;However, as with the &lt;abbr title=&quot;object oriented programming&quot;&gt;OOP&lt;/abbr&gt; zealotry that started 20 years ago and is still going strong today, this set of very useful guidelines has turned into a movement.  It has gained enough followers and momentum, and in many cases, seems to have become and End In Itself.&lt;/p&gt;
&lt;p&gt;Movements are like organisms.  They survive because the cells that make them up all continually and unthinkingly chant the mantras and make the arguments.  Ideas can be good.  Critically examining them is good.  Being passionate about a good idea is good.  But movements, more often than not, become problematic.&lt;/p&gt;
&lt;p&gt;Software is the most complicated thing that humans build, and we haven&amp;rsquo;t really figured it out.  You could even make the argument that we probably never will fully figure out how to create software in a way that doesn&amp;rsquo;t suck to some degree.  That&amp;rsquo;s not to say we don&amp;rsquo;t create some great software, great websites, great programs, etc.  But there are &lt;em&gt;always&lt;/em&gt; bugs, and delays, and general chaos along the way, and I believe that there always will be.  The process involves an unknown number of unknowns.  Software is more complicated than the human brain can handle, and that&amp;rsquo;s the only kind of brain that we have.&lt;/p&gt;
&lt;p&gt;So, how do you solve a problem when you don&amp;rsquo;t know all the factors, and only have a vague idea of what success looks like?  It&amp;rsquo;s like climbing a mountain when you can&amp;rsquo;t see the top.  You can still see the slope, and can occasionally get glimpses of where you&amp;rsquo;re going, or at least, you know that it&amp;rsquo;s higher up.  If we are to approach quality software, then we must treat this exceedingly complicated problem in a manner that at least &lt;em&gt;approaches&lt;/em&gt; quality heuristically, perhaps organically.&lt;/p&gt;
&lt;p&gt;Software is a process of making decisions, and then codifying and saving those decisions.  Bad decisions must be pruned ruthlessly, and good ones must be recognized and reused.  In a general sense, this is the heuristic that leads to quality software (or quality &lt;em&gt;anything&lt;/em&gt; for that matter.)  The question of what makes a decision &amp;ldquo;good&amp;rdquo; or &amp;ldquo;bad&amp;rdquo; is itself a decision that needs continual evaluation.  And &lt;em&gt;that&amp;rsquo;s&lt;/em&gt; where movements get into trouble.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s easy to say, &lt;q&gt;If it conforms with the w3c&amp;rsquo;s (or Microsoft&amp;rsquo;s or whoever&amp;rsquo;s) standards, then it&amp;rsquo;s good.&lt;/q&gt;  I think that this might be a good start, but it&amp;rsquo;s basically an &lt;a href=&quot;http://en.wikipedia.org/wiki/Appeal_to_authority&quot;&gt;argument from authority&lt;/a&gt;.  The w3c is a group of humans.  So is Microsoft.  Humans make mistakes, and have plenty of limitations; that&amp;rsquo;s why we need a heuristic in the first place.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also easy to say, &lt;q&gt;If it loads fast and looks right, then it&amp;rsquo;s good.&lt;/q&gt;  Sure, but how easy is it to debug it when it doesn&amp;rsquo;t work as expected?  Can new developers add to it easily?  Is it expensive to maintain or re-purpose?&lt;/p&gt;
&lt;p&gt;Or, even worse, &lt;q&gt;This was written in (Rails, VB, Django, PHP, C#, valid CSS) so it&amp;rsquo;s good.&lt;/q&gt;  I think that a lot of the worst examples of Microsoft horrors were the result of a fanatical attachment to Visual Basic.  I&amp;rsquo;ve seen (ok, &amp;ldquo;written&amp;rdquo;) some terrible CSS that was, nonetheless, technically &amp;ldquo;valid&amp;rdquo; according to the W3C&amp;rsquo;s validator.&lt;/p&gt;
&lt;p&gt;Sadly, most developers judge decisions based on their feelings rather than any kind of objective analysis.  &lt;q&gt;I wrote this, and it&amp;rsquo;s clever, and it makes me happy, so it&amp;rsquo;s good.&lt;/q&gt;  There is no surer way to end up with a pile of garbage than this approach.  It&amp;rsquo;s hard to let go of something that you worked on, and coders are certainly not the only culprits.  I&amp;rsquo;ve seen execs spend countless hours on a deal that never yielded any value for the company, and designers fight tooth and nail for a visual approach that just didn&amp;rsquo;t work.  Hell, we all have a relative or two with a recipe for something that they love, but which everyone knows is terribly bland.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s really &lt;em&gt;really&lt;/em&gt; hard to let go of this emotional attachment to work.  The reason we feel good when we succeed is that our emotions are attached to our work.  It&amp;rsquo;s why I get up in the morning.  But it&amp;rsquo;s better to attach your feelings to how harsh you are on your code.  Understand that we all write terrible code, but that the difference between bad and good is that good coders recognize this fact and deal with it.&lt;/p&gt;
&lt;p&gt;Because of the incredible complexity in software development of any kind, there simply is no room for mindless zealotry or attachment to a movement.  Every project, every site, every module is a little different, and has a slightly different standard of quality.  (Even the rule &amp;ldquo;always head upwards&amp;rdquo; doesn&amp;rsquo;t work for climbing all kinds of mountains.)  Keep the goal in mind, and think about the best way to get there.  Sometimes it&amp;rsquo;ll be the accepted standards, hell most of the time it probably will be, but sometimes it might not.  It&amp;rsquo;s our job to know the difference.&lt;/p&gt;
&lt;p&gt;Every once in a while, take a moment to re-evaluate your methods for evaluating the quality of your code.  You may have to let go of something comfortable, and it may sting, but in the end, you&amp;rsquo;ll be better at what you do.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Harry Potter Brand Site</title>
		<link href="https://blog.izs.me/2007/06/harry-potter-brand-site/"/>
		<updated>2007-06-20T19:10:14Z</updated>
		<id>https://blog.izs.me/2007/06/harry-potter-brand-site/</id>
		<content type="html">&lt;p&gt;We just launched &lt;a href=&quot;http://harrypotter.yahoo.com/&quot;&gt;harrypotter.yahoo.com&lt;/a&gt;.  Woot!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Art of the Resume: Why You Probably Shouldn&#39;t Use MS Word </title>
		<link href="https://blog.izs.me/2007/06/the-art-of-the-resume-why-you-probably-shouldnt/"/>
		<updated>2007-06-20T17:00:05Z</updated>
		<id>https://blog.izs.me/2007/06/the-art-of-the-resume-why-you-probably-shouldnt/</id>
		<content type="html">&lt;p&gt;A resume is an advertisement.  You are selling your time and attention, and trying to get some potential employer (who is a &lt;strong&gt;buyer&lt;/strong&gt;, and a potential &lt;strong&gt;customer&lt;/strong&gt;) to purchase said time and attention at a competitive price.  Advertisements exist to make someone want something.&lt;/p&gt;
&lt;p&gt;Most engineers aren&amp;rsquo;t all that savvy about the subtle art of advertising, and as a result, tend to view a resume as more like a letter than a print ad.  (Or, more like an email than an LRec, for those of you born after the digital revolution.) They learned in High School that the way to write a resume is:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Open up Microsoft Word (or OpenOffice, for the anti M$ types.)&lt;/li&gt;
    &lt;li&gt;Click File &amp;gt; New&amp;hellip;, and then select &amp;ldquo;Resume Wizard&amp;rdquo; as the type of document.&lt;/li&gt;
    &lt;li&gt;Select the style.&lt;/li&gt;
    &lt;li&gt;Enter your demographic and historical information.&lt;/li&gt;
    &lt;li&gt;Spellcheck (or don&amp;rsquo;t), save, email to recruiter or upload to job site.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;They probably also learned that it has to be one page, because recruiters &amp;ldquo;look at a lot of resumes, and don&amp;rsquo;t have time to deal with any that are more than one &lt;em&gt;sheet of paper&lt;/em&gt;.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This is a great way to ensure that your resume is completely like every other resume, and also show recruiters and hiring managers that you have a quaint attachment to the historical ways of yestercentury.&lt;/p&gt;
&lt;p&gt;A resume is not a letter.  It&amp;rsquo;s not an email.  It&amp;rsquo;s not a friendly chat.  It&amp;rsquo;s an advertisement.  Telling is nice, but showing is better.  If I&amp;rsquo;m buying, I want to know what I&amp;rsquo;m getting.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s also not a high-school homework assignment.  And if you think &amp;ldquo;oh, advertising isn&amp;rsquo;t my bag, I&amp;rsquo;ll just do what everyone else does,&amp;rdquo; then why should a hiring manager take your career more seriously than you do?&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re a web developer, then your resume should be an active testament to your skills.  It&amp;rsquo;s not enough to have links to stuff you&amp;rsquo;ve done (although that&amp;rsquo;s important, too.)  It should be in clean semantic HTML, and it should be styled with CSS.  Throw some Javascript in there to do a little something.  Test it in different browsers.  Put it online.  Link to it on your blog.  (You DO have a blog or personal website, don&amp;rsquo;t you?)  This is especially important if you&amp;rsquo;re a bit junior and don&amp;rsquo;t have much of a portfolio yet, or if your portfolio contains a lot of behind-the-curtain intranet or login-only projects.&lt;/p&gt;
&lt;p&gt;These things communicate a lot without having to say anything, and the words-behind-the-words are usually what speak loudest.  Putting your resume in HTML that you write from scratch gives a potential employer a very clear view of your ability.  A personal website gives them a view into your personality, lets them hear your voice.  If I&amp;rsquo;m in on the decision to hire someone, a resume built in HTML and CSS is significantly more important than a college degree.  You&amp;rsquo;ve gotta be pretty good for me to vote &amp;ldquo;yes&amp;rdquo; if you wrote your resume in Word.  If you &lt;em&gt;must&lt;/em&gt; send a non-HTML resume, send text, and provide the URL to your &amp;ldquo;real&amp;rdquo; resume that&amp;rsquo;s online in HTML.  (The one you post online should have this url in it as well, in case it&amp;rsquo;s downloaded and emailed.)&lt;/p&gt;
&lt;p&gt;Now is a great time for web developers.  Our talents are (finally!) starting to get respect as more than just an extension of software development or graphic design.  The dollars are speaking, the audiences are getting bigger, executives and stake holders are beginning to take this medium &lt;em&gt;very&lt;/em&gt; seriously.  And, it moves so fast that schools and books can&amp;rsquo;t seem to keep up very well.  If you know your stuff, then now is a great time to be a web developer, but it&amp;rsquo;s only a matter of time before the competition is going to get very tough.  Separate yourself from the pack now.&lt;/p&gt;
&lt;p&gt;I recently updated my &lt;a href=&quot;http://foohack.com/resume/&quot;&gt;resume&lt;/a&gt;, since it had gotten rather dated and my skills had increased quite a bit.  I did it as a lark and a time-spending activity while I was high on drugs from oral surgery.  I thought, &lt;q&gt;Hey, ya know what? Let&amp;rsquo;s see what happens if I update this and make the HTML a little more search-engine friendly, add some snazzy styles&amp;hellip;&lt;/q&gt;  Oh my god&amp;hellip; I&amp;rsquo;ve gotten at least 2 calls and/or emails per week since then.  I can safely say that I&amp;rsquo;m working at Yahoo today because I truly love it here.&lt;/p&gt;
&lt;p&gt;If you are a web developer, and you&amp;rsquo;re not happy with your current job, or even if you are, &lt;em&gt;and you&amp;rsquo;re really &lt;strong&gt;really&lt;/strong&gt; good at what you do&lt;/em&gt;, create a resume in well-constructed HTML, make it look nice, and put it online.  Link to it on your blog, or in your signature if you participate in any web development-related forums.  You&amp;rsquo;ll be glad you did, and you&amp;rsquo;ll be helping the community of web developers in the long run by helping to keep our craft a highly valued commodity.&lt;/p&gt;
&lt;p&gt;Some tips:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;It may be downloaded and emailed.  Try, if you can, to put all of your styles and scripts inline, and don&amp;rsquo;t rely too heavily on images, if you use them at all.&lt;/li&gt;
    &lt;li&gt;Spell-check it.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Do not plagiarize.&lt;/strong&gt; It looks very bad.  If you use a library or a common technique in your code, then cite it, post the license agreement, whatever.  Using a widely-known technique (and citing the source) shows that you&amp;rsquo;re in touch with the greater webdev community.  Stay legal, and be respectful of those who have shared with the community.  Violate this rule with serious risks&amp;mdash;it can even get you fired by your shiny new employer.&lt;/li&gt;
    &lt;li&gt;Make it as long as it needs to be, but keep each piece short.&lt;/li&gt;
    &lt;li&gt;Put education near the bottom.  If you didn&amp;rsquo;t go to college, then don&amp;rsquo;t even put it.  It doesn&amp;rsquo;t matter as much as experience, in this field.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Recruiters are sharks.  They are mercenaries stop at nothing for the referral bonus.  They scour &lt;abbr title=&quot;Search Engine Results Pages&quot;&gt;SERPs&lt;/abbr&gt; 50 pages deep looking for fresh meat.  They read web development blogs and forums looking for the gurus.  They will find you if you let them.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Javascript Style Tip: Use &quot;in&quot; and &quot;delete&quot;</title>
		<link href="https://blog.izs.me/2007/06/javascript-style-tip-use-in-and-delete/"/>
		<updated>2007-06-18T17:00:03Z</updated>
		<id>https://blog.izs.me/2007/06/javascript-style-tip-use-in-and-delete/</id>
		<content type="html">&lt;p&gt;Javascript provides two very handy operators, &lt;a href=&quot;http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:in_Operator&quot;&gt;in&lt;/a&gt; and &lt;a href=&quot;http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Operators:delete_Operator&quot;&gt;delete&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Consider this code fragment:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = {
 foo : &#39;quux&#39;,
 bar : &#39;baz&#39;,
 doSomething : function () {
  // do something...
 }
};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;So, we&amp;rsquo;ve created an object, and then some other things happen.  Later in the code, we want to remove the &amp;ldquo;foo&amp;rdquo; property, so we do this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;javascript block&quot;&gt;obj.foo = undefined;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Still later, we only want to do something if the foo property has not been unset, so we check it:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;javascript block&quot;&gt;if ( obj.foo !== undefined ) {
 // do something
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;That works, and it&amp;rsquo;s fairly common, but it&amp;rsquo;s klunky, and not as readable as this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;javascript block&quot;&gt;delete obj.foo;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;javascript block&quot;&gt;if ( &#39;foo&#39; in obj ) {
 // do something
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The first one says, &lt;q&gt;Delete &amp;ldquo;foo&amp;rdquo; from the object.&lt;/q&gt;  The second asks, &lt;q&gt;Is &amp;ldquo;foo&amp;rdquo; in the object?&lt;/q&gt;  The difference between the first and second approaches is that the second uses intuitive wording in the code.&lt;/p&gt;
&lt;p&gt;Note: You &lt;em&gt;must&lt;/em&gt; use &lt;code&gt;delete&lt;/code&gt; if you want to use &lt;code&gt;in&lt;/code&gt;.  Setting something to &lt;code&gt;undefined&lt;/code&gt; manually will not cause it to return false when testing whether the property is &lt;code&gt;in&lt;/code&gt; the object.&lt;/p&gt;
&lt;p&gt;As an added bonus, using the &lt;code&gt;delete&lt;/code&gt; operator also removes the property from the for/in iteration loop, since it actually removes it from the object&amp;rsquo;s key list rather than simply setting it&amp;rsquo;s value to &lt;code&gt;undefined&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = {asdf:&#39;foo&#39;,bar:&#39;baz&#39;};
obj.asdf = undefined;
for ( var i in obj ) {
 console.log(i,obj[i]);
}
// outputs:
// asdf undefined
// bar baz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = {asdf:&#39;foo&#39;,bar:&#39;baz&#39;};
delete obj.asdf;
for ( var i in obj ) {
 console.log(i,obj[i]);
}
// outputs:
// bar baz&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Note: you&amp;rsquo;ll need to wrap the &amp;ldquo;in&amp;rdquo; statement in parentheses if you want to negate it.  For example, this is a bug:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = { asdf:&#39;foo&#39;,bar:&#39;baz&#39; };
var f = &#39;quux&#39;;
if ( !f in obj ) {
 alert( &#39;not there!&#39; );
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The alert will never fire.  Can you figure out what&amp;rsquo;s happening?  Here&amp;rsquo;s a clue:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = { &#39;false&#39;:1, asdf:&#39;foo&#39;, bar:&#39;baz&#39; };
var f = &#39;quux&#39;;
if ( !f in obj ) {
 alert( &#39;not there!&#39; );
}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now the alert will fire.  What&amp;rsquo;s up?&lt;/p&gt;
&lt;p&gt;The order of operations is this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Process the !f, which converts &amp;lsquo;quux&amp;rsquo; to a boolean (true), and then gets the opposite (false).&lt;/li&gt;
    &lt;li&gt;The &amp;ldquo;in&amp;rdquo; operator converts the value back to a string, and false.toString() is the string &#39;false&amp;rsquo;.&lt;/li&gt;
    &lt;li&gt;Since &#39;false&amp;rsquo; is not a key in the object, the &amp;ldquo;in&amp;rdquo; operator returns false, and the conditional fails.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;In the second case, since the string &#39;false&amp;rsquo; &lt;em&gt;is&lt;/em&gt; a key in the object, the &amp;ldquo;in&amp;rdquo; operator returns true, and the conditional fires.  Of course, using &amp;ldquo;false&amp;rdquo; as a key in an object is a really stupid thing to do, but if some bunk data comes into your program somehow, it can happen.  Always wrap your &amp;ldquo;in&amp;rdquo; clauses in parentheses, and you&amp;rsquo;ll never have a problem.  In this case, it works as expected:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;var obj = { asdf:&#39;foo&#39;, bar:&#39;baz&#39; };
var f = &#39;quux&#39;;
if ( !(f in obj) ) {
 alert( &#39;not there!&#39; );
}&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Update&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;m finding that a lot of people are hitting this page with search queries that seem to indicate they&amp;rsquo;re looking to remove a style property from a Dom node.  &lt;code&gt;delete&lt;/code&gt; won&amp;rsquo;t help you much there, since the &lt;code&gt;style&lt;/code&gt; property is a get-and-set-only property.  (IE, you can read from and write to it, but you can&amp;rsquo;t delete from it.)&lt;/p&gt;
&lt;p&gt;Most of the time, you shouldn&amp;rsquo;t be messing with the &lt;code&gt;style&lt;/code&gt; property directly in Javascript, anyhow.  Instead, add and remove semantically meaningful class names, and put the style information related to those states in the CSS.  Of course that&amp;rsquo;s not always an option, I know.  So, you can remove the inline setting by simply setting it to an empty string, like this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block javascript&quot;&gt;document.body.style.background=&quot;red&quot;; // turns the page red.
document.body.style.background=&quot;&quot;; // turns the page back to whatever it was.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cheers!&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Memory Leaks in Microsoft Internet Explorer</title>
		<link href="https://blog.izs.me/2007/06/memory-leaks-in-microsoft-internet-explorer/"/>
		<updated>2007-06-11T17:00:16Z</updated>
		<id>https://blog.izs.me/2007/06/memory-leaks-in-microsoft-internet-explorer/</id>
		<content type="html">&lt;p&gt;&lt;cite&gt;I originally posted this &lt;a href=&quot;http://isaacschlueter.com/2006/10/msie-memory-leaks/&quot;&gt;at isaacschlueter.com on Monday, October 23rd, 2006&lt;/a&gt;.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;Memory Leaks.&lt;/p&gt;
&lt;p&gt;What are they?  How do they happen?  What can be done about them?&lt;/p&gt;
&lt;p&gt;This is a great question, and a topic that has a lot of mysticism surrounding it.  Like most Javascript issues, there&amp;rsquo;s been a lot of very bad &amp;ldquo;authoritative&amp;rdquo; suggestions.&lt;/p&gt;
&lt;p&gt;If you are a webdev interviewing at Yahoo!, and I&amp;rsquo;m in the room, I can guarantee that you will be asked about this topic.  In my opinion, memory leaks are one of the most tricky ways in which a user&amp;rsquo;s web experience can be needlessly degraded.  A web developer&amp;rsquo;s attitude towards memory leaks is, in my opinion, one of the best indicators of their worth in this field.&lt;/p&gt;
&lt;p&gt;Either you understand what a memory leak is and how it happens, or you don&amp;rsquo;t.  If you don&amp;rsquo;t, that&amp;rsquo;s fine, but it&amp;rsquo;s time to find out once you hear some buzz about it.  Once you understand it, you can either care about it, or not.  Anyone who doesn&amp;rsquo;t fall into the &amp;ldquo;find out/care about it&amp;rdquo; category would be better off flipping burgers than writing Javascript.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h3&gt;What Are Memory Leaks?&lt;/h3&gt;
&lt;p&gt;In general, a &amp;ldquo;memory leak&amp;rdquo; is the failure to release memory that has been allocated to a program.  Over time, a memory leak will result in progressively less memory being available to perform valid functions.&lt;/p&gt;
&lt;p&gt;In the browser/Javascript world, a memory leak occurs when the native garbage collection routines don&amp;rsquo;t properly reclaim the memory that was allocated for an object.  Each time you create an object in Javascript, a bit of memory is allocated.  Memory is also allocated for DOM nodes, COM objects, images, etc.  When an object can no longer be accessed, it is flagged as &amp;ldquo;ready for removal.&amp;rdquo;  Then the garbage collection routine sweeps up the flagged objects, and releases the memory back to the system.  In Microsoft Internet Explorer 6, there is a bug in the garbage collection routine that can lead to memory leaks in certain conditions.&lt;/p&gt;
&lt;p&gt;A good discussion on memory leaks and why and how they happen can be found &lt;a href=&quot;http://www.crockford.com/javascript/memory/leak.html&quot;&gt;on Crockford&amp;rsquo;s site&lt;/a&gt;.  The claim that closures (functions inside of other functions) cause memory leaks is, as Crockford says, &amp;ldquo;deeply wrong.&amp;rdquo;  Closures are fine, and are not the source of the problem.  (However, of course, closures can make circular links trickier to spot.)&lt;/p&gt;
&lt;p&gt;The problem happens when you have a Javascript object and DOM node (or any COM object) that refer to one another in a cycle.  IE 6 can&amp;rsquo;t figure out when it should reclaim the memory, so it doesn&amp;rsquo;t ever do it.&lt;/p&gt;
&lt;p&gt;For example, this will cause a leak:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var obj={b:document.body};
document.body.o=obj; // ← circular link is created.  document.body.o.b === document.body
})();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;If you set either obj.doc.body or body.o to NULL, then you&amp;rsquo;ll break the circular chain, and IE 6 will reclaim the memory.&lt;/p&gt;
&lt;p&gt;The cycle doesn&amp;rsquo;t have to be so small.  Even a chain of many steps can cause a leak if it is not broken.  This will cause a leak, too:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var d={b:document.body}
var obj={doc:d}; // ← obj.doc.b === document.body
document.body.o=obj; // ← Circular loop: document.body.o.doc.b === document.body
})();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Sometimes the references aren&amp;rsquo;t explicit, but are created by a scope closure.  (This may be part of the thinking behind the assertion that closures cause memory leaks.)  For example, this will also leak:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var b=document.body; // ← create a reference to document.body inside of the outer scope.
b.onclick=function() { // ← b.onclick refers to a function.
  // this function can access &quot;b&quot; due to closure
  // do something...
};
})();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The anonymous function is assigned to &lt;code&gt;document.body.onclick&lt;/code&gt;.  Due to the scope closure, there is a reference (&lt;code&gt;b&lt;/code&gt;) created inside of the anonymous function that points back at document.body.  This creates a circular condition that confounds and befuddles the MSIE garbage collector just like the other examples above.&lt;/p&gt;
&lt;h3&gt;How To Avoid Memory Leaks&lt;/h3&gt;
&lt;p&gt;The simplest way to ensure that you will never have a memory leak is to simply never have circular reference chains that cross between Javascript and DOM space.  Make sure that you always have Javascript objects refer to DOM objects, and never the other way round, or vice versa.&lt;/p&gt;
&lt;p&gt;However, it&amp;rsquo;s sometimes extremely convenient to have circular link.  Consider this example:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var doSomething=function(e) {
  this.innerHTML=&#39;did something!&#39;;
  this.object.doSomethingElse(this.customPropertyOfSomeKind);
};
myDomNode.object=new myObject();
myDomNode.customPropertyOfSomeKind={some:&#39;data object&#39;};
YAHOO.util.Event.addListener(myDomNode,&#39;click&#39;,doSomething);
})();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, if myObject has any reference to myDomNode (even if it refers to something that refers to something else &amp;hellip; that refers to myDomNode), you&amp;rsquo;ll leak memory.&lt;/p&gt;
&lt;h3&gt;How to Fix MSIE&amp;rsquo;s Javascript Memory Leaks&lt;/h3&gt;
&lt;p&gt;So, how to fix this?&lt;/p&gt;
&lt;p&gt;First, be aware when you&amp;rsquo;re doing things that may cause a leak.  If it&amp;rsquo;s not a very big gain in code simplicity, then figure out another way around.  If you&amp;rsquo;re hanging a lot of Javascript objects onto DOM objects, there&amp;rsquo;s a big chance of a leak creeping in.  Personally, I try to make sure that all my references go from JS→DOM and not the other way around.  If the references are always one-way, then there&amp;rsquo;s no chance of a leak.  (Closures can only create JS→DOM references.)  Also, we&amp;rsquo;ve seen performance issues with hanging too much stuff on DOM nodes if the page is big and complicated (that&amp;rsquo;s anecdotal, and I don&amp;rsquo;t have any hard numbers, so take it for what it&amp;rsquo;s worth.)
If you understand how they work and why they happen, you can save yourself a lot of time later on tracking them down.&lt;/p&gt;
&lt;p&gt;Second, test your code with &lt;a href=&quot;http://outofhanwell.com/ieleak/index.php?title=Main_Page&quot;&gt;Drip&lt;/a&gt;.  Test early, test often, and &lt;strong&gt;always&lt;/strong&gt; test before you release to production.&lt;/p&gt;
&lt;p&gt;I can&amp;rsquo;t possibly stress how important this is.  Even if you&amp;rsquo;ve done everything right, it&amp;rsquo;s easy to overlook circular references if the code gets sufficiently complex.  Even small memory leaks can add up over the course of a session, or in a browser that stays open for days on end.  (It happens quite a bit.  I don&amp;rsquo;t know when I last closed the browser on my home computer, and a lot of users are the same way.)&lt;/p&gt;
&lt;p&gt;Third, if you must cause circular references in your code, be responsible about it.  Save a reference to each afflicted DOM node, and break the cycles on window unload.  I often do something like this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var unLoaders=[];
myDomNode.object=new myObject(); // ← let&#39;s say that this creates a leak somewhere
unLoaders.push(myDomNode); // ← save it for later
// create an &quot;unload&quot; function
var unload=function(){
  for(var i=unLoaders.length-1;i&amp;gt;-1;i--){
    unLoaders[i].object=null; // ← break the cycle
  }
};
// run the unload function on window.unload
YAHOO.util.Event.addListener(window,&#39;unload&#39;,unload);
})();&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;Memory Leaks and &lt;acronym title=&quot;Asynchronous Javascript And Xml&quot;&gt;Ajax&lt;/acronym&gt;/&lt;acronym title=&quot;XmlHttpRequest&quot;&gt;XHR&lt;/acronym&gt;&lt;/h3&gt;
&lt;p&gt;Ajax is a huge source of memory leaks, and unfortunately in this day and age of fast-prototyping and marketing pushing, a lot of these errors slip out into the world.  If you don&amp;rsquo;t use a polling mechanism of some kind, AJAX applications will leak memory like a bucket with no bottom.  Use the &lt;a href=&quot;http://developer.yahoo.com/yui/connection/&quot;&gt;YUI connection library for Ajax&lt;/a&gt;, and never look back.  It&amp;rsquo;s brilliant, and very easy to use.&lt;/p&gt;
&lt;p&gt;So, why do AJAX apps leak memory so badly if you don&amp;rsquo;t use a polling mechanism?  Consider the &amp;ldquo;typical&amp;rdquo; XHR code pattern:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;(function(){
var x=getXHRobject();
x.onreadystatechange=function() { // ← create link from x (COM object) to anonymous function
  if(x.readystate==4){ // ← reference to x exists inside function scope, creating circular link.
    // do something.
  }
};
})();&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The XmlHttpRequest object is treated in Javascript much like a DOM node.  (More precisely, this problem affects all COM objects, including DOM nodes.)  If you attach an onreadystatechange handler to it, you&amp;rsquo;ve created a circular loop.  The standard means of breaking these chains won&amp;rsquo;t work.  The YUI connection lib polls the object&amp;rsquo;s readystate until it is done, and then calls your success function.  (If it times out or gets an error, it calls your failure function.)  Since there&amp;rsquo;s no onreadystatechange listener, there&amp;rsquo;s no circular reference, and thus, no memory leak.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Web Standards: Nothing Succeeds Like Success</title>
		<link href="https://blog.izs.me/2007/06/web-standards-nothing-succeeds-like-success/"/>
		<updated>2007-06-07T17:00:49Z</updated>
		<id>https://blog.izs.me/2007/06/web-standards-nothing-succeeds-like-success/</id>
		<content type="html">&lt;p&gt;&lt;cite&gt;This is a comment on the A List Apart article, &lt;a href=&quot;http://www.alistapart.com/articles/standardsandcompanies/&quot;&gt;Evangelizing Outside the Box: Web Standards and Large Companies&lt;/a&gt;, by &lt;a href=&quot;http://www.alistapart.com/authors/k/peterpaulkoch&quot;&gt;Peter-Paul Koch&lt;/a&gt;.  I posted &lt;a href=&quot;http://www.alistapart.com/comments/standardsandcompanies?page=3#28&quot;&gt;the comment on their site&lt;/a&gt; on June 04, 2007.&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;I work at a mega-gigantic web corporation (10,000+ employees across the world, and hundreds of millions of users.) While we don&amp;rsquo;t exactly model PPK&amp;rsquo;s definition of &amp;ldquo;Web company,&amp;rdquo; since we don&amp;rsquo;t (often) create websites for others, we do offer end users: games, instant messaging, news, sports, mail, search, photo-sharing, a top-notch Javascript and CSS framework, and a host of other services, many of which start with &amp;ldquo;Y!&amp;rdquo; ;)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.yahoo.com/&quot;&gt;Yahoo&lt;/a&gt; is a huge proponent of web standards, for very pragmatic reasons. On most teams, you can&amp;rsquo;t get hired as even a junior web developer without a solid background in standards and CSS. At the same time, we host countless 1990-style table-based layout pages, and most of them probably won&amp;rsquo;t be changed any time soon. And yes, some of our internal web apps are simply godaweful.&lt;/p&gt;
&lt;p&gt;The all-too-common focus on refactoring legacy pages is misguided and hopeless. There is little, if any, benefit to make up for the herculean effort. However, web companies are typically in the business of creating &lt;strong&gt;new&lt;/strong&gt; pages, and this is where the standards movement should move. When an old system is refactored, it&amp;rsquo;s often a wholescale redesign, and that&amp;rsquo;s when a proper approach should be used. Extending a system should almost always use the language of the existing system, and sometimes, yes, that means that you implement the 254th page as table-soup so that it matches the pattern of the other 253.&lt;/p&gt;
&lt;p&gt;When it comes to new development, it&amp;rsquo;s a much easier sell. First, you say, &amp;ldquo;I&amp;rsquo;m going to implement this using web standards because it&amp;rsquo;s better.&amp;rdquo; (Or don&amp;rsquo;t say it—just do it.) If that doesn&amp;rsquo;t work (and it usually does), then you point to the huge sites that have used web standards to great advantage—sites like Yahoo, Blogger, ESPN, and others. Talk about their agility, their reach, how this is the new standard. Get involved in the hiring process, and try to hire developers who know about standards. (Usually they&amp;rsquo;re the best choice anyhow.)&lt;/p&gt;
&lt;p&gt;If that doesn&amp;rsquo;t work, then build a resume in modern HTML and CSS, put it online, and get ready to move to California. (Seriously, as more employers move to using web standards, it&amp;rsquo;s getting harder to find good web developers these days. You&amp;rsquo;re valuable!) As more standards-using webdevs reach career-maturity, web companies will necessarily shift in that direction, and devs who don&amp;rsquo;t use these methods will find themselves working somewhere else.&lt;/p&gt;
&lt;p&gt;Lastly, please, abandon the religious viewpoint. Software is the art of effective trade-offs. It&amp;rsquo;s not math, and there is usually not just one right answer. It does so happen that web standards can be leveraged in many cases to make a big profit in time, effort, and features, but if you&amp;rsquo;re in this business long enough as one of PPK&amp;rsquo;s &amp;ldquo;invisible professionals,&amp;rdquo; you&amp;rsquo;ll eventually find a case where you need a layout table to achieve a certain effect, or where a table-based approach is faster/easier/more maintainable, and the costs are reasonable. W3C approval doesn&amp;rsquo;t not make something necessarily a good method. If you&amp;rsquo;re going to be a zealot, be a zealot about writing high-quality code—usually that means standards, but standards are not a valid end in themselves. I feel like blogging a big fat rant when I can&amp;rsquo;t buy movie tickets on my Blackjack, but web standards zealotry is perceived as naive and misguided by managers and customers alike.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The Most Important Things They Don’t Teach in CompSci 101 (but should): Maintainability</title>
		<link href="https://blog.izs.me/2007/06/the-most-important-things-they-dont-teach-in/"/>
		<updated>2007-06-03T03:27:04Z</updated>
		<id>https://blog.izs.me/2007/06/the-most-important-things-they-dont-teach-in/</id>
		<content type="html">&lt;p&gt;I stumbled across a &lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-clear-code/?ca=dgr-FClnxw01linuxcodetips&quot;&gt;great article about clean code&lt;/a&gt; from Jeff Vogel over at the IBM Developerworks blog site, via a &lt;a href=&quot;http://developers.slashdot.org/article.pl?sid=07/05/30/1813247&amp;amp;from=rss&quot;&gt;/. article&lt;/a&gt;.  Even more valuable was the &lt;a href=&quot;http://www.freevbcode.com/ShowCode.Asp?ID=2547&quot;&gt;How to write unmaintainable code&lt;/a&gt; article, which appears to have grown considerably since I first saw a version of it back in college.&lt;/p&gt;
&lt;p&gt;A simple &lt;a href=&quot;http://www.google.com/search?q=maintainable+code&quot;&gt;web search&lt;/a&gt; can uncover a lot of articles about writing maintainable code.  There have been &lt;a href=&quot;http://www.amazon.com/s/ref=nb_ss_gw/102-4912607-6304117?url=search-alias%3Daps&amp;amp;field-keywords=maintainable+code&amp;amp;tag=isaacschlcom-20&quot;&gt;several books written on the subject&lt;/a&gt;.  And yet, I consistently find that code examples and tutorials, not to mention programming text books, very often break all or most of these rules.&lt;/p&gt;
&lt;p&gt;To a certain degree, what makes code &amp;ldquo;maintainable&amp;rdquo; is a matter of opinion.  However, it is pretty universally accepted that the vast majority of programmer-hours are spent debugging, fixing, and extending existing code.  It&amp;rsquo;s very rare, even when working on an entirely new project, that you open up a blank file in your text editor and start coding.  After the first few hours of the first day of a project, you&amp;rsquo;re working in an existing code ecosystem.  Is it a crazy jungle with vines and savage beasts?  Or a well-lit sidewalk with friendly pedestrians?&lt;/p&gt;
&lt;p&gt;I think these assumptions are pretty safe to make for any programmer in any language:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;At least 80% of a programmer&amp;rsquo;s time is spent working with an existing code base (possibly one they just created).&lt;/li&gt;
    &lt;li&gt;Debugging code is more difficult than writing it. (Or, problems are harder to fix than to create.)&lt;/li&gt;
    &lt;li&gt;Extending code (adding features) is the riskiest thing that you can do (bug-wise.)&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Nevertheless, no matter what code you&amp;rsquo;re working on, every programmer faces these demands:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Management allocates more time for development than for maintenance. (Usually &lt;strong&gt;after&lt;/strong&gt; asking us for insight!)&lt;/li&gt;
    &lt;li&gt;Maintenance is sloughed off onto the least experienced developer in the team.&lt;/li&gt;
    &lt;li&gt;The existing feature set is looked at as a &amp;ldquo;base,&amp;rdquo; and new features are requested constantly.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;It is thus impossible to overestimate the importance of writing code that is as easy as possible to fix, extend, and reconfigure, even if the person doing the fixing or extending has never seen the code before.  (Or, as is perhaps more common, was the code&amp;rsquo;s original author, but has forgotten what they were originally thinking when they wrote it.)  If you are a programmer or manager of programmers, look at it this way: at least 80% of your development budget depends on the maintainability of the code that you and your team produce.  The techniques that create maintainable code are mostly free, but not using them costs you big time.&lt;/p&gt;
&lt;p&gt;As a web developer, I tend to have a somewhat extended view of product lifetimes.  There is still code on the internet from 1993, and that was back when we didn&amp;rsquo;t know what we were doing.  Now that we&amp;rsquo;ve got all this experience, we should expect that the code we write will be around even longer.  The programmer who gets to maintain your code might not have been born yet.  Be kind to that poor soul.&lt;/p&gt;
&lt;p&gt;These are the tips that I think are the most important contributors to writing maintainable code.  It&amp;rsquo;s a matter of opinion, to a certain extent, and there&amp;rsquo;s plenty of disagreement, so take this for what it&amp;rsquo;s worth.  Feedback is, of course, always welcome.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h3&gt;1. Don&amp;rsquo;t be clever&lt;/h3&gt;
&lt;p&gt;We already know you&amp;rsquo;re smart; prove it by writing code that monkeys can understand.  Programming should be approached like a haiku, not a riddle.  Make it simple, and don&amp;rsquo;t make me have to think hard when I come by years later to fix or change or add something.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.wikiquote.org/wiki/Brian_W._Kernighan&quot;&gt;Brian W. Kernighan&lt;/a&gt; famously said, &amp;ldquo;&lt;q&gt;Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.&lt;/q&gt;&amp;rdquo;  Try to find the balance between hard-coded and over-engineered.&lt;/p&gt;
&lt;h3&gt;2. Think clearly.&lt;/h3&gt;
&lt;p&gt;You can&amp;rsquo;t teach someone to think in an organized fashion.  The best that you can do is find someone who does this already and convince them that they should do it when they write code.  Create objects that make sense for the task at hand.&lt;/p&gt;
&lt;p&gt;That makes it easy to:&lt;/p&gt;
&lt;h3&gt;3. Let the code describe itself&lt;/h3&gt;
&lt;p&gt;Comment your code, yes, yes, you hear it all the time. But don&amp;rsquo;t write comments that say &lt;em&gt;how&lt;/em&gt; something is done.  Write comments that say &lt;em&gt;why&lt;/em&gt;, and let the code speak for itself.  The only thing worse than this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;// increment i by 1
i += 1;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;is this:&lt;/p&gt;
&lt;p&gt;&lt;code class=&quot;block&quot;&gt;// increment i by 1
i += 2;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When you write comments that describe how instead of describing why, over time you inevitably end up with comments that lie, because code is much more likely to change than comments.  Let the code say what it does.  You just have to say why it does what it does.&lt;/p&gt;
&lt;h3&gt;4. Hungarian notation is eviler than eval&lt;/h3&gt;
&lt;p&gt;I sometimes think that Hungarian Notation was surely developed by some kind of mad scientist with an extreme hatred of maintenance programmers*.  It&amp;rsquo;s almost never consistent, it&amp;rsquo;s hard to read, and it puts information where it doesn&amp;rsquo;t belong.  It is a profoundly flagrant violation of the rule that comments should say why and not what.&lt;/p&gt;
&lt;p&gt;Consider the basic case of &amp;ldquo;iCnt&amp;rdquo; for an integer counter, or &amp;lsquo;sType&amp;rsquo; as a string, or &#39;oElement&amp;rsquo; as an object.  If your code is so convoluted that a maintenance programmer doesn&amp;rsquo;t know that your counter is an integer, or that the element reference is an object, or that &amp;ldquo;type&amp;rdquo; is a string, well, there&amp;rsquo;s something deeply wrong with either your code or your hiring process.&lt;/p&gt;
&lt;p&gt;Avoid Hungarian notation like the plague.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;* This is a joke.  I&amp;rsquo;m sure it was actually developed by very well-meaning programmers who were honestly trying to address this problem.  Nonetheless, it&amp;rsquo;s a very bad solution that tends to compound the problem significantly.&lt;/small&gt;&lt;/p&gt;
&lt;h3&gt;5. Small pieces, loosely coupled&lt;/h3&gt;
&lt;p&gt;A lot of maintenance checklists and lint programs instruct at the expression or syntax level.  However, arguably the most important key to creating maintainable code is to build small pieces that interact with one another in loosely coupled ways.  This minimizes dependencies, reduces the amount of code that you have to write and maintain, and makes extension and re-use much simpler.&lt;/p&gt;
&lt;p&gt;Less code is almost always better.  Instead of having 1 object that implements 10 features, it&amp;rsquo;s often better to have 10 small objects that implement one feature each, and just listen for and respond to the events that they need.  Using a &lt;a href=&quot;http://developer.yahoo.com/yui/event/#customevent&quot;&gt;good event utility&lt;/a&gt;, this is an extremely powerful pattern for user interface code, especially.  Widget-A just listens to an event from widget-B; when that event fires, it does its thing.  If the event never fires, then widget-A never gets activated.  This means that you can remove or change widget-B without fearing that you&amp;rsquo;re going to cause massive regressions.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://codinghorror.com/&quot;&gt;Coding Horror&lt;/a&gt; is one of my daily reads.  If you don&amp;rsquo;t read it, you should.  Jeff Atwood put it quite well when he exhorted developers to &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000791.html&quot;&gt;Code Smaller&lt;/a&gt;.  They he later &lt;a href=&quot;http://www.codinghorror.com/blog/archives/000878.html&quot;&gt;wrote that the best code is no code at all&lt;/a&gt;.  I couldn&amp;rsquo;t agree more.&lt;/p&gt;
&lt;h3&gt;6. Use OO (and other patterns) Wisely&lt;/h3&gt;
&lt;p&gt;Object Oriented programming &lt;em&gt;can&lt;/em&gt; help you follow these rules.  But, not everything &lt;em&gt;has&lt;/em&gt; to inherit from something else.  There is such a thing as over-engineering.  &amp;ldquo;Silver bullets&amp;rdquo; approaches are common causes of this problem.&lt;/p&gt;
&lt;p&gt;Use an Object Oriented approach that makes sense.  Most of the time, in my experience, inheritance is not the best approach, unless you&amp;rsquo;re going to have a lot of types of things, where the types have a lot in common.  This means that you&amp;rsquo;re dealing with a huge number of objects, which is not the case in most applications.  Again, &lt;em&gt;most of the time&lt;/em&gt;, &amp;ldquo;has-a&amp;rdquo; approaches are much simpler and more flexible than &amp;ldquo;is-a&amp;rdquo; approaches.&lt;/p&gt;
&lt;p&gt;Think of it with a real-world example.  &amp;ldquo;Sandwich&amp;rdquo; doesn&amp;rsquo;t inherit from &amp;ldquo;bread&amp;rdquo;.  You wouldn&amp;rsquo;t say, &amp;ldquo;a sandwich &lt;em&gt;is a&lt;/em&gt; type of bread that has stuff inside.&amp;rdquo;  This might, arguably, be true.  But, the way that most people talk (and more importantly, how we think,) is that a sandwich is a &amp;ldquo;thing&amp;rdquo; that &lt;em&gt;has&lt;/em&gt; bread with stuff inside.  Furthermore, a waiter is not a sandwich with legs; a waiter is a person who &lt;em&gt;has a&lt;/em&gt; sandwich and brings it to you.  Since said waiter may also have a second job as an actor, it&amp;rsquo;s not even right to say that the &amp;ldquo;waiter&amp;rdquo; class inherits from &amp;ldquo;person.&amp;rdquo;  A waiter is not a type of person, it&amp;rsquo;s a person who &lt;em&gt;has a&lt;/em&gt; job delivering food to tables.&lt;/p&gt;
&lt;p&gt;Some languages implement multiple inheritance and other things that seek to address the &amp;ldquo;multiple hats&amp;rdquo; problem using classic OO techniques.  If you ask me, don&amp;rsquo;t buck the epistemological trends&amp;mdash;use the methodology that we use for everything else, and extend using has-a instead of is-a.&lt;/p&gt;
&lt;h3&gt;7. Be harsh on the code, gentle on the coder&lt;/h3&gt;
&lt;p&gt;We&amp;rsquo;re all human.  We make mistakes.  Even the best of us violate the rules sometimes, and most of us, by definition, are not &amp;ldquo;the best of us.&amp;rdquo;  However, there is no excuse for bad code.  It should be killed on sight.  Be your own harshest critic, and never shy away from criticism.  Seek it out.  Turn to your coworkers and say, &amp;ldquo;Hm. You know, this thing I&amp;rsquo;m working on just seems like I&amp;rsquo;m making it too convoluted.  Can I run my approach by you and see if I&amp;rsquo;m over-thinking this?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Give honest criticism without any hesitation, but never &lt;em&gt;ever&lt;/em&gt; say, imply, or even &lt;em&gt;think&lt;/em&gt; that the programmer must have been dense.  Sure, maybe the programmer really &lt;em&gt;was&lt;/em&gt; dense.  But if you&amp;rsquo;re growing as a developer, hell, as a person, then you should think the same thing about the stuff you did last year.  Nothing is more humbling than having to support your own code a year later.  Pepper your criticism with a light-hearted attitude, and be generous in praising the parts that you think are good.  Keep your venting to yourself.  It will raise your status if you help someone else succeed; tearing down just hurts us all.&lt;/p&gt;
&lt;p&gt;Sure, this might be good advice, obvious, even.  But how does it help make maintainable code?  By fostering positivity, you&amp;rsquo;ll help create an atmosphere where bad code is not tolerated, but where everyone is encouraged to grow and experiment.  The best way to avoid bad code is to make the programmers better.&lt;/p&gt;
&lt;p&gt;I personally think that a few interpersonal communication classes would be a good addition to any computer science curriculum.&lt;/p&gt;
&lt;h3&gt;8. Fail&lt;/h3&gt;
&lt;p&gt;You won&amp;rsquo;t be able to create resilient systems unless you know how they&amp;rsquo;ll break.  You won&amp;rsquo;t know how they&amp;rsquo;ll break until they do.&lt;/p&gt;
&lt;p&gt;Failure is a prerequisite for success.  So, get ready to do it.  A lot.  I&amp;rsquo;ve written LOTS of very bad code.  (Some of it is even here on this website!)  Plan for an alpha and beta.  Do them as fast as possible. Bang on them.  Then throw them out and start over, taking what you learned into the next version.&lt;/p&gt;
&lt;p&gt;Share your failure.  Have a code review session where everyone brings in the worst code that they&amp;rsquo;ve written for the project, and solicits ideas for what went wrong.  (It&amp;rsquo;s kind of like an AA meeting: Hi, my name is Isaac, and I wrote bad code. &lt;em&gt;Hello, Isaac&amp;hellip;&lt;/em&gt;.)&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s so often these days, especially in big corporations with lots of different teams, for each team to share their successes loudly, but sweep their failure under the rug.  We&amp;rsquo;re all afraid of getting a bad review, but this virtually guarantees that all the &lt;em&gt;other&lt;/em&gt; teams will fail in exactly the same way.  Even in a small company with only one or two teams, sharing failure can result in an exponential reduction in errors.&lt;/p&gt;
&lt;p&gt;Furthermore, sharing your own failures, and asking for criticism, makes it easier for others to take criticism when you point out bad code that they wrote.  It is very difficult to separate &amp;ldquo;me&amp;rdquo; from &amp;ldquo;my code&amp;rdquo;.  If you criticize one, the other might get hurt.  Sharing failure helps to sever this connection, and allows everyone to associate and connect with the success of the product as a whole.&lt;/p&gt;
&lt;p&gt;Building a few prototype/failure builds into your development process will also help to produce stable builds faster.  It allows for user-research sooner.  By planning a throw-away build, it helps get everyone focused on which features are actually important/necessary, and which are either too difficult or unimportant to bother building.  It gets product and engineering talking sooner.&lt;/p&gt;
&lt;p&gt;Failure (and handling it intelligently) is not just important, it&amp;rsquo;s absolutely &lt;em&gt;vital&lt;/em&gt; when it comes to building systems that are going to stick around for decades.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>The first entry in the Foo Blog</title>
		<link href="https://blog.izs.me/2007/05/the-first-entry-in-the-foo-blog/"/>
		<updated>2007-05-23T01:16:15Z</updated>
		<id>https://blog.izs.me/2007/05/the-first-entry-in-the-foo-blog/</id>
		<content type="html">&lt;p&gt;Hello, and welcome to my new and much easier to spell domain name.  I previously had &lt;a href=&quot;http://isaacschlueter.com/&quot;&gt;isaacschlueter.com&lt;/a&gt;, which I plan on keeping, but I&amp;rsquo;ll probably more-or-less let that domain wither and grow obsolete.  I plan to port a lot of my more technical content over to this new sandbox, and post stuff here from now on.&lt;/p&gt;
&lt;p&gt;In the meantime, check out &lt;a href=&quot;http://en.wikipedia.org/wiki/Foo&quot;&gt;what WikiPedia has to say about &amp;ldquo;foo&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
</feed>
