{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "Tyler Butler",
  "home_page_url": "https://tylerbutler.com/",
  "feed_url": "https://tylerbutler.com/feed.json",
  "description": "Personal website and blog of Tyler Butler, featuring articles on technology, programming, and more.",
  "language": "en-us",
  "authors": [
    {
      "name": "Tyler Butler",
      "url": "https://tylerbutler.com/"
    }
  ],
  "items": [
    {
      "id": "https://tylerbutler.com/introducing-ccl/",
      "url": "https://tylerbutler.com/introducing-ccl/",
      "title": "Introducing CCL",
      "content_html": "<p>In <a href=\"/packagejson-considered-harmful/\">package.json considered harmful</a>, I made the case that JSON is a\npoor config format and that JSONC and JSON5 don’t actually fix the problem — they just extend the lifespan of a bad bet.\nIf comments are a requirement (and I think they are), and if simplicity matters, then the JavaScript ecosystem’s default\nconfig story is genuinely broken.</p>\n<p>But pointing out what’s wrong is the easy part. What should you use instead?</p>\n<p>I’ve been thinking about this for a while, and I want to tell you about a language I stumbled onto recently that I think\ngets it right — or at least, gets closer than anything else I’ve tried.</p>\n<h2><a href=\"#the-second-criterion\">The second criterion</a></h2>\n<p>I said in <a href=\"/packagejson-considered-harmful/\">package.json considered harmful</a> that comment support is the\nminimum bar for a config language. But there’s a second criterion I didn’t spend much time on: <strong>simplicity</strong>. It needs\nto be simple to hand-author, simple to read, and simple to understand.</p>\n<p>This sounds obvious, but it’s surprisingly easy to fail. Which brings me to my first encounter on the road to finding\nsomething better.</p>\n<h2><a href=\"#discovering-pkl-and-rejecting-it\">Discovering PKL (and rejecting it)</a></h2>\n<p>I’ve been using <a href=\"https://mise.jdx.dev\">mise</a> for managing dev tools — it’s excellent for polyglot environments where you’re juggling Rust\nand Node.js toolchains simultaneously. The same author released a tool called HK, a Git hook manager. I tried it out,\nand the way HK is configured is using a language called <a href=\"https://pkl-lang.org\">PKL</a>.</p>\n<p>I’d never heard of it. So I started researching, and wow — PKL is <em>not</em> a configuration language. PKL is a programming\nlanguage <em>disguised</em> as a configuration language. It’s far too complicated. It has far too many features.</p>\n<p>PKL does support comments, so it clears the first bar. But it fails the second one badly. At the point where your config\nlanguage needs a runtime and an execution model, the honest question is: why aren’t you just writing code? The\ncomplexity cost is real; the benefit over simply using a programming language is not.</p>\n<p>Machines are, in some ways, secondary to this conversation. We believe this about programming languages — nobody designs\na language to make it easier for the computer. We design syntax and semantics to help the programmer, then do extra work\nin the compiler. We go to all that trouble because we believe people are more productive in languages that are easier to\nread and write.</p>\n<p>Config languages carry the same obligation. They should be easy to read, easy to write by hand. PKL seems to have\nforgotten this.</p>\n<h2><a href=\"#finding-ccl\">Finding CCL</a></h2>\n<p>While I was working through PKL’s documentation and finding new things to be frustrated by, I came across a <a href=\"https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html\">blog\npost</a> by Dmitrii Kovanikov. I found myself nodding along, saying “yes, this all makes sense.” It was about a\nconfiguration language Dmitrii called <em>Categorical Configuration Language</em>.</p>\n<h2><a href=\"#what-makes-ccl-elegant\">What makes CCL elegant</a></h2>\n<p>Consider how you’d jot down a list on paper. You’d probably write a heading, indent a bit underneath it, maybe use a\ndash for items. If something belongs under another item, you’d indent further. Maybe it would look something like this:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>Errands</span></div></div><div><div><span>- Groceries</span></div></div><div><div><span><span>  </span></span><span>Fruit</span></div></div><div><div><span><span>    </span></span><span>- Apples - 2 lb</span></div></div><div><div><span><span>    </span></span><span>- Bananas - 1 bunch</span></div></div><div><div><span><span>  </span></span><span>- Crudite platter</span></div></div><div><div><span><span>  </span></span><span>- Cereal</span></div></div><div><div><span><span>  </span></span><span>- Milk</span></div></div><div><div><span>- Vet - Spot's surgery ($500 deposit, ask about \"recovery diet\")</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Here’s what a basic CCL config looks like:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>/= Errands</span></div></div><div><div><span>Groceries </span><span>=</span></div></div><div><div><span><span>  </span></span><span>Fruit </span><span>=</span></div></div><div><div><span><span>    </span></span><span>Apples </span><span>=</span><span> 2 lb</span></div></div><div><div><span><span>    </span></span><span>Bananas </span><span>=</span><span> 1 bunch</span></div></div><div><div><span>  </span><span>=</span><span> </span><span>Crudite platter</span></div></div><div><div><span>  </span><span>=</span><span> </span><span>Cereal</span></div></div><div><div><span>  </span><span>=</span><span> </span><span>Milk</span></div></div><div><div><span>Vet </span><span>=</span><span> Spot's surgery ($500 deposit, ask about \"recovery diet\")</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>That’s it. Keys and values separated by <code>=</code>. Comments are just entries with <code>/</code> as the key — not special syntax, just a\nconvention. Nested values are indented. Lists are created by empty keys — much like the human-made list might use a dash\nto denote a list item. There’s nothing else to learn.</p>\n<p>I know there’s a cohort of programmers for whom significant indentation is an unforgivable sin. I have genuinely mixed feelings about YAML, which also uses indentation for structure, and I understand the frustration. But in CCL, the indentation is doing something different — and the distinction matters.</p>\n<p>The key insight is this: every time a language uses a special character to delimit structure — <code>{</code>, <code>}</code>, <code>[</code>, <code>]</code>, <code>\"</code>,\n<code>|</code> — it creates an escaping problem. What if your value <em>contains</em> that character? Now you need escape sequences. And\nif your value is a shell command that already contains escaping, you end up double-escaping, which is a special kind of\nmisery.</p>\n<p>Whitespace doesn’t have this problem. You rarely need to escape a space. Nobody writes a shell command and worries it\ncontains too many leading spaces. Dmitrii calls whitespace “silent ninjas” — they do structural work without being\nvisible characters anyone would ever need to include literally in a value. YAML uses indentation too, but pairs it with\na large surface area of other syntax. CCL uses indentation <em>instead</em> of that other syntax. That’s a meaningful\ndistinction.</p>\n<p>There’s also a deeper mathematical elegance here that I’ll only gesture at: CCL configs compose associatively, and an empty config is a valid identity element, which means the whole thing forms a monoid. If that means something to you, <a href=\"https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html\">Dmitrii’s post</a> goes much further down that road — it’s one of the more satisfying things I’ve read about config design.</p>\n<h2><a href=\"#minimal-syntax-in-practice\">Minimal syntax in practice</a></h2>\n<p>There’s something else really powerful about CCL. The only characters that are processed in a special way are a newline\nand an equals sign. And the equals sign is only special when it’s the first one on a line — every other equals is not\nspecial.</p>\n<p>This means you can use CCL to embed other languages quite easily. But it also happens to be really useful for apps that\nneed to store shell commands. Escaping is always a pain when you have a shell command that also needs to do escaping in\nthe shell — double escaping is hard.</p>\n<p>CCL solves that because there’s no escaping. You get a string that represents the exact string you need to run in the\nshell. I make heavy use of this in my app <a href=\"https://github.com/tylerbutler/santa\">Santa</a>, where every package source is essentially a set of shell commands.\nIt’s very easy to configure in CCL with no weird escaping rules to explain.</p>\n<h2><a href=\"#building-with-llms\">Building with LLMs</a></h2>\n<p>The other reason I found CCL interesting is that it’s been a fun project to explore with LLMs and different programming\nlanguages. I have an interest in lots of languages but I’m not fluent in all of them. I can read code and understand\nwhat the code does, but I couldn’t necessarily write it from scratch without a lot of references.</p>\n<p>So I had fun creating a <a href=\"https://github.com/CatConfLang/ccl-test-data\">library of test cases</a>, then a test harness, then instructions for how to build a test\nharness in any language. I used that harness to build CCL parser implementations in Rust, Gleam, Go, and TypeScript.\nEach one was a chance to learn something about the language while also building something genuinely useful.</p>\n<h2><a href=\"#ccl-isnt-competing-with-json\">CCL isn’t competing with JSON</a></h2>\n<p>Before I go further, I want to be direct about something: I’m not arguing that CCL should replace JSON. That’s not the\npoint, and it’s not a realistic claim.</p>\n<p>JSON’s ubiquity comes from being a data interchange format — something every language can produce and consume, with a\nspec stable enough that parsers written a decade apart still agree. That’s genuinely valuable, and CCL doesn’t offer it.\nCCL has no ambitions there, and it shouldn’t. The two formats are solving different problems.</p>\n<p>The argument I’m making is narrower: when you’re choosing a config language and you actually have a choice, CCL deserves\nserious consideration. Most of the time when we reach for JSON as a config format, we’re not making a deliberate choice\n— we’re just following the path of least resistance. npm did it, the tools around npm did it, and now the question feels\nsettled before it’s been asked.</p>\n<p>But there are plenty of contexts where the question isn’t settled. You’re building a new tool. You’re designing the\nconfig format for an app you own. You’re starting a project that isn’t already embedded in the JSON ecosystem. In those\nmoments, you have a real choice, and the default answer isn’t necessarily the right one.</p>\n<p>CCL will likely never be as popular as JSON, and that’s fine. Popularity follows adoption, and adoption follows\necosystem gravity — JSON has decades of that. What CCL has instead is a set of properties that make it genuinely\nwell-suited to the specific job of human-authored configuration: minimal syntax, no escaping problems, comments as a\nfirst-class concept. Those properties don’t help you interchange data between microservices. They do help you write and\nmaintain config files that real people have to read and edit.</p>\n<p>That’s a smaller job than what JSON does. It’s also the job JSON has always been bad at.</p>\n<h2><a href=\"#whats-next\">What’s next</a></h2>\n<p>After spending time with this, I wanted to do more than just build parsers for my own use. I’ve created a GitHub\norganization — <a href=\"https://github.com/CatConfLang\">CatConfLang</a> — to collect CCL implementations across languages and\nbuild out the ecosystem a bit. The reference implementation is <a href=\"https://github.com/chshersh/ccl\">Dmitrii’s OCaml\nversion</a>, but there are now parsers in Rust, Go, TypeScript, and Gleam, each developed\nagainst a shared test suite so behavior stays consistent.</p>\n<p>I also built a <a href=\"https://github.com/CatConfLang/ccl-test-data\">comprehensive test suite</a> that I continue to improve and a\nwebsite, <a href=\"https://ccl.tylerbutler.com\">ccl.tylerbutler.com</a> including LLM prompts for folks who want to explore LLM\ncoding agents on a “real project.”</p>\n<p>If you find CCL interesting, take a look and get in touch! The spec is simple enough that you could implement a parser in an afternoon in whatever language you know best. That’s kind of the point.</p>",
      "date_published": "2026-03-27T20:27:00.000Z",
      "tags": [
        "config"
      ]
    },
    {
      "id": "https://tylerbutler.com/packagejson-considered-harmful/",
      "url": "https://tylerbutler.com/packagejson-considered-harmful/",
      "title": "package.json considered harmful",
      "content_html": "<p>Any web developer over the last 15 years or so has encountered <a href=\"https://www.json.org\">JSON</a>. It stands for JavaScript Object Notation, and\nit is one of the most ubiquitous data formats on the web today. It is, as they say, literally everywhere.</p>\n<p>You’d be forgiven for thinking its ubiquity is evidence of its quality. You would be wrong.</p>\n<h2><a href=\"#what-json-is-actually-for\">What JSON is actually for</a></h2>\n<p>Before I make that case, let’s establish what JSON was designed to do, because value judgments need context.</p>\n<p>From Wikipedia:</p>\n<blockquote>\n<p>JSON grew out of a need for a real-time server-to-browser session communication protocol without using\nbrowser plugins such as Flash or Java applets, the dominant methods used in the early 2000s.”</p>\n</blockquote>\n<p>JSON is JavaScript’s serialization format. It’s how JavaScript takes in-memory data and represents it as text, then\nconverts that text back into an in-memory object. That’s it. That’s the job. It happens that a textual format for data interchange has use beyond JavaScript, and accordingly JSON has spread far beyond JavaScript, and far beyond the web.</p>\n<p>Lots of languages have something like this. Python has <a href=\"https://docs.python.org/3/library/pickle.html\">pickle</a> — a binary format, notably not portable, and not designed\nfor interchange between languages. Importantly, <strong>JSON was not designed for humans</strong>. Or at least not <em>primarily</em> for\nhumans. It’s a machine-to-machine format. It exists to transfer data between systems where that data is consumed and\ncreated largely by machines.</p>\n<p>Sounds reasonable, no? The problem is that we don’t use it for that.</p>\n<h2><a href=\"#to-be-fair-to-json\">To be fair to JSON</a></h2>\n<p>None of this is to say JSON is a bad format. It’s genuinely good at what it was designed for, and it’s worth being clear\nabout that before I make the case against its misuse.</p>\n<p>The security argument for JSON is real. Because JSON can only represent data — strings, numbers, booleans, arrays,\nobjects — there’s nothing to execute. You parse it, you get a data structure, and that’s the end of the story. Compare\nthat to executable config formats like vite.config.ts or <a href=\"https://dhall-lang.org\">Dhall</a>, where loading the config means running code. That’s\na meaningful attack surface, and JSON simply doesn’t have it.</p>\n<p>JSON is also genuinely universal. Every language has a JSON parser, and they all agree on the format. That\ninteroperability is not something you get for free — it’s the result of a simple, stable spec that hasn’t changed in\ndecades. When you need two systems written in different languages to exchange data reliably, JSON is still the\nlowest-friction option most of the time.</p>\n<p>And the tooling is exceptional. JSON Schema, formatters, validators, editor support — the ecosystem around JSON is\nmature in a way that most config formats can’t match. If you need to validate the structure of a file, or provide IDE\nautocomplete for it, JSON has a well-worn path for that.</p>\n<p>So JSON is fast to parse, safe to load, universally supported, and well-tooled. The problem isn’t JSON. The problem is\nthat none of those strengths matter much when you’re hand-authoring a config file that you’ll be maintaining for years.\nFor that job, the things JSON is good at are largely irrelevant, and the thing it’s missing — comments — is not.</p>\n<h2><a href=\"#original-sin\">Original Sin</a></h2>\n<p>The most prevalent place you’ll find JSON files in the JavaScript ecosystem is <code>package.json</code> — the formal location for\npackage metadata in <a href=\"https://www.npmjs.com\">npm</a>. And “package metadata” might <em>sound</em> like machine-generated data, except almost nothing in\n<code>package.json</code> is machine-managed. The package name, the version, the keywords, the description, the scripts, the\ndependencies — all hand-authored. All human-maintained. This is not machine-machine data exchange. And then there’s the\nsprawl of tool configurations that have followed npm’s example, carrying this cursed seed to far-off lands.</p>\n<p>This is the original sin: npm chose a comment-less serialization format as the <em>de facto</em> config format for an entire\necosystem, before anyone realized what that would cost over time.</p>\n<h2><a href=\"#comments-are-not-optional\">Comments are not optional</a></h2>\n<p>Here’s the core of my argument: <strong>a config format without comment support cannot be a good config format</strong>. Full stop.</p>\n<p>This sounds like a simple complaint, but follow it through. Configuration is rarely self-explanatory. There are settings\nthat were made for very particular reasons — learned by some engineer long before your time, under constraints you no\nlonger remember. That context needs to live somewhere. It needs to be in the file, near the thing it explains, findable\nyears later when someone is wondering why this dependency is pinned to a version three years old.</p>\n<p>The same rules apply to config that apply to code. If a programming language didn’t support comments, we’d call it\nuntenable. We’d refuse to use it in production. So why do we accept that from a config format? The implicit assumption\nis that config is somehow simpler or less important than code. It should be simpler — but it is absolutely not less\nimportant.</p>\n<p>Let me give you a concrete example:</p>\n<p>You notice a dependency in <code>package.json</code> that looks outdated. Not just outdated… <em>three years old and deprecated!</em>\nShould it be upgraded? You don’t know. There’s nothing there to tell you. Nothing in the release notes seems like it\napplies to you. So you decide to try, briefly forgetting the Ferengi maxim, “No good deed goes unpunished.” Hours later, after running CI and chasing down failures, you find a comment on a bug that\nseems completely unrelated to your issue but nonetheless contains the info you need.</p>\n<p>A gracious fellow engineer has found the key: your setup is one of the rare ones in which upgrading the dependency is a\nmulti-day project. You weep in thanks. Who knew you would owe such a debt to <em>FroyoIsMyFirstLove37</em>? Who can count the\nnumber of engineers who came before you and learned this sad lesson — not to mention <em>FroyoIsMyFirstLove37</em> themselves —\nbut had no <em>obviously correct</em> place to record what they learned? You count yourself lucky that <em>FroyoIsMyFirstLove37</em>\nwasn’t, in that moment, lazy.</p>\n<p>Because software engineers, we’re ultimately a lazy bunch, and often the comment doesn’t get added because it’s too much\nwork to figure out where to put it. “Oh well!” is what many engineers will say. Don’t fool yourself into thinking that\nthis is just a cultural problem. When there aren’t <em>obvious</em> places to put things, many engineers will stall out. Even\nexperienced ones. This scenario plays out every day, across repos and projects worldwide, involving countless engineers\nwho likely know better but, like me, are lazy.</p>\n<p>Imagine if instead you saw a comment above that dependency — <em>“pinned at 2.x, API incompatibility in 3.x, see issue\n#1234”</em> — it probably would have saved all of that effort. And even without the bug number, it’s still useful!</p>\n<h2><a href=\"#jsonc-and-json5-are-not-solutions\">JSONC and JSON5 are not solutions</a></h2>\n<p>You might be thinking: but what about <a href=\"https://code.visualstudio.com/docs/languages/json#_json-with-comments\">JSONC</a>? What about <a href=\"https://json5.org\">JSON5</a>? These formats add comment support to JSON —\ndoesn’t that address the problem?</p>\n<p>No. And I argue they make it worse.</p>\n<p>The challenge is that JSON is now so embedded in the ecosystem that there are countless tools — parsers, validators,\nformatters, editors — that expect JSON to be JSON. When these tools add “support” for JSONC, they typically do it by\nstripping the comments before parsing. They’re not actually treating your comments as meaningful data. They’re\ndiscarding them and reading standard JSON underneath.</p>\n<p>This creates several downstream problems. Some tools support JSONC for reading but write back standard JSON, silently\ndeleting every comment you’ve written. Hope you committed those comments before running the tool! (I’m looking at you, <a href=\"https://nx.dev\">NX</a>.) Others support JSON but not JSONC, forcing you to\nmaintain comment-less files for compatibility. The fragmentation is real and ongoing.</p>\n<p>But the deeper issue is this: JSONC and JSON5 extend the lifespan of a bad bet. They let the ecosystem keep using an\nunsuitable format rather than forcing a reckoning. They are patches on a design that was wrong from the start.</p>\n<h2><a href=\"#other-ecosystems-learned-this\">Other ecosystems learned this</a></h2>\n<p>The good news is that newer ecosystems largely got this right. Rust uses <code>Cargo.toml</code>. Gleam uses <code>gleam.toml</code>. Python\nhas <code>pyproject.toml</code>. None of these chose a comment-less format for human-authored configuration.</p>\n<p>I’ll be honest: I have complicated feelings about <a href=\"https://toml.io\">TOML</a>. It has a reputation for being obvious to Tom, and I am not\nTom. I can never quite remember what double brackets mean without checking the docs. But at least it supports comments.\nAt least I can write a note in <code>Cargo.toml</code> explaining why a particular version is pinned, and that note will still be\nthere the next time I open the file, after other tools have already read and modified the file.</p>\n<p>I’d hoped <a href=\"https://deno.com\">Deno</a> represented a clean break from this history. They built a new JavaScript runtime and had the\nopportunity to make different choices. And then there are <code>deno.json</code> files. Here we go again.</p>\n<h2><a href=\"#the-false-comfort-of-executable-config\">The false comfort of executable config</a></h2>\n<p>To be fair, the ecosystem has found one legitimate escape valve: executable config. Many modern tools allow\nconfiguration via a JavaScript or TypeScript module — <code>vite.config.ts</code>, <code>eslint.config.js</code>, and so on. These formats\nsupport comments, obviously, and offer additional benefits: strong typing, IDE intelligence, composability.</p>\n<p>I actually prefer these when they’re available, precisely because of those conveniences. But they come with a real\ntradeoff that I think is underappreciated.</p>\n<p>Executable config is executable. That means it can only be loaded in an environment that can run JavaScript. I opened a\nPR on a project once to add CommonJS config support, and it was rejected for two legitimate reasons: the tool ran in\nenvironments where JavaScript might not be available, and as I mentioned, executing arbitrary code during config loading\nis a real security concern, not just a theoretical one.</p>\n<p>This is also, incidentally, part of why I’m skeptical of <a href=\"https://pkl-lang.org\">PKL</a> and similar “programmable configuration languages.” At\nthe point where your config language is sophisticated enough to need a runtime and an execution model, the honest\nquestion is: why aren’t you just using a programming language? The complexity cost is there, but the power isn’t\nmeaningfully greater than just writing code.</p>\n<h2><a href=\"#a-simple-test\">A simple test</a></h2>\n<p>Here’s a heuristic I’ve found useful for thinking about your own JSON usage.</p>\n<p>Ask yourself: could all of your JSON data be replaced by <a href=\"https://msgpack.org\">MessagePack</a> tomorrow, and would your workflows notice a\nsignificant difference?</p>\n<p>MessagePack is a binary format that’s largely a drop-in replacement for JSON over the wire — more compact, and without\nthe human readability overhead. (Whether it’s actually faster to parse in practice depends heavily on your runtime —\nV8’s JSON handling is remarkably optimized — but the size savings are real.) If you could make that swap without much\ndisruption, your JSON usage is probably fine. You’re using it for what it was designed for: machine-readable data\nexchange.</p>\n<p>But if that question fills you with dread — if you’re thinking “but we need to <em>read</em> those files” — then you’re relying\non JSON as a human-readable format, and you should use a format fully designed for messy humans.</p>\n<p>There’s also a more obvious tell: if your JSON data contains comment fields. You know the pattern — <code>field_one_comment: \"this value is set because...\"</code>. If you’ve ever done that, or inherited a system that does, that’s a distress signal.\nThat’s a human need (annotation) trying to escape through whatever cracks it can find in a format that didn’t plan for\nit.</p>\n<h2><a href=\"#what-to-do-instead\">What to do instead</a></h2>\n<p>If you’re maintaining a JavaScript project and have any flexibility in your config choices, here’s my rough hierarchy:</p>\n<p><strong>Use executable config</strong> (TypeScript or ESM modules) when the tool supports it and you can guarantee a JavaScript\nenvironment. The developer experience is genuinely excellent.</p>\n<p><strong>Use TOML or YAML</strong> for static config that needs to be portable or loaded outside a JavaScript context. Either one\nsupports comments. Neither one is JSON.</p>\n<p><strong>If you’re stuck with JSON</strong>, my honest advice is to accept the limitation and compensate elsewhere. Some teams work\naround it with special comment fields — “_comment” or “field_name_comment” — but these suffer from the same\nfundamental problem as JSONC: they’re fragile conventions, not first-class features. Any tool that rewrites the file may\ndrop them, reorder them away from the thing they’re annotating, or simply not recognize them. For configuration that\ngenuinely needs annotation, put that documentation in your README or a docs/ file and link to it. It’s not elegant, but\nit’s more durable than workarounds that depend on every tool in your chain playing along.</p>\n<p>The honest bottom line is that <code>package.json</code> is a blight on the Node ecosystem — not because JSON is a bad format, but\nbecause it’s a format that was pressed into service it was never meant for. We made an early choice that calcified into\ninfrastructure, and now we’re all living with the consequences.</p>\n<p>Newer ecosystems know better. But even knowing better, the alternatives I’ve described are compromises: executable\nconfig ties you to a runtime, TOML is fine but never quite obvious, YAML trades one set of problems for another. None of\nthem feel like the right answer — they feel like the least-wrong answer. That nagging dissatisfaction is what led me to\nstart looking harder, and eventually to a configuration language I’d never heard of that’s built on an idea so simple it\nalmost seems like it shouldn’t work — but it does. More on that next time.</p>",
      "date_published": "2026-03-26T22:32:00.000Z",
      "tags": [
        "config"
      ]
    },
    {
      "id": "https://tylerbutler.com/thanksgiving/",
      "url": "https://tylerbutler.com/thanksgiving/",
      "title": "Thanksgiving 2024",
      "content_html": "<p>Thanksgiving has been my favorite of the US holidays for some time. I’ve <a href=\"/tags/thanksgiving/\">written about it several times over the years</a>.</p>\n<p>When I am away for the holiday, I have used the following Rumi quote as my auto-reply message at work:</p>\n<blockquote>\n<p>Wear gratitude like a cloak, and it will feed every corner of your life.</p>\n</blockquote>\n<hr />\n<p>This year, though, has been extremely hard, following several other years that I swore were the hardest. The hits: they keep on coming.</p>\n<p>This year, a different Rumi poem rings true:</p>\n<blockquote>\n<p>Who makes these changes?<br />\nI shoot an arrow right.<br />\nIt lands left.<br />\nI ride after a deer and find myself<br />\nChased by a hog.<br />\nI plot to get what I want<br />\nAnd end up in prison.<br />\nI dig pits to trap others<br />\nAnd fall in.</p>\n<p>I should be suspicious<br />\nOf what I want.</p>\n</blockquote>",
      "date_published": "2024-11-28T20:32:00.000Z",
      "tags": [
        "thanksgiving"
      ]
    },
    {
      "id": "https://tylerbutler.com/coke-zero-ii-the-review/",
      "url": "https://tylerbutler.com/coke-zero-ii-the-review/",
      "title": "Coke Zero II: The Review",
      "content_html": "<h2><a href=\"#the-news\">The News</a></h2>\n<p>Last week, my wife shared with me some rather alarming news: Coke Zero <a href=\"/link-not-available?url=https%3A%2F%2Fwww.washingtonpost.com%2Fbusiness%2Fcoke-zero-gets-makeover-as-coke-zero-sugar%2F2017%2F07%2F26%2F69c65010-7214-11e7-8c17-533c52b2f014_story.html%3Futm_term%3D.f6a83466de55\">is being discontinued</a>. As a man who has an arguably unhealthy attachment to his carbonated beverage of choice, this was panic-worthy.</p>\n<p>You’ll forgive me for not trusting the Coca-Cola Company when they roll out replacement products with  “new, improved taste.” After all, this is the same company that brought us New Coke<sup><a href=\"#fn:1\">1</a></sup> in 1985. Last I heard, that was still used as a cautionary tale in Marketing 101 classes.</p>\n<p>And you’ll also forgive me for not thinking of this as merely a re-branding of the Coke Zero product. The ingredients list may be the same, but they clearly claim to have “a new recipe.” So regardless of what anyone else says, Coke Zero in its current form is gone.</p>\n<p>No big deal, though, right? I mean, announcements like this… they tend to be sensationalist. At the very least, I’ll certainly have several months to prepare myself psychologically.</p>\n<p>Nope:</p>\n<blockquote>\n<p>The new cans and bottles, which will incorporate more red like regular Coke, will start hitting shelves in August 2017.</p>\n</blockquote>\n<p><em>August 2017?</em> Commence freak-out in three… two… one…</p>\n\n<p>Lo and behold, at a Fred Meyer in Issaquah yesterday, my wife couldn’t find Coke Zero at all, but Coca-Cola Zero Sugar<sup><a href=\"#fn:2\">2</a></sup> was there in spades. I naively figured that it would be a few more weeks before actual stores had switched over their stock, but I was wrong. My taste test would be happening a lot sooner than I’d expected.</p>\n<h2><a href=\"#the-packaging\">The Packaging</a></h2>\n<p>My first observation about Coke Zero II (this is how I’ll refer to it from now on) is that it has a lot more red in the pack again and labels than Coke Zero. This isn’t too surprising. In fact, Coke Zero was an anomaly in food packaging since it was almost entirely black save for the white/red product name.</p>\n<p>The new packaging has a much more obvious splash of red, and my initial reaction was that it reminded me of the True Blood packaging in season 1 of HBO’s eponymous show.<sup><a href=\"#fn:3\">3</a></sup> The packaging isn’t entirely new, though; it looks very similar to the Coke Zero packaging <a href=\"http://www.underconsideration.com/brandnew/archives/new_packaging_for_coca-cola_in_spain.php\">introduced in Spain in 2015</a>.</p>\n<h2><a href=\"#the-taste\">The Taste</a></h2>\n<p>So how does it taste? In short, exactly like Coke Zero. I cannot tell any difference at all. At least not in the 1.25 liter plastic bottles, which is what I typically buy.<sup><a href=\"#fn:4\">4</a></sup> Whatever they’re calling “new” and “improved” about the taste hasn’t had any effect as far as I can tell. In case it wasn’t obvious, that’s a good thing in my book.</p>\n<h2><a href=\"#the-verdict\">The Verdict</a></h2>\n<p>Given that there’s no discernible taste difference between Coke Zero II and Coke Zero (to my palate, at least), my verdict is a resounding:  <strong>¯\\_(ツ)_/¯</strong></p>\n<p>I mean, I’m happy that I don’t have to find a new soda, but I don’t understand the messaging around this new product. I’m about as far from a marketing expert as you can get, though, so what do I know?</p>\n<p>Growing up in Papua New Guinea, I can remember when Pepsi’s slogan was, “It’s Pepsi in PNG.” It certainly ain’t Pepsi in PNG anymore, because I <em>also</em> remember when Pepsi completely pulled out of the country and one of my dad’s colleagues bought as many cases of Diet Pepsi as he could find.</p>\n<p>Fortunately that won’t be my lot <em>this</em> time around, but I’m not holding my breath that Coca-Cola won’t take me for another roller coaster ride in the next few years.</p>\n<p><strong>¯\\_(ツ)_/¯</strong></p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>I actually tried New Coke while I was in college. I came across a 24-pack of Coke II, which is how Coke re-branded their new formula in 1992, in a Jewel-Osco on the south side of Chicago. I don’t remember much about how it tasted, though I didn’t like it. It was too sweet for my tastes. But then, so is Coke Classic. </p>\n</li>\n<li>\n<p>That really just rolls off the tongue, doesn’t it? When someone at work offers to grab me a drink from the kitchen, I don’t think I’ll be able to ask for <em>Coca-Cola Zero Sugar</em> with a straight face. Same for ordering it in a restaurant. Oh, who am I kidding? This will never show up in restaurants. </p>\n</li>\n<li>\n<p>I spent way too long looking for screenshots of what the drink looked like in the show, but came up empty. My memory could very well be faulty, but that was my initial reaction nonetheless. </p>\n</li>\n<li>\n<p>It’s inexplicably cheaper per fluid ounce to buy 1.25 liter bottles than 2 liter bottles. I can’t explain it either. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2017-08-05T20:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/comiskey-park/",
      "url": "https://tylerbutler.com/comiskey-park/",
      "title": "Comiskey Park",
      "content_html": "<p>Well, it’s happened again. They’ve gone and <a href=\"/link-not-available?url=http%3A%2F%2Fwgntv.com%2F2016%2F08%2F24%2Fwhite-sox-announce-name-change-to-ballpark%2F\">renamed Comiskey Park</a> to\nsomething else. And I feel about the same way <a href=\"/2004/05/all-i-said-was-comiskey-park/\">I did back in 2004</a>, when\nthe last name change happened.</p>\n<p>I lived a few blocks from the park at that time, as opposed to the few thousand\nI do now, but it still upsets me. Whatever happens, it’ll always be Comiskey\nPark to me.</p>",
      "date_published": "2016-08-26T03:40:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/thanksgiving-tradition-alice-s-restaurant-massacre/",
      "url": "https://tylerbutler.com/thanksgiving-tradition-alice-s-restaurant-massacre/",
      "title": "Thanksgiving Tradition: Alice's Restaurant Massacre",
      "content_html": "<p>I have a tradition on Thanksgiving: I listen to Arlo Guthrie’s classic <em>Alice’s Restaurant Massacre</em>; all 18 minutes and 37 seconds of it. I don’t remember exactly where I picked up this tradition, but it feels distinctly <em>mine</em> since it’s not something that my family did growing up.</p>\n<p>Anyway, I found out yesterday that the song is available on Spotify in its full-length glory. So kick back, close your eyes for 20 minutes, and enjoy.</p>\n",
      "date_published": "2015-11-27T20:01:00.000Z",
      "tags": [
        "music",
        "thanksgiving"
      ]
    },
    {
      "id": "https://tylerbutler.com/documentation-versions-and-read-the-docs/",
      "url": "https://tylerbutler.com/documentation-versions-and-read-the-docs/",
      "title": "Documentation, Versions, and Read the Docs",
      "content_html": "<p>Engineer is a side project for me right now. That means that while I am actively working on Engineer pretty regularly, releases themselves are not necessarily regular. I’ve adopted a repository/branch structure that’s influenced by <a href=\"http://nvie.com/posts/a-successful-git-branching-model/\">git flow</a>, so my main development branch is not <em>master</em>, it’s <em>dev</em>.</p>\n<ul>\n<li><em>master</em>: The most recent released version of the code</li>\n<li><em>dev</em>: The in-development version of the code</li>\n</ul>\n<p>Up until <a href=\"/2014/05/engineer-v0-5-0-released/\">Engineer v0.5.0</a>, when you went to GitHub, you saw <em>master</em> by default.</p>\n<p>When you go to GitHub, I want you to see the latest in-development version. The reason is pretty simple: Since official releases are fairly slow, but I actually make changes fairly often, I want to make sure that activity is shown on the GitHub homepage — via the ‘x days ago’ text that shows up on the far right of the code listing. My hypothesis is that people make some judgements based on the activity level of project. If people are searching for a static site generator, and they come across Engineer, I don’t want them to think that the project is abandoned and simply leave. If my default branch shown in GitHub is <em>master</em>, then it looks as though the project isn’t under active development at first glance, which clearly isn’t what I want. Thus, I want GitHub to display the <em>dev</em> branch by default, which is easy enough to change in the repository settings. I made this change along with the release of Engineer v0.5.0, so now when you go to the repository on GitHub, you’ll see the <em>dev</em> branch by default.</p>\n<p>There’s still a problem, though, related to the fact that I host <a href=\"https://engineer.readthedocs.org/\">Engineer’s public documentation</a> on <a href=\"https://readthedocs.org/\">Read the Docs</a> (RTD). Imagine someone finds my project on GitHub, likes what they see, and installs the release version using pip:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>pip install engineer</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Seems to be the natural thing to do, right? If they click the link in Engineer’s README to visit the docs at RTD, then I want them to go to the version of the docs that corresponds to the version they just installed — the most recent released version.</p>\n<p>Now this is also relatively easy to do. RTD actually has some smarts around <a href=\"https://docs.readthedocs.org/en/latest/versions.html\">multiple versions of documentation</a>. RTD offers a few different settings that are relevant to my goals.</p>\n<p>First, there is a baked in ‘version’ identifier called <em>latest</em> which is intended to point to the most recent version of your docs:</p>\n<blockquote>\n<p>In the normal case, the latest version will always point to the most up to date development code. If you develop on a branch that is different than the default for your VCS, you should set the <strong>Default Branch</strong> to that branch.</p>\n</blockquote>\n<p>Of course, in my case, development is done on the <em>dev</em> branch, so I want <em>latest</em> to point to that branch. Fortunately that’s easy to change, as the second sentence above alludes to. In the <em>Advanced Settings</em> section of the RTD dashboard, you’ll find a <em>Default branch</em> setting, in which I entered <em>dev</em>. Great; now <em>latest</em> points to <em>dev</em>.</p>\n<p>The second setting of relevance in RTD is the <em>default version</em>. This controls what version of your docs <code>/</code> redirects to. By default this will be <em>latest</em>, but since I want <code>/</code> to always redirect to the most recent <em>released version</em> of Engineer, I changed this to <em>master</em>. Cool; now <code>/</code> simply redirects to the version of my docs from the <em>master</em> branch, which will always be the most recent released version.</p>\n<p>There is, of course, still a problem. Ideally, I would like links that people follow to go to the version of the documentation that matches the version of the code they’re coming from and vice-versa. In other words, I would like the documentation link from the README file in the <em>master</em> branch to go to <a href=\"https://engineer.readthedocs.org/en/master/\">https://engineer.readthedocs.org/en/master/</a>, and the link in the <em>dev</em> branch to go to <a href=\"https://engineer.readthedocs.org/en/latest/\">https://engineer.readthedocs.org/en/latest/</a>.</p>\n<p>Unfortunately, that’s not really possible. Sure, I could build some intelligent redirector or something that would look at the referrer URL and redirect to the appropriate docs version, but that’s not something I want to build anytime soon. The best I can do is provide some notes in the documentation itself telling people that they <em>may</em> be looking for a version of documentation that is different from what they’re seeing. It’s not quite ideal from my perspective, but I think it helps.</p>\n<p>So bottom line, this is what I’ve wound up with:</p>\n<ul>\n<li>If you go directly to <a href=\"https://engineer.readthedocs.org/\">https://engineer.readthedocs.org/</a>, you’ll get the latest <em>released</em> version of the docs, which will correspond to what most people will install using pip.</li>\n<li>If you visit the <a href=\"https://github.com/tylerbutler/engineer\">GitHub repo</a>, you’ll see the most recent in-development version of the code. The README links to <a href=\"https://engineer.readthedocs.org/\">https://engineer.readthedocs.org/</a>, which as I mentioned earlier will redirect to the <em>released</em> version of the docs.</li>\n<li>The docs themselves contain notes redirecting people to <a href=\"https://engineer.readthedocs.org/en/latest/\">https://engineer.readthedocs.org/en/latest/</a> if they need the most recent version of the docs. RTD itself also contains links to all versions of the docs, but I don’t think most people know that and if they do, it may not be clear which version they want.</li>\n</ul>",
      "date_published": "2015-02-11T04:45:00.000Z",
      "tags": [
        "engineer",
        "documentation"
      ]
    },
    {
      "id": "https://tylerbutler.com/loot-tables/",
      "url": "https://tylerbutler.com/loot-tables/",
      "title": "Loot Tables",
      "content_html": "<p>Daniel Cook tells you <a href=\"https://lostgarden.com/2014/12/08/loot-drop-tables/\">more than you ever needed to know about loot tables</a>. Unless you’re a game designer, of course…</p>",
      "date_published": "2015-01-09T20:44:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/installing-binary-python-packages-on-windows/",
      "url": "https://tylerbutler.com/installing-binary-python-packages-on-windows/",
      "title": "Installing Binary Python Packages on Windows",
      "content_html": "<p>In my <a href=\"/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/\">Python Windows installation guide</a>, I concluded with the following paragraph:</p>\n<blockquote>\n<p>After all of that’s done you should be good to go! You can pop open a PowerShell window and create/switch to virtualenvs as needed and install packages using pip. At this point you should have most of what you need to follow the installation instructions for most Python packages (except those that require C extension compilation, but that’s a topic for another post).</p>\n</blockquote>\n<p>Despite writing the initial version of that guide over two years ago, I never got around to writing that ‘other post’ to cover installing packages that require C extension compilation. I personally rarely run into this need, but when it comes up it’s incredibly annoying. And guess what? It came up recently when I tried to install <a href=\"https://www.samba.org/~jelmer/dulwich/\">Dulwich</a>, a Python implementation of Git. Fortunately for you, I decided to take this opportunity to actually write the guide.</p>\n<h2><a href=\"#do-i-need-this-guide\">Do I Need This Guide?</a></h2>\n<p>You only <em>need</em> this guide if you try to install a Python package on Windows and you get an error like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>building</span><span> </span><span>'Crypto.Random.OSRNG.winrandom'</span><span> </span><span>extension</span></div></div><div><div><span>warning:</span><span> </span><span>GMP</span><span> </span><span>or</span><span> </span><span>MPIR</span><span> </span><span>library</span><span> </span><span>not</span><span> </span><span>found</span><span>;</span><span> </span><span>Not</span><span> </span><span>building</span><span> </span><span>Crypto.PublicKey._fastmath.</span></div></div><div><div><span>error:</span><span> </span><span>Unable</span><span> </span><span>to</span><span> </span><span>find</span><span> </span><span>vcvarsall.bat</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Ahhh, the dreaded <em>Unable to find vcvarsall.bat</em> error… This error means that the package you’re installing has a C extension that needs to be compiled. Python itself is compiled using a specific version of the Visual Studio C++ compiler, and when you try to install packages that require C compilation, it goes looking for the compiler locally so it can compile the necessary stuff.</p>\n<p>Of course, in your case, you probably don’t have Visual Studio, or if you do, it’s not the right version, or you don’t have the C++ compiler installed, or it’s installed in a non-standard location, or a specific environment variable isn’t set, or you forgot to reopen your PowerShell/cmd window after you set that environment variable… As you can see, there are many many reasons why this is painful. Don’t worry; you’re not alone. As <a href=\"https://stackoverflow.com/questions/2817869/error-unable-to-find-vcvarsall-bat\">this question on Stack Overflow</a> indicates, lots of people run into this problem, and there are lots of ways to ‘solve’ it.<sup><a href=\"#fn:1\">1</a></sup></p>\n<p>Because of the relative complexity of the problem, and all the potential ways various solutions could be thwarted, this used to be annoyingly difficult to address, but now it’s pretty easy.</p>\n<h2><a href=\"#installing-the-microsoft-c-compiler-for-python-27\">Installing the Microsoft C++ Compiler for Python 2.7</a></h2>\n<p>I am extremely glad I didn’t try to write this guide a few years ago, when I wrote my Python installation guide, because in the time since then, some smart person<sup><a href=\"#fn:2\">2</a></sup> at Microsoft felt the collective pain and anguish of Python developers everywhere and made <a href=\"/link-not-available?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdetails.aspx%3Fid%3D44266\">a package available directly on microsoft.com</a> that “contains the compiler and set of system headers necessary for producing binary wheels for Python 2.7 packages.” Hooray!<sup><a href=\"#fn:3\">3</a></sup></p>\n<p>If you <a href=\"/link-not-available?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdetails.aspx%3Fid%3D44266\">download that package</a> and install it, you should be able to successfully install whatever package that was erroring out with <em>Unable to find vcvarsall.bat</em> before. Make sure you re-open any PowerShell or cmd windows you had open to make sure your environment variables are up to date. Oh, and in case you care, the compiler and all its supporting files can be found in the following directory after installation:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>~\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C</span><span>++</span><span> </span><span>for</span><span> Python\\</span><span>9.0</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>If you’re still having problems, chances are your version of setuptools is out of date.</p>\n<h2><a href=\"#update-setuptools-and-pip\">Update setuptools and pip</a></h2>\n<p>There have been a number of changes in the Python packaging/distribution world in the past few months. I’m not involved in any of the relevant projects, but since my installation guide is quite popular, I get emails from some folks every so often that are. One of the biggest changes is the reintegration of the Distribute fork of setuptools back into the main project. This also means that setuptools — the main project — is getting a lot more love, which means more updates.</p>\n<p>The installation instructions for the Microsoft C++ Compiler for Python 2.7 package says that it requires <strong>setuptools 6.0 or later.</strong> I had a crusty old version from who knows when. Updating pip and setuptools is a little weird, but it’s not that difficult. I actually wrote a <a href=\"https://engineer.readthedocs.org/en/master/upgrade.html\">separate guide for that</a> as part of the Engineer 0.5.0 documentation.</p>\n<p>There are more details there, but it basically boils down to executing two commands: <code>python -m pip install -U pip</code> followed by <code>pip install -U setuptools</code>. When you do that, you should see some output like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>C:\\Users\\Tyler\\Code</span><span>&gt;</span><span> python </span><span>-</span><span>m pip install </span><span>-</span><span>U pip</span></div></div><div><div><span>Downloading</span><span>/</span><span>unpacking pip </span><span>from</span><span> https:</span><span>//</span><span>pypi.python.org</span><span>/</span><span>packages</span><span>/</span><span>py2.py3</span><span>/</span><span>p</span><span>/</span><span>pip</span><span>/</span><span>pip</span><span>-</span><span>6.0</span><span>.</span><span>2</span><span>-</span><span>py2.py3</span><span>-</span><span>none</span><span>-</span><span>any.whl</span><span>#md5=26404d27a64a40d4c358a2405b16d043</span></div></div><div><div><span>Installing collected packages: pip</span></div></div><div><div><span><span>    </span></span><span>Found existing installation: pip </span><span>1.5</span><span>.</span><span>2</span></div></div><div><div><span><span>    </span></span><span>Uninstalling pip:</span></div></div><div><div><span><span>        </span></span><span>Successfully uninstalled pip</span></div></div><div><div><span>Successfully installed pip</span></div></div><div><div><span>Cleaning up...</span></div></div><div><div>\n</div></div><div><div><span>C:\\Users\\Tyler\\Code</span><span>&gt;</span><span> pip install </span><span>-</span><span>U setuptools</span></div></div><div><div><span>Collecting setuptools </span><span>from</span><span> https:</span><span>//</span><span>pypi.python.org</span><span>/</span><span>packages</span><span>/</span><span>3.4</span><span>/</span><span>s</span><span>/</span><span>setuptools</span><span>/</span><span>setuptools</span><span>-</span><span>8.2</span><span>.</span><span>1</span><span>-</span><span>py2.py3</span><span>-</span><span>none</span><span>-</span><span>any.whl</span><span>#md5=a0582adbe0c56b3945570049b8d7c953</span></div></div><div><div><span><span>    </span></span><span>Downloading setuptools</span><span>-</span><span>8.2</span><span>.</span><span>1</span><span>-</span><span>py2.py3</span><span>-</span><span>none</span><span>-</span><span>any.whl (</span><span>551</span><span>kB</span><span>)</span></div></div><div><div><span>    </span><span>100</span><span>%</span><span> </span><span>|</span><span>################################| 552kB 975kB/s ta 0:00:01</span></div></div><div><div><span>Installing collected packages: setuptools</span></div></div><div><div><span><span>    </span></span><span>Found existing installation: setuptools </span><span>2.2</span></div></div><div><div><span><span>    </span></span><span>Uninstalling setuptools</span><span>-</span><span>2.2</span><span>:</span></div></div><div><div><span><span>        </span></span><span>Successfully uninstalled setuptools</span><span>-</span><span>2.2</span></div></div><div><div>\n</div></div><div><div><span>Successfully installed setuptools</span><span>-</span><span>8.2</span><span>.</span><span>1</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Congratulations, your pip and setuptools installations are now upgraded. As I note in the <a href=\"https://engineer.readthedocs.org/en/master/upgrade.html\">Engineer 0.5.0 upgrade guide</a>, “if you’re using virtualenv, you may need to upgrade pip and setuptools in your virtualenv as well as the ‘global’ (outside the virtualenv) versions.” You should be able to avoid doing this for all new virtualenvs by upgrading virtualenv itself (<code>pip install -U virtualenv</code> — version 12.7.8 is the latest as of this writing). Once it was upgraded my new virtualenvs got the correct updated versions of pip and setuptools. If you don’t want to recreate your virtualenvs, then you can just upgrade the ones you need.</p>\n<p>Once pip and setuptools are upgraded, try installing the previously failed package again. You should see a bunch of output like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>C:\\Users\\Tyler\\AppData\\Local\\Programs\\Common\\Microsoft\\Visual C</span><span>++</span><span> </span><span>for</span><span> Python\\</span><span>9.0</span><span>\\VC\\Bin\\</span><span>link.exe</span><span> </span><span>/</span><span>DLL </span><span>/</span><span>nologo </span><span>/</span><span>INCREMENTAL:NO </span><span>/</span><span>LIBPATH:C:\\Python27\\Libs </span><span>/</span><span>LIBPATH:C:\\Users\\Tyler\\.virtualenvs\\test\\libs </span><span>/</span><span>LIBPATH:C:\\Users\\Tyler\\.virtualenvs\\test\\PCbuild </span><span>/</span><span>EXPORT:init_diff_tree build\\temp.win32</span><span>-</span><span>2.7</span><span>\\Release\\dulwich</span><span>/</span><span>_diff_tree.obj </span><span>/</span><span>OUT:build\\lib.win32</span><span>-</span><span>2.7</span><span>\\dulwich\\_diff_tree.pyd </span><span>/</span><span>IMPLIB:build\\temp.win32</span><span>-</span><span>2.7</span><span>\\Release\\dulwich\\_diff_tree.lib </span><span>/</span><span>MANIFESTFILE:build\\temp.win32</span><span>-</span><span>2.7</span><span>\\Release\\dulwich\\_diff_tree.pyd.manifest</span></div></div><div><div><span><span>    </span></span><span>Creating library build\\temp.win32</span><span>-</span><span>2.7</span><span>\\Release\\dulwich\\_diff_tree.lib and object build\\temp.win32</span><span>-</span><span>2.7</span><span>\\Release\\dulwich\\_diff_tree.exp</span></div></div><div><div><span>Successfully installed dulwich</span><span>-</span><span>0.9</span><span>.</span><span>8</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Congratulations, you can now install source Python packages that include C extensions (like <a href=\"https://www.samba.org/~jelmer/dulwich/\">Dulwich</a>)!</p>\n<h2><a href=\"#the-future-binary-wheels\">The Future: Binary Wheels</a></h2>\n<p>Now, the fact that you need to install some separate dependency on Windows in order to install some Python packages clearly sucks. Fortunately, there are ways that package distributors can remove this need. There is a new package format, called <a href=\"/link-not-available?url=https%3A%2F%2Fpypa.io%2Fen%2Flatest%2Fpeps%2F%23pep427s\">Wheel</a>, which includes pre-compiled versions of C extensions. If the Dulwich package maintainer produced a Wheel in addition to the source distribution, then users wouldn’t all need to install the Microsoft C++ Compiler for Python 2.7.<sup><a href=\"#fn:4\">4</a></sup> Wheels can be installed using pip version 1.4+.</p>\n<p>If you release packages on PyPI, consider creating a Wheel if your package has a C extension. There’s a great guide for distributing your Python projects, including creating Wheels, in the <a href=\"/link-not-available?url=http%3A%2F%2Fpython-packaging-user-guide.readthedocs.org%2Fen%2Flatest%2Fdistributing.html\">Python Packaging User Guide</a>.</p>\n<h2><a href=\"#addendum-dulwich-windows\">Addendum: dulwich-windows</a></h2>\n<p>In the event you’re using Windows and need <a href=\"https://www.samba.org/~jelmer/dulwich/\">Dulwich</a>, but don’t want to fool with following the steps above, I [forked the repository](dulwich fork) and published a Wheel (my first!) — it’s <a href=\"https://pypi.python.org/pypi/dulwich-windows\">dulwich-windows</a> on PyPI. The <em>only</em> change to the code is a few minor changes to the setup file to differentiate it from the official Dulwich package. You can see those changes on the windows_wheel branch in [my fork](dulwich fork). Feel free to install it (<code>pip install dulwich-windows</code>). I may or may not keep it up to date, though, so I recommend using the official Dulwich releases if possible.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>For the record, I don’t recommend following most of the answers on Stack Overflow at this point. Many are quite old, and as you’ll see when you read on, there’s a much simpler solution. </p>\n</li>\n<li>\n<p>Well, since it’s Microsoft, it was likely a whole team of people! </p>\n</li>\n<li>\n<p>If you happen to know who at Microsoft was responsible for this, please let me know, because I want to buy them something nice. </p>\n</li>\n<li>\n<p>I do think that the Wheel would need to be built on a Windows box with the compiler installed, though I am not sure about that. If I’m right, this would certainly be a blocker since many package maintainers don’t have easy access to a Windows box. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2014-12-31T15:31:00.000Z",
      "tags": [
        "guide",
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/updated-python-installation-guide/",
      "url": "https://tylerbutler.com/updated-python-installation-guide/",
      "title": "Updated Python Installation Guide",
      "content_html": "<p>I just made a major update to my <a href=\"/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/\">Python Windows installation guide</a>, which remains my most popular post. Things have gotten a lot simpler over the past few months since the distribute fork of setuptools was integrated back.</p>",
      "date_published": "2014-10-07T18:45:00.000Z",
      "tags": [
        "python",
        "powershell"
      ]
    },
    {
      "id": "https://tylerbutler.com/stack-traces/",
      "url": "https://tylerbutler.com/stack-traces/",
      "title": "Stack Traces",
      "content_html": "<blockquote>\n<p>Yes I know, ha ha Null Pointer, Java, LOL. But that’s an exact line number friends. What did the user do? They tapped the subscribe button. Which page where they on? The Podcast Dialog. Zero ambiguity. Guess how many of our Android crashes we get that for? 100%. In iOS we’d be lucky if even 30% of our crashes had stack traces we can line up to actual things we can then reproduce. So most iOS crashes today involve me becoming House MD and poking the code for hours, only to figure out that like always, it’s never Lupus.</p>\n</blockquote>\n<p>It astounds me that iOS debugging is so… <em>medieval…</em> That said, JavaScript stack traces can be just as bad, depending on the browser. I think good stack traces are a <em>requirement</em> for actually shipping software. Here’s hoping iOS, and browsers, catch up soon.</p>",
      "date_published": "2014-10-07T18:04:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/node-js-on-windows-8-1/",
      "url": "https://tylerbutler.com/node-js-on-windows-8-1/",
      "title": "Node.js On Windows 8.1",
      "content_html": "<p>This afternoon I installed Node.js version 0.10.30 (the most recent according to <a href=\"https://nodejs.org/\">https://nodejs.org/</a>) on a new Windows box. Unfortunately, after installing, using <code>npm</code> was, uhhh, not good:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>C:\\Users\\tyler</span><span>&gt;</span><span> npm</span></div></div><div><div><span>Error: ENOENT</span><span>,</span><span> stat </span><span>'C:\\Users\\tyler\\AppData\\Roaming\\npm'</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Not exactly a great experience. And that error message? Useless. To me, anyway. I’m sure <code>ENOENT</code> means something useful to someone.<sup><a href=\"#fn:1\">1</a></sup></p>\n<p>Fortunately, a quick search revealed <a href=\"https://stackoverflow.com/questions/25103499/cant-start-npm-on-windows-8-error-enoent-stat-c-users-user-appdata-roaming\">this page on Stack Overflow</a>, where the ‘fix’ is outlined: you just need to manually create the npm folder at the path in the error message:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>C:\\Users\\tylerbu</span><span>&gt;</span><span> mkdir C:\\Users\\tylerbu\\AppData\\Roaming\\npm</span></div></div><div><div>\n</div></div><div><div>\n</div></div><div><div><span>Directory: C:\\Users\\tylerbu\\AppData\\Roaming</span></div></div><div><div>\n</div></div><div><div>\n</div></div><div><div><span>Mode        LastWriteTime    Length    Name</span></div></div><div><div><span>----</span><span>        </span><span>-------------</span><span>    </span><span>------</span><span>    </span><span>----</span></div></div><div><div><span>d</span><span>----</span><span>        </span><span>8</span><span>/</span><span>15</span><span>/</span><span>2014</span><span>      </span><span>1</span><span>:</span><span>25</span><span> PM    npm</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>After that, things were golden:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>C:\\Users\\tylerbu</span><span>&gt;</span><span> npm install grunt</span></div></div><div><div><span>grunt@0.4.5 node_modules\\grunt</span></div></div><div><div><span>├── dateformat@1.0.2</span><span>-</span><span>1.2</span><span>.</span><span>3</span></div></div><div><div><span>├── which@1.0.5</span></div></div><div><div><span>├── eventemitter2@0.4.14</span></div></div><div><div><span>├── getobject@0.1.0</span></div></div><div><div><span>├── colors@0.6.2</span></div></div><div><div><span>├── rimraf@2.2.8</span></div></div><div><div><span>├── async@0.1.22</span></div></div><div><div><span>├── hooker@0.2.3</span></div></div><div><div><span>├── grunt</span><span>-</span><span>legacy</span><span>-</span><span>util@0.2.0</span></div></div><div><div><span>├── </span><span>exit</span><span>@0.1.2</span></div></div><div><div><span>├── lodash@0.9.2</span></div></div><div><div><span>├── nopt@1.0.10 (abbrev@1.0.5)</span></div></div><div><div><span>├── coffee</span><span>-</span><span>script@1.3.3</span></div></div><div><div><span>├── iconv</span><span>-</span><span>lite@0.2.11</span></div></div><div><div><span>├── underscore.string@2.2.1</span></div></div><div><div><span>├── minimatch@0.2.14 (sigmund@1.0.0</span><span>,</span><span> lru</span><span>-</span><span>cache@2.5.0)</span></div></div><div><div><span>├── glob@3.1.21 (inherits@1.0.0</span><span>,</span><span> graceful</span><span>-</span><span>fs@1.2.3)</span></div></div><div><div><span>├── findup</span><span>-</span><span>sync@0.1.3 (lodash@2.4.1</span><span>,</span><span> glob@3.2.11)</span></div></div><div><div><span>├── grunt</span><span>-</span><span>legacy</span><span>-</span><span>log@0.1.1 (underscore.string@2.3.3</span><span>,</span><span> lodash@2.4.1)</span></div></div><div><div><span>└── js</span><span>-</span><span>yaml@2.0.5 (esprima@1.0.4</span><span>,</span><span> argparse@0.1.15)</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>On the plus side, the <code>ENOENT</code> string <em>did</em> help me find help on the web more quickly. So, maybe not so bad after all? </p>\n</li>\n</ol>\n</section>",
      "date_published": "2014-08-15T20:33:00.000Z",
      "tags": [
        "node.js"
      ]
    },
    {
      "id": "https://tylerbutler.com/day-one-free-on-the-app-store/",
      "url": "https://tylerbutler.com/day-one-free-on-the-app-store/",
      "title": "Day One Free on the App Store",
      "content_html": "<p>I’ve been using <a href=\"https://dayoneapp.com/\">Day One</a> for the past few months to encourage my own journaling, and while I’ve not been as consistent as I’d hoped, the app is pretty good. Dropbox syncing seems to work pretty well too. It’s free this week <a href=\"/link-not-available?url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fday-one-journal-diary%2Fid421706526%3Fmt%3D8%26uo%3D4%2611l9Ct\">on the App Store</a>.</p>\n<p>If you pick it up, you might also check out <a href=\"https://brettterpstra.com/projects/slogger/\">Slogger</a>.</p>",
      "date_published": "2014-07-08T20:49:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/markdown-lazy-links-in-python/",
      "url": "https://tylerbutler.com/markdown-lazy-links-in-python/",
      "title": "Markdown Lazy Links in Python",
      "content_html": "<p>One of the things I am most excited about in <a href=\"/2014/05/engineer-v0-5-0-released/\">Engineer 0.5.0</a> is the new support for <a href=\"https://engineer.readthedocs.org/en/master/bundled_plugins.html#lazy-links-plugin\">Markdown Lazy Links</a>. My implementation is actually a bit richer than <a href=\"https://brettterpstra.com/2013/10/19/lazy-markdown-reference-links/\">Brett Terpstra’s original sample</a>, though it’s not quite as elegant as the original either. In particular, Engineer’s implementation allows you to add lazy links to posts that already have numeric reference links. Also, you can optionally have Engineer transform the lazy links into numeric links during a build. This can come in handy if you anticipate doing a lot of reorganizing of the post content at some point, and want to make sure links don’t break.</p>\n<p>It took some time to unpack Brett’s elegant regular expression into the Python form, mostly because Ruby is very foreign to me, and its regex engine has some default behaviors that differ from Python’s. In particular, it took some time to figure out exactly what flags to pass in so that things behaved appropriately. I’m still not sure I got it completely right, though my unit tests seem to pass and I’ve been using the plugin for some time so I think it’s stable.</p>\n<p>I chose to use the <a href=\"https://docs.python.org/2/library/re.html#re.VERBOSE\">VERBOSE</a> regular expression form so it’s clearer how the expression works. Hopefully that will save someone some time if they’re looking to port the thing to some other regular expression language. You can find the source in the <a href=\"https://github.com/tylerbutler/engineer/blob/dev/engineer/plugins/bundled.py#L306\">GitHub repository</a>, but I’m pasting the relevant class below as well. Note that this is an <a href=\"https://engineer.readthedocs.org/en/master/dev/plugins.html#post-processor-plugins\">Engineer PostProcessor plugin</a>, so some of the code is simply scaffolding for the plugin system. If you find a bug, please let me know, or even better, <a href=\"https://github.com/tylerbutler/engineer/issues\">file an issue on GitHub</a>.</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>class</span><span> </span><span>LazyMarkdownLinksPlugin</span><span>(</span><span>PostProcessor</span><span>):</span></div></div><div><div><div>2</div></div><div><span>  </span><span># Inspired by Brett Terpstra:</span></div></div><div><div><div>3</div></div><div><span>  </span><span># https://brettterpstra.com/2013/10/19/lazy-markdown-reference-links/</span></div></div><div><div><div>4</div></div><div><span><span>  </span></span><span>_link_regex </span><span>=</span><span> re</span><span>.</span><span>compile</span><span>(</span><span>r</span><span>'''</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>(       </span><span># Start group 1, which is the actual link text</span></div></div><div><div><div>6</div></div><div><span><span>      </span></span><span>\\[      </span><span># Match a literal [</span></div></div><div><div><div>7</div></div><div><span><span>      </span></span><span>[</span><span>^</span><span>\\]]</span><span>+</span><span>    </span><span># Match anything except a literal ] - this will be the link text itself</span></div></div><div><div><div>8</div></div><div><span><span>      </span></span><span>\\]      </span><span># Match a literal ]</span></div></div><div><div><div>9</div></div><div><span><span>      </span></span><span>\\s</span><span>*</span><span>     </span><span># Any whitespace (including newlines)</span></div></div><div><div><div>10</div></div><div><span><span>      </span></span><span>\\[      </span><span># Match the opening bracket of the lazy link marker</span></div></div><div><div><div>11</div></div><div><span><span>    </span></span><span>)       </span><span># End group 1</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>\\*      </span><span># Literal * - this is the lazy link marker</span></div></div><div><div><div>13</div></div><div><span><span>    </span></span><span>(       </span><span># Start group 2, which is everything after the lazy link marker</span></div></div><div><div><div>14</div></div><div><span><span>      </span></span><span>\\]      </span><span># Literal ]</span></div></div><div><div><div>15</div></div><div><span><span>      </span></span><span>.</span><span>*?</span><span>^    </span><span># Non-greedy match of anything up to a new line</span></div></div><div><div><div>16</div></div><div><span><span>      </span></span><span>\\[      </span><span># Literal [</span></div></div><div><div><div>17</div></div><div><span><span>    </span></span><span>)       </span><span># End Group 2</span></div></div><div><div><div>18</div></div><div><span><span>    </span></span><span>\\*\\]:     </span><span># Match a literal *]: - the lazy link URL definition follows this</span></div></div><div><div><div>19</div></div><div><span><span>    </span></span><span>'''</span><span>,</span><span> re</span><span>.</span><span>MULTILINE</span><span> </span><span>|</span><span> re</span><span>.</span><span>DOTALL</span><span> </span><span>|</span><span> re</span><span>.</span><span>UNICODE</span><span> </span><span>|</span><span> re</span><span>.</span><span>VERBOSE</span><span>)</span></div></div><div><div><div>20</div></div><div>\n</div></div><div><div><div>21</div></div><div><span><span>  </span></span><span>_counter_regex </span><span>=</span><span> re</span><span>.</span><span>compile</span><span>(</span><span>r</span><span>'\\[(\\d</span><span>+</span><span>)\\]:'</span><span>,</span><span> re</span><span>.</span><span>UNICODE</span><span>)</span></div></div><div><div><div>22</div></div><div><span><span>  </span></span><span>_counter </span><span>=</span><span> </span><span>0</span></div></div><div><div><div>23</div></div><div>\n</div></div><div><div><div>24</div></div><div><span>  </span><span>@</span><span>classmethod</span></div></div><div><div><div>25</div></div><div><span>  </span><span>def</span><span> </span><span>_replace</span><span>(</span><span>cls</span><span>,</span><span> </span><span>match</span><span>):</span></div></div><div><div><div>26</div></div><div><span>    </span><span>cls</span><span>.</span><span>_counter </span><span>+=</span><span> </span><span>1</span></div></div><div><div><div>27</div></div><div><span><span>    </span></span><span>sub_str </span><span>=</span><span> </span><span>'</span><span>%s%s%s%s</span><span>]:'</span><span> </span><span>%</span><span> (match</span><span>.</span><span>group</span><span>(</span><span>1</span><span>)</span><span>,</span><span> </span><span>cls</span><span>.</span><span>_counter</span><span>,</span><span> match</span><span>.</span><span>group</span><span>(</span><span>2</span><span>)</span><span>,</span><span> </span><span>cls</span><span>.</span><span>_counter)</span></div></div><div><div><div>28</div></div><div><span>    </span><span>return</span><span> sub_str</span></div></div><div><div><div>29</div></div><div>\n</div></div><div><div><div>30</div></div><div><span>  </span><span>@</span><span>staticmethod</span></div></div><div><div><div>31</div></div><div><span>  </span><span>def</span><span> </span><span>get_max_link_number</span><span>(</span><span>post</span><span>):</span></div></div><div><div><div>32</div></div><div><span><span>    </span></span><span>all_values </span><span>=</span><span> </span><span>set</span><span>([</span><span>int</span><span>(i) </span><span>for</span><span> i </span><span>in</span><span> LazyMarkdownLinksPlugin</span><span>.</span><span>_counter_regex</span><span>.</span><span>findall</span><span>(post)])</span></div></div><div><div><div>33</div></div><div><span>    </span><span>return</span><span> </span><span>max</span><span>(all_values) </span><span>if</span><span> all_values </span><span>else</span><span> </span><span>0</span></div></div><div><div><div>34</div></div><div>\n</div></div><div><div><div>35</div></div><div><span>  </span><span>@</span><span>classmethod</span></div></div><div><div><div>36</div></div><div><span>  </span><span>def</span><span> </span><span>preprocess</span><span>(</span><span>cls</span><span>,</span><span> </span><span>post</span><span>,</span><span> </span><span>metadata</span><span>):</span></div></div><div><div><div>37</div></div><div><span>    </span><span>from</span><span> engineer</span><span>.</span><span>conf </span><span>import</span><span> settings</span></div></div><div><div><div>38</div></div><div>\n</div></div><div><div><div>39</div></div><div><span><span>    </span></span><span>logger </span><span>=</span><span> </span><span>cls</span><span>.</span><span>get_logger</span><span>()</span></div></div><div><div><div>40</div></div><div><span><span>    </span></span><span>content </span><span>=</span><span> post</span><span>.</span><span>content_preprocessed</span></div></div><div><div><div>41</div></div><div><span>    </span><span>cls</span><span>.</span><span>_counter </span><span>=</span><span> </span><span>cls</span><span>.</span><span>get_max_link_number</span><span>(content)</span></div></div><div><div><div>42</div></div><div>\n</div></div><div><div><div>43</div></div><div><span>    </span><span># This while loop ensures we handle overlapping matches</span></div></div><div><div><div>44</div></div><div><span>    </span><span>while</span><span> </span><span>cls</span><span>.</span><span>_link_regex</span><span>.</span><span>search</span><span>(content)</span><span>:</span></div></div><div><div><div>45</div></div><div><span><span>      </span></span><span>content </span><span>=</span><span> </span><span>cls</span><span>.</span><span>_link_regex</span><span>.</span><span>sub</span><span>(</span><span>cls</span><span>.</span><span>_replace</span><span>,</span><span> content)</span></div></div><div><div><div>46</div></div><div><span><span>    </span></span><span>post</span><span>.</span><span>content_preprocessed </span><span>=</span><span> content</span></div></div><div><div><div>47</div></div><div><span>    </span><span>if</span><span> </span><span>getattr</span><span>(settings</span><span>,</span><span> </span><span>'LAZY_LINKS_PERSIST'</span><span>,</span><span> </span><span>False</span><span>)</span><span>:</span></div></div><div><div><div>48</div></div><div><span>      </span><span>if</span><span> </span><span>not</span><span> post</span><span>.</span><span>set_finalized_content</span><span>(content</span><span>,</span><span> </span><span>cls</span><span>)</span><span>:</span></div></div><div><div><div>49</div></div><div><span><span>        </span></span><span>logger</span><span>.</span><span>warning</span><span>(</span><span>\"Failed to persist lazy links.\"</span><span>)</span></div></div><div><div><div>50</div></div><div><span>return</span><span> post</span><span>,</span><span> metadata</span></div></div></code></pre><div><div></div><div></div></div></figure></div>",
      "date_published": "2014-05-28T20:16:00.000Z",
      "tags": [
        "engineer",
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/deploying-engineer-sites-to-azure/",
      "url": "https://tylerbutler.com/deploying-engineer-sites-to-azure/",
      "title": "Deploying Engineer Sites to Azure",
      "content_html": "<p>A <a href=\"https://github.com/tylerbutler/engineer/issues/51\">longstanding issue</a> in the Engineer issue tracker concerns documenting some of the free/low-cost hosting options one has to host an Engineer site. <a href=\"https://pages.github.com/\">GitHub Pages</a> is a common request, and documenting that process is definitely on my to-do list, but I think there’s a better option: Azure.</p>\n<p>I’ve been hosting tylerbutler.com on Azure for the past few months, and I have to say, I’m very pleased with it so far. It’s probably not the most cost-effective thing for my site, but if you have an MSDN subscription, which many .Net developers have (including me), then you have a monthly Azure credit that is almost certainly enough to cover the cost of deploying your Engineer site to Azure.</p>\n<p>Deploying on Azure has the benefits of auto-scaling to handle traffic demands, though that’s not particularly compelling for Engineer-based sites since static sites by nature tend to be very scalable anyway. The truly compelling feature, in my opinion, is that it lets you maintain your built Engineer site in a Git or Mercurial repository, which is something that developers in particular really like. It is, after all, one of the nice things about GitHub pages as well.</p>\n<p>With some of the new features in <a href=\"/2014/05/engineer-v0-5-0-released/\">Engineer version 0.5.0</a>, I’ve got tylerbutler.com in a <a href=\"https://github.com/tylerbutler/tylerbutler.com\">GitHub repository</a> of its own, and every time I <code>git push</code>, the site is updated automatically thanks to Azure. Even better, thanks to Engineer’s support for <a href=\"https://engineer.readthedocs.org/en/master/settings.html#engineer.conf.EngineerConfiguration.POST_DIR\">multiple post directories</a>, I can put my published posts inside the Git repository itself for safekeeping but still write posts from any device/app that integrates with Dropbox. This flexibility of post authoring was one of the key reasons I wrote Engineer originally; it’s important that I maintain that with whatever deployment architecture I choose.</p>\n<p>Once you have everything set up on Azure, the basic flow looks like this:</p>\n<ul>\n<li>Edit and maintain your site in a Git or Mercurial repository</li>\n<li>Build your site, commit to Git/Mercurial</li>\n<li>Push the repository to GitHub/Bitbucket</li>\n<li>Azure site automatically updates itself in a few minutes</li>\n</ul>\n<p>In order to get this up and running, you can follow the steps below. Note that Engineer 0.5.0+ is needed. I’ll eventually get these instructions incorporated into the official Engineer docs, but I wanted to get the info out there for folks without delay.</p>\n<h2><a href=\"#getting-started\">Getting started</a></h2>\n<p>If you don’t yet have an Engineer site, you can initialize a new one with a content structure and configuration files especially for Azure using the following command (new in Engineer 0.5.0):</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>engineer</span><span> </span><span>init</span><span> </span><span>-m</span><span> </span><span>azure</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>If you have an existing site, you can simply use it, of course, but you may need to add your own <code>.deployment</code> file or configure the Azure deployment settings for your site yourself. There are more details below.</p>\n<p>You can lay out your files however you wish, but the typical layout will look something like this:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>/my-engineer-site</span></div></div><div><div><span><span>    </span></span><span>- .deployment</span></div></div><div><div><span><span>    </span></span><span>- config.yaml</span></div></div><div><div><span><span>    </span></span><span>/content</span></div></div><div><div><span><span>    </span></span><span>/templates</span></div></div><div><div><span><span>    </span></span><span>/output</span></div></div><div><div><span><span>        </span></span><span>/azure</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Run the following command from the root of the folder to build your site for Azure:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>engineer</span><span> </span><span>build</span><span> </span><span>-s</span><span> </span><span>./config.yaml</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>The output will be written to <code>./output/azure/</code> by default. You can obviously change this in the Engineer settings, though note that you’ll have to make some other changes as well. Keep reading for further details.</p>\n<p>Go to your Azure portal and create a new web site. Configure the site to automatically deploy from a GitHub/Bitbucket repository and connect it to your repository. You can also choose to use manual Git deployment if you wish, or even just FTP the site content, but I recommend the GitHub auto-publish route; it’s much simpler and automatic.</p>\n<p>Now every time you push a new commit to GitHub/Bitbucket, your Azure site will update automatically with the contents of the <code>./output/azure/</code> folder. This magic works because of the <code>.deployment</code> file in your repository, which is created automatically by Engineer when you initialize a new site using <code>engineer init -m azure</code>. You can read more about this file <a href=\"https://github.com/projectkudu/kudu/wiki/Customizing-deployments\">in the GitHub wiki</a></p>\n<p>If you want to change the output folder to a different path, you can do that in your Engineer config file. However, in addition, you’ll need to tell Azure that the location of the site content within your repository is different. This is contained in — you guessed it — the <code>.deployment</code> file. Just change the value of the ‘project’ setting within that file.</p>\n<p>If you prefer, you can remove the <code>.deployment</code> file altogether and configure the site root in the Azure portal directly. This is basically the same as the <code>.deployment</code> file approach, but if you have a single repository that contains multiple Engineer sites — or other types of sites, even — then using the settings in the Azure portal is preferable. From <a href=\"https://www.hanselman.com/blog/DeployingTWOWebsitesToWindowsAzureFromOneGitRepository.aspx\">Scott Hanselman</a>:</p>\n<blockquote>\n<p>What’s nice about setting the “Project” setting via site configuration rather than via a <code>.deployment</code> file is that you can now push the same git repository containing two different web sites to two remote Azure web sites. Each Azure website should have a different project setting and will end up deploying the two different sites.</p>\n</blockquote>\n<p>That is <em>very</em> cool. Scott has more details in <a href=\"https://www.hanselman.com/blog/DeployingTWOWebsitesToWindowsAzureFromOneGitRepository.aspx\">his post on the topic</a>.</p>\n<p>Hopefully this helps you get your Engineer site up and running on Azure. As I mentioned before, I am going to be incorporating this information into the official Engineer docs as well. I’ve also gotten Engineer sites running on GitHub Pages, so I’ll cover that in a future post.</p>\n",
      "date_published": "2014-05-06T15:42:00.000Z",
      "tags": [
        "engineer"
      ]
    },
    {
      "id": "https://tylerbutler.com/engineer-v0-5-0-released/",
      "url": "https://tylerbutler.com/engineer-v0-5-0-released/",
      "title": "Engineer v0.5.0 Released",
      "content_html": "<p>I released the next major version of Engineer, version 0.5.0, last month. I didn’t quite meet all of my goals with the release (not the least of which was the release date, which was five months later than I had optimistically planned), but it’s a major one nonetheless. As usual, full release notes are available at <a href=\"https://engineer.readthedocs.org/en/master/changelog.html\">Read the Docs</a>.</p>\n<p>Unfortunately, upgrade may or may not work for you the normal way due to setuptools changes. There are more details in the <a href=\"https://engineer.readthedocs.org/en/master/upgrade.html\">upgrade docs</a>.</p>\n<p>Lots of cool stuff in this release, and more planned, so if you’ve not tried Engineer yet, now might be a good time.</p>",
      "date_published": "2014-05-05T18:11:00.000Z",
      "tags": [
        "engineer"
      ]
    },
    {
      "id": "https://tylerbutler.com/count-files-in-a-directory/",
      "url": "https://tylerbutler.com/count-files-in-a-directory/",
      "title": "Count Files In A Directory",
      "content_html": "<p>Need to count files in a directory? Try this one line of PowerShell:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>(dir </span><span>|</span><span> </span><span>where</span><span> {$_.GetType() </span><span>-match</span><span> </span><span>\"fileInfo\"</span><span>} </span><span>|</span><span> </span><span>measure-object</span><span>).count</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>You can also add a <code>-r</code> parameter (<code>-r</code> means <em>recursive</em>) to the first <code>dir</code><sup><a href=\"#fn:1\">1</a></sup> command and get a complete count of all files in all subdirectories under the current path.</p>\n<p>This comes in handy, though I <em>do</em> wish it was a little more succinct.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>And of course you can substitute <code>ls</code> for <code>dir</code> if you prefer, or even <code>Get-ChildItem</code> if you’re feeling particularly masochistic. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2014-05-05T16:04:00.000Z",
      "tags": [
        "powershell"
      ]
    },
    {
      "id": "https://tylerbutler.com/carmack-romero/",
      "url": "https://tylerbutler.com/carmack-romero/",
      "title": "Carmack & Romero",
      "content_html": "<p>I <em>love</em> this picture of John Romero and John Carmack:</p>\n<blockquote><p>Dayum! <a href=\"https://twitter.com/romero\">@romero</a> and <a href=\"https://twitter.com/ID_AA_Carmack\">@ID_AA_Carmack</a> were metal as hell back in the day <a href=\"https://t.co/tJHwuwrrGM\">pic.twitter.com/tJHwuwrrGM</a></p>— Junkboy (@jnkboy) <a href=\"https://twitter.com/jnkboy/statuses/460508315747749888\">April 27, 2014</a></blockquote>\n\n<p>It looks like a promotional shot for a new 1980’s-era fantasy-themed buddy cop TV show. I’d watch it.</p>\n<p>This reminds me that I really need to finally pick up a copy of <a href=\"/link-not-available?url=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2F0812972155%2Fref%3Das_li_ss_tl%3Fie%3DUTF8%26camp%3D1789%26creative%3D390957%26creativeASIN%3D0812972155%26linkCode%3Das2%26tag%3Dtylerbutlerco-20\">Masters of Doom</a> and read it. It’s been on my wish list for years.</p>",
      "date_published": "2014-04-28T02:22:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/aerobie/",
      "url": "https://tylerbutler.com/aerobie/",
      "title": "Aerobie",
      "content_html": "<p>The <a href=\"https://www.amazon.com/gp/product/B0000789T2/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0000789T2&amp;linkCode=as2&amp;tag=tylerbutlerco-20\">Aerobie</a> is one of my favorite things ever. I had no idea that the same guy invented the <a href=\"https://www.amazon.com/gp/product/B0047BIWSK/ref=as_li_ss_tl?ie=UTF8&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0047BIWSK&amp;linkCode=as2&amp;tag=tylerbutlerco-20\">Aeropress</a>. (Though the name is <em>kind of</em> a giveaway…)</p>",
      "date_published": "2014-04-28T02:05:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/super-stickman-golf-2/",
      "url": "https://tylerbutler.com/super-stickman-golf-2/",
      "title": "Super Stickman Golf 2",
      "content_html": "<p><a href=\"https://itunes.apple.com/us/app/super-stickman-golf-2/id585259203?mt=8&amp;ign-mpt=uo%3D2\">Super Stickman Golf 2</a> is absolutely free right now on the Apple App Store. Act fast — it’s only free for 24 hours.</p>",
      "date_published": "2014-01-10T19:50:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/retina-ipad-mini-image-retention-test/",
      "url": "https://tylerbutler.com/retina-ipad-mini-image-retention-test/",
      "title": "Retina iPad Mini Image Retention Test",
      "content_html": "<p>Courtesy <a href=\"https://www.marco.org/\">Marco Arment</a>, a <a href=\"https://www.marco.org/rmbp-irtest.html\">simple test for image retention problems</a> in your Retina iPad Mini. I found no problem with mine, but it seems reasonable to test so you can exchange it if needed.</p>",
      "date_published": "2013-12-25T00:38:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/made-by-bees/",
      "url": "https://tylerbutler.com/made-by-bees/",
      "title": "Made by Bees",
      "content_html": "<p>I absolutely love this concept packaging for honey. The “Made by Bees” tag line is fantastic, and everything about the execution is great.</p>",
      "date_published": "2013-12-24T22:18:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-wolf-among-us/",
      "url": "https://tylerbutler.com/the-wolf-among-us/",
      "title": "The Wolf Among Us",
      "content_html": "<p>If you like adventure games, or just a great story, you owe it to yourself to pick up Telltale Games’ <em>The Wolf Among Us</em>. If you’re an Xbox user, it’s free right now! Be warned, however, that the game is episodic so you’ll almost certainly end up paying for the other episodes. Definitely worth every penny though. If you’re on the fence <a href=\"https://www.polygon.com/2013/10/10/4824252/fables-the-wolf-among-us\">Polygon has a good review</a> or you can always <a href=\"https://marketplace.xbox.com/en-CA/Product/The-Wolf-Among-Us/66acd000-77fe-1000-9115-d80258411216\">try out the demo</a> on Xbox 360.</p>\n<p>You can also get <em>The Wolf Among Us</em> for Windows and Mac on <a href=\"https://store.steampowered.com/app/250320/?snr=1_5_9__205\">Steam</a> (where the season pass happens to be on sale currently) and <a href=\"/link-not-available?url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fthe-wolf-among-us%2Fid716238885%3Fmt%3D8\">iOS</a>.</p>",
      "date_published": "2013-12-24T20:38:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/the-schedule-makers/",
      "url": "https://tylerbutler.com/the-schedule-makers/",
      "title": "The Schedule Makers",
      "content_html": "<p>I found ESPN’s short film about how the Major League Baseball schedule was made for many years fascinating.</p>",
      "date_published": "2013-11-28T22:27:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/pycharm-3-0/",
      "url": "https://tylerbutler.com/pycharm-3-0/",
      "title": "PyCharm 3.0",
      "content_html": "<p>JetBrains released version 3.0 of their <a href=\"https://www.jetbrains.com/pycharm/download/index.html\">excellent Python IDE</a> a couple of weeks ago, and with it they made a free Community Edition available as well. I can’t say enough good things about PyCharm, so if you’ve been on the fence about it, it’s worth checking out the Community Edition. They’ve put together a nice <a href=\"https://www.jetbrains.com/pycharm/features/editions_comparison_matrix.html\">edition comparison chart</a> so you can see the core differences.</p>\n<p>If you’re looking to do Django/Flask/Pyramid/Google App Engine development, you’ll likely want the Pro edition, but it’s still reasonably priced in my opinion (compare it to <a href=\"/link-not-available?url=https%3A%2F%2Fstore.xamarin.com%2F\">Xamarin</a>, for example<sup><a href=\"#fn:pycharm1\">1</a></sup>) and speaking from experience, the Django support, at least, is very good. I haven’t checked out the Flask support yet, but <a href=\"http://www.xkcd2.com\">xkcd2</a> would be a good testing ground.</p>\n<p>If you want to see what a <em>real project</em> might look like in PyCharm, you can always clone <a href=\"https://github.com/tylerbutler/engineer/\">Engineer</a>. It’s been built using PyCharm since day one.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>Yes, I know it’s kind of an apples to oranges comparison given that they have different capabilities and target different languages, but they’re both IDEs… </p>\n</li>\n</ol>\n</section>",
      "date_published": "2013-10-02T21:50:00.000Z",
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/axe-cop/",
      "url": "https://tylerbutler.com/axe-cop/",
      "title": "Axe Cop",
      "content_html": "<p>What do you get when you combine a story written by a 5-year-old with animation done by his 29-year-old brother? If you answered, “Pure Awesome”, you are correct.</p>",
      "date_published": "2013-08-21T15:54:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-importance-of-documentation/",
      "url": "https://tylerbutler.com/the-importance-of-documentation/",
      "title": "The Importance of Documentation",
      "content_html": "<p>Some free advice for anyone writing software:</p>\n<p><em><strong>Providing excellent documentation is the single most important thing you can do to improve your project.</strong></em></p>\n<p>I’ve used the Python flavor of <a href=\"https://github.com/html5lib/html5lib-python\">html5lib</a> in a couple of different projects now (<a href=\"https://xkcd2.com\">xkcd2</a> and <a href=\"https://engineer.readthedocs.org\">Engineer</a>) and there’s really one thing that stands out to me: it has absolutely horrendous documentation. Well, it’s really just that it has none to speak of, and to be fair, it <em>could</em> be worse… It <em>could</em> be voluminous yet misleading or poorly organized, but instead there just isn’t any.</p>\n<p>Of course, it’d be understandable for you to think otherwise. If you visit the Github repo, you’re provided with some simple examples of creating a parser and parsing some documents. These examples are pretty standard fare — they give you a taste of what to expect but don’t give you enough to actually use the library.</p>\n<p>You’re happily informed that “More documentation is available at <a href=\"https://html5lib.readthedocs.org/\">https://html5lib.readthedocs.org/</a>” but if you head over there you’ll notice that there isn’t really much more there. The “more documentation” they speak of is a <em>single page</em> with information about “the moving parts” which just doesn’t do much to help you know how to actually use the API to do anything really meaningful.</p>\n\n<p>The only reason I cared at all about html5lib this evening was because I set up a fresh virtualenv and installed Engineer, only to be greeted by an exception when I tried to build my site. Ugh. Turns out html5lib has pushed out a couple of new versions since I last installed Engineer, and one of those updates broke my code.<sup><a href=\"#fn:docs1\">1</a></sup> It didn’t take long to narrow things down to my simple <code>html5lib.parseFragment()</code> call, which was now throwing an exception. Fixing that was relatively straightforward, though it was pretty much me just trying random arguments in the method call. Going further down the rabbit hole, though, it’s become clear that the fix is not as simple as I’d hoped, so I’m just <a href=\"https://github.com/tylerbutler/engineer/issues/63\">cauterizing things</a> for now. This actually turns out to be pretty important since right now anyone trying out Engineer 0.4.3 (the most recent version) will see an exception on their first build. Not exactly the first impression quality software should make, eh?</p>\n<h2><a href=\"#documentation-is-incredibly-important\">Documentation is incredibly important</a></h2>\n<p>The number one comment I’ve received from people trying out Engineer is, “Thanks, this is one of the best-documented systems I’ve looked at!” I’m very proud of that. One of the major contributing factors to me building Engineer in the first place was that I couldn’t get <a href=\"https://hyde.github.io/\">Hyde</a> to actually work for my purposes, and the docs were either out of date or non-existent (and <a href=\"https://github.com/hyde/hyde/issues/209\">still are</a>, apparently). I decided if I was going to build something I was going to at least write down how to use it. It took — and still takes — a lot of time, but it is totally worth it.</p>\n<p><a href=\"https://prog21.dadgum.com/177.html\">James Hague</a>, in his recent post <em>Organizational Skills Beat Algorithmic Wizardry</em>, writes:</p>\n<blockquote>\n<p>When it comes to writing code, the number one most important skill is how to keep a tangle of features from collapsing under the weight of its own complexity. I’ve worked on large telecommunications systems, console games, blogging software, a bunch of personal tools, and very rarely is there some tricky data structure or algorithm that casts a looming shadow over everything else. But there’s always lots of state to keep track of, rearranging of values, handling special cases, and carefully working out how all the pieces of a system interact. To a great extent the act of coding is one of organization. Refactoring. Simplifying. Figuring out how to remove extraneous manipulations here and there.</p>\n</blockquote>\n<p>I couldn’t agree more, and one of the reasons I think documentation is important is that it’s a way of forcing yourself to explain what you’ve built. Much like <a href=\"https://en.wikipedia.org/wiki/Rubber_duck_debugging\">rubber ducking</a> can help you debug problems in code, attempting to document what you’ve written will inevitably help you find design flaws and unnecessary complexity. This is why I think it’s incredibly important for the documentation to be written largely by the people building the thing, and that it should be written <em>alongside</em> the actual code as much as possible.<sup><a href=\"#fn:docs2\">2</a></sup></p>\n<h2><a href=\"#comments-arent-documentation\">Comments aren’t documentation</a></h2>\n<p>But what about comments? Where do they fit in? Aren’t comments the place where a developer attempts to explain to us why she’s doing things the way she is or how to call this API she’s written? While I think most of us would agree that commented code is preferable to uncommented code, the difference between comments and documentation is one of <em>scope.</em></p>\n<p>In a comment, you’re sitting right there in the source code explaining it. First of all, in many cases comments just aren’t going to be something people passing by your Github page will see. Sure, you might be using something like Sphinx that pulls comments out into actual docs, but even in that case, you still have a scope issue. At the lowest level, you might be commenting a specific piece of logic in a function that may confuse later maintainers of the code. Even zooming out a bit, you’re likely only documenting a class, or maybe a module, but fundamentally comments don’t ever really force you to explain <em>the big picture.</em></p>\n<p><a href=\"/link-not-available?url=http%3A%2F%2Fi.wearpants.org%2Fblog%2Ffrom-good-code-to-great%2F\">Peter Fein</a> writes:</p>\n<blockquote>\n<p>Great documentation tells a story. Narrative docs explain <em>why</em> to a hypothetical reader who not only has never seen our code before, but has never seen anything <em>like</em> our code. Unfortunately, programmers are generally bad at narrative –- that’s why we write code instead of fiction. Writing these docs requires getting outside your head and thinking like a total newbie. That’s tough when we’ve just spent weeks or months working with the code –- we’ve got no perspective.</p>\n</blockquote>\n<p>When I think about good documentation, narrative docs are what I imagine. Narrative docs help me develop the mental framework I need to use your stuff, and the better it is, the more likely I am to use your project and have fun doing it. You remember the story of <a href=\"https://en.wikipedia.org/wiki/Scheherazade\">Scheherazade</a>? You know, the queen who saved her own life by telling stories to the King that were so compelling he’d spare her life each day so she could continue to tell them? Documentation gives you a chance to do the same thing — tell a great story, and you’ll keep people who just wander by your project engaged enough that they actually try it out.</p>\n<p>That’s what I consider <em>real</em> documentation. Organizing docs in an intelligent and manageable way is surprisingly difficult, and I suggest diving into some other examples before trying to put your own stuff together. Luckily there are a number of great examples to check out for inspiration. Some good places to start:</p>\n<ul>\n<li><a href=\"https://docs.celeryproject.org/en/latest/index.html#\">Celery</a></li>\n<li><a href=\"https://flask.palletsprojects.com/en/stable/\">Flask</a> (frankly pretty much anything from Armin Ronacher is solid)</li>\n<li><a href=\"https://engineer.readthedocs.org\">Engineer</a> (yeah, I’m shameless)</li>\n</ul>\n<p>My basic policy is pretty simple: I assume the quality of your code is at best no better than the quality of your documentation, and I don’t invest in learning to use anything that’s not reasonably documented. No more excuses, people. Take the time to write quality documentation.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>Yeah, I suppose it serves me right for using <code>&gt;=</code> in my <code>requirements.txt</code> file instead of <code>==</code>. </p>\n</li>\n<li>\n<p>I’ve heard some people argue that documentation should even be written <em>before</em> any code, but I don’t think that’s necessary and frankly can wind up being detrimental. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2013-06-23T09:26:00.000Z",
      "tags": [
        "documentation"
      ]
    },
    {
      "id": "https://tylerbutler.com/logbook/",
      "url": "https://tylerbutler.com/logbook/",
      "title": "Logbook",
      "content_html": "<p>A Python logging framework by Armin Ronacher (Jinja2, Flask, Werkzeug) and Georg Brandl (Sphinx, Pygments)? Here… take my money! Wait, it’s BSD licensed? <strong>Sign me up!</strong></p>",
      "date_published": "2013-06-23T05:21:00.000Z",
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/speaking-of-the-mouse-wheel/",
      "url": "https://tylerbutler.com/speaking-of-the-mouse-wheel/",
      "title": "Speaking of the Mouse Wheel...",
      "content_html": "<p>A brief addendum to <a href=\"/2013/02/zoom-zoom/\">my last post</a> about zoomable interfaces… Did you know that the mouse wheel was <a href=\"https://www.ericmic.com/history%20of%20the%20scroll%20wheel.htm\">originally intended</a> to be used to zoom in and out of large Excel spreadsheets? Pretty cool.</p>",
      "date_published": "2013-02-24T20:46:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/zoom-zoom/",
      "url": "https://tylerbutler.com/zoom-zoom/",
      "title": "Zoom Zoom",
      "content_html": "<p><a href=\"https://ignorethecode.net/blog/2013/01/29/zoomable_mod_tool/\">Lukas Mathis</a> linked to <a href=\"/link-not-available?url=https%3A%2F%2Fwww.kickstarter.com%2Fprojects%2Fgaspoweredgames%2Fwildman-an-evolutionary-action-rpg%2Fposts%2F394335\">this video of a mod tool</a> Chris Taylor’s Gas Powered Games is working on for their (now canceled) Wildman Kickstarter campaign.</p>\n<p>Coincidentally, I installed <a href=\"http://en.wikipedia.org/wiki/Supreme_Commander_%28game%29\">Supreme Commander</a> just last weekend to give it another go, so the zoom-happy interface looked familiar. Indeed, Taylor and GPG are the same folks behind Supreme Commander, so it’s not a big surprise this made it into areas beyond the game.</p>\n<p>I’m not a huge fan of it, though, which may mark the first time I’ve disagreed with Mathis in a <em>very</em> long time. Obviously I haven’t used the mod tool, but in Supreme Commander the zooming in and out to navigate the battlefield gets very tiring. In the context of the game, you need to move around the field a <em>lot</em>, so zooming out, then zooming back in on the area you want to focus on is much slower than a minimap that you can click on to navigate around. If such a thing exists in the game, I couldn’t find it. Not that I looked that hard, though… Something was really busted with the audio, and the game is old enough that finding the patches is hard. Oh well.</p>\n<p>Anyway, back to the mod tool… There’s certainly a lot of interesting stuff there, but I remain skeptical of zoom being the <em>only</em> means of macro-level navigation. Unlike the game, though, perhaps moving around the field rapidly is something that you do less often in such a tool. If that’s true, then zooming might be quite nice. My objection is certainly not to the concept as a whole, but rather to it as <em>sole</em> means of navigating, and the fact that today, the primary means we have of performing such an action is with the mouse wheel. Even when scrolling web pages or documents the mouse wheel gets tiring, but at least there we have the scroll bar<sup><a href=\"#fn:zoomzoom1\">1</a></sup>.</p>\n<p>So I’m skeptical, but intrigued. Intrigued is good. Let’s see where it goes.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>I often miss the scroll bar when using an iOS device. While the ‘scroll to top by tapping the top edge of the screen’ is pretty universal these days, there’s no analagous shortcut for jumping to the bottom. Seems like I need that <em>all the time</em>. Maybe I’m weird. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2013-02-24T20:04:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/small-dog-ambassadorship/",
      "url": "https://tylerbutler.com/small-dog-ambassadorship/",
      "title": "Small Dog Ambassadorship",
      "content_html": "<p>I didn’t always consider myself a “dog person.” In fact, until a few years ago, if you’d asked me, I would have told you that cats were more my style. Self-sufficient, independent, stand-offish — these were qualities that I <em>thought</em> I admired in cats.</p>\n<p>Three or so years ago, though, after much discussion, Elizabeth and I got our first dog, a Chihuahua named Cody. And it didn’t take long for me to become a full-blown <em>dog person</em>, and now I’ve taken to calling myself a small dog ambassador.</p>\n<p>If you do consider yourself a dog person, then you probably have some preconceived notions about small breeds. “They’re really finicky; they bark a lot.” “They’re always poorly behaved.” “They’re less intelligent than other breeds.”</p>\n<p>While all of these things <em>can</em> be true, they can be true of all dog breeds (and, like people, there’s a lot of variation between individual dogs even within a breed!), and chances are you simply haven’t had a chance to really interact with small breeds that much. Elizabeth and I have been blown away by the number of times we’ve had friends or family meet our dogs (both Chihuahuas) and say, “I never really liked small dogs, but your dogs are really awesome!” We are <em>not</em> some crazy-skilled dog whisperers or something. Rather, there are two fundamental things that we keep in mind when we’re relating to our dogs.</p>\n\n<p>First, a small dog is still a dog. The biggest problem small dogs have is that they’re simply not treated like dogs, so they either get away with poor behavior because they’re small and it’s “cute,” or they’re treated like fashion accessories rather than animal companions. By treating small breeds like you would a larger breed — especially when they’re young — they wind up being much happier, and so will you.</p>\n<p>How exactly should this manifest? Well, a simple example is jumping up on people. If you have a 6’5” mastiff, you’re probably going to educate him <em>not</em> to jump up on Aunt Martha — all five feet two inches of her — when she comes over for a visit. Likewise, you need to teach your three pound chihuahua the same thing. You might not mind the behavior as much, but you need to let them know that you determine what behavior is appropriate or not, that you’re in charge, and that they need to listen to you. All of these things require training, and larger breeds benefit from this training more naturally because we’re <em>compelled</em> to break them of bad behavior. Small breeds can get a free pass on some things — for example, ours are allowed on our bed, which many dog owners consider a big no no, and for a Great Dane it would be for us too — but they still need to learn the behavioral rules, and you must be vigilant in educating them. As usual, it’s easiest when they’re young, but you can still do it when they’re older.</p>\n<p>The next thing that Elizabeth and I keep in mind is the specific role that our dogs play in our lives. Dogs have a rich history — breeds have been bred for specific roles over thousands of years. You’re probably familiar with some working breeds, such as the <a href=\"https://en.wikipedia.org/wiki/Australian_Shepherd\">Australian Shepherd</a> (bred for herding sheep and other livestock) or the <a href=\"https://en.wikipedia.org/wiki/Dachshund\">Dachshund</a> (bred for hunting small burrowing animals like badgers). But many breeds were bred for specific purposes, and you owe it to your animal and yourself to think about their breeding when interacting with them.</p>\n<p>For example, do you know why <a href=\"https://en.wikipedia.org/wiki/Dalmatian_%28dog%29\">Dalmatians</a> are so closely associated with fire trucks? Well, they were used as “dogs of war” in ancient times, but more recently they were used to nip at the heels of horses drawing fire carriages and to clear crowds of people from the street to make a path for the carriage.</p>\n<p>Now, they’re one of the most popular family breeds in the US, but you should be aware that their breeding still impacts the way they behave. They make excellent guard dogs because they are loyal (a trait most breeds share) but also very protective. If that is what you are looking for in a dog, then a Dalmatian might be a great fit for you. But you should be aware of the specific traits the breed has and know as much as you can about what to expect.</p>\n<p>For my part, when we were looking at dogs we started looking at mid-sized breeds originally. We knew we wanted a breed that was relatively low energy because neither Elizabeth nor I have the energy to take a dog out for a six-mile run every day. We also knew that we needed a breed that would be comfortable in smaller dwellings like an apartment. We’re in a house now, but at the time we weren’t sure how long we’d end up in apartments. But the biggest thing we were looking for was companionship, especially for Elizabeth.</p>\n<p>Believe it or not, I was the one who suggested Chihuahuas — on a whim — but as we researched them we realized they were a great fit. They can be high energy (our second dog, Charlie, can be pretty intense!), but their size means they can get suitable amounts of exercise even just running around the room a lot. They’re happy when they’re just hanging out with us — sitting on our lap, curled up next to our feet when we’re working at a desk, etc. They’re <em>perfect</em> companion dogs. Also, since Elizabeth suffers from chronic anxiety and some other mental health issues, the dogs are a <em>dramatic</em> help to her.</p>\n<p>They’re incredibly accurate little alarms. When we hear a noise and the dogs don’t seem worried, we know it’s nothing to check out. We do get more false positives than we’d like — mostly from Charlie, who’s only a year old — but Cody in particular is incredibly good at discerning random scary noises from actual danger. How cool is that? For someone with a chronic anxiety problem, seeing a dog just chilling out when you’re freaked out about something is a big help.</p>\n<p>Anyway, all of this is to say that I have a request of you this holiday season: you may be going to a friend’s house who has a small dog, or perhaps you’re braving the wintery winds to go visit Great Aunt Martha and her Terrible Terrier. If you find yourself in such a situation, I ask you to remember one simple thing: a small dog is a dog.</p>\n<p>And should you find yourself in the Seattle area and you’d like to meet two sweet Chihuahuas who would love to educate you on why their breed is the <em>best</em> breed, drop me a line and let me know! We’d love to have you over so you can be properly introduced to the smaller side of canine companionship!</p>\n<hr />\n<p><em>I’m going to be posting a bit more about the dogs in the coming weeks, because there’s some information I think people should know — especially about vaccines for small breeds and the importance of quality food. My apologies if you’re not a dog person (are you really <em>that</em> much of a curmudgeon?).</em></p>",
      "date_published": "2012-12-22T23:08:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/base64-encoded-sha256-hashes/",
      "url": "https://tylerbutler.com/base64-encoded-sha256-hashes/",
      "title": "Base64 Encoded SHA256 Hashes",
      "content_html": "<p>File this away in your “might come in handy some day” drawer… Here’s a quick PowerShell script to calculate the Base64 SHA256 hash of a file:</p>\n<div><figure><figcaption><span>POWERSHELL</span></figcaption><pre><code><div><div><div>1</div></div><div><span>param</span><span>(</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>[</span><span>Parameter</span><span>(</span><span>Mandatory</span><span>=</span><span>$True</span><span>,</span></div></div><div><div><div>3</div></div><div><span>            </span><span>ValueFromPipeline</span><span>=</span><span>$True</span><span>)]</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>$filePath</span></div></div><div><div><div>5</div></div><div><span>)</span></div></div><div><div><div>6</div></div><div>\n</div></div><div><div><div>7</div></div><div><span>$hasher </span><span>=</span><span> [</span><span>System.Security.Cryptography.SHA256</span><span>]::Create()</span></div></div><div><div><div>8</div></div><div><span>$content </span><span>=</span><span> </span><span>Get-Content</span><span> </span><span>-</span><span>Encoding byte $filePath</span></div></div><div><div><div>9</div></div><div><span>$hash </span><span>=</span><span> [</span><span>System.Convert</span><span>]::ToBase64String($hasher.ComputeHash($content))</span></div></div><div><div><div>10</div></div><div><span>Write-Output</span><span> ($filePath.ToString() </span><span>+</span><span> </span><span>\": \"</span><span> </span><span>+</span><span> $hash)</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>You can pipe every file in a directory to this script like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>ls </span><span>-</span><span>File </span><span>|</span><span>%</span><span> {.</span><span>\\Get-FileHash.ps1</span><span> $_}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n\n<h2><a href=\"#c\">C# </a></h2>\n<p>Or, if you prefer, a C# example:</p>\n<div><figure><figcaption><span>C#</span></figcaption><pre><code><div><div><div>1</div></div><div><span>using</span><span> </span><span>System</span><span>;</span></div></div><div><div><div>2</div></div><div><span>using</span><span> </span><span>System</span><span>.</span><span>IO</span><span>;</span></div></div><div><div><div>3</div></div><div><span>using</span><span> </span><span>System</span><span>.</span><span>Security</span><span>.</span><span>Cryptography</span><span>;</span></div></div><div><div><div>4</div></div><div>\n</div></div><div><div><div>5</div></div><div><span>static</span><span> </span><span>string</span><span> </span><span>Base64SHA256</span><span>(</span><span>string</span><span> </span><span>filePath</span><span>)</span></div></div><div><div><div>6</div></div><div><span>{</span></div></div><div><div><div>7</div></div><div><span>    </span><span>var</span><span> </span><span>hasher</span><span> </span><span>=</span><span> SHA256</span><span>.</span><span>Create</span><span>()</span><span>;</span></div></div><div><div><div>8</div></div><div><span>    </span><span>byte</span><span>[] </span><span>hashValue</span><span>;</span></div></div><div><div><div>9</div></div><div><span>    </span><span>using</span><span>(</span><span>Stream</span><span> </span><span>s</span><span> </span><span>=</span><span> File</span><span>.</span><span>OpenRead</span><span>(filePath))</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>{</span></div></div><div><div><div>11</div></div><div><span><span>        </span></span><span>hashValue </span><span>=</span><span> hasher</span><span>.</span><span>ComputeHash</span><span>(s)</span><span>;</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>13</div></div><div><span>    </span><span>return</span><span> Convert</span><span>.</span><span>ToBase64String</span><span>(hashValue)</span><span>;</span></div></div><div><div><div>14</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<h2><a href=\"#python\">Python</a></h2>\n<p>Finally, the same thing in Python. This function is a bit more involved than the other examples because it takes advantage of Python’s dynamic typing. You can pass it a string or any object with a <code>read</code> attribute. Note that this function relies on the <a href=\"https://pypi.python.org/pypi/path.py/2.4.1\">path.py</a> module, though you can remove that dependency pretty easily.</p>\n<div><figure><figcaption><span>PYTHON</span></figcaption><pre><code><div><div><div>1</div></div><div><span>import</span><span> hashlib</span><span>,</span><span> base64</span></div></div><div><div><div>2</div></div><div><span>from</span><span> path </span><span>import</span><span> path</span></div></div><div><div><div>3</div></div><div>\n</div></div><div><div><div>4</div></div><div><span>def</span><span> </span><span>calc_sha</span><span>(</span><span>obj</span><span>):</span></div></div><div><div><div>5</div></div><div><span>    </span><span>\"\"\"Calculates the base64-encoded SHA hash of a file.\"\"\"</span></div></div><div><div><div>6</div></div><div><span>    </span><span>try</span><span>:</span></div></div><div><div><div>7</div></div><div><span><span>        </span></span><span>pathfile </span><span>=</span><span> </span><span>path</span><span>(obj)</span></div></div><div><div><div>8</div></div><div><span>    </span><span>except</span><span> </span><span>UnicodeDecodeError</span><span>:</span></div></div><div><div><div>9</div></div><div><span><span>        </span></span><span>pathfile </span><span>=</span><span> </span><span>None</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>sha </span><span>=</span><span> hashlib</span><span>.</span><span>sha256</span><span>()</span></div></div><div><div><div>11</div></div><div>\n</div></div><div><div><div>12</div></div><div><span>    </span><span>if</span><span> pathfile </span><span>and</span><span> pathfile</span><span>.</span><span>exists</span><span>()</span><span>:</span></div></div><div><div><div>13</div></div><div><span>        </span><span>return</span><span> base64</span><span>.</span><span>b64encode</span><span>(pathfile</span><span>.</span><span>read_hash</span><span>(</span><span>'SHA256'</span><span>))</span></div></div><div><div><div>14</div></div><div><span>    </span><span>elif</span><span> </span><span>isinstance</span><span>(obj</span><span>,</span><span> basestring)</span><span>:</span></div></div><div><div><div>15</div></div><div><span><span>        </span></span><span>sha</span><span>.</span><span>update</span><span>(obj)</span></div></div><div><div><div>16</div></div><div><span>    </span><span>elif</span><span> </span><span>hasattr</span><span>(obj</span><span>,</span><span> </span><span>'read'</span><span>)</span><span>:</span></div></div><div><div><div>17</div></div><div><span>        </span><span>while</span><span> </span><span>True</span><span>:</span></div></div><div><div><div>18</div></div><div><span><span>            </span></span><span>d </span><span>=</span><span> obj</span><span>.</span><span>read</span><span>(</span><span>8192</span><span>)</span></div></div><div><div><div>19</div></div><div><span>            </span><span>if</span><span> </span><span>not</span><span> d</span><span>:</span></div></div><div><div><div>20</div></div><div><span>                </span><span>break</span></div></div><div><div><div>21</div></div><div><span><span>            </span></span><span>sha</span><span>.</span><span>update</span><span>(d)</span></div></div><div><div><div>22</div></div><div><span>    </span><span>else</span><span>:</span></div></div><div><div><div>23</div></div><div><span>        </span><span>return</span><span> </span><span>None</span></div></div><div><div><div>24</div></div><div>\n</div></div><div><div><div>25</div></div><div><span><span>    </span></span><span>r </span><span>=</span><span> sha</span><span>.</span><span>digest</span><span>()</span></div></div><div><div><div>26</div></div><div><span><span>    </span></span><span>r </span><span>=</span><span> base64</span><span>.</span><span>b64encode</span><span>(r)</span></div></div><div><div><div>27</div></div><div><span>    </span><span>return</span><span> r</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>This particular implementation can also be found in my <a href=\"https://pypi.python.org/pypi/propane/0.1.2\">propane</a> utility library (in the <code>filetools</code> module).</p>",
      "date_published": "2012-12-17T23:26:00.000Z",
      "tags": [
        "powershell",
        "CSharp",
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/principles-and-taste/",
      "url": "https://tylerbutler.com/principles-and-taste/",
      "title": "Principles and Taste",
      "content_html": "<p>Came across this solid advice from Thomas Jefferson recently:</p>\n<blockquote>\n<p>In matters of principle, stand like a rock; in matters of taste, swim with the current.</p>\n</blockquote>",
      "date_published": "2012-12-17T21:03:00.000Z",
      "tags": [
        "quote"
      ]
    },
    {
      "id": "https://tylerbutler.com/the-first-few-milliseconds-of-an-https-connection/",
      "url": "https://tylerbutler.com/the-first-few-milliseconds-of-an-https-connection/",
      "title": "The First Few Milliseconds of an HTTPS Connection",
      "content_html": "<p>Jeff Moser provides a nice overview of what happens when connecting to HTTPS sites. Includes a ‘short, not too scary, guide to RSA.’ This one’s going into my ‘I hope I don’t ever <em>really</em> have to understand this but if I do I will be glad I saved this’ folder.</p>",
      "date_published": "2012-12-14T21:49:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/pushing-non-default-branches-in-git/",
      "url": "https://tylerbutler.com/pushing-non-default-branches-in-git/",
      "title": "Pushing Non-Default Branches in Git",
      "content_html": "<p>Learning new things every day… Mark Longair describes some <a href=\"https://longair.net/blog/2011/02/27/an-asymmetry-between-git-pull-and-git-push/\">sitations in which <code>git push</code> won’t do what you want or expect</a>:</p>\n<blockquote>\n<p>So, what happens when you want to push your changes back to the upstream branch?  You might hope that because this association exists in your config, then typing any of the following three commands while you’re on the <code>add-menu</code> branch would work:</p>\n<ol>\n<li><code>git push github add-menu</code></li>\n<li><code>git push github</code></li>\n<li><code>git push</code></li>\n<li><code>git push github HEAD</code></li>\n</ol>\n<p>However, with the default git setup, <em>none</em> of these commands will result in <code>new-feature2</code> being updated with your new commits on <code>add-menu</code>.  What does happen instead?</p>\n</blockquote>\n<p>He’s got a very good description of why this doesn’t work like you might expect as well as an overview of options to get things configured the way you want.</p>\n\n<p>I hit up against this today. I use both private git repositories on my own server and repos on GitHub to publish and share the code more broadly. The repo in question has a <code>dev</code> branch which I periodically push to GitHub, but the GitHub version of the branch lags a bit behind my own private repo (so I can do things like <code>git rebase</code> without breaking people). The way I manage this is with a local tracking branch tracking the remote <code>github/dev</code> branch that I fast-forward when I am ready to share something more widely. That local tracking branch is unsurprisingly called <code>github_dev</code>.</p>\n<p>Anyway, I made an update to the <code>github_dev</code> branch today and wanted to push the changes out, and of course <code>git push</code> didn’t do what I expected. I ended up changing my <code>.gitconfig</code>, adding the following lines:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>[push]</span></div></div><div><div><span>    </span><span>default</span><span> </span><span>=</span><span> upstream</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>That’s the option that makes the most sense to me personally, but I understand that pushing all local tracking branches when you haven’t specified a refspec is likely confusing to most people, especially those without git experience.</p>\n<p>In fact, it appears as though the git developers agree: the default in version 1.7.11+, according to Mark, is a new mode called <code>simple</code>, which is similarly <em>not</em> what I want since it still requires the local branch and the upstream branch names to match, but it seems a reasonable compromise and the most likely to just ‘click’ for new/inexperienced users.</p>",
      "date_published": "2012-12-03T23:53:00.000Z",
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://tylerbutler.com/the-vw-group/",
      "url": "https://tylerbutler.com/the-vw-group/",
      "title": "The VW Group",
      "content_html": "<p>Peter M. De Lorenzo of <a href=\"https://www.autoextremist.com/current/2012/11/26/the-autoextremist.html\">Autoextremist</a>:</p>\n<blockquote>\n<p>We only have to look as far as the VW Group to see how things are dramatically unfolding. As most industry insiders know, the VW Group, led by the maniacal genius, Ferdinand Piech, is on an unbelievable roll right now. The VW Group boasts twelve brands from seven European countries: Volkswagen, Audi, Bentley, Bugatti, Lamborghini, Porsche (and SEAT, SKODA, Ducati motorcycles, Volkswagen Commercial Vehicles, Scania and MAN).</p>\n</blockquote>\n<p>I had no idea that the VW Group includes Bentley, Lamborghini, and Porsche.</p>",
      "date_published": "2012-12-02T08:45:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/arguing-on-the-internet/",
      "url": "https://tylerbutler.com/arguing-on-the-internet/",
      "title": "Arguing on the Internet",
      "content_html": "<p>Mark Twain:</p>\n<blockquote>\n<p>Don’t argue with an idiot. They will drag you down to their level and beat you with experience.</p>\n</blockquote>",
      "date_published": "2012-11-28T19:11:00.000Z",
      "tags": [
        "quote"
      ]
    },
    {
      "id": "https://tylerbutler.com/games-sales-2012/",
      "url": "https://tylerbutler.com/games-sales-2012/",
      "title": "Games Sales 2012",
      "content_html": "<p>It’s that time of year again! Both <a href=\"https://store.steampowered.com/\">Steam</a> and <a href=\"https://www.gog.com/pick_5_pay_10\">GOG</a> have holiday sales going on right now, and it’s a great time to pick up some great entertainment at a solid discount.</p>\n<p>In particular, GOG’s “Pick 5 &amp; Pay $10” is a total steal, <em>especially</em> if you like adventure games, and the success of Double Fine’s <a href=\"/link-not-available?url=http%3A%2F%2Fwww.kickstarter.com%2Fprojects%2F66710809%2Fdouble-fine-adventure\">Kickstarter campaign</a> says many of you do. <a href=\"https://www.gog.com/gamecard/botanicula\">Botanicula</a> on its own is worth $10 easily in my opinion, and if you haven’t yet played <a href=\"https://www.gog.com/gamecard/machinarium_collectors_edition\">Machinarium</a> you can score them both. There’s also <a href=\"https://www.gog.com/gamecard/gemini_rue\">Gemini Rue</a>, <a href=\"https://www.gog.com/gamecard/to_the_moon\">To the Moon</a>, the <a href=\"https://www.gog.com/gamecard/blackwell_bundle\">Blackwell Bundle</a>, and <a href=\"https://www.gog.com/gamecard/resonance\">Resonance</a>. I don’t know much about any of them except they’re all adventure games.</p>\n<p>If adventure games aren’t your bag, I can vouch for <a href=\"https://www.gog.com/gamecard/spacechem\">Spacechem</a> as a <em>very</em> solid puzzle game. <a href=\"https://www.gog.com/gamecard/defcon\">Defcon</a> also looks interesting though I haven’t played it personally. <a href=\"https://www.gog.com/gamecard/anomaly_warzone_earth\">Anomaly Warzone Earth</a> is an engaging twist on tower defense, while <a href=\"https://www.gog.com/gamecard/torchlight\">Torchlight</a> will bring back many (hopefully good) memories of Diablo and Diablo II.</p>\n<p>Honestly, there’s not much on the list that wouldn’t be a solid choice as far as I know, except possibly <a href=\"https://www.gog.com/gamecard/geneforge_15\">Geneforge</a> — that one looks pretty bad. But hey, maybe I’m wrong! In the end, I wound up going with:</p>\n<ul>\n<li><a href=\"https://www.gog.com/gamecard/botanicula\">Botanicula</a></li>\n<li><a href=\"https://www.gog.com/gamecard/gemini_rue\">Gemini Rue</a></li>\n<li><a href=\"https://www.gog.com/gamecard/to_the_moon\">To the Moon</a></li>\n<li><a href=\"https://www.gog.com/gamecard/symphony\">Symphony</a></li>\n<li><a href=\"https://www.gog.com/gamecard/unmechanical\">Unmechanical</a></li>\n</ul>\n<p>On the Steam side, there’s a ton to choose from, but in particular you can pick up <a href=\"https://store.steampowered.com/app/48000/\">Limbo</a> for less than $3! For the next two hours at least. If you haven’t played it, it’s required gaming. <strong>Required.</strong></p>",
      "date_published": "2012-11-22T05:06:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/malaria-vaccine/",
      "url": "https://tylerbutler.com/malaria-vaccine/",
      "title": "Malaria Vaccine",
      "content_html": "<p>Speaking of malaria, <a href=\"/link-not-available?url=http%3A%2F%2Fwww.thegatesnotes.com%2FPersonal%2FThe-Power-of-Catalytic-Philanthropy%3FWT.mc_id%3D9_20_2012_forbesessay1_tw%26WT.tsrc%3DTwitter\">Bill Gates</a>:</p>\n<blockquote>\n<p>We may even see a malaria vaccine in 2015.</p>\n</blockquote>\n<p>Amazing.</p>",
      "date_published": "2012-11-22T03:00:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/extracting-dates-and-times-from-datetime-cells-in-excel/",
      "url": "https://tylerbutler.com/extracting-dates-and-times-from-datetime-cells-in-excel/",
      "title": "Extracting Dates and Times from DateTime Cells in Excel",
      "content_html": "<p>You may, at some point in your life, find yourself needing to take some data that represents a combined date and time and extract from it <em>only</em> the date or <em>only</em> the time. And should you find yourself in such a position, then this post might just save you a bunch of time.</p>\n<h2><a href=\"#the-magic-formulae\">The Magic Formulae</a></h2>\n<p>Assume our data looks like this:</p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<table><thead><tr><th></th><th>A</th><th>B</th><th>C</th></tr></thead><tbody><tr><td><strong>1</strong></td><td>8/15/2012 3:39:59 PM</td><td></td><td></td></tr><tr><td><strong>2</strong></td><td></td><td></td><td></td></tr></tbody></table>\n<p><code>A1</code> contains our date/time, and we want to put the date only in <code>B1</code> and the time only in <code>C1</code>.</p>\n<h3><a href=\"#extracting-the-date\">Extracting the Date</a></h3>\n<p>Put this formula in <code>B1</code> to extract the date:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>=TRUNC(A1)</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Then format <code>B1</code> with whatever date format you want. Done!</p>\n<p>If you search the web for answers to this basic question, a lot of the suggestions are to use a combination of the <code>DATE</code>, <code>MONTH</code>, <code>YEAR</code> and <code>DAY</code> functions.<sup><a href=\"#fn:excel1\">1</a></sup> That works, but it’s really silly in my opinion — <code>TRUNC</code> is almost certainly faster, especially if you have a large quantity of data.</p>\n<h3><a href=\"#extracting-the-time\">Extracting the Time</a></h3>\n<p>Put this formula in <code>C1</code> to extract the time:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>=MOD(A1, 1)</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Then format <code>C1</code> with whatever time format you want. Done!</p>\n<h2><a href=\"#how-it-works\">How It Works</a></h2>\n<p>The best explanation I’ve found comes from an article titled <a href=\"https://office.microsoft.com/en-us/excel-help/redir/AM010288575.aspx?CTT=5&amp;origin=HA010287495\">How Excel Handles Dates and Times</a>. Unfortunately it’s inexplicably an MHTML file, so you might have trouble opening it.<sup><a href=\"#fn:excel2\">2</a></sup> I made a <a href=\"/link-not-available?url=https%3A%2F%2Fdl.dropbox.com%2Fu%2F12062432%2Ftylerbutler.com%2Fexcel_date_times_explanation.pdf\">PDF copy</a> of the article that should work for most people.</p>\n<p>Anyway, from the article:</p>\n<blockquote>\n<p>To Excel, a date is simply a number. More precisely, a date is a serial number that represents the number of days since the fictitious date of January 0, 1900. A serial number of 1 corresponds to January 1, 1900; a serial number of 2 corresponds to January 2, 1900, and so on. This system makes it possible to deal with dates in formulas.</p>\n</blockquote>\n<p>OK, that’s pretty straightforward. But what about times?</p>\n<blockquote>\n<p>When you need to work with time values, you simply extend the Excel date serial number system to include decimals. In other words, Excel works with times by using fractional days. For example, the date serial number for June 1, 2007, is 39234. Noon (halfway through the day) is represented internally as 39234.5.</p>\n</blockquote>\n<p>Ahhh, there we go! Everything to the left of the decimal represents the date, and everything to the right represents the time. We don’t actually need to worry about actually <em>converting</em> those numbers into dates and times — Excel handles that for us, but behind the scenes everything’s a number. And since we’re just talking about numbers, we can apply some simple mathematics.</p>\n<p>In the case of dates, we truncate the number using the <a href=\"https://office.microsoft.com/en-us/excel-help/trunc-function-HP010342970.aspx\">TRUNC</a> function, which simply lops off the decimal numbers. This is obviously fast — all Excel needs to do is forget about the decimal values.</p>\n<p>The time case is a little bit tricker. We want to do the same thing, but instead of lopping off the numbers to the right of the decimal, we want to lop off the numbers to the <em>left.</em> Thankfully, math saves us again. The <a href=\"https://en.wikipedia.org/wiki/Modulo_operation\">modulo operation</a> (available in Excel via the <a href=\"https://office.microsoft.com/en-us/excel-help/mod-function-HP010342698.aspx\">MOD</a> function) allows us to find the remainder of a division operation. Since we want the numbers to the right of the decimal only, we mod the value by 1. Since the modulo operation gives us the <em>remainder</em>, the result is the decimal portion of the original number.</p>\n<p>Again, since this is simple math and doesn’t require any fancy conversions of the data, it’s faster, not to mention simpler to write in the little Excel formula window.</p>\n<p>I hope we can all agree there is sufficient compelling evidence that math is <em>awesome.</em></p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>I’ve chosen not to regurgitate this suboptimal solution so it doesn’t continue to set a bad example… </p>\n</li>\n<li>\n<p>It appears that Chrome does support MHTML, and I think Firefox does with an extension. Regardless, the PDF is likely easier. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-11-19T00:33:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/malarious/",
      "url": "https://tylerbutler.com/malarious/",
      "title": "Malarious",
      "content_html": "<p>I have some experience with <a href=\"https://en.wikipedia.org/wiki/malaria\">malaria</a>. I grew up in <a href=\"https://en.wikipedia.org/wiki/Papua_New_Guinea\">a country</a> where it’s still a major concern,<sup><a href=\"#fn:malaria1\">1</a></sup> and I’ve had seven bouts of it over my lifetime. It’s not a terribly frightening disease unless you either don’t get treatment or are unlucky enough to contract a strain that is resistant to medications like <a href=\"https://en.wikipedia.org/wiki/Chloroquine\">Chloroquine</a> or <a href=\"https://en.wikipedia.org/wiki/Quinine\">Quinine</a>, which has unfortunately become more common over the years. When I tell people I’ve had it many times they tend to look at me like I survived cancer or walked out of a burning building unscathed. While it’s certainly not an illness I’d wish on anyone, it is not terrible <em>provided you get treatment.</em></p>\n\n<p>Treatment and prevention is the key, and unfortunately due to the relative ease with which it spreads in areas dense with mosquitoes, it still kills many many people worldwide. One of the reasons the Gates Foundation has <a href=\"https://www.gatesfoundation.org/malaria/Pages/home.aspx\">focused on malaria</a> is that by the numbers, it’s still one of the most widespread and impactful diseases worldwide.</p>\n<p>One thing many people don’t realize is that in areas where preventable or treatable diseases are prevalent along with poverty, economic hardship, and lack of education, the market is rife with opportunities for scammers. From Wikipedia:</p>\n<blockquote>\n<p>The WHO said that studies indicate that up to 40% of artesunate based malaria medications are counterfeit, especially in the Greater Mekong region and have established a rapid alert system to enable information about counterfeit drugs to be rapidly reported to the relevant authorities in participating countries.</p>\n</blockquote>\n<p>Heartbreaking.<sup><a href=\"#fn:malaria2\">2</a></sup></p>\n<p>Anyway, all of this is just prologue to my real point, which is that you should consider supporting <a href=\"/link-not-available?url=http%3A%2F%2Fwww.collegehumor.com%2Fmalarious\">Malarious</a>. There are many causes to contribute to in the world, but malaria prevention and treatment is one of the most important in my book.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>In fact, it is the number one cause of illness and death in PNG, at least as of 2003. </p>\n</li>\n<li>\n<p>Sadly, as AIDS is rapidly becoming <a href=\"https://en.wikipedia.org/wiki/HIV/AIDS_in_Papua_New_Guinea\">more of a problem in PNG</a>, my parents and sister report that the number of scammers selling fake ‘home-brew’ medications has taken a sharp upturn, undermining legitimate education and distribution of actual cheap preventative measures like condoms. Makes my blood boil to say the least… </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-09-07T20:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/blog-portability/",
      "url": "https://tylerbutler.com/blog-portability/",
      "title": "Blog Portability",
      "content_html": "<p>MacDrifter on blog portability:</p>\n<blockquote>\n<p>In my continuing efforts to migrate off of WordPress, I now understand some of my biggest mistakes and flaws.</p>\n</blockquote>\n<p>I’m proud to point out that <a href=\"/projects/engineer/\">Engineer</a> helps avoid a number of these. Let’s examine them.</p>\n\n<p><strong>1. Always save the original Markdown in text files.</strong></p>\n<p>Check. Engineer always keeps your raw post around — the formatting is done during build time.</p>\n<p><strong>2. Avoid plugins that appear to make life easier by reformatting content for viewing.</strong></p>\n<p>Engineer doesn’t require you to use any such plugins, but it doesn’t prevent you either; it’s your choice.</p>\n<p><strong>3. Footnotes are hard to convert from HTML to MultiMarkdown.</strong></p>\n<p>This simply isn’t a problem in Engineer because the raw Markdown is stored, not just the HTML (see #1).</p>\n<p><strong>4. Use HTML character codes for non-ASCII characters.</strong></p>\n<p>Again, your call here. Engineer will happily handle unicode characters, but other systems might not, so the advice is sound.</p>\n<p><strong>5. Choose a good URL structure up front.</strong></p>\n<p>Engineer uses a date-based one (<code>.../2012/08/05/post_title.html</code>) by default, but it’s not currently customizable. I’m considering adding that in a future version.</p>\n<p><strong>6. Relative links are better than absolute links.</strong></p>\n<p>Ummm, yeah. This shouldn’t ever be a problem in Engineer. With the exception of the RSS feed, all links in Engineer are relative unless you specifically hard-code them.</p>\n<p><strong>7. Don’t go ape-shit with tags and categories.</strong></p>\n<p>Because Engineer doesn’t use tags for any primary navigation or organization, there’s no pressure to add a bunch of tags. I always felt like I needed categories, and to a lesser extent, tags, in WordPress. Categories may eventually make their way into Engineer, but if they do, you should definitely follow this advice.</p>\n<p><strong>8. Code should go in code blocks.</strong></p>\n<p>When I wrote this originally, my response for this tip was simply, “There are systems that don’t do this? WTF?” Before I hit ‘publish,’ though, I decided to double-check my assumption that <a href=\"https://pygments.org/\">Pygments</a> already did this. Unfortunately, I was wrong.</p>\n<p>It looks like Pygments’ <a href=\"https://pygments.org/docs/formatters/\">default HTML formatter</a> outputs <code>&lt;pre&gt;</code> tags with <code>&lt;span&gt;</code> tags inside — not <code>&lt;pre&gt;&lt;code&gt;</code> like I thought. However, on the bright side, there’s a relatively simple way to write a customized formatter (there’s even an example on the Pygments site), so assuming I can get it wired up properly to <a href=\"/link-not-available?url=http%3A%2F%2Fpackages.python.org%2FMarkdown%2Findex.html\">Python-Markdown</a>, I should be able to add it. I’ve <a href=\"https://trello.com/c/QeelOqyG\">put it on the (ever-growing) list</a>.</p>\n<p><strong>9. Don’t hard-code formatting into a post.</strong></p>\n<p>This is another one of those “you’re on your own” things. Often the formatting you might need in a post within Engineer is related to images, so there are some standard styles available for handling those common cases. But I have and will continue to generally try and avoid this. Themes should define the styles, not the post itself.</p>\n<p><strong>10. Keep the comments in the comments.</strong></p>\n<p>Since Engineer doesn’t support comments, this doesn’t really apply. If you add your own comments system, like Disqus, then the onus is on you.</p>\n<p>All in all not too bad! Engineer sites should be very portable, and with some more compatibility work, you should be able to switch pretty easily to and from Jekyll if you want. Consider giving Engineer a try… you might like what you see!</p>",
      "date_published": "2012-08-19T03:37:00.000Z",
      "tags": [
        "engineer"
      ]
    },
    {
      "id": "https://tylerbutler.com/engineer-0-3-1-released/",
      "url": "https://tylerbutler.com/engineer-0-3-1-released/",
      "title": "Engineer 0.3.1 Released",
      "content_html": "<p>I pushed out a new version of Engineer — 0.3.1 — this weekend. While 0.3.1 is a minor release to fix a couple of major bugs that slipped through, 0.3.0 was a pretty major release. A majority of the new stuff is under the covers or developer-focused, so it might not seem like a big deal — but it is. With this release I think Engineer is stable enough for me to start hyping it a bit more, so you can anticipate that over the next few months.</p>\n<p>The full <a href=\"https://engineer.readthedocs.org/en/latest/changelog.html#version-0-3-0-july-22-2012\">release notes</a> go into more details about the specifics, but there are two major features I added that are particularly interesting from a development perspective: the new plugin architecture, and the Jekyll/Octopress compatibility work.</p>\n\n<h2><a href=\"#plugin-architecture\">Plugin Architecture</a></h2>\n<p>Before I go into details about the plugin architecture, a disclaimer: I’m not yet completely happy with it, and it’s still a work in progress.</p>\n<p>Since Engineer is a glorified text parser, it makes sense to have some degree of customization over exactly how that parsing happens. While Engineer already has a number of options and ways to customize exactly how it works, there’s always room for more. Building a plugin system into the application forces me to keep the customization interfaces clean and well-defined, plus opens up a whole world of use cases for Engineer that I won’t be able to imagine by myself.</p>\n<p>I first tackled the plugin architecture in <a href=\"https://engineer.readthedocs.org/en/latest/changelog.html#version-0-2-4-may-27-2012\">version 0.2.4</a>, with theme plugins. My idea was to provide a way to add themes to Engineer globally. Wrapping themes in a Python package made sense, since that way themes could be installed the same way Engineer itself is installed.</p>\n<p>That was a fine system, and relatively simple (if not completely overkill since themes are really just HTML/CSS/JavaScript plus a little metadata file — not Python), but I really wanted a unified plugin system that worked similarly across all different plugin types.</p>\n<p>In order to support post breaks or ‘teaser’ content on a rollup page, I needed to break a post into two different pieces: the teaser content, and the full post. One option was to build a plugin to the Python Markdown engine. That seemed like overkill, plus frankly I didn’t want to go and learn a new API just for something simple. Also, it was unlikely that all future processing on post content I might want to do would be possible to do in a Markdown plugin, not to mention that I eventually want to support additional post formats (Textile, for example).</p>\n<p>The second option was to simply bake the functionality into Engineer itself and add a new configuration option. This would have been fine, but it also seemed like a really good opportunity to work out a plugin architecture and use the post breaks feature, along with themes, as a test of the design.</p>\n<p>After quite a bit of research and thought, I boiled down the design needs to two basic requirements. In order for a plugin system to work, you need to solve the following problems:</p>\n<ol>\n<li>The plugin has to be registered or discovered. Somehow, Engineer needs to know that the plugin code exists so that it can load it and run it.</li>\n<li>Engineer needs to actually run the right plugin types at the right points in its execution.</li>\n</ol>\n<p>Both of these are pretty obvious, and the second one isn’t that challenging. There are different types of plugins, and those plugins get called based on their type wherever I see fit in the Engineer execution. Since I am defining the plugin’s capabilities (for a given type), then this is just simple common-sense coding.</p>\n<p>The first problem, though, is somewhat more involved. Just <em>how</em> would Engineer know a plugin existed? How would it know what packages to load and what functions to call or classes to instantiate. Clearly I would need an interface defined, but should it be a class? Just a function? Something else? And even then, how will my code <em>find</em> the plugin code?</p>\n<p>One option was to take a page from <a href=\"/link-not-available?url=https%3A%2F%2Fdocs.djangoproject.com%2Fen%2F1.4%2Fref%2Fsettings%2F%23std%3Asetting-INSTALLED_APPS\">Django</a> and require the modules or classes be provided in a settings file,<sup><a href=\"#fn:eng1\">1</a></sup> then import them at runtime, but that felt a little clunky. I want it to be possible to simply install the plugin and use it, especially for simple plugins that don’t require configuration (like themes and the post breaks plugin).</p>\n<p>After further research, I came across a very simple model from <a href=\"/link-not-available?url=http%3A%2F%2Fmartyalchin.com%2F2008%2Fjan%2F10%2Fsimple-plugin-framework%2F\">Marty Allchin</a> that seemed to meet my needs. I can define a class that defines a type of plugin, then plugin implementers can subclass that plugin parent class. The ‘magic’ of Marty’s method is that all that’s required for plugins to get ‘loaded’ is that the module containing them be imported. Once that happens, the plugin class is visible to Engineer. See <a href=\"/link-not-available?url=http%3A%2F%2Fmartyalchin.com%2F2008%2Fjan%2F10%2Fsimple-plugin-framework%2F\">Marty’s post</a> for more details about how it works specifically, or you can look at <a href=\"https://github.com/tylerbutler/engineer/blob/master/engineer/plugins.py\">plugins.py</a> to see my adapted implementation (I didn’t really change anything though).</p>\n<p>That is very very awesome, and works especially well for built-in Engineer plugins since their modules are always loaded, but I still had the problem of loading plugins whose modules I don’t know about at runtime. I still needed the <a href=\"https://engineer.readthedocs.org/en/latest/settings.html#engineer.conf.EngineerConfiguration.PLUGINS\">PLUGINS setting</a> to tell me which modules contained plugins so they could be loaded. Ultimately I <em>really</em> want plugins to be capable of working with no user configuration unless it’s needed due to the nature of the plugin.</p>\n<p>Luckily, with some help from the Pygments source, I was able to find out about setuptools’ <a href=\"http://peak.telecommunity.com/DevCenter/setuptools#extensible-applications-and-frameworks\">entry points</a>, which work perfectly for this purpose. If you’re developing an Engineer plugin, you can notify Engineer about your plugin modules using the <code>engineer.plugins</code> entrypoint.</p>\n<p>This is covered in more detail in the <a href=\"https://engineer.readthedocs.org/en/latest/dev/plugins.html#loading-plugins\">Engineer documentation</a>, but basically you’d add something like this to your plugin’s <code>setup.py</code> file:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>entry_points </span><span>=</span><span> {</span></div></div><div><div><div>2</div></div><div><span>'engineer.plugins'</span><span>:</span><span> [</span><span>'post_processors=dotted.path.to.module'</span><span>,</span></div></div><div><div><div>3</div></div><div><span>                        </span><span>'themes=another.module.path'</span><span>]</span><span>,</span></div></div><div><div><div>4</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>If you do that, then when your Python package is installed, it will advertise its modules to Engineer such that they can be imported, and then your plugins will run. Magic!</p>\n<p>Like I said earlier, though, it’s still a work in progress. In particular, some of the limitations of the plugin system include:</p>\n<ul>\n<li>There is no notion of ordering plugins to run in a specific order. Currently this is not a problem, but I anticipate it becoming one fairly soon since plugins may eventually step on each others’ toes. I’m not sure how I’m going to address this problem yet.</li>\n<li>There is no general purpose ‘enable/disable plugin’ feature — if it’s installed, it’ll run. Individual plugins can of course have their own toggles using custom settings, but it’s not built-in. I might leave this as something individual plugins will need to solve on their own, or I might implement a general-purpose ‘enabled/disabled by default’ flag a plugin developer can set. I have to think about this more. Again — work in progress.</li>\n</ul>\n<p>Despite these limitations, the general plugin model is quite useable as-is, and I have a couple of new features I plan to add in version 0.4.0 that I intend to implement as plugins to further prove out the system.</p>\n<h2><a href=\"#jekylloctopress-compatibility\">Jekyll/Octopress Compatibility</a></h2>\n<p>When I started developing Engineer, I was heavily inspired by <a href=\"https://jekyllrb.com/\">Jekyll</a> and <a href=\"https://octopress.org/\">Octopress</a> (as well as <a href=\"/link-not-available?url=http%3A%2F%2Fhyde.github.com%2F\">Hyde</a> and <a href=\"https://github.com/marcoarment/secondcrack\">Second Crack</a>). There are a number of things I don’t like or find hard to understand about those applications, but they certainly do many things right.</p>\n<p>But one of the biggest things Jekyll and Octopress have going for them is relative ubiquity, at least amongst the people that use static site generators (a much smaller crowd than it should be!). I honestly hadn’t considered doing any specific compatibility work, though, until I used <a href=\"https://markedapp.com\">Marked</a> on the Mac. Marked is basically a Markdown previewer for the Mac. You type Markdown in one window, Marked shows you the output in another. Now it does other things too but that’s the core thing it does.</p>\n<p>Anyway, there are other Markdown previewers/editors — notably <a href=\"http://markdownpad.com/\">MarkdownPad</a> for Windows — but Marked has a unique feature that you can turn on that will ignore Jekyll metadata for the purposes of previewing a document. That means that if you’re editing a Jekyll post, Marked will hide the post metadata (Jekyll calls this ‘front matter’) in its preview. Contrast this to MarkdownPad, for example, which assumes the metadata is part of the document and renders it as Markdown.</p>\n<p>Obviously this is not a required feature since Engineer metadata doesn’t <em>break</em> Markdown rendering, but it’s kind of nice to have when you’re writing/previewing a lot of posts. So I excitedly turned it on and loaded an Engineer post… and it didn’t work. The problem, of course, is that Jekyll requires that metadata (sorry, ‘front matter’) be ‘fenced’ within two YAML document separators, like so:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>---</span></div></div><div><div><span>metadata goes here...</span></div></div><div><div><span>---</span></div></div><div><div>\n</div></div><div><div><span>post content goes here...</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Engineer, on the other hand, required, (prior to version 0.3.0) that that first <code>---</code> not be there. Fundamental incompatibility. When I originally made the decision to not require the first <code>---</code> it was for simplicity. I didn’t need it for parsing, and it felt silly to <em>require</em> users to always type it, so I just left it out. However, this meant two things:</p>\n<ol>\n<li>I couldn’t use Marked’s nice Jekyll-compatibility feature for Engineer posts.</li>\n<li>More importantly, users wouldn’t be able to easily migrate from Jekyll to Engineer.</li>\n</ol>\n<p>While getting people to use Engineer over Jekyll is not an explicit goal, I believe there’s room for more than one static site generator, and to the extent that I can encourage portability both to and from Engineer, I want to. So I addressed this in version 0.3.0: Engineer posts can now have Jekyll-style ‘fenced’ metadata, or classic Engineer-style single <code>---</code> metadata. In addition, during normalization, Engineer will maintain the style of your source file. This isn’t merely a ‘migrate people to Engineer from Jekyll’ feature. Rather, it’s a ‘increase compatibility and portability of your site’ feature.</p>\n<p>That’s the extent of the compatibility features in version 0.3.0, but I am going to keep looking for ways to increase the compatibility. In particular, some of the metadata keywords are different (e.g. Jekyll has categories <em>and</em> tags), and I’m looking into handling things like that as an <a href=\"https://trello.com/c/GIYzDoMz\">optional post-processor</a> (using the new plugin system, of course!). There’s a lot of interesting stuff to look into, and I’d love input. Send it my way via a GitHub issue, or fork away and go nuts on the source yourself!</p>\n<p>And if you have a website, consider using Engineer!</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>I actually ended up implementing this solution anyway since it seemed useful. See the <a href=\"https://engineer.readthedocs.org/en/latest/settings.html#engineer.conf.EngineerConfiguration.PLUGINS\">PLUGINS setting</a>. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-08-07T09:59:00.000Z",
      "tags": [
        "engineer"
      ]
    },
    {
      "id": "https://tylerbutler.com/ten-things-steve-bennett-hates-about-git/",
      "url": "https://tylerbutler.com/ten-things-steve-bennett-hates-about-git/",
      "title": "Ten Things Steve Bennett Hates About Git",
      "content_html": "<p>For whatever reason, I’ve seen this relatively old article from Steve Bennett linked to by several people over the last day or so. It’s definitely worth a read, and I agree with a lot of it. But I think Bennett misses the mark in a few places.</p>\n<p>First, the things I agree with:</p>\n<h2><a href=\"#yes-the-command-line-and-official-git-documentation-suck\">Yes, the command line and official Git documentation suck.</a></h2>\n<p>I’ve <a href=\"/2012/06/git-vs-mercurial-again/\">complained about this before</a>. Software engineers like to believe that if we know how to do one thing, then we can work out how to do all similar things quickly by applying that knowledge. After all, software engineering is advanced problem solving and critical thinking, so applying previous knowledge to current problems is something we’re pretty good at.</p>\n<p>Frankly, the Git command line breaks this all the time. Some commands need some flags; others don’t. Conceptually similar operations require different top-level commands (not just flags) depending on what you’re doing that operation on.<sup><a href=\"#fn:1\">1</a></sup> It’s madness, and I think it’s safe to say that the command line isn’t <em>designed</em>; it’s merely <em>implemented.</em></p>\n\n<p>Similarly, the documentation sucks. I have found that a major challenge with documenting an application, even <a href=\"/projects/engineer/\">one whose primary interface is a command line</a>, is documenting things for both a <em>user</em> and a <em>potential contributor</em>. With <a href=\"/projects/engineer/\">Engineer</a>, I try to keep the two types separate, but it’s a challenge. Arguably open-source software tends to have this problem more — or at least it’s more publically evident<sup><a href=\"#fn:2\">2</a></sup> — since the point of the software is two-fold: to be useful to users, and to attract additional developers to contribute.</p>\n<p>In Git’s case, the official documentation seems to be more focused on potential contributors, or at least people who’ve dug in enough to learn Git internals. But it’s hardly consistent, even when viewed through that lens.</p>\n<h2><a href=\"#yes-the-git-conceptual-model-is-complicated\">Yes, the Git conceptual model is complicated.</a></h2>\n<p>And yeah, unfortunately eventually you’re exposed to all of it. And yeah, it sucks. As I’ve <a href=\"/2012/06/git-vs-mercurial-again/\">said before</a>, “I think part of the problem I have with Git, though, is that is often <em>does</em> feel necessary to understand how it works.”</p>\n<p>Personally I think this can be addressed with better visual tools rather than using the command line itself. For example, as I pointed out in my previous comparison of Mercurial and Git, the stage itself is abstracted away by many Git tools:</p>\n<blockquote>\n<p>I do not understand the allure of the stage. Given how easy Git makes branching, and how straightforward it is to commit, ammend the commit, <code>rebase</code> branches, rewrite history with interactive <code>rebase</code>, etc. what exactly is the advantage of the stage? Most tools don’t even expose it — it’s just there behind the scenes — so I’m not sure why people make such a big deal about it all the time.</p>\n</blockquote>\n<p>That said, the sheer volume of things you can <em>do</em> with Git make it extremely frightening to unfamiliar developers, and since no Git tool does <em>everything</em> Git does, eventually you end up needing to use the command line for something, and you’re right back at square one.</p>\n<p>Now let’s talk about the places where I disagree with Bennett.</p>\n<h2><a href=\"#git-is-not-unsafe-version-control\">Git is not “unsafe version control.”</a></h2>\n<p>OK, this is blatant emotional manipulation. “Git is unsafe!” “Git will eat all of your code and you’ll never ever be able to get it back!” “Arghhh! Run for the hills!” Come on. I read a headline like “Unsafe version control” and I feel like I am watching an 11 o’clock news report about “Escalators: The silent killer.”</p>\n<p>In his <a href=\"https://www.youtube.com/watch?v=4XpnKHJAok8\">Google tech talk</a>, Torvalds talks a lot about the fact that Git’s decentralization means that often changes you might have eradicated will still exist in another person’s clone of your repository. OK, fine, that’s true, (and can be a good or bad thing depending on one’s perspective) but I don’t think that relying on there being another clone with changes that you care about puts many people’s minds at ease. In fact, I would say fairly confidently, though I don’t have any data to back this up, that the lion’s share of projects stored in Git do <em>not</em> have a great volume of clones sitting on computers around the world. Relying on other people’s clones is not good backup practice in my opinion.</p>\n<p>However, Git has a <em>ton</em> of safeguards in place to prevent you from doing damage. First, if you don’t push, no one even sees your mistake. Second, if you try to push, Git by default won’t let you if you have divergent changes (as you will if you do a <code>rebase</code> in many cases, for example). You have to explicitly tell it to force push in that scenario. Those are two rather silly examples, but there are others. The reflog itself can help you correct damage you’ve done.</p>\n<p>I think it’s fair to say that it’s easier than it should be to get in a state you don’t want to or didn’t expect to be in, but it’s unfair to say that those are unrecoverable situations. I also think that one’s feelings about Git’s behavior has more to do with one’s past experience than it does with Git itself. I’ll get back to that notion in a moment.</p>\n<h2><a href=\"#comparing-git-to-subversion-or-cvs-directly-is-dangerous\">Comparing Git to Subversion or CVS directly is dangerous.</a></h2>\n<p>It wasn’t until his tenth and final point that I really understood why Bennett is getting hung up on some things:</p>\n<blockquote>\n<p>The point of working on an open source project is to make some changes, then share them with the world. In Subversion, this looks like:</p>\n<ol>\n<li>Make some changes</li>\n<li>svn commit</li>\n</ol>\n<p>If your changes involve creating new files, there’s a tricky extra step:</p>\n<ol>\n<li>Make some changes</li>\n<li>svn add</li>\n<li>svn commit</li>\n</ol>\n<p>For a GitHub-hosted project, the following is basically the bare minimum:</p>\n<ol>\n<li>Make some changes</li>\n<li>git add (not to be confused with svn add)</li>\n<li>git commit</li>\n<li>git push</li>\n</ol>\n<p>Your changes are still only halfway there. Now login to GitHub, find your commit, and issue a “pull request” so that someone downstream can merge it.</p>\n</blockquote>\n<p>Ummm, OK… I’ll forgive the conflation of GitHub with Git — they are <em>not</em> the same thing — because, hey, most Git code in the world today is probably hosted on GitHub in some fashion. But this comparison is fundamentally flawed. Look, we’re working with a decentralized system. In the old world, committing and sharing were analogous, because it wasn’t possible to decouple the two actions. Now it is. That brings with it tremendous value and flexibility. But it does mean that there are two separate steps:</p>\n<ol>\n<li>Writing/committing/adding/merging/blah blah blah code.</li>\n<li><em>Sharing</em> that code with other people.</li>\n</ol>\n<p>You absolutely must understand that Git (and Mercurial) are not centralized systems. They just aren’t. They weren’t meant to be. I believe that the decentralized model is better, but if you don’t, that’s fine. But the danger in comparing a centralized system to a decentralized one is that fundamental assumptions about behavior can’t be made. <em>Of course</em> Git doesn’t automatically throw your changes up for the world to see the moment you commit them. You haven’t said they’re ready to share.</p>\n<p>Now admittedly this is more steps than the Subversion model — if your intent is to immediately share all code you commit. That feels so incredibly dangerous to me that I would freak out a little bit if working on a system like that, but… that’s just me.</p>\n<h2><a href=\"#lets-talk-about-defaults\">Let’s talk about defaults.</a></h2>\n<p>In software design, we think an awful lot about so-called ‘intelligent defaults.’ The default settings of an application should work for 80-90% of users’ needs. Fewer settings = fewer choices = better experience. This applies just as well to a command line application as it does to an app with a GUI.</p>\n<p>But choosing intelligent defaults is incredibly difficult, even when your application’s purpose is narrowly scoped. In the case of version control, as Bennett points out, there are myriad different ways to handle your development process. While some of that is informed by your VCS, ideally you’ll be able to make your VCS match your process, not the other way around. Mercurial actually has <a href=\"/link-not-available?url=http%3A%2F%2Fmercurial.selenic.com%2Fwiki%2FMultipleCommitters\">an overview of some of the common models</a> and how Mercurial can be used within them.</p>\n<p>So with this in mind, Git has an impossible problem, because the nature of development is that <em>there is no one way to do things.</em> Heck, one of the reasons Torvalds wrote Git (beyond the Bitkeeper issues) is that the current VCS solutions didn’t meet the needs of the kernel development process.</p>\n<p>Whatever defaults Git chooses (even if it miraculously became consistent overnight, which it won’t because of that nasty little thing we all despise as engineers but continue to care about on our users’ behalf called ‘backwards compatibility’) won’t be appropriate for a lot of — possibly a majority of — projects. And since you, the new contributor, don’t have a lot of say in how the development model of the project works, you don’t have a lot of say in how Git — or Subversion, or Mercurial, or whatever other VCS — is used there either.</p>\n<p>“But couldn’t they add a mode to Git that would emulate Subversion for SVN users and Mercurial for Mercurial users etc. etc,” you might say? Perhaps, though <a href=\"/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fb%2Foldnewthing%2Farchive%2F2003%2F07%2F28%2F54583.aspx\">I’m not sure it would work out that well</a>. <a href=\"/link-not-available?url=http%3A%2F%2Fpeople.gnome.org%2F~newren%2Feg%2F\">Easy GIT</a> seems like an effort for Subversion folks that’s worth looking at more deeply, but its mere existence serves as proof that the notion of ‘intelligent defaults’ depends a heck of a lot on your perspective.</p>\n<p>Having written all of this, I think Bennett has an excellent point when he writes — in <a href=\"https://stevebennett.me/2012/02/24/10-things-i-hate-about-git/#comment-82\">his reponse to a comment</a>:</p>\n<blockquote>\n<p>The annoying thing about VCS, compared to say, an editor, is that the basic rule of “if you don’t like it, use something else” doesn’t apply. (So in my case, since I never start open source projects, I’ll never get to choose a Git alternative.)</p>\n</blockquote>\n<p>That truly is a problem. You have to play by other people’s rules if you want to join their game, which means you have to learn — or relearn — some things. I personally welcome learning new things as a general rule, but perhaps I am unique or unusual in that regard.</p>\n<h2><a href=\"#git-history-is-not-a-bunch-of-lies\">Git history is <em>not</em> a bunch of lies.</a></h2>\n<p>First, let me disclose my bias here. I am <strong>sick and tired</strong> of this ‘indelible history’ idea that people seem married to. When your mom asks you what you did this weekend do you tell her that you hooked up with two chicks from the bar for a drunken tryst? Do you go into great detail about the depths of depravity you participated in that night? Probably not. The ‘radical honesty’ thing, when it comes to source history, is detrimental. Some ‘lies’ are useful.</p>\n<p>Likewise, I don’t need to expose you to my mental process for development. I’ve said before:</p>\n<blockquote>\n<p>I am <em>all over the place</em> when I code. While I believe that source history should be the <em>‘truth,’</em> I also think that above all, it should be as easy to follow as possible. Commit messages are an important part of this, of course, but cleaning up your local history before you share it is critical too. You can go back through and tie up loose ends, remove unnecessary code changes you made, etc.</p>\n</blockquote>\n<p>If I’m writing an article for tylerbutler.com, I write write write write write. Then I take a break and I edit. And I repeat that process until I think things are in good enough shape to share with people. Obviously I’ll make some more edits after I’ve shared it if I or others find flaws after the fact. But if I missed a comma before I shared the article, you don’t need to know about it. Similarly, I don’t sit here at my desk in fear, never hitting Ctrl-S, because I’m worried that everything is not <em>just right</em> and delaying saving my work.</p>\n<p>But in the centralized VCS world, that’s what writing code is like, because there are two intents implied by committing. One, that the change is sound, and two, that the change is ready to be shared with everyone. If every time I saved a draft article it went live immediately on my site it would dramatically change the way I write. I wouldn’t save very often. I would save my work somewhere else then copy it to the site when it was done. I would essentially work around the save-goes-live-immediately system because it’s dangerous. Or worse, I would work within its bounds and <em>never</em> save until everything was perfect, risking an awful lot of lost work.</p>\n<p>I <em>love</em> <code>rebase</code>, and the interactive variety, specifically because it lets me ‘save’ often with the ability to edit my insanity after the fact. It let’s me vomit out ideas then clean them up later. Am I the only person in the entire world that works this way? Sometimes I definitely feel like it.</p>\n<p>Now, you can argue that for my use-case patches are a better solution, but I prefer just committing them directly to Git for a very simple reason: I can push the changes. “But wait!” you’ll say. “Pushing half-baked changes is what you’re trying to avoid! Haha! You’re such a hypocrite!” Well, no, not exactly. I said I don’t want to <em>share</em> half-baked changes. And I know it’s a little crazy, but sharing and <code>git push</code> are not the same thing.<sup><a href=\"#fn:3\">3</a></sup></p>\n<p>See, I develop on several different machines in several different locations. Try as I might, I can’t always complete a piece of development on a single machine. So I need to synchronize my in-progress work. One way to look at it is that I need to share with myself.</p>\n<p>Sharing with myself is different. There are different rules and different intentions. Git lets me do this easily by having a separate repository clone that is all mine. This is one thing I think GitHub could make a lot better, but as it stands I have my own Git repositories on <a href=\"/link-not-available?url=http%3A%2F%2Fwww.webfaction.com%2F%3Faffiliate%3Dtylerbutler\">WebFaction</a>, and I push to them whenever I want. They’re mine. And my changes follow me anywhere I go (sort of — there are some problems I have which I’ll get into another time). But when I’m ready to <em>share</em> my changes — not push — then I <code>git push</code> to the central shared repository. And you don’t know — nor should you even care — that I made those changes over the course of three days on six different machines. By the time the changes get to you, they’re tidy, they’re tightly scoped, and they’re easy to understand. Do you <em>really</em> not hold other developers to that same standard?</p>\n<p>Version history is absolutely important. When working with a group of developers, it’s essential. But while I can’t promise that I’ll always share perfect and bug-free code with you, I <em>can</em> promise that I won’t expose you to the insanity that is going on inside my head, and in the code-base, when I’m coding up a fix.</p>\n<p>At this point I have digressed quite a bit. But let me leave you with one final thought, given that it seems several of Bennett’s issues stem from his centralized VCS background:</p>\n<h2><a href=\"#as-a-developer-you-must-learn-to-use-decentralized-version-control-systems\">As a developer you <strong>must</strong> learn to use decentralized version control systems.</a></h2>\n<p>There is no excuse. It is a basic tool of your profession. Few carpenters get by without learning how to use a lathe; you can’t get by without understanding DVCS. I don’t care if you love SVN, or you use TFS at work, or you think Git is terrible because its command line is an exercise in insanity. <strong>Learn something.</strong> Mercurial is fine. Git is fine. Heck, even Bazaar is fine as far as I’m concerned. But, for just a moment, forget everything you know about version control and get a grasp of some of the basic concepts of DVCS.</p>\n<p>Joel Spolsy’s <a href=\"https://hginit.github.io/\">Hg Init</a> site is a good place to start. Yeah, it’s Mercurial-centric, but that’s fine. The concepts are similar to Git or any other DVCS. And if you like what you see, perhaps you’ll try using Mercurial instead of Git. That’s OK too. For the brain-damaged among you, Joel even has <a href=\"https://hginit.github.io//00.html\">a section</a> for folks with a Subversion background:</p>\n<blockquote>\n<p>It turns out that if you’ve been using Subversion, your brain is a little bit, um, how can I say this politely? You’re brain damaged. No, that’s not polite. You need a little re-education. I walked around brain damaged for six months thinking that Mercurial was more complicated than Subversion, but that was only because I didn’t understand how it really worked, and once I did, it turns out—hey presto!—it’s really kind of simple.</p>\n</blockquote>\n<blockquote>\n<p>So I wrote this tutorial for you, in which I have been very careful not to explain things in terms of Subversion, because there is just no reason to cause any more brain damage. The world is brain damaged enough. Instead, for those of you who are coming from Subversion, I’ve got this one chapter at the beginning that will try to reverse as much damage as possible so that you can learn Mercurial from a clean slate.</p>\n</blockquote>\n<p>The future is waiting. Go meet it.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>Bennett uses this example, which is apt:</p>\n<blockquote>\n<p>To reset one file in your working directory to its committed state:\ngit checkout file.txt\nTo reset every file in your working directory to its committed state:\ngit reset —hard</p>\n</blockquote>\n\n</li>\n<li>\n<p>I <em>know</em> that closed-source software has this same problem. How do you bring a new developer up to speed on the codebase? Every software development shop has to solve that problem <em>somehow.</em> However, in those cases, the problem is not publicly evident since we, the public, don’t see the ‘internal developer documentation,’ if it exists. </p>\n</li>\n<li>\n<p>In fact, I’ve thought about trying to wrap my development process in some scripts, sort of like git-flow, but it’s likely overkill. I find it hard to believe I’m the only person in the world that works this way, but maybe I am. No other developer codes on more than one machine? Goodness gracious. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-08-05T22:08:00.000Z",
      "tags": [
        "git"
      ]
    },
    {
      "id": "https://tylerbutler.com/max-css/",
      "url": "https://tylerbutler.com/max-css/",
      "title": "Max CSS",
      "content_html": "<p>Dan Eden pleads with web developers to provide uncompressed CSS in addition to minified versions:</p>\n<blockquote>\n<p>It’s pretty tough starting out as a designer/developer. You must remember those days of sitting on support forums, relentlessly refreshing and waiting for an answer to “How does website x do this with CSS?”</p>\n</blockquote>\n<p>As someone who learns best by doing, I have to agree. Despite excellent new sources of information like StackOverflow, starting out as a web developer/designer is difficult. I certainly learned a lot — and still do — from looking at the CSS of sites that I find interesting.</p>\n<p>You might not be able to do this for a large business site for business reasons, but there’s no real excuse for a personal site. I’ve <a href=\"https://trello.com/c/rR6cRubk\">added this</a> to the list of things to bake into Engineer.</p>",
      "date_published": "2012-07-10T18:28:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-right-woman/",
      "url": "https://tylerbutler.com/the-right-woman/",
      "title": "The Right Woman",
      "content_html": "<p>How you know you married the right woman:</p>\n<p>You’re on a road trip. To your horror, you discover that the rental car radio isn’t working well, and your only option is to use the CD player. Of course, since this isn’t 1995, you don’t have any CDs.</p>\n<p>“Wait!” she says. “I think I have <em>Dark Side of the Moon</em> in my purse.”</p>\n<hr />\n<p>Yeah — <em>that happened.</em></p>",
      "date_published": "2012-07-07T16:34:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/git-vs-mercurial-again/",
      "url": "https://tylerbutler.com/git-vs-mercurial-again/",
      "title": "Git vs. Mercurial (Again)",
      "content_html": "<p><em>Note: I’ve actually had this sitting in my drafts folder for awhile but with the recent release of <a href=\"https://github.blog/news-insights/the-library/github-for-windows/\">GitHub for Windows</a> it seemed like a good time to get my act together and post it.</em></p>\n<h2><a href=\"#the-beginning\">The Beginning</a></h2>\n<p>My first experience with true source code management was with CVS. I was in college, and the HawkTour project was going into its second semester. It was becoming clear that with a new batch of undergraduate students coming in the next semester we needed a solution to keep everyone from Hulk-smashing their way through the code wreaking havoc and bringing general chaos.</p>\n<p>The Unix server we used had CVS installed, so I learned the ropes then gave new students a crash-course in using it, as well as how to check things in and out using the Eclipse addins. This was the first time almost every student I encountered had used any source code management software, which in retrospect is a travesty. I <em>really</em> hope college courses include source code management tools these days.</p>\n\n<p>Fast forward a couple of years… I got out of college, started my career as a PM, and promptly stopped worrying about source code management. I mean, I had to worry about it insofar as I needed to understand what core developers were talking about (“<em>This</em> branch” and “<em>That</em> branch” and “No we can’t merge yet because of the children. Think of the children!” and… well, you get the idea) but it wasn’t part of my daily routine.</p>\n<h2><a href=\"#git-attempt-1\">Git: Attempt 1</a></h2>\n<p>Then in 2008 <a href=\"https://github.com\">GitHub</a> popped onto my radar, so I meandered over to see what the new hotness was and wound up poking around with Git (or is it git? I can find no firm consensus about whether it’s supposed to be capitalized) for awhile. I had a bunch of old code from long-forgotten projects that I resurrected to test it out. At this time, Git on Windows was a horrid experience (and given the current crappy state of affairs you can imagine just how bad it was), but I braved it anyway. I created my Git cheatsheets and memorized arcane command line craziness and <em>used it</em>. And it was fun. And powerful. And very much better than CVS.</p>\n<p>Now, <a href=\"https://www.youtube.com/watch?v=4XpnKHJAok8\">Linus might consider me an idiot</a>, and I no doubt am by his standards, but look people, <em>Git is not easy.</em> Say it with me again: <em>Git is not easy.</em> And Git on Windows is even harder — this is still true today.</p>\n<p>Hardcore Git zealots strike me as sort of like your neighbor who’s always trying to get you to drive a standard (or manual for the true Yanks) transmission car and change your own oil. “You’ll save so much cash, man!” “You have so much more control on the road, dude!” I get that it’s good to know how things work, and that a high degree of control has a lot of benefits, but frankly, sometimes I just need to <em>drive somewhere</em>.<sup><a href=\"#fn:git1\">1</a></sup></p>\n<p>This attitude is why many Git guides and tutorials start with stuff like how the index and the reflog work and what garbage collection is etc. etc. For example, see this <a href=\"https://www.sbf5.com/~cduan/technical/git/\">humorously titled guide by Charles Duan</a>. Tommi Virtanen’s <a href=\"https://eagain.net/articles/git-for-computer-scientists/\">Git for Computer Scientists</a> is a similar example, though I give Virtanen a pass since the guide’s explicit goal is to explain how Git works internally, not how to <em>use</em> Git.</p>\n<p>I get why that stuff is important — and useful, potentially<sup><a href=\"#fn:git2\">2</a></sup> — but that approach is sort of like teaching someone to drive by first explaining how the engine works. It’s simply not necessary to use the car.</p>\n<p>I think part of the problem I have with Git, though, is that is often <em>does</em> feel necessary to understand how it works. Remember this notion; I’ll come back to it later.</p>\n<h2><a href=\"#mercurial-to-the-rescue-or-not\">Mercurial To the Rescue! (Or Not)</a></h2>\n<p>After quite a long break from coding, I started up in earnest again at the end of 2010 when I started teaching high school web design as part of the <a href=\"https://tealsk12.org\">TEALS</a> pilot program. I had a bunch of sample HTML and CSS and lesson plan stuff and it made sense to get it all in source control.</p>\n<p>So I checked in on Git, and Git on Windows was still painful. Or, I should say, too painful for my tastes. Anything that calls Cygwin a prerequisite is not set up for success in my book. That, in short, was what prompted me to try Mercurial for the first time. Well, that and the fact that Mercurial is written in Python, and the fact that <a href=\"/link-not-available?url=http%3A%2F%2Fwww.fogcreek.com%2Fkiln%2F\">Kiln</a> had just come out so I felt like I could rely on there being a solid GitHub alternative for remote repositories.</p>\n<p>And Mercurial was fun. And powerful. And very much better than CVS. And TortoiseHG was (is!) a relatively elegant tool that works well in Windows. Life was good. I discovered the beauty of MQ and patch queues. I started using BitBucket because, well, it was just like GitHub, right? (And at the time Kiln didn’t have public repositories.)</p>\n<p>But something never quite ‘clicked’ for me about Mercurial — branches. Or, to be more exact in Mercurial terminology —  <em>named</em> branches. Mercurial has them, but they’re not like Git’s. In fact, they’re such different concepts that most articles comparing the two systems actually use different names for them. So it’s a bit unfair to compare them directly. Mercurial’s bookmarks are a better counterpart to Git’s branches, but I digress…</p>\n<p>Anyway, the guidance from Mercurial-land is that named branches are meant for long-lived things like a dev branch or a release branch. Steve Losh has a great overview of all of the <a href=\"https://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/\">branching options in Mercurial</a>, including bookmarks that I just mentioned, but if you want to just play around for awhile on a new idea then save it for later you do not create a named branch. You might create a bookmark, you might use a separate clone, but you don’t use a named branch. <em>So sayeth the powers that be.</em> In reality, you <em>can</em> create named branches (as Steve points out), and you can close them when you’re done with them, but in Mercurial those branches stay as an indelible part of the source history (or the metadata at least), which feels messy to me.</p>\n<p>Now, there’s absolutely nothing wrong with this model. It works wonderfully for many people. It is arguably simpler, though I do not personally believe that to be the case.</p>\n<p>I think that depending on which branching model you wrap your head around first, the Mercurial way either feels right or feels wrong. In my case it feels wrong. It doesn’t work well with the way that I work. I am <em>all over the place</em> when I code. While I believe that source history should be the <em>‘truth,’</em> I also think that above all, it should be as easy to follow as possible. Commit messages are an important part of this, of course, but cleaning up your local history before you share it is critical too. You can go back through and tie up loose ends, remove unnecessary code changes you made,<sup><a href=\"#fn:git3\">3</a></sup> etc. Keeping your changes separated is critical in making this ‘clean up’ possible.</p>\n<h3><a href=\"#anonymous-branches\">Anonymous Branches</a></h3>\n<p>In my attempt to have multiple in-flight changesets, I first tried the anonymous branching approach, which isn’t possible in Git but works well in Mercurial. But then when I’d try to push I’d get warnings that I was pushing new heads. Well, yeah, of course. And while I know that I can do that safely when I’m just pushing to a remote repository for myself (to work on in-flight changes on multiple computers, for example), it creates a huge hassle when I am finally ready to push to a shared repository. “Oh, oops, I have some unmerged changes from failed-but-not-quite-ready-to-give-up-on-experiment #37 that everyone’s going to get if I push in this state.” Yuck.</p>\n<h3><a href=\"#patch-queues\">Patch Queues</a></h3>\n<p>The next approach I tried was a patch queue. Yeah, I’d just manage every change as a patch. It worked for the kernel guys for years, right? Except that <em>really</em> turned out terribly. If you only want to have a single patch queue, then everything needs to be ‘in order.’ It’s a queue, so each patch applies successively. And that works OK for awhile, but eventually I wanted to work on two totally divergent things at the same time and switch back and forth periodically.</p>\n<p>So <em>then</em> you start thinking that you just need <em>multiple patch queues</em>, one for each feature. This is getting ridiculous, but whatever… I’ll try it. You know what? It <em>is</em> ridiculous. You know those great tools I mentioned earlier, like TortoiseHG? Yeah, they don’t work so well at managing multiple patch queues. Thus, one of the major reasons I switched to Mercurial — superior Windows tools — was eroded. Also, this complexity has a nasty side-effect: it discourages the very thing that DVC systems are meant to help with, namely not committing your changes often enough.</p>\n<p>In the single patch queue world, you tend to just update the same patch all the time, so you don’t get the benefits of true source history. If you don’t take that approach, then you have to remember which patches in the queue ‘go together’ so you can apply them up to the right point. (And do not think for second of using a versioned patch queue. Yes, it can potentially alleviate this problem. But it’s a mind-bender to keep remembering how everything fits together: I first need to refresh my patch, then commit <em>on the patch queue repository</em> to save my changes for posterity. The level of indirection is too high to be truly useful in my opinion.) If you use the multiple patch queue option the switching costs of changing between the feature ‘branches’ you’re working on cause different, but equally bothersome, problems. All in all, these workflows just didn’t work for me.</p>\n<p>That <em>‘for me’</em> is very important. <em>You</em> should definitely try Mercurial, especially if you’re struggling with Git. I definitely miss some things about it (MQ in particular, though <code>rebase</code> works pretty well for most things), and you no doubt work and think completely differently than I do. It might ‘click’ for you in a way that it doesn’t for me, and if Git’s complexity or something is preventing you from using source control, then please please <em>please</em> try Mercurial. You absolutely should be using source control.</p>\n<h2><a href=\"#git-back\">Git Back</a></h2>\n<p>So… right now I’m back on the Git bandwagon. And, truth be told, the Git on Windows world has gotten a lot better recently. In fact there’s even a <a href=\"/link-not-available?url=https%3A%2F%2Fcode.google.com%2Fp%2Fmsysgit%2Fdownloads%2Flist%3Fcan%3D3%26q%3Dofficial%2BGit\">portable version</a> that you can install on your USB key. And (yay!) Cygwin isn’t necessary.</p>\n<p>But it’s not all sunshine and daisies. Git still has a crazy command line interface. It’s confusing. There are all kinds of posts online like <a href=\"https://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/\">this one</a> that illustrate how even seasoned Git users forget commands for <em>basic tasks</em>. Deleting a remote branch is a perfect illustration in ‘WAT?’ Yeah, it makes sense once you think about it, but that doesn’t mean it’s good or right.<sup><a href=\"#fn:git4\">4</a></sup> I have a browser window open whenever I am using the Git command line just to look up the right command to do what I want to do. Do. Not. Like.</p>\n<p>A lot of the <a href=\"https://github.com/ddollar/git-utils\">helpful scripts</a> you can find to ease the command complexity are depedendent on bash or some other *nix shell. Git for Windows does have a bash shell and even includes a handy batch file for starting it, but most of my life is lived in PowerShell, and I find I miss some of the commands when using bash. That said, you can configure Console2 to host the Git bash shell so I just open one up, use it <em>only</em> for git, and use other PowerShell tabs for most of my other work. (Note: if you take this approach, you can copy your scripts into the <code>/bin</code> directory in your Git folder and they’ll be available at your Git prompts. You can also try <a href=\"https://github.com/dahlbyk/posh-git\">posh-git</a>, but again, those helpful bash scripts you downloaded won’t be useable.)</p>\n<h2><a href=\"#adjustments\">Adjustments</a></h2>\n<p>So now, having switched from Git to Mercurial and back, here are some of the differences that affect me personally.</p>\n<ul>\n<li>Pull and Fetch mean different things. In fact, they’re kind of the opposite. This one has driven me nuts a few times, especially since I do still use Mercurial on at least one major project.</li>\n<li>I miss <code>hg incoming</code> and <code>hg outgoing</code>. Yes, there are corresponding Git scripts you can get but they aren’t as nice IMO.</li>\n<li>I miss being able to use a substring of the command I want. For example, in Mercurial I could type <code>hg inc</code> instead of <code>hg incoming</code>. This does not appear to work in Git, at least not on Windows. Yes, I can create aliases. No, they’re not as convenient.</li>\n<li><code>git rebase</code> is very cool, and very powerful. Thus, it is dangerous, but a working knowledge of how to use it properly has led me to a multi-machine workflow that is quite good, and much better than my insane attempts as using MQ for the same purpose. I’ve since gone back and tried Mercurial’s <code>rebase</code> command, and while it does let you do the basic rebase action of ‘transplanting’ a branch to be based on another branch, the interactive rebase isn’t possible. For that you can use another Mercurial extension called <a href=\"/link-not-available?url=http%3A%2F%2Fmercurial.selenic.com%2Fwiki%2FHisteditExtension\">histedit</a>, but again, it just doesn’t seem as polished as the Git counterpart. Wow, I can honestly say I never expected to write that something in Git feels ‘polished’ but <code>rebase</code> does.</li>\n<li>Creating named branches for everything is bliss. Pure bliss. This just completely ‘clicks’ for me. I create little branches for everything. Coupled with a repository viewer that visualizes the whole tree (<a href=\"https://www.jetbrains.com/pycharm/\">PyCharm</a> actually has this built-in, but other tools such as <a href=\"https://code.google.com/p/gitextensions/\">Git Extensions</a> or even <code>gitk</code> have it as well) the branch names serve as little sign-posts about what I’m working on.</li>\n<li>Branches are awesome, but managing them is a bit of a pain just because the tools available can’t do <em>everything</em>. Luckily, even when you think you’ve destroyed things beyond all repair and your work is gone <em>for good</em>, it usually isn’t. Almost everything is recoverable. Git is nothing if not careful. I think it’s situations like this that have caused people writing ‘Guides to Git’ to start by explaining the index and the reflog and the hashes and <em>how Git works</em>, because if you <em>do</em> understand that stuff, you can generally get yourself out of trouble — or stay out of it altogether. But I think in the end that type of teaching leads to more confusion than clarity and causes more problems than it solves.</li>\n<li>I do not understand the allure of the stage. Given how easy Git makes branching, and how straightforward it is to commit, ammend the commit, <code>rebase</code> branches, rewrite history with interactive <code>rebase</code>, etc. what exactly is the advantage of the stage? Most tools don’t even expose it — it’s just there behind the scenes — so I’m not sure why people make such a big deal about it all the time.</li>\n<li>In Mercurial, you can have anonymous branches since your whole history is always ‘visible.’ In Git this is not true. If there’s no name pointing to a head, it effectively doesn’t exist. Now, this technically isn’t true, but orphaned heads don’t show up in any tools I’ve seen, and they’re not easily accessed unless you happen to know their hash. And <em>eventually</em> they will disappear for good. The lesson here is just to be nervous about not having a branch pointing to something important. Until you feel comfortable with what you’re doing, if you’re messing with <code>rebase</code> or something, create some dummy branches pointing to your important commits so you’ll have something to get back to if you really screw something up. Again, this is never truly necessary — it’s just for peace of mind and ease of recovery if you’re new to Git.</li>\n</ul>\n<p>This post is already incredibly long, so I’ll save the rant about Git GUI tools for another time, but the <code>TL;DR</code> version is that they still suck leave a lot to be desired, at least on Windows. I was incredibly excited when <a href=\"https://github.blog/news-insights/the-library/github-for-windows/\">GitHub for Windows</a> was announced, but I find it completely, mind-bogglingly, useless. It’s a v1, so I have hopes it’ll get better, but right now I’d have a hard time recommending anyone use it, even Git noobs. I think it has the potential to create a bunch of bad habits or, even worse, really messy histories simply because of weird merges and whatnot. I find it hard to believe it doesn’t have a visualization of the whole Git tree. I mean, <em>that</em> is what makes Git understandable for a mere mortal like me. I’ll have to give it some more time and try it out again to see if I can puzzle out what they’re trying to do with the UI, but it seems a little <em>too</em> simple right now. But… like I said, that’s a whole other post. <code>/sigh</code></p>\n<p>For now, I’m happy with the workflow and toolset I have (I’ll share more details another time), though it’s a bit rough around the edges and I have to pay a few too many visits to Stack Overflow just to get basic things done. But it works, it’s fun, it’s <em>very</em> powerful, and did I mention it’s a lot better than CVS?</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>This analogy is somewhat flawed since I drive a standard-transmission car and firmly believe it is a skill every driver should have. </p>\n</li>\n<li>\n<p>To be fair, the Git reflog has saved me from at least one very dangerous botched rebase. I wound up in a situation where the commit tree I really cared about was ‘gone.’ Really, what had happened is that all the <em>visible references</em> to it were gone. I managed to save the situation by digging through the reflog and getting out the relevant commits. </p>\n</li>\n<li>\n<p>Come on, you’ve all seen a commit from <em>that guy</em> who always does some code formatting/style cleanup along with his changes you’re trying to review. You can’t tell without some effort what is really part of the meaningful change and what isn’t since the cleanup changes obscure everything. </p>\n</li>\n<li>\n<p>In case you’ve found your way here via a search engine and are in dire need of the actual command to delete a remote branch, here it is: <code>git push origin :branch-to-delete</code>. Oh, don’t feel bad; I’m sure you would have figured it out on your own. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-06-11T00:57:00.000Z",
      "tags": [
        "git",
        "mercurial"
      ]
    },
    {
      "id": "https://tylerbutler.com/ruthless/",
      "url": "https://tylerbutler.com/ruthless/",
      "title": "Ruthless",
      "content_html": "<p>Lot’s of little gems in this piece by Chris Parker, but I especially like this one:</p>\n<blockquote>\n<p>Every time you throw in something that seems to work, <em>find out why it works.</em> If you don’t understand why it works then the code is just magic and you’re letting yourself off the hook. That code will become enshrined in your version control system for later generations (read: you, three months from now) to discover, wonder at, puzzle over, and leave it because no one understands what it does.</p>\n</blockquote>\n<p>Yes. A thousand times yes. That last sentence is especially applicable when working on larger-scale products with a rolling development team (read: nearly everything that comes out of Microsoft, Google, Apple, Adobe, etc.).</p>",
      "date_published": "2012-06-01T16:52:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/psget/",
      "url": "https://tylerbutler.com/psget/",
      "title": "PSGet",
      "content_html": "<p>I am no doubt very late to the party, but I just discovered <a href=\"/link-not-available?url=http%3A%2F%2Fpsget.net%2F\">PSGet</a> last week. I should write more about it, but for now, just open up the site in a new tab and check it out. If you use PowerShell you owe it to yourself.</p>\n<p>In particular, get PSUrl — cURL for PowerShell. <em><strong>Finally.</strong></em></p>",
      "date_published": "2012-05-30T19:51:00.000Z",
      "tags": [
        "powershell"
      ]
    },
    {
      "id": "https://tylerbutler.com/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/",
      "url": "https://tylerbutler.com/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/",
      "title": "How To Install Python, pip, and virtualenv on Windows with PowerShell",
      "content_html": "<p>If you do any Python development, you’ll probably run into an awful lot of package installation instructions <a href=\"https://engineer.readthedocs.org/en/latest/installation.html#installing-using-pip\">that read</a>:</p>\n<blockquote>\n<p>To install, use pip:</p>\n<p><code>pip install engineer</code></p>\n</blockquote>\n<p>Now, that’s all fine and dandy, but what is pip? And what is this virtualenv thing people keep telling me I should use?</p>\n<p>If you’re new to Python, getting up and running with pip and virtualenv can be a challenge, especially on Windows. Many guides I’ve seen out there assume either <em>a)</em> you’re working on Linux or UNIX or <em>b)</em> you already have pip/setuptools installed, or you know how to install packages and manage virtualenv. Heck, when I was learning this I didn’t even know what pip <em>was!</em> Having gone through this process several times now, I decided to write it all down from the beginning in the hopes that it’ll be useful to someone in the future.</p>\n<div></div>\n\n<h2><a href=\"#before-we-start\">Before We Start</a></h2>\n<p>A brief note before we start… To make sure we’re all on the same page, pip is a Python package installer. It integrates with PyPI, the Python Package Index, and lets you download and install a package from the package index without manually downloading the package, uncompressing it, running <code>python setup.py install</code> etc. Pip makes installing libraries for your Python environment a breeze, and when you start developing your own packages it provides a way for you to declare dependencies so those dependent packages will get installed automatically as well.</p>\n<p>The more Python development you do, though, the more packages you’re going to need. Wouldn’t it be nice if you could install all the packages into a ‘special’ location where they wouldn’t interfere with any other packages? This is where virtualenv comes in. It creates a virtual Python interpreter and isolates any packages installed for that interpreter from others on the system. There are lots of ways this comes in handy; I’ll leave enumerating them as an exercise for the reader, but if you think for a minute you can see why this will come in handy. And if you can’t yet, then give yourself a few weeks of Python development, then come back and look at this post again once you realize you need to use virtualenv.</p>\n<p>Finally, there’s a wrapper utility for virtualenv aptly called <em>virtualenvwrapper</em>. This wrapper makes creating new virtual environments and switching between them really straightforward. Unfortunately, it relies on a UNIX shell, which is kind of a pain on Windows. Luckily there’s a PowerShell clone of the wrapper that works wonderfully and gives us Windows users the same kind of awesomeness that we’ve come to expect from PowerShell.</p>\n<p>So with the definitions out of the way, let’s get started…</p>\n<h2><a href=\"#ensure-you-can-execute-powershell-scripts\">Ensure You Can Execute PowerShell Scripts</a></h2>\n<p>For the most part, this guide assumes you’ve actually used PowerShell a few times and know how to run scripts. If that’s not the case, though, then the very first thing you’ll want to do is enable scripts to run on your system using the <code>Set-ExecutionPolicy</code> command. There’s <a href=\"http://technet.microsoft.com/en-us/library/ee176949.aspx\">a great article on TechNet</a> that covers this in detail, so I won’t go into detail here. You can also skip this step for now if you want. Just read that article if you run into the following error message at any point:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>...cannot be loaded because the execution of scripts is disabled on</span></div></div><div><div><span>this system. Please see </span><span>\"get-help about_signing\"</span><span> </span><span>for</span><span> more details.</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<h2><a href=\"#get-python\">Get Python</a></h2>\n<p>First things first — get Python! You can get the Python 2.7.8 (the current Python 2.x version as of this writing) 32-bit installer from <a href=\"https://www.python.org/downloads/windows/\">https://www.python.org/downloads/windows/</a>. There is a 64-bit version of Python as well, but I have personally found it to be more hassle than it’s worth. Some packages won’t have 64-bit versions available, and I personally haven’t found any need for the 64-bit version in any project I’ve worked on. Feel free to go with the 64-bit version if you’d like, but this guide assumes you’re using the 32-bit one.</p>\n<p>Recent Python installers include an explicit option to add <code>C:\\Python27\\</code> to your path. I find checking that option to be the easiest thing to do, and it’s generally what you want. It’s not selected by default, though, so watch for it and enable it if you want. If you don’t do that, and you need to do it manually later, the <a href=\"https://docs.python.org/using/windows.html\">Using Python on Windows</a> documentation includes more details.</p>\n<p>Unfortunately, the installer does <em>not</em> add the <code>Scripts</code> (i.e. <code>C:\\Python27\\Scripts</code>) subdirectory, which is also really needed, since that’s where pip will end up being installed. So even if you check that box chances are you’ll need to edit your path anyway.</p>\n<p>Once you’ve installed Python, open up a PowerShell window and type <code>python</code> and press enter. You should see something like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> python</span></div></div><div><div><span>Python </span><span>2.7</span><span>.</span><span>8</span><span> (</span><span>default</span><span>,</span><span> Jun </span><span>30</span><span> </span><span>2014</span><span>,</span><span> </span><span>16</span><span>:</span><span>03</span><span>:</span><span>49</span><span>) [</span><span>MSC</span><span> </span><span>v.1500</span><span> </span><span>32</span><span> </span><span>bit</span><span> (Intel)] on win32</span></div></div><div><div><span>Type </span><span>\"help\"</span><span>,</span><span> </span><span>\"copyright\"</span><span>,</span><span> </span><span>\"credits\"</span><span> or </span><span>\"license\"</span><span> </span><span>for</span><span> more information.</span></div></div><div><div><span>&gt;&gt;&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Press <code>Ctrl-Z</code> and hit return to exit the Python prompt. If you get an error when you type <code>python</code> saying “The term ‘foo’ is not recognized as the name of a cmdlet, function, script file, or operable program,” then Python is not on your path. Add it first, and once your path is updated, restart PowerShell to ensure the new path is loaded and try typing <code>python</code> again. You should be good to go!</p>\n<h2><a href=\"#get-pip\">Get Pip</a></h2>\n<p><em>Note: As of Python 2.7.10, pip can be automatically installed as part of the Python for Windows installer. If you do that, you can skip this step.</em></p>\n<p><em>Note: Previous versions of this guide included a step to download and install Distribute. That is no longer needed; just get pip.</em></p>\n<p>The easiest way to install pip is to download the <a href=\"/link-not-available?url=https%3A%2F%2Fraw.github.com%2Fpypa%2Fpip%2Fmaster%2Fcontrib%2Fget-pip.py\">get-pip.py</a> script, save it locally, then run it using Python.</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> python </span><span>get-pip</span><span>.py</span></div></div><div><div><span>Downloading</span><span>/</span><span>unpacking pip</span></div></div><div><div><span>Downloading</span><span>/</span><span>unpacking setuptools</span></div></div><div><div><span>Installing collected packages: pip</span><span>,</span><span> setuptools</span></div></div><div><div><span>Successfully installed pip setuptools</span></div></div><div><div><span>Cleaning up...</span></div></div><div><div><span>PS C:\\</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>There are other ways to get pip, but this is the easiest way I have found. There are more details on this at <a href=\"http://www.pip-installer.org/en/latest/installing.html#using-the-installer\">the pip website</a>. To check if everything is working, just type <code>pip</code> at the command line:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> pip</span></div></div><div><div>\n</div></div><div><div><span>Usage:</span></div></div><div><div><span><span>    </span></span><span>pip </span><span>&lt;</span><span>command</span><span>&gt;</span><span> [</span><span>options</span><span>]</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>If you get another “command is not recognized” error, check that <code>C:\\Python27\\Scripts\\</code> is on your path.</p>\n<h2><a href=\"#install-virtualenv-and-virtualenvwrapper-powershell\">Install virtualenv and virtualenvwrapper-powershell</a></h2>\n<p>Pip should now be installed, so type the following commands to get virtualenv and the PowerShell virtualenvwrapper installed:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> pip install virtualenv</span></div></div><div><div><span>PS C:\\</span><span>&gt;</span><span> pip install virtualenvwrapper</span><span>-</span><span>powershell</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Now you need to import the wrapper module in PowerShell, so type <code>Import-Module virtualenvwrapper</code>.\nYou will probably get one of two errors — or both. The first will be something like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> </span><span>Import-Module</span><span> virtualenvwrapper</span></div></div><div><div><span>Get-Content</span><span> : Cannot find path </span><span>'Function:\\TabExpansion'</span><span> because it does not exist.</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Unfortunately that’s a bug in the current released version (12.7.8) of virtualenvwrapper-powershell. It doesn’t actually cause any problems in practice as far as I know. It seems to have been fixed in the project but the fix hasn’t made it into a released version yet. I don’t know why; I’m not involved with the project.</p>\n<p>The other error you might see will say something like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>Virtualenvwrapper: Virtual environments directory</span></div></div><div><div><span>'C:\\Users\\tyler/.virtualenvs'</span><span> does not exist. Create it or</span></div></div><div><div><span>set $env:WORKON_HOME to an existing directory.</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Well, at least you know you’re on the right track! Do exactly what the message says: create the missing directory.</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>mkdir </span><span>'~\\.virtualenvs'</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>You might also want to change the location to store your virtual environments. To do that, set the <code>$env:WORKON_HOME</code> variable to wherever you want to store them. I generally stick with the default of <code>~\\.virtualenvs</code> though. Whatever you do, remember this location; it will come in handy.</p>\n<p>Now try to import the module again. Success! Now you have access to a bunch of virtualenv management commands directly in PowerShell. To see all of them, you can type:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> </span><span>Get-Command</span><span> </span><span>*</span><span>virtualenv</span><span>*</span></div></div><div><div>\n</div></div><div><div><span>CommandType     Name                                               ModuleName</span></div></div><div><div><span>-----------</span><span>     </span><span>----</span><span>                                               </span><span>----------</span></div></div><div><div><span>Alias           cdvirtualenv </span><span>-&gt;</span><span> CDIntoVirtualEnvironment           virtualenvwrapper</span></div></div><div><div><span>Alias           cpvirtualenv </span><span>-&gt;</span><span> </span><span>Copy-VirtualEnvironment</span><span>            virtualenvwrapper</span></div></div><div><div><span>Alias           lsvirtualenv </span><span>-&gt;</span><span> </span><span>Get-VirtualEnvironment</span><span>             virtualenvwrapper</span></div></div><div><div><span>Alias           mkvirtualenv </span><span>-&gt;</span><span> </span><span>New-VirtualEnvironment</span><span>             virtualenvwrapper</span></div></div><div><div><span>Alias           rmvirtualenv </span><span>-&gt;</span><span> </span><span>Remove-VirtualEnvironment</span><span>          virtualenvwrapper</span></div></div><div><div><span>Alias           setvirtualenvproject </span><span>-&gt;</span><span> </span><span>Set-VirtualEnvProject</span><span>      support</span></div></div><div><div><span>Function</span><span>        </span><span>add2virtualenv</span><span>                                     virtualenvwrapper</span></div></div><div><div><span>Function        CDIntoVirtualEnvironment                           virtualenvwrapper</span></div></div><div><div><span>Function        Copy-VirtualEnvironment                            virtualenvwrapper</span></div></div><div><div><span>Function        Get-VirtualEnvironment                             virtualenvwrapper</span></div></div><div><div><span>Function        New-VirtualEnvironment                             virtualenvwrapper</span></div></div><div><div><span>Function        New-VirtualEnvProject                              support</span></div></div><div><div><span>Function        Remove-VirtualEnvironment                          virtualenvwrapper</span></div></div><div><div><span>Function        Set-VirtualEnvironment                             virtualenvwrapper</span></div></div><div><div><span>Function        Set-VirtualEnvProject                              support</span></div></div><div><div><span>Function        showvirtualenv                                     virtualenvwrapper</span></div></div><div><div><span>Function        VerifyVirtualEnv                                   support</span></div></div><div><div><span>Application     virtualenv.exe</span></div></div><div><div><span>Application     virtualenv-2.7.exe</span></div></div><div><div><span>Application     virtualenv-clone.exe</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>You’ll see that there are a bunch of nice PowerShell style cmdlets, like <code>New-VirtualEnvironment</code>, but there are also aliases set up mapping those cmdlets to commands you might be more familiar with, like <code>mkvirtualenv</code>. Of course you also get regular PowerShell tab completion for these cmdlets and aliases.</p>\n<h2><a href=\"#managing-virtualenvs\">Managing virtualenvs</a></h2>\n<p>Now that we have virtualenv installed, let’s make a new virtualenv:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>New-VirtualEnvironment</span><span> engineer</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Replace <code>engineer</code> with whatever you want to call your virtualenv. I usually name it after the project I plan to use that virtualenv for, but whatever you want works.</p>\n<p>After the command completes, you should see a PowerShell prompt that looks like this:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>(engineer)PS C:\\</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>The <code>(engineer)</code> prepended to your prompt reminds you that you’re currently working within that virtualenv. If you type <code>workon</code> now you should see the available virtualenvs, and if you type <code>workon name_of_another_virtualenv</code> you’ll flip to that environment.</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> workon</span></div></div><div><div>\n</div></div><div><div><span>PathInfo         Name          PathToScripts                 PathToSitePackages</span></div></div><div><div><span>--------</span><span>         </span><span>----</span><span>          </span><span>-------------</span><span>                 </span><span>------------------</span></div></div><div><div><span>engineer         engineer      C:\\Users\\tyler\\.virtuale..</span><span>.</span><span>   C:\\Users\\tyler\\.virtuale...</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<h2><a href=\"#install-packages-with-pip\">Install Packages with pip</a></h2>\n<p>Now that your virtual environments are configured, you can install packages into them using pip. Open a PowerShell prompt, type <code>workon name_of_virtualenv</code> and then type <code>pip install package_name</code>. There are also a couple of additional pip commands that might be useful to know. If you have a project with lots of package requirements, it might have come with (or you might have written) a <a href=\"/link-not-available?url=http%3A%2F%2Fwww.pip-installer.org%2Fen%2Flatest%2Frequirements.html\">requirements file</a> (often called <code>requirements.txt</code>). To have pip load all of the packages in that file, type:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> pip install </span><span>-</span><span>r path_to_requirements_file</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Also, you might have downloaded a package’s source manually that has a <code>setup.py</code> file in it. You can have pip install that for you by typing:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> pip install </span><span>-</span><span>e path_to_source</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>The <code>-e</code> option can also check out source directly from a Mercurial, Git, Subversion, or Bazaar repository and install a package from there.</p>\n<h2><a href=\"#automatically-importing-the-virtualenvwrapper-powershell-module\">Automatically Importing the virtualenvwrapper PowerShell Module</a></h2>\n<p>You might notice at some point — probably once you open a new PowerShell prompt — that you can no longer use the <code>workon</code> and <code>New-VirtualEnvironment</code> commands. Well, silly, you forgot to import the <code>virtualenvwrapper</code> module! Now, you could just import it and move on with your life, but that’s going to get annoying really quickly, so you can configure your PowerShell profile so that the module is loaded every time you open up a PowerShell window. First, though, you’re going to need to find your profile. To make matters a bit more confusing, there are actually several profiles that PowerShell uses. But only one or two of them are really relevant to us. To see all the profiles available to you, type:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>PS C:\\</span><span>&gt;</span><span> $profile </span><span>|</span><span> </span><span>Format-List</span><span> </span><span>*</span><span> </span><span>-</span><span>Force</span></div></div><div><div>\n</div></div><div><div><span>AllUsersAllHosts       : C:\\Windows\\System32\\WindowsPowerShell\\v1.</span><span>0</span><span>\\profile.ps1</span></div></div><div><div><span>AllUsersCurrentHost    : C:\\Windows\\System32\\WindowsPowerShell\\v1.</span><span>0</span><span>\\Microsoft.PowerShell_profile.ps1</span></div></div><div><div><span>CurrentUserAllHosts    : C:\\Users\\tyler\\Documents\\WindowsPowerShell\\profile.ps1</span></div></div><div><div><span>CurrentUserCurrentHost : C:\\Users\\tyler\\Documents\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1</span></div></div><div><div><span>Length                 : </span><span>77</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Looks like there are four available profile scripts, and based on their names, they all have different scopes. In our case, we probably want the <code>CurrentUserAllHosts</code> profile, since that will execute for us in every PowerShell instance. If you navigate to the location listed, there might not be a file there to edit. In that case, the following command will create a file there in the right format:</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>New-Item</span><span> </span><span>-</span><span>Path $Profile.CurrentUserAllHosts </span><span>-</span><span>Type file </span><span>-</span><span>Force</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Or you could just create a file in your favorite text editor and save it in that location (with the correct name, of course).</p>\n<p>In that file, put the command you used to import the <code>virtualenvwrapper</code> modules earlier</p>\n<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><span>Import-Module</span><span> virtualenvwrapper</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>It’s worth noting that this file is just a regular PowerShell script, so you can put other stuff in it too, such as aliases you like to set up, etc. Anyway, once that’s done, save the file and open a new PowerShell window. Now the <code>workon</code> command and other virtualenv cmdlets should start functioning.</p>\n<h2><a href=\"#configuring-your-ide\">Configuring Your IDE</a></h2>\n<p>There is one final step to getting everything really <em>ready</em> for developing Python projects — setting up your IDE to use the appropriate <code>virtualenv</code> for your project. There are several different IDEs out there or you could just rock <a href=\"https://notepad-plus-plus.org/\">Notepad++</a>. I personally like <a href=\"https://www.jetbrains.com/pycharm/\">PyCharm</a> a lot though; <a href=\"/2013/10/pycharm-3-0/\">I use it</a> almost exclusively for Python development.</p>\n<p>If you <em>are</em> using PyCharm, version 2.5+ has built-in support for virtualenv. You can <a href=\"https://www.jetbrains.com/pycharm/webhelp/creating-virtual-environment.html\">create virtual environments</a> directly in PyCharm or you can import ones you created earlier using virtualenvwrapper. Personally I prefer the latter since virtualenvwrapper doesn’t pick up the environments created by PyCharm (so they don’t show up when you use the <code>workon</code> command, among another things).</p>\n<p>Anyway, if you want to use an existing virtualenv, you’ll need to tell PyCharm about it. The <a href=\"https://www.jetbrains.com/pycharm/webhelp/configuring-local-python-interpreters.html\">PyCharm support site has details</a>, but the key thing to know is that you need to point it to the <code>python.exe</code> inside your <code>virtualenv</code>’s <code>Scripts</code> directory. In my case, the full path is <code>C:\\Users\\tyler\\.virtualenvs\\engineer\\Scripts\\python.exe</code>.</p>\n<p>After all of that’s done you should be good to go! You can pop open a PowerShell window and create/switch to virtualenvs as needed and install packages using pip. At this point you should have most of what you need to follow the installation instructions for most Python packages (except those that require C extension compilation, but that’s a topic for another post).</p>",
      "date_published": "2012-05-29T00:26:00.000Z",
      "tags": [
        "guide",
        "python",
        "powershell"
      ]
    },
    {
      "id": "https://tylerbutler.com/xkcd-2/",
      "url": "https://tylerbutler.com/xkcd-2/",
      "title": "xkcd 2",
      "content_html": "<p>I’ve just put up a small side project I whipped together over the last day or so called <a href=\"https://xkcd2.com/\">xkcd 2</a>. It might not make much sense why I built this thing, so bear with me while I try to explain.</p>\n<h2><a href=\"#why\">Why</a></h2>\n<p>I’ve been reading <a href=\"https://xkcd.com/\">xkcd</a> for years, but it wasn’t until fairly recently that I discovered most of the comics actually have a caption.<sup><a href=\"#fn:xkcd1\">1</a></sup> It’s tucked away in the <code>title</code> attribute on the <code>img</code> tag, and in most browsers you really only see it if you hover your mouse over the image for a few seconds.</p>\n<p>Discovering this was a total accident. I read most xkcd comics via the RSS feed in <a href=\"http://reederapp.com/\">Reeder</a>. If you zoom-pinch on an image in Reeder, it opens up a view like this:</p>\n<div>\n    <a href=\"https://www.flickr.com/photos/76037594@N06/7206331966/\">\n        <img src=\"https://farm8.staticflickr.com/7241/7206331966_c6419e544e.jpg\" width=\"500\" height=\"375\" alt=\"An xkcd.com comic in Reeder\" />\n    </a>\n    <p>An xkcd.com comic in Reeder</p>\n</div>\n<p>That panel at the bottom displays the <code>title</code> attribute, but it only shows up if you tap once on the image. Anyway, after coming across this in Reeder, I started looking at all the captions every time a new comic would come out. It turns out that in many cases the caption is funnier than the comic itself. Case in point: <a href=\"https://xkcd2.com/1049/\">comic 1049</a>, the one featured in the picture above, is my most recent favorite. The caption perfectly mirrors my own experience with Ayn Rand, and in my opinion makes the comic that much more interesting as a whole.</p>\n\n<p>Anyway, I find it frustrating that the comic captions are not a more visible part of the xkcd site itself, so I decided to put together a separate site that loads the comics from xkcd and simply displays them in a slightly different way — and includes the comic captions directly. The same comic shown above looks like this on xkcd2.com:</p>\n<div>\n    <a href=\"https://www.flickr.com/photos/76037594@N06/7213096382/\">\n        <img src=\"https://farm9.staticflickr.com/8151/7213096382_db69df1d70.jpg\" width=\"500\" height=\"361\" alt=\"xkcd2\" />\n    </a>\n    <p>An xkcd comic as shown on xkcd2.com</p>\n</div>\n<h2><a href=\"#how\">How</a></h2>\n<p>Now that you know the <em>why</em> of xkcd2.com, let’s talk about the <em>how</em>.</p>\n<p>xkcd 2 is an exceedingly simple <a href=\"http://flask.pocoo.org/\">Flask</a> app. It’s ~100 lines of Python (not including empty lines of course). A majority of the time was spent messing with the HTML and CSS, not on the Python itself.</p>\n<p>Each time a comic is requested, I use the excellent <a href=\"http://code.google.com/p/httplib2/\">httplib2</a> library to retrieve the corresponding page directly from xkcd.com. httplib2 behaves more like a browser than a typical HTTP library; it handles caching the page content and everything for me, so if the same comic is requested many times httplib2 will return the page content from its local file cache instead of bouncing the request to xkcd.com every time.<sup><a href=\"#fn:xkcd2\">2</a></sup></p>\n<p>Once I get the response and page content from xkcd.com, I parse the page into a DOM object using <a href=\"https://github.com/html5lib\">html5lib</a>. Then I use some rather inefficient list comprehensions to find the right elements in the DOM and extract the relevant information. There are probably more efficient means of doing this, but the page structure is simple enough that it’s not too bad performance-wise. I did find myself desperately wanting server-side jQuery…<sup><a href=\"#fn:xkcd3\">3</a></sup></p>\n<p>Once I have all the comic details from the page, I store it all in a pickle file so I can load it from the local disk rather than parsing the HTML on each request. Thus, if httplib2 reports that it used its cached version rather than retrieving a fresh page (via the <code>response.fromcache</code> property), I discard httplib2’s response entirely and simply load the comic metadata from the pickle file.</p>\n<p>Once I have the metadata, I just pass it to the page template and render the page.</p>\n<h2><a href=\"#but-but\">But… but…</a></h2>\n<p>I considered a couple of different high-level options before settling on the ‘request the page, parse the metadata’ approach. First, since the set of comics is finite (1056 as of this writing), I considered writing a simple scraper that would ‘preload’ all of the comics and just load from that cache. However, in the end this isn’t much different than what I’m doing. I still would have had to retrieve the page, parse out the relevant data, and store it. The current approach does this lazily, which makes a lot more sense since I doubt most people are looking through really old comics (though it <em>is</em> interesting to see how Munroe’s style has changed over the years). I still get the benefits without having this separate ‘build the cache’ step.</p>\n<p>I also considered using the RSS feed rather than scraping HTML. This was appealing because the RSS will be less likely to change format. If xkcd.com undergoes a rewrite, my current HTML parsing code will probably break.<sup><a href=\"#fn:xkcd4\">4</a></sup> However, the feed is a snapshot of the most recent comics, not all of them, and I really wanted to support all of them. How broken would it feel if someone sent you a link to a comic on xkcd2.com and it didn’t load because there was a new comic published that morning and the old comic was no longer in the RSS feed? Spoiler: very broken.</p>\n<p>Anyway, hopefully some folks will find this useful and/or interesting. Code is up <a href=\"https://github.com/tylerbutler/xkcd2\">on github</a> and the site is live at <a href=\"https://xkcd2.com/\">xkcd2.com</a>.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>Oh, you already knew that? Well good for you. </p>\n</li>\n<li>\n<p>There are no doubt some subtleties in the httplib2 cache behavior that I did not dive into. My hunch is that a request still gets made to xkcd.com — even just a <code>HEAD</code> request — because httplib2 needs to somehow determine whether its cache is still valid. I’m not an expert on its behavior. Regardless, using its cache is almost certainly better than naively proxying the request to xkcd.com — and waiting for/parsing the response — each time. </p>\n</li>\n<li>\n<p>This is probably actually possible using node.js, but it seemed like overkill for this project. </p>\n</li>\n<li>\n<p>I do use IDs and classes and avoid relying on actual page structure as much as possible, but sometimes it’s unavoidable. HTML scraping is <em>always</em> brittle no matter what precautions you take or how smart you try to be. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-05-17T18:23:00.000Z",
      "tags": [
        "xkcd2"
      ]
    },
    {
      "id": "https://tylerbutler.com/convergence/",
      "url": "https://tylerbutler.com/convergence/",
      "title": "Convergence",
      "content_html": "<p>Love this quote from <a href=\"https://www.macstories.net/news/apple-q2-2012-results-39-2-billion-revenue-35-1-million-iphones-11-8-million-ipads-sold/\">Tim Cook</a>:</p>\n<blockquote>\n<p>Anything can be forced to converge, but the problem is about trade-offs, and you end up with trade-offs that don’t please anyone. You can converge a toaster and refrigerator, but the end result won’t be pleasing to the user.</p>\n</blockquote>",
      "date_published": "2012-04-30T21:56:00.000Z",
      "tags": [
        "quote"
      ]
    },
    {
      "id": "https://tylerbutler.com/lukas-mathis/",
      "url": "https://tylerbutler.com/lukas-mathis/",
      "title": "Lukas Mathis",
      "content_html": "<p>I just linked to a piece that I got via <a href=\"https://ignorethecode.net\">Lukas Mathis</a>, but I wanted to explicitly encourage you to read his stuff. In my opinion, <a href=\"https://ignorethecode.net\">ignorethecode.net</a> should be required reading for anyone doing user experience design today. Very smart, very insightful, very well-reasoned. Solid work.</p>",
      "date_published": "2012-04-23T21:27:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-monochrome-trend/",
      "url": "https://tylerbutler.com/the-monochrome-trend/",
      "title": "The Monochrome Trend",
      "content_html": "<p><a href=\"https://www.literatureandlatte.com/blog/?p=271\">Keith Blount on color</a>, or lack thereof, in user interfaces:</p>\n<blockquote>\n<p>I learned something about the way my brain works that I hadn’t hitherto ever had to think about: my brain is an awful lot faster at processing colours than it is at processing shapes.</p>\n</blockquote>\n<p>I’ve felt this way for awhile about modern UI design trend to “drain the color” from UI, to borrow Blount’s phrase. I really like color and when used tastefully and correctly I find it to be a wonderful usability aid.<sup><a href=\"#fn:color1\">1</a></sup> It’s nice to hear I’m not the only one that feels this way.</p>\n<p>In Mathis’ link to Blount, he pulls a quote from <a href=\"https://pragprog.com/book/lmuse/designed-for-use\">his own book</a>, which in turn quotes Colin Ware (I’m dangerously close to <a href=\"https://www.inception-explained.com/\">Inception</a>-level quote recursion at this point!):</p>\n<blockquote>\n<p>In [his book] Information Visualization, Colin Ware notes that color is “preattentively processed,” meaning that we identify color before we give it conscious attention. In other words, when we look at a user interface, we can find and identify user interface elements with a specific color really quickly and easily.</p>\n</blockquote>\n<p>On a related note, I have noticed I also have trouble with UI elements that are text-only with no color or icon hint. For example, the bookmarks bar in Safari, which eschews displaying favicons in favor of text alone, is maddening to me because I naturally look for an icon or color of some kind when looking through the links. There are probably differences in the psychology of this compared to color, but I wonder if there is experimental evidence that supports this notion that icons, color, or shape are easier to recognize quickly than words. <a href=\"https://www.microsoft.com/typography/ctfonts/WordRecognition.aspx\">This paper from Microsoft typography</a> seems to indicate that we do indeed recognize words by their shape, though the prevailing scientific beliefs around the exact mechanics of that recognition have undergone some changes over the years. Interesting stuff.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>The fact that my current site design arguably does not use color ‘tastefully’ or ‘correctly’ is not lost on me. I realize that the current ‘unicorn vomit’ color explosion is probably overkill and needs some adjustment. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-04-23T21:13:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/mies/",
      "url": "https://tylerbutler.com/mies/",
      "title": "Mies",
      "content_html": "<p>I rarely go to the Google homepage, but I wound up there today and was surprised to see a <a href=\"https://www.google.com/doodles/mies-van-der-rohes-126th-birthday\">Doodle</a> very reminiscent of <a href=\"https://en.wikipedia.org/wiki/S.R._Crown_Hall\">Crown Hall</a>. Sure enough, it’s an homage to <a href=\"https://en.wikipedia.org/wiki/Ludwig_Mies_van_der_Rohe\">Ludwig Mies van der Rohe</a> — or simply <em>Mies</em> as he was always referred to on campus while I was there<sup><a href=\"#fn:1\">1</a></sup> — whose birthday was today in 1886. Very cool.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>If Wikipedia is to be trusted, referring to him simply as <em>Mies</em> is widespread. I had always assumed this was an IIT-only thing given his importance to the campus and College of Architecture there. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-03-28T01:05:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/thoughts-on-the-new-ipad/",
      "url": "https://tylerbutler.com/thoughts-on-the-new-ipad/",
      "title": "Thoughts On the New iPad",
      "content_html": "<p>I upgraded my first-gen iPad to a third-gen just over a week ago now and by and large I’m happy with the result. There are a couple of things that I don’t like so far, though, and I think it’s worth pointing them out. If you have a use-case for the iPad that is similar to mine, then this information might be especially helpful.</p>\n<p>With that, here are some things to note about my iPad usage.</p>\n<ul>\n<li>I use it almost exclusively in bed, lying on my back.</li>\n<li>I use it in landscape mode almost exclusively, at least when I’m in bed.</li>\n<li>Given that I use it largely at home, I go with the WiFi-only 16GB models.</li>\n<li>I generally use it to browse the web, read, watch movies, or play games.</li>\n<li>I have a <a href=\"https://twelvesouth.com/products/compass/\">Compass</a> stand that I use if I’m going to be typing on it for longer periods of time. (Obviously not in bed.)</li>\n<li>I do not take photos, be it with an iPad, iPhone, camera, or otherwise. Ever. I am just not into photos.</li>\n</ul>\n<p>Keeping in mind my usage patterns of the iPad first-gen, and the fact that I have explicitly avoided touching the iPad 2 too much because I didn’t want to be too tempted to upgrade (this is a serious problem for me) and thus am comparing almost exclusively against the iPad 1, here’s what I’ve noticed:</p>\n\n<h2><a href=\"#weight\">Weight</a></h2>\n<p>It’s a bit lighter. I knew this going in, and indeed it was a selling point, though not a major one. Unfortunately this lighter weight is countermanded by some other problems that I’ll cover in more detail below.</p>\n<h2><a href=\"#smart-cover\">Smart Cover</a></h2>\n<p>So, so clever. I’ve been in love with this since I first saw <a href=\"/link-not-available?url=http%3A%2F%2Fwww.apple.com%2Fipad%2Fsmart-cover%2F\">the ad</a>, but I frankly should have thought through my usage patterns a a bit more thoroughly when I added it to my shopping cart last week. While the new iPad is perceptibly lighter than the original, having the smart cover clipped on largely negates that weight win. The cover itself is pretty heavy.</p>\n<p>But the bigger problem is that it only clips on one side — the <em>wrong</em> side, at least for me. This means I have to orient the iPad the opposite way than I usually do, with the Home button on the <em>left</em> instead of the <em>right</em><sup><a href=\"#fn:1\">1</a></sup>. This is frustrating on two levels. After two years of nearly daily usage, I’m simply accustomed to the home button being on the right. I’m right handed; using the left hand to putz around with the home button just <em>feels</em> wrong.</p>\n<p>But really, the bigger problem I think is one of weight distribution. It took me some time to reach this conclusion. Something felt off about the feel of the device in my hands while using it in bed, but I couldn’t put my finger on it at first. I took off the smart cover, but continued to use it oriented the ‘new’ way, with the Home button on the left, in an attempt to force myself to adjust (and gauge just how badly it would confuse my muscle memory — spoiler: a <em>lot</em>). But my left hand was getting tired. This confused me since the device is clearly lighter than the first generation but still seemed to be causing more fatigue than the first generation did.</p>\n<p>My conclusion thus far is that the weight distribution, at least in landscape orientation, is not balanced. I wouldn’t expect it to be, frankly, because fitting everything into the chassis and still having it be perfectly balanced would be nearly impossible. But I do think this causes some fatigue for me because I am so used to the other weight distribution. I am not 100% certain this is the cause of the fatigue; I’m obviously going to keep using it so we’ll see if it was just a fluke, but I have decided to just forgo the smart cover for now. I’ll use it when I travel or something.</p>\n<p>One other note: with the smart cover on, the iPad fits snugly into the <a href=\"https://sfbags.com/products/ipad-cases/suedejacket-ipad.php\">Waterfield Suede Jacket</a> I used (and <em>love</em>) with my iPad 1. Yay! It’s a little more difficult to get out of the case, but it’s not a terribly big problem.</p>\n<h2><a href=\"#shape\">Shape</a></h2>\n<p>I really liked the shape if the first-gen iPad. A lot. So I was, and am, a little disappointed with the tapered design in the second and third-gen. But aesthetics are in some ways preference-based, and I don’t deny that the new design is very very nice, so I’m fine with it. But there are some actual problems that the design causes for me.</p>\n<p>First, the tapered edge kind of digs into my hands. The flat edge of the first gen is actually preferable to me in this case, because the edge on the original iPad is actually pretty substantial and despite its greater weight, it distributes that weight over a slightly larger surface area on my hands so it just feels a bit nicer.</p>\n<p>The second problem is with the volume/power buttons and the cable jack. Because of the tapered design, these things don’t sit flush with the edge. With the value and power buttons that just means they feel a little weird to me since they’re oriented ever-so-slightly differently than they used to be. No big deal — just an adjustment.</p>\n<p>But with the cable jack I always feel like it’s either in at the wrong angle or not completely in at all, because it doesn’t sit completely flush. Again, this is probably something that I’ll just get over when I’ve used it for more than few days.</p>\n<h2><a href=\"#display\">Display</a></h2>\n<p><strong>Nothing. Else. Matters.</strong> It’s beautiful, gorgeous, stunning — whatever word you can think of probably isn’t going to really do it justice. If you have or have seen an iPhone 4 or 4S, then you know what it looks like. And yes, it’s that good. In the interest of full disclosure, I <em>am</em> a display nut — it is the single-most important thing about an electronic device to me. But Jeff Atwood <a href=\"https://blog.codinghorror.com/welcome-to-the-post-pc-era/\">makes a really good point</a> about the importance of the display, especially for something like an iPad:</p>\n<blockquote>\n<p>iPad 3 reviews that complain “all they did was improve the display” are clueless bordering on stupidity. Tablets are pretty much <em>by definition all display</em>; nothing is more fundamental to the tablet experience than the quality of the display.</p>\n</blockquote>\n<p>There just isn’t much to say about this — it’s exactly what I expected, it’s well worth the upgrade, and I now wish for no other display types anywhere. If there is a 27-inch retina cinema display coming, you’d better believe I’ll get it (along with the two new video cards it’d probably take to drive the thing).</p>\n<h2><a href=\"#speed-and-memory\">Speed and Memory</a></h2>\n<p>Snappy as expected. The memory bump solves a very real annoyance I have with mobile Safari and having to reload tabs. Though the increased speed means that reloading tabs isn’t as much of a slowdown as it was on the first-gen anyway. I realize the speed is not much of a boost for someone who’s accustomed to an iPad 2, but for me, it’s very noticeable.</p>\n<p>Overall, I’m very pleased, despite the minor issues above. With any device, <em>real</em> usage is what defines whether or not it works for you, and time will tell if the minor problems turn into major problems in the long term or not. I’m not too worried about that, but we’ll see.</p>\n<section><h2><a href=\"#footnote-label\">Footnotes</a></h2>\n<ol>\n<li>\n<p>I am aware that I could simply turn the iPad around so that the Smart Cover hinge was on the bottom and everything would be oriented the way I am accustomed to. However, the Smart Cover just doesn’t seem to play well when held that way — everything just feels awkward. </p>\n</li>\n</ol>\n</section>",
      "date_published": "2012-03-24T23:08:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/five-people-one-guitar/",
      "url": "https://tylerbutler.com/five-people-one-guitar/",
      "title": "Five People, One Guitar",
      "content_html": "<p>Absolutely love <a href=\"https://www.youtube.com/watch?v=d9NF2edxy-M\">this cover</a> of Gotye’s <em>Somebody That I Used to Know</em>:</p>\n<div>\n    \n</div>",
      "date_published": "2012-03-23T07:35:00.000Z",
      "tags": [
        "music"
      ]
    },
    {
      "id": "https://tylerbutler.com/new-tylerbutler-com/",
      "url": "https://tylerbutler.com/new-tylerbutler-com/",
      "title": "New tylerbutler.com",
      "content_html": "<p>I’ve just pushed out a brand new version of <a href=\"/\">tylerbutler.com</a>. It’s a completely original redesign from the ground up, and is built using a static blog engine I wrote called <a href=\"/projects/engineer/\">Engineer</a>. I can now write posts in <a href=\"https://daringfireball.net/projects/markdown/\">Markdown</a>, save them to a folder that gets synced everywhere via <a href=\"https://www.dropbox.com\">Dropbox</a>, and reap the speed and huge scale benefits that come with a static site. I’ll be posting a bit more about Engineer soon, and the source will be up on GitHub eventually as well.</p>\n<p>One of the major goals when rebuilding the site was to encourage me to <em>write</em> again. My last post was in January of <em>last year</em>, and the last substantial post was long before that. That’s just… embarrassing…</p>\n<p>I haven’t decided whether to migrate any of my old posts over or not. There’s frankly not a lot of it that’s relevant at this point, and the prospect of making a completely fresh start has quite a bit of appeal. We’ll see. Most likely I’ll leave them up at some archive site for my own benefit (I learn a lot from periodically going back to old stuff I wrote and reading it again with fresh eyes). The world will weep to lose them, I’m sure.</p>\n<p>Anyway, here’s hoping I’ll be writing more often soon. I have no excuses!</p>",
      "date_published": "2012-03-18T06:30:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/2010-year-in-review/",
      "url": "https://tylerbutler.com/2010-year-in-review/",
      "title": "2010 Year in Review",
      "content_html": "<p>Seems to be the trend these days to ‘review’ the year, and since I am nothing\nif not a trend-follower (snicker)… Here goes.</p>\n<p>In 2010 I:</p>\n<ul>\n<li>Got married — well, we had our official wedding, anyway</li>\n<li>Shipped Office 2010 and joined a new team at work</li>\n<li>Started teaching Web Design at Issaquah High School</li>\n<li>Learned to write apps for Windows Phone 7</li>\n<li>Moved from Mercer Island to Lynnwood</li>\n<li>**Almost **downed the Lich King in Icecrown Citadel — hopefully I’ll get him during the guild run on Monday!</li>\n<li>I bought an iPad</li>\n<li>Gained weight</li>\n<li>Grew a beard</li>\n<li>Learned firsthand the challenges of living near the in-laws</li>\n</ul>\n<p>In 2011, I predict the following things will happen:</p>\n<ul>\n<li>I’ll stay married</li>\n<li>I’ll keep shipping software as part of Office</li>\n<li>I’ll prepare to teach another bunch of high school students the awesomeness of Web Design</li>\n<li>I’ll share what I’ve learned so far from my experience teaching here on tylerbutler.com</li>\n<li>I’ll re-theme/redesign tylerbutler.com</li>\n<li>I’ll lose weight, then gain much of it back</li>\n<li>I’ll shave my beard and vow never to grow it again</li>\n<li>I’ll ship the first of what I hope will be several apps for Windows Phone 7</li>\n<li>I’ll dig in and start hardcore learning HTML 5</li>\n<li>I’ll speak at some conference somewhere</li>\n<li>I’ll buy some new Apple gadget, but probably not a phone</li>\n<li>I’ll build a new computer so I can play WoW on Ultra</li>\n<li>Elizabeth will start graduate school</li>\n<li>We’ll get either a second car or a second dog</li>\n<li>I won’t take nearly enough vacation</li>\n<li>I won’t play nearly enough video games</li>\n<li>I won’t have nearly enough time to code</li>\n</ul>",
      "date_published": "2011-01-02T03:06:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/brave-new-world/",
      "url": "https://tylerbutler.com/brave-new-world/",
      "title": "Brave New World",
      "content_html": "<p>I need to read Brave New World immediately.</p>",
      "date_published": "2009-08-15T05:09:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/assumptions-make-life-simpler/",
      "url": "https://tylerbutler.com/assumptions-make-life-simpler/",
      "title": "Assumptions Make Life Simpler",
      "content_html": "<p>Chris Greening, the developer of iPhone Sudoku Grab, <a href=\"https://sudokugrab.blogspot.com/2009/07/how-does-it-all-work.html\">explains how it\nworks</a>. I find this section the most interesting:</p>\n<blockquote>\n<p>One of the things that makes recognizing Sudoku puzzles an easier task than\nmost image processing/recognition problem is that it is a highly constrained\nproblem — a standard Sudoku puzzle is going to be a square grid and it will\nonly contain the printed numbers 1-9. These two points are very important. The\nfirst point — it’s a square grid tells us what shape a puzzle is and what we\nshould be looking for in an image. The second point — it will only contain the\nprinted numbers 1-9 tells us that we aren’t going to need a sophisticated OCR\nsystem. When we look at the problem there’s nothing that jumps out and says\n“nobody has solved this before — it’s probably really hard”. We can also add\nsome additional assumptions -</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<ol>\n<li><strong>In a photograph of a sudoku puzzle, the puzzle is going to be the\nmain/most important object on the page</strong> A user is going to be photographing\nthe puzzle — they aren’t going to take a picture of a whole newspaper page,\nthey won’t be taking a photograph of a coffee shop and expecting us to find a\nsudoku puzzle that someone is playing four tables away. Also, the user is\ngoing to try and capture the whole puzzle, they won’t miss a corner or chop\noff the top.</li>\n</ol>\n</blockquote>\n<blockquote>\n<ol>\n<li><strong>The puzzle will be orientated reasonably correctly.</strong> No-one\n(hopefully) is going to be taking a picture of an upside down puzzle, and\ntypically they will be trying to align it nicely in the camera viewfinder so\nit is reasonably straight without too much distortion.</li>\n</ol>\n</blockquote>\n<p>A great example of how some simple assumptions made about your problem make it\nfar easier to solve. Of course, the key is making sure the assumptions are\nvalid, or being prepared to handle edge cases where these assumptions prove\nfalse.</p>",
      "date_published": "2009-08-14T03:14:00.000Z",
      "tags": [
        "design"
      ]
    },
    {
      "id": "https://tylerbutler.com/software-hatred/",
      "url": "https://tylerbutler.com/software-hatred/",
      "title": "Software Hatred",
      "content_html": "<p>Great insight from <a href=\"https://blog.codinghorror.com/nobody-hates-software-more-than-software-developers/\">Jeff Atwood</a>:</p>\n<blockquote>\n<p>One of the (many) unfortunate side effects of choosing a career in software\ndevelopment is that, over time, you learn to hate software. I mean really hate\nit. With a <em>passion</em>. Take the angriest user you’ve ever met, multiply that by\na thousand, and you still haven’t come close to how we programmers feel about\nsoftware. <strong>Nobody hates software more than software developers.</strong></p>\n</blockquote>\n<p>This is so true it hurts. An additional side effect of being a Program Manager\nis that you become extremely critical of everything. Parking meters. Elevator\nbuttons. Anything that isn’t as usable as it should be. Not that I could do\nany better at designing these things, necessarily, but they still anger me,\nand much more than they used to now that design is a part of my daily work\nlife.</p>\n<p>Another great quote from the article:</p>\n<blockquote>\n<p><strong>Hardware companies don’t generally do software well</strong>. Digital camera\ncompanies excel at building digital camera hardware. Software, if it exists at\nall, is an afterthought, a side effect, a checkbox on some marketing weasel’s\nclipboard.</p>\n</blockquote>\n<p>This is true not only for consumer electronics like digital cameras, but also\nfor other hardware that you might not think of as running “software.” Think of\nyour microwave. The ice dispenser on your fridge. Your washing machine. Your\ncar’s on-board computer. All of these are running software in some fashion\nmost likely, and they all kind of suck.</p>",
      "date_published": "2009-07-24T03:22:00.000Z",
      "tags": [
        "design"
      ]
    },
    {
      "id": "https://tylerbutler.com/dates-in-posts-fixed/",
      "url": "https://tylerbutler.com/dates-in-posts-fixed/",
      "title": "Dates in Posts Fixed",
      "content_html": "<p>Just made a minor fix to the site… I noticed that dates weren’t showing up for\nsome posts. Took me about 5 minutes to figure out that the Wordpress\n<a href=\"https://codex.wordpress.org/Template_Tags/the_date\">the_date()</a> function had changed:</p>\n<blockquote>\n<p>When there are multiple posts on a page published under the SAME DAY,\n<code>the_date()</code> only displays the date for the first post (that is, the first\ninstance of <code>the_date()</code>).</p>\n</blockquote>\n<p>Quick and easy change…</p>\n<p>Before:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>&lt;?</span><span>php</span><span> </span><span>the_date</span><span>() </span><span>?&gt;</span><span>,</span><span> </span><span>&lt;?</span><span>php</span><span> </span><span>the_time</span><span>() </span><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>After:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>&lt;?</span><span>php</span><span> </span><span>the_time</span><span>(</span><span>\"F j, Y, g:i a\"</span><span>) </span><span>?&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>",
      "date_published": "2009-07-14T11:01:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/follow-up-on-outlook-htmlcss-post/",
      "url": "https://tylerbutler.com/follow-up-on-outlook-htmlcss-post/",
      "title": "Follow Up On Outlook HTML+CSS Post",
      "content_html": "<p><em>Note: I work for Microsoft, in the Office division, but I don’t work in or\nwith the Outlook team. I don’t have any specific knowledge about their\ndecisions or plans, and this post is based only my own experience here at\nMicrosoft.</em></p>\n<p>My <a href=\"/2009/06/outlook-email-and-css/\">post on Outlook’s HTML+CSS rendering</a> generated a bit of buzz, due in\nno small part, I’m sure, to <a href=\"https://www.zeldman.com/2009/06/24/sour-outlook/#comment-43712\">Zeldman linking to it</a> from his own post. I’m\nfinally getting some time to respond.</p>\n<p>First of all, thanks to everyone for the responses; I am glad that this\nalternative viewpoint at least sparked some discussion. Despite what you may\nthink, there are plenty of people on the “front lines” at Microsoft that\nreally care a lot about this stuff, and we try very very hard to make sure The\nRight Thing (tm) happens whenever possible.</p>\n<p>I have <a href=\"/2009/06/outlook-email-and-css/comment-page-1/#comment-137\">responded</a> to the comments directly in the post, but I wanted to\nalso mention that I filed two separate bugs in our internal bug database. The\nfirst covers the fact that we’re apparently not obeying your browser\npreference when you open an email in a browser, though this may have something\nto do with the actual file type that the email message gets stored as\ntemporarily. Non-IE browsers might not register to open that file type.</p>\n<p>The second covers the actual piss-poor rendering Outlook does of the acid test\nemail. Thanks to Dave Greiner from the Email Standards project for providing\nlinks and addressing the questions I had in the original post. Once I had a\ncopy of the acid test email I was able to get the bugs officially filed.</p>\n<p>I will not be posting any further details on the status of these or other\nbugs, either now or after we ship, so please don’t ask. I am sorry, but it\nisn’t standard practice at Microsoft to reveal publicly the status of bugs,\nand I don’t plan on starting a trend in this particular area. It’s also\nfrankly not my place to comment on bugs on which I am not an expert,\nespecially those that are in areas completely separate from the ones I work\non. You’ll have to take my word for it as an honest, standards-loving software\ndeveloper that I filed them.</p>\n<p>Please continue to send feedback in any way you can to Microsoft, and\nspecifically the Outlook team. Here’s hoping for some quality HTML+CSS email\nrendering in the future.</p>",
      "date_published": "2009-07-14T08:35:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/on-intelligent-interfaces/",
      "url": "https://tylerbutler.com/on-intelligent-interfaces/",
      "title": "On Intelligent Interfaces",
      "content_html": "<p><a href=\"https://unqualified-reservations.blogspot.com/2009/07/wolfram-alpha-and-hubristic-user.html\">Mencius Moldbug</a> on why Wolfram Alpha shouldn’t have a natural language-based\ninterface:</p>\n<blockquote>\n<p><em>You</em> know that when you type “two cups of flour and two eggs” (which now\n<a href=\"https://www82.wolframalpha.com/input/?i=two+cups+of+flour+and+two+eggs\">works</a>) you are looking for a Nutrition Facts label. It is only Stephen\nWolfram’s giant electronic brain which has to run ten million lines of code to\nfigure this out. Inside your <em>own</em> brain, it is written on glowing letters\nacross your forehead.</p>\n</blockquote>",
      "date_published": "2009-07-10T11:50:00.000Z",
      "tags": [
        "design"
      ]
    },
    {
      "id": "https://tylerbutler.com/love/",
      "url": "https://tylerbutler.com/love/",
      "title": "Love",
      "content_html": "<p>Too incredibly brilliant not to share.</p>",
      "date_published": "2009-06-27T02:47:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/teachers-are-important/",
      "url": "https://tylerbutler.com/teachers-are-important/",
      "title": "Teachers Are Important",
      "content_html": "<p>Danah Boyd on teacher involvement outside the classroom. I benefited\ntremendously from this.</p>",
      "date_published": "2009-06-27T02:02:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/outlook-email-and-css/",
      "url": "https://tylerbutler.com/outlook-email-and-css/",
      "title": "Outlook, Email, and CSS",
      "content_html": "<p><em><strong>Update July 13, 2009:</strong> Thanks to some comments, I’ve got new links and\nminor updates in the post now.</em></p>\n<p><em>Note: I work for Microsoft, in the Office division, but I don’t work in or\nwith the Outlook team. I don’t have any specific knowledge about their\ndecisions or plans, and this post is based only my own experience here at\nMicrosoft.</em></p>\n<p>The web community has been up in arms the last day or so about a <a href=\"/link-not-available?url=http%3A%2F%2Ffixoutlook.org\">campaign via\nTwitter</a> pushing for Outlook 2010 to stop using the Word rendering engine\nfor HTML email. I engaged in a short friendly discussion with my buddy\n<a href=\"https://twitter.com/vandrijevik\">Vlad</a> on Twitter about the issue, and that got me thinking about the issue\na bit more deeply. And the more I thought about it, and read everything that\nwas being written, the more I realized that people aren’t actually\ncommunicating effectively, and that pisses me off…</p>\n<p>The fixoutlook.org website says this: “Microsoft has confirmed they plan on\nusing the <strong>Word rendering engine</strong> to display HTML emails in Outlook 2010.”\n(emphasis added) Based on that, and the rest of the text on the site, it seems\nlike the big beef they have is that Word’s <strong>rendering engine</strong> for HTML is\nnot up to snuff. Fair point — it isn’t. But they contradict themselves in\n<a href=\"/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Fblog%2Fentry%2Fmicrosoft-respond-to-our-call-for-standards-support%2F\">their updated response</a> to Microsoft’s response when they say, “We’re\nasking that the <strong>HTML produced by the Word engine be standards compliant</strong>.\nThis in turn will ensure that the engine will correctly <em>render</em> standards-\nbased emails.” (emphasis added)</p>\n<p>Wait a second. Do they want an editor that produces HTML, or a rendering\nengine that works properly? Doing the work to make sure the editor is\nproducing clean markup <strong>might</strong> produce a rendering engine that renders\nnicely, perhaps it even <strong>should</strong> produce one, but that <strong>doesn’t mean it\nwill</strong>. Those two pieces of work are <strong>not</strong> the same thing.</p>\n<p>Lots of people have been pointing to <a href=\"https://www.zeldman.com/2009/06/24/sour-outlook/\">a post from Zeldman</a> about this.\nZeldman’s a brilliant guy, but he completely misses the point when he\nperpetuates a rumor about why Outlook chose Word’s engine: “Rumor has it that\nMicrosoft chose the Word rendering engine because its Outlook division\n“couldn’t afford” to pay its browser division for IE8. And by “couldn’t\nafford” I don’t mean Microsoft has no money; I mean someone at this fabulously\nwealthy corporation must have neglected to budget for an internal cost.”</p>\n<p>Ummmm… no. In my experience, the phrase “couldn’t afford” at Microsoft R&amp;D has\nnothing to do with monetary cost. It has to do with engineering cost. Features\ndon’t exist just because you want them to exist. (An aside: <a href=\"https://blogs.msdn.com/oldnewthing/\">Raymond Chen</a>\nhas a great quote about this that I can’t find. If you have a link, please let\nme know.) So I imagine that the rationale in the Outlook team went something\nmore like this:</p>\n<p><em>Well, we want Outlook to produce really rich emails, and we want it to have a\nreally familiar look and feel, so people already using our products will feel\nat home. Hmmm, building an editor is extremely hard to get right, plus we,\nbeing part of the Office suite, have several editing tools already. Emails\ntend to be a lot like documents, so Word seems to be a reasonable choice. This\nway we can leverage all the editor features Word already has, plus things\nthey’re building this release, and focus on the Outlook-specific work we have\nto do. We don’t want to invest our engineering time in building an editor when\nwe already have one.</em></p>\n<p>From this standpoint, it’s easy to see why using Word for rendering as well is\nthe next logical step. You could argue that they should use IE (or Gecko, or\nWebkit, as Zeldman does, but again, just because those engines are free\ndoesn’t mean using them is without cost) to render email, and Word to author\nit. That’s a reasonable idea. In fact, the Outlook team seems to agree with\nyou, because if you get an HTML email that looks wrong, you see a link to open\nit in a browser. In fact, even the <a href=\"https://farm4.static.flickr.com/3322/3637814200_a2aa59bc89_o.jpg\">example image</a> at fixoutlook.org has\nthe “info bar” at the top that does this.</p>\n<p>You can take issue with the implementation, certainly, because it sucks\nmightily. The fact that I have to open the email in a browser separately\nblows. I shouldn’t have to do that. But don’t kid yourself into thinking that\nintegrating an IE window into the message window is so stupidly simple that\nMicrosoft is maliciously avoiding doing it to somehow screw users. It might be\nstraightforward — I honestly don’t know. But do you? If you think you do,\nplease go read Steve Yegge’s post “<a href=\"https://steve-yegge.blogspot.com/2009/04/have-you-ever-legalized-marijuana.html\">Have you ever legalized marijuana?</a>”\nand come back.</p>\n<p>What really bugs me about this whole thing is that people immediately jumped\non the fact that Outlook uses Word for rendering, instead of sticking to the\nreal problem that Outlook’s rendering of HTML sucks in some cases. The\nrendering engine they’re using is immaterial, really, because if the team goes\nand fixes the rendering inadequacies, then the issue goes away. They can\nchoose how to fix the issues, should they choose to fix them at all, but at\nthis point, even if all the rendering issues are fixed, many people will still\nbe pissed because Word is used to render the email. The argument has shifted\nfrom being about the support proper email display to being about Word used for\nrendering, so there doesn’t seem to be a path to redemption for Microsoft in\nthe court of public opinion that doesn’t involve ripping out Word completely.</p>\n<p>I completely agree, personally, that web standards serve as a reasonable basis\nfor email format standards even though there is no formal effort to\nstandardize email. But please argue about the right things. Spend your energy\ntrying to see those standards acknowledged rather than perpetuating this silly\nargument about ripping out Word from Outlook. Hopefully this effort will have\nthe desired effect, and these rendering issues will get resolved prior to\nOutlook 2010 RTM. But I can almost completely guarantee that if you want Word\ncompletely ripped from Outlook, you’re not going to get what you want.</p>\n<p><em>By the way, does anyone have a screenshot of what the email used in the\nexample image looks like in Outlook 2007, which also used Word for rendering?\nThat struck me as a strange omission. I’m wondering if the issues displayed in\nthat screenshot are just bugs in the 2010 beta. I doubt it, but would still\nlike to see it.</em></p>\n<p><em><strong>Update:</strong> Turns out you can see this in the <a href=\"/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Fclients%2Fmicrosoft-outlook-2007%2F\">Email Standards project’s\nreview of Outlook 2007</a>. As I suspected, no real differences.</em></p>\n<p><em>Also — is there any way to get a sample HTML email from the Email Standards\nProject’s <a href=\"/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Facid-test%2F\">email acid test</a>? Seems ridiculous there’s no “email me this\nsample email” form on the acid test page. I can and will file a bug against\nOutlook if I can get a copy mailed to me.</em></p>\n<p><em>**Update: **You can now mail yourself a copy of the email directly from the\n<a href=\"/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Facid-test%2F\">acid test page</a>.</em></p>\n<hr />\n<p>This didn’t really fit into the overall flow of the post above, but I still\nthink it’s reasonable info to consider, so I’m including it here anyway. I’m\nabout to throw out a bunch of numbers and statistics that are not backed up by\nany data. They are based only on my own logic and occasionally rational mind.\nI think they’re true and reasonable statements, but I welcome data that\ncontradicts them.</p>\n<p>I think it’s safe to say that a majority, say, 80%, of Outlook users use it\nwith Exchange. Also, a majority of Exchange users use Outlook, and Exchange is\nprimarily used in business settings. Since a large majority of email sent in a\nbusiness setting is sent to other people in your business, then they’re\nprobably also using Exchange, and also probably using Outlook. Based on this\nnot-so-scientific reasoning, I argue that the number of emails received in\nOutlook that didn’t originate in Outlook is relatively small. That means,\npractically speaking, that as long as Outlook can render email that started in\nOutlook, you’re hitting the majority of your users’ needs.</p>\n<p>Now, the idealist in you (and me, for the record) is screaming bloody murder,\nbecause you want to see the “right thing” happen for all cases, not just the\nmajority case. But unfortunately, software is more about practicality than\nidealism, and at some point some smart, but possibly naive people in Outlook\nmade a tradeoff. I’d say with 99% certainty that at some point a developer or\ntwo in Outlook estimated the cost of different approaches and implementations,\nand this one wound up cheaper. They made a cut. They made a tradeoff. And we\ndisagree with the tradeoff.</p>",
      "date_published": "2009-06-27T00:11:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/effing-hail/",
      "url": "https://tylerbutler.com/effing-hail/",
      "title": "Effing Hail",
      "content_html": "<p>I love this game, and it’s great with a mouse. But it would make an even more\namazing iPhone game…</p>\n<p><a href=\"https://jiggmin.com/play_game.php?title=Effing+Hail\">https://jiggmin.com/play_game.php?title=Effing+Hail</a></p>",
      "date_published": "2009-06-19T03:27:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/powershell-for-fun-and-profit/",
      "url": "https://tylerbutler.com/powershell-for-fun-and-profit/",
      "title": "PowerShell for Fun and Profit",
      "content_html": "<p>Stefan Goßner has a great post on his blog covering <a href=\"/link-not-available?url=http%3A%2F%2Fblogs.technet.com%2Fstefan_gossner%2Fpages%2Fcontent-deployment-best-practices.aspx\">some common problems</a>\nthat people have with Content Deployment in SharePoint. Problem 13 has to do\nwith the default timeout window for Content Deployment jobs. Stefan provides\nsome sample code that you can use to adjust the timeout value, since it’s not\nexposed through the UI, but I find writing and running sample code on a server\na bit of a pain. Instead of writing code, you can actually use PowerShell to\ndo this directly from the PS prompt.</p>\n<p>The key to doing this is loading the SharePoint DLLs into your PowerShell\nenvironment. You can do this using the System.Reflection.Assembly class. Take\na look at this sample script:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>#!powershell</span></div></div><div><div><span>param( $newTimeout = 600 )</span></div></div><div><div>\n</div></div><div><div><span>[System.Reflection.Assembly]::Load(\"Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c\")</span></div></div><div><div>\n</div></div><div><div><span>$cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance()</span></div></div><div><div>\n</div></div><div><div><span>$cdconfig.RemoteTimeout = $newTimeout</span></div></div><div><div><span>$cdconfig.Update()</span></div></div><div><div>\n</div></div><div><div><span>\"Updated RemoteTimeout to $newTimeout seconds.\"</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>In line 3, I load up the Microsoft.SharePoint.Publishing DLL, then I grab the\n<code>ContentDeploymentConfiguration</code> (line 5) using the <code>GetInstance()</code> static method.\nI update the <code>RemoteTimeout</code> property, then call <code>Update()</code>, and we’re done. No\ncode to write and compile.</p>\n<p>This example uses the param keyword, which means you can save it as\n<code>ChangeRemoteTimeout.ps1</code>, then run it like this:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>PS C:\\&gt; ChangeRemoteTimeout –newTimeout 1200</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>This is completely optional, of course, but if you find yourself doing this a\nlot, it might be worth saving it as a reusable script.</p>\n<p>You might also want to make changes to some of the options that are exposed\nthrough the UI already. Here’s an example:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>PS C:\\&gt; [System.Reflection.Assembly]::Load(\"Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c\")</span></div></div><div><div><span>PS C:\\&gt; $cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance()</span></div></div><div><div><span>PS C:\\&gt; $cdconfig.AcceptIncomingJobs = $true</span></div></div><div><div><span>PS C:\\&gt; $cdconfig.RequiresSecureConnection = $false</span></div></div><div><div><span>PS C:\\&gt; $cdconfig.Update()</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>In this case, I’m configuring the farm to accept incoming deployment jobs and\nnot require secure connections. You can also make additional changes to other\nproperties, such as FileMaxSize and RemotePollingInterval using this method.\nStefan covers these properties in his <a href=\"/link-not-available?url=http%3A%2F%2Fblogs.technet.com%2Fstefan_gossner%2Farchive%2F2008%2F05%2F28%2Fpimp-my-content-deployment-job.aspx\">Pimp My Content Deployment Job</a>\npost.</p>\n<p>One other note… Using .NET DLLs in PowerShell is generally supported across\nthe board. It’s not limited to the SharePoint DLLs. There’s some pretty\nexciting stuff you can do here once you start playing around.</p>",
      "date_published": "2009-06-16T02:20:00.000Z",
      "tags": [
        "powershell",
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/who-watches-the-watchman/",
      "url": "https://tylerbutler.com/who-watches-the-watchman/",
      "title": "Who Watches the Watchman?",
      "content_html": "<p>Fascinating piece of technology that I’d never heard of: the watchclock. For\nfun, read the first part of the article, which describes the scenario and\nuse-case, then try to design a solution before you read further.</p>",
      "date_published": "2009-05-22T01:24:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/science-is-fun/",
      "url": "https://tylerbutler.com/science-is-fun/",
      "title": "Science is Fun!",
      "content_html": "<p>Great xkcd today about what gets kids interested in science.</p>",
      "date_published": "2009-05-18T20:50:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/wikipedia-walks/",
      "url": "https://tylerbutler.com/wikipedia-walks/",
      "title": "Wikipedia Walks",
      "content_html": "<p>A few years ago I realized that when I would start reading an interesting\narticle on Wikipedia, I would often end up reading 6-8 additional articles\nthat were linked from the original article, then branch out from there, etc.\netc. I’d end up in a completely different subject than the one I’d started in,\nand I learned a lot, plus it was just a ton of fun.</p>\n<p>I started calling these <em>Wikipedia Walks</em>. The concept is simple - start at\nan article you find interesting, then just continue on to any articles linked\nfrom the original. Finish when you get bored. To make it more interesting, you\nshould record both the starting article and the ending article, so you can see\njust how far off the beaten path you’ve gotten.</p>\n<p>To start, I’d suggest the article on <a href=\"https://en.wikipedia.org/wiki/Game_theory\">Game Theory</a>.</p>",
      "date_published": "2009-05-18T20:35:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/computer-security-x-ray-specs/",
      "url": "https://tylerbutler.com/computer-security-x-ray-specs/",
      "title": "Computer Security X-Ray Specs",
      "content_html": "<p>IT security consultant Rich Mogull gives some tips for seeing through the BS\nin security press releases. It’s aimed at the Mac community, but it has some\ninsightful info that applies across the board. In particular, I like his even-\nhanded evaluation of the relative security of both Windows and OS X:</p>\n<blockquote>\n<p>For many years Mac OS X did have an inherent security advantage over\nWindows, but to those who understand the technologies within the operating\nsystems, those days are long past.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>The latest version of Windows (Vista, not that most people use it) is\nprovably more secure in the lab than the latest version of Mac OS X 10.5\nLeopard. Leopard lacks proper implementation of the new anti-exploitation\ntechnologies included in Vista, and, based on the number of Apple security\npatches, experiences about as many vulnerabilities.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>When I see articles that defend Mac OS X based on the lack of Mac-specific\nmalicious software, and not on current technical capabilities, cybercrime\ndynamics, or attack methods, I tend to be dubious.</p>\n</blockquote>",
      "date_published": "2009-05-18T07:17:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/respect-religion/",
      "url": "https://tylerbutler.com/respect-religion/",
      "title": "Respect Religion",
      "content_html": "<p>Marco Arment on Judaism:</p>\n<blockquote>\n<p>There’s no sales pitch. No recruiting team. Nobody spamming me in the\nsubway, coming to my door, or yelling at me on the street. If I want to learn\nanything about Judaism, I can just ask the many Jewish people I know.</p>\n<p>…</p>\n<p>They’re comfortable enough in their beliefs that they don’t need to nag or\nargue with people who disagree or don’t care.</p>\n</blockquote>",
      "date_published": "2009-05-16T22:37:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/office-2010-the-movie/",
      "url": "https://tylerbutler.com/office-2010-the-movie/",
      "title": "Office 2010: The Movie",
      "content_html": "<p>A bit cheesy, but glad to see some news about the next version of Office\nfinally coming out. I wish there were some screenshots or videos in the little\nmovie clip, but it’s early — I’m sure we’ll be releasing that sort of stuff in\nthe future. It’ll be a busy next few months for those of us on the product\ngroup, but it’s exciting to finally start telling people about all the cool\nstuff we’ve built.</p>",
      "date_published": "2009-05-16T08:47:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/mark-pilgrim-on-web-fonts/",
      "url": "https://tylerbutler.com/mark-pilgrim-on-web-fonts/",
      "title": "Mark Pilgrim on Web Fonts",
      "content_html": "<p>I love Mark Pilgrim.</p>\n<blockquote>\n<p>Dynamic web fonts are coming. Actually they’re already here, but most of Our\nPeople haven’t noticed yet. But they will, and that’s going to be a huge boon\nto somebody. I see you’ve decided that it won’t be you. Well, have fun\nshuffling your little bits of metal around. The rest of us will be over here,\nusing the only fonts we’re allowed to use: Everything But Yours.</p>\n</blockquote>",
      "date_published": "2009-05-16T04:40:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/twitter-replies-changes/",
      "url": "https://tylerbutler.com/twitter-replies-changes/",
      "title": "Twitter @replies Changes",
      "content_html": "<p>There’s been some hoopla on Twitter today after a <a href=\"/link-not-available?url=http%3A%2F%2Fblog.twitter.com%2F2009%2F05%2Fsmall-settings-update.html\">poorly handled\nannouncement</a> that the option to control whether replies from people you\nfollow to people you don’t follow show up in your feed. This was an option in\nthe Notices section of the Twitter settings that was off by default. The\noriginal post from <a href=\"https://twitter.com/Biz\">@biz</a> made it sound like they were trying to reduce\nconfusion and that it was no big deal. That’s a bit naive — they should have\nseen the backlash coming a mile away… Dave Winer has <a href=\"http://www.scripting.com/stories/2009/05/13/lessonsFromTheChangesInTwi.html\">a good summary</a> of\nproblems with how they messaged things.</p>\n<p>@biz later posted that they had heard the feedback, claiming it was a\nscalability problem with the implementation. I initially didn’t buy that\nargument, but the <a href=\"http://www.readwriteweb.com/archives/is_this_why_twitter_changed_its_replies_policy.php\">description over at ReadWriteWeb</a> clarifies things\nsomewhat. <a href=\"http://www.scripting.com/stories/2009/05/13/lessonsFromTheChangesInTwi.html#comment-9291130\">This comment</a> over at Winer’s post clarifies it further. I think\nI understand now, given their architecture, why this would be a beneficial\nchange for them to make.</p>\n<p>But that’s not what I’m ultimately writing about. Much of the complaining from\npeople opposed to the change has been that it makes it harder to meet new\npeople on Twitter. If you see a reply to someone else from a person you follow\nthen you might also be interested in following them. OK, fine, I buy that, but\nfor me, I simply want to see <strong>everything</strong> people I follow say, regardless of\nwho they say it to. With clients like <a href=\"http://www.atebits.com/tweetie-mac/\">Tweetie</a> and <a href=\"/link-not-available?url=http%3A%2F%2Fphobos.apple.com%2FWebObjects%2FMZStore.woa%2Fwa%2FviewSoftware%3Fid%3D284540316%26mt%3D8\">Twitterrific 2.0\n(iTunes link)</a> able to browse through conversations effortlessly, I can use\nthe tweets from my timeline as a jumping-off point to see the whole\nconversation which someone I <strong>am</strong> interested in is involved in. My goal is\nnot to find new people to follow (though that does happen occasionally), but\nrather, just to see what interesting things people I follow are saying. I\ndon’t care who they’re talking to. It’s not like everything <a href=\"https://twitter.com/Lincolnator\">@Lincolnator</a>\nsays to <a href=\"https://twitter.com/MajorLB\">@MajorLB</a> is completely uninteresting to me just because I don’t\nfollow her.</p>\n<p><a href=\"/link-not-available?url=http%3A%2F%2Fblog.twitter.com%2F2009%2F05%2Fwe-learned-lot.html\">The proposed changes</a> as they stand right now don’t solve my complaint.\nBut it’s early; the smart people at Twitter will figure something out, and\nhopefully, it’ll solve my scenario and world hunger at the same time. One can\nhope and dream.</p>\n<p>You can see the protests/commentary on Twitter itself by\n<a href=\"/link-not-available?url=http%3A%2F%2Fsearch.twitter.com%2Fsearch%3Fq%3D%2523Fixreplies\">searching for #fixreplies</a>. It’s still the top trending search term as of\nthis writing.</p>",
      "date_published": "2009-05-14T04:14:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/cmon-iphone-be-serious/",
      "url": "https://tylerbutler.com/cmon-iphone-be-serious/",
      "title": "C'mon iPhone, be serious...",
      "content_html": "<p><a href=\"http://junctionpoint.wordpress.com/2009/04/06/ive-joined-a-cult-the-iphone-cult/\">Warren Spector on the iPhone</a>:</p>\n<blockquote>\n<p>It’s like the iPhone is working so hard to be my friend it’s incapable of\nbeing my co-worker. It’s all fun and games when, at times, I want it to be\nserious.</p>\n</blockquote>\n<p>Good points all around. If you want to use your phone for doc editing, or come\nfrom a Palm/Windows Mobile background and are used to rich syncing with the\ndesktop, the iPhone is lacking.</p>\n<p><a href=\"http://en.wikipedia.org/wiki/Warren_spector\">More on who Spector is</a>, for those that don’t know. <a href=\"http://en.wikipedia.org/wiki/Deus_Ex\">Deus Ex</a> remains\none of my favorite games of all time.</p>",
      "date_published": "2009-05-09T00:33:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/sharepoint-permissions-cheat-sheet/",
      "url": "https://tylerbutler.com/sharepoint-permissions-cheat-sheet/",
      "title": "SharePoint Permissions \"Cheat Sheet\"",
      "content_html": "<p>Back when we were building SharePoint 2007, a member of our Program Management\nteam left Microsoft, and I inherited the permissions-related features for the\nthen Content Management Server team, which was responsible for all of the web\npublishing features in SharePoint. Essentially, this meant that I has to\nfigure out what the correct set of permission levels were for our features,\nand what lists/libraries should have unique (non-inherited) permissions.</p>\n<p>Now, if you’ve used SharePoint for any length of time, you’ve no doubt been\nfrustrated with permissions management. It’s definitely a sore point.\nUnfortunately, I don’t have any magic bullets or golden hammers. When I\nstarted trying to figure everything out so that I could make educated\ndecisions for our designs, I realized that I needed to write stuff down.\nPeople always asked questions like, “What rights do Designers have by\ndefault?” Sure, you can find out by going to the site itself and checking, but\nthe UI isn’t the easiest to navigate, and oftentimes what you really want to\ndo is compare multiple permissions levels. “What rights do Designers have that\nContributors don’t?”, for example. To help keep it all straight in my mind\n(and so I could point people to the info rather than answer 100 emails a day\nwith the same question!), the SharePoint Permissions “Cheat Sheet” was born.</p>\n<p>It’s nothing fancy, and it’s certainly not anything that no one else could\nhave created. But still, it has proven useful over the past few years. I still\nkeep a copy of it pinned to my office wall. It’s pretty self-explanatory. The\nfirst sheet has a table of the default publishing permission levels and what\nfine-grain permissions each of them has. The second sheet is just the\ndescriptions of each of the fine-grain permissions so I didn’t have to go\nhunting through the UI to find them whenever I was wondering what the\ndifferences were. Finally, the third sheet is a list of “securable objects”\n(which what I decided to call a list/library that had broken away permissions\ninheritance and was independently secured) and what default groups had what\nrights to those locations by default. This was particularly important since in\ngeneral, you want to avoid breaking permissions inheritance if you can, and we\nwanted to be very deliberate about where we did, and also track them to ensure\nthey made sense over time.</p>\n<p>So how exactly do you use this? Well, it can be a\nhandy reference as-is, but chances are that you have your own permissions\nlevel or have modified the existing ones to suit your needs, so you can modify\nthis sheet to reflect your own custom permissions and keep track of\neverything. It really is helpful to have a centralized reference of all of the\nvarious permissions levels. If you go through and put in your own levels, you\nmight realize that there’s a lot of needless duplication in the custom\npermission level you might have created. When it comes to SharePoint\npermissions, less is better, so this can be a helpful auditing tool as well as\na reference.</p>\n<p><strong>A couple of disclaimers…</strong> This was created based on the RTM\nversion. As far as I know, nothing has been changed in SP1 or SP2 that would\nimpact it, but I haven’t been checking to keep it up to date. If you do notice\nerrors you can let me know and I’ll try to correct it. Also, this obviously\nwon’t take into account any customizations that you may do that would alter\nthe default permission levels. If you use this for any of the purposes listed\nor for additional things, leave a comment! I’d love to hear how it’s working\nfor you and if it’s been helpful.</p>\n",
      "date_published": "2009-05-06T04:28:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/quick-and-nimble-not-in-the-app-store/",
      "url": "https://tylerbutler.com/quick-and-nimble-not-in-the-app-store/",
      "title": "Quick and Nimble? Not In the App Store...",
      "content_html": "<p>A great post by Garrett Murray about what it’s like to build an iPhone app\nthat relies on third-party data and subsequently gets broken by that third-\nparty data.</p>\n<p>App store sellers just cannot react to bugs quickly. The approval process\ncompletely hobbles them.</p>",
      "date_published": "2009-04-23T00:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/experimental-firefox-extensions-no-longer-require-login/",
      "url": "https://tylerbutler.com/experimental-firefox-extensions-no-longer-require-login/",
      "title": "Experimental Firefox Extensions No Longer Require Login",
      "content_html": "<p>It’s about freakin’ time. I was so sick of having to use <a href=\"http://www.bugmenot.com\">BugMeNot</a> just to\ndownload extensions…</p>",
      "date_published": "2009-04-18T14:29:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/mountain-goats-are-amazing-and-grooveshark-is-pretty-cool-too/",
      "url": "https://tylerbutler.com/mountain-goats-are-amazing-and-grooveshark-is-pretty-cool-too/",
      "title": "Mountain Goats Are Amazing (and Grooveshark is pretty cool too...)",
      "content_html": "<p>If you haven’t heard of the <a href=\"http://www.mountain-goats.com\">Mountain Goats</a>, then you are in for a real\ntreat. I’ve been a huge fan since 2005. I actually heard about them from a\ngirl I met during my interview with Microsoft while in Seattle. I picked up a\nfew tracks off of Tallahassee from iTunes, and I’ve been in love ever since.\n<a href=\"http://en.wikipedia.org/wiki/John_Darnielle\">John Darnielle</a> is utterly stunning — the lyrics consistently blow me\naway. I mean, it’s <em>poetry</em>. The fact that it’s set to music is just icing on\nan already orgasmic cake. If there is one musician who deserves comparison to\nDylan — it’s Darnielle. Anyway, my buddy <a href=\"https://twitter.com/vandrijevik\">Vlad</a> recently discovered them,\nand so I thought it time to share the amazingness with the world at large.</p>\n<p>Oh, and if you haven’t tried <a href=\"/link-not-available?url=http%3A%2F%2Fwww.grooveshark.com\">Grooveshark</a> yet, give it a whirl. The music\nselection is surprisingly large, and being able to link friends directly to\nsongs and embed them on the web is <em>killer</em>. The UI is a bit weird and awkward\n— but I assume it’ll evolve over time.</p>",
      "date_published": "2009-04-12T14:28:00.000Z",
      "tags": [
        "music"
      ]
    },
    {
      "id": "https://tylerbutler.com/mobile-redirects/",
      "url": "https://tylerbutler.com/mobile-redirects/",
      "title": "Mobile Redirects",
      "content_html": "<p>Listen up, site owners. I like it when I go to visit your site on my iPhone\nand I get redirected to an iPhone version of your site. Really, I do. It’s\nnifty. But if you’re not going to redirect me to the specific article I wanted\nto read, or the specific page I asked for, then don’t freakin’ redirect me. I\ndidn’t go to foobar.com/specific-article.aspx to get\nfoobar.com/iphone/home.aspx. They are not the same thing. If you don’t have\nthe capability to serve the specific page I asked for in a mobile-friendly\nformat, then don’t do anything.</p>\n<p>Stop being idiots.</p>",
      "date_published": "2009-04-12T13:57:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/more-accessibility/",
      "url": "https://tylerbutler.com/more-accessibility/",
      "title": "More Accessibility",
      "content_html": "<p>Another great post on accessibility from Mark Pilgrim. Good follow-up to\n<a href=\"/2009/03/accessibility-insanity/\">my last rant post</a>.</p>",
      "date_published": "2009-03-23T08:46:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/accessibility-insanity/",
      "url": "https://tylerbutler.com/accessibility-insanity/",
      "title": "Accessibility Insanity",
      "content_html": "<p>Part of my responsibilities for SharePoint these days involves markup\ncleanliness and accessibility, so over the last couple of years I have\neducated myself on the ins and outs of these issues, and have managed to learn\na lot about browser behavior, the history of markup, etc. I am far from an\nexpert, but I know a heck of a lot more than I did when I started.</p>\n<p>One school of thought I come across quite frequently is that web content whose\nmarkup is not well-formed or is missing required attributes or something just\nfail to render completely, in order to ensure that all content on the web is\ngorgeous, standards-compliant markup. This ridiculously draconian viewpoint\nloses sight of the fact that the ultimate goal of delivering content over the\nweb is just that — delivering content. It seems bad form for a browser to just\n“give up” when markup is badly formed, because the end-goal of the person\nbuilding the page — and the person consuming it — is to deliver content. Much\nof this debate has been chronicled by the IE team; they have a tough job –\nbring the standards compliance of IE into this century without breaking their\ncustomers/users pages. Hence compatibility mode, legacy rendering, etc. etc.</p>\n<p>In the past, I’ve always heard this argument from the standards-compliance\nstandpoint. For example, if a page claims to be XHTML but isn’t fully\ncompliant, it should fail to render in a browser. No “best-effort” rendering,\njust fail. This of course ignores the fact that even the W3C <a href=\"http://validator.w3.org/docs/help.html#validandconform\">can’t create a\nparser</a> that can completely validate a page against the spec, but that’s a\nrant for another time… Assuming the browser can detect that a page is non-\ncompliant, it should just <strong>stop</strong>.</p>\n<p>Anyway, this is a long and winding intro to <a href=\"/link-not-available?url=http%3A%2F%2Fdiveintomark.org%2Farchives%2F2009%2F03%2F18%2Fif-it-fails-for-some\">a post</a> Mark Pilgrim wrote\ntalking about this viewpoint as it applies to accessibility. I had never heard\nthese arguments before, but apparently they’re out there. A choice quote from\nMark’s rebuttal (emphasis mine):</p>\n<blockquote>\n<p>I think it would be wise for people who truly care about accessibility to\ntake a closer look at the so-called “experts” who are participating on their\nbehalf, and to understand exactly what these people are proposing. <strong>It’s true\nthat some of their proposals have not been adopted, but it’s not because some\ncartoonishly monocled villain enjoys being mean to them. It’s because the\nproposals are insane.</strong></p>\n</blockquote>\n<p>Agreed.</p>",
      "date_published": "2009-03-23T08:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/finding-meaning-in-ui/",
      "url": "https://tylerbutler.com/finding-meaning-in-ui/",
      "title": "Finding Meaning in UI",
      "content_html": "<p><a href=\"https://twitter.com/atebits\">Loren Brichter</a>, the guy behind the fantastic <a href=\"http://twitter.com\">Twitter</a> application\n<a href=\"http://www.atebits.com/software/tweetie/\">Tweetie</a>, has a post over on his blog talking about how and why he chose\nto put specific items on the bottom bar of Tweetie’s UI. <a href=\"/link-not-available?url=http%3A%2F%2Fblog.atebits.com%2F2009%2F02%2Fthere-is-method-to-my-madness%2F\">The post is a quick\nread</a>, so go take a look; I’ll wait.</p>\n<p>Welcome back. One of the things I found interesting about what he said was\nthat he chose the items for the bottom bar based not on what was most common,\nor most popular, or most used, but rather another characteristic that they all\nshare: they’re all personalized features about the user.</p>\n<p>This isn’t really earth-shattering, but I found it interesting because in most\ncases, UI designers try to make sure the most commonly used things in the UI\nare surfaced. The problem with that approach, as Loren points out, is that you\ncan’t always do that. Sure, Copy and Paste are super-common, and should get\nfirst-class treatment, but where do you go from there? At some point, you’re\nsplitting hairs, and if you try to rationalize why one function is surfaced in\na prime location and something else isn’t, how do you explain your choice?\n“Well the data we collected said 51% of people used A and 49% of people used\nB, so we went with A.” Unsatisfying, isn’t it? At least if you take Loren’s\napproach, your answer has a bit more meat to it.</p>\n<p>Anyway, at the very least this should get us all thinking about our\nrationalizations for putting stuff in specific places in our UI. Maybe there\nare alternative methods for making these decisions that we haven’t considered\nyet…</p>",
      "date_published": "2009-03-20T04:55:00.000Z",
      "tags": [
        "design"
      ]
    },
    {
      "id": "https://tylerbutler.com/syfy/",
      "url": "https://tylerbutler.com/syfy/",
      "title": "Syfy?",
      "content_html": "<p>The rename of the Sci Fi cannel to SyFy Syfy strikes me as completely stupid.\nGargantuan stupidity.\n<a href=\"http://www.underconsideration.com/brandnew/archives/weird_syence.php\">http://www.underconsideration.com/brandnew/archives/weird_syence.php</a></p>\n<p>Update: Turns out it’s Syfy; no capitalization of the “f”. This makes it\n<strong>even</strong> worse. Stunning.</p>",
      "date_published": "2009-03-19T05:45:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/all-grown-up/",
      "url": "https://tylerbutler.com/all-grown-up/",
      "title": "All Grown Up",
      "content_html": "<p>Some fan art of Calvin and Hobbes with Calvin a little older. Very\ninteresting. I think it’s time to give my <a href=\"/link-not-available?url=https%3A%2F%2Fwww.amazon.com%2Fdp%2F0740748475%3Ftag%3Dtylerbutlerco-20%26camp%3D0%26creative%3D0%26linkCode%3Das4%26creativeASIN%3D0740748475%26adid%3D0G5WH77B5B39AK3368E8%26\">Complete Calvin and Hobbes</a>\nanother read-through.</p>",
      "date_published": "2009-03-15T15:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/linq-confusion/",
      "url": "https://tylerbutler.com/linq-confusion/",
      "title": "LINQ Confusion",
      "content_html": "<p>I find myself using LINQ a lot in my C# code these days. I use collections all\nover the place, and there’s no doubt that LINQ makes sorting and slicing\ncollections a lot simpler code-wise.</p>\n<p>In my most recent weekend project, I need to randomly sort a list of cards,\nwhich are represented by an <strong>Action</strong> class. After some quick searching, I\nfound <a href=\"/link-not-available?url=http%3A%2F%2Fwww.dailycoding.com%2FPosts%2Frandom_sort_a_list_using_linq.aspx\">some articles</a> that indicated the best way to do this would be to\nsort the list by random GUID. This makes sense, though I certainly wouldn’t\nhave thought of it on my own.</p>\n<p>The examples given all worked, but not with my lists… With the following code,\nthe compiler spits out several errors:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>List</span><span>&lt;</span><span>Action</span><span>&gt; </span><span>cards</span><span> </span><span>=</span><span> </span><span>new</span><span> </span><span>List</span><span>&lt;</span><span>Action</span><span>&gt;()</span><span>;</span></div></div><div><div><span>cards</span><span>.</span><span>Add</span><span>( </span><span>new</span><span> </span><span>OneCattle</span><span>() )</span><span>;</span></div></div><div><div><span>cards</span><span>.</span><span>Sort</span><span>( </span><span>a</span><span> </span><span>=&gt;</span><span> Guid</span><span>.</span><span>NewGuid</span><span>() )</span><span>.</span><span>ToList</span><span>&lt;</span><span>Action</span><span>&gt;()</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>Error    1    Delegate 'System.Comparison&lt;agricola.Action&gt;' does not take '1' arguments</span></div></div><div><div><span>Error    2    Cannot convert lambda expression to type 'System.Collections.Generic.IComparer&lt;agricola.Action&gt;' because it is not a delegate type</span></div></div><div><div><span>Error    3    Cannot implicitly convert type 'System.Guid' to 'int'</span></div></div><div><div><span>Error    4    Cannot convert lambda expression to delegate type 'System.Comparison&lt;agricola.Action&gt;' because some of the return types in the block are not implicitly convertible to the delegate return type</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>However, using a more explicit LINQ query without a lambda expression seems to\nwork fine:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>var</span><span> </span><span>q</span><span> </span><span>=</span><span> </span><span>from</span><span> </span><span>a</span><span> </span><span>in</span><span> cards</span></div></div><div><div><span>        </span><span>orderby</span><span> Guid</span><span>.</span><span>NewGuid</span><span>()</span></div></div><div><div><span>        </span><span>select</span><span> a</span><span>;</span></div></div><div><div><span>List</span><span>&lt;</span><span>Action</span><span>&gt; </span><span>r</span><span> </span><span>=</span><span> q</span><span>.</span><span>ToList</span><span>&lt;</span><span>Action</span><span>&gt;()</span><span>;</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Anybody know why this is? I haven’t wrapped my head around lambda expressions\nand the theory behind LINQ to understand what the root cause is…</p>",
      "date_published": "2009-03-15T14:47:00.000Z",
      "tags": [
        "CSharp"
      ]
    },
    {
      "id": "https://tylerbutler.com/commercials-suck/",
      "url": "https://tylerbutler.com/commercials-suck/",
      "title": "Commercials Suck",
      "content_html": "<p>This article, titled “<a href=\"/link-not-available?url=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2009%2F03%2F05%2FAR2009030504104.html%3Fhpid%3Dtopnews\">Give Us a Commercial Break!</a>” from the Wall Street\nJournal is <strong>way</strong> off the mark in my opinion. The article states that TV\nshows are written with commercials in mind and that watching them without\ncommercials changes them. That in and of itself I can’t argue with. But I do\ntake issue with the implication that this is uniformly bad.</p>\n<p>There are two core arguments in the article:</p>\n<ol>\n<li>TV shows are written with commercials specifically in mind, and removing them completely interrupts the pacing of the show.</li>\n<li>Viewers actually like shows with ads better.</li>\n</ol>\n<p>For argument number one, it’s obvious that writers take commercial breaks into\nconsideration when writing TV shows. However, in their DVD counterparts, the\nbreaks are preserved as scene changes. These can seem rather abrupt, and I\nthink this points to an alternative solution: slightly longer breaks for scene\nchanges that are replacing commercial breaks. If we assume the normal scene\nchange is a second, then imagine that the commercial-break-replacement scene\nchange is three seconds. You can simulate this suggestion by hitting pause for\nthree seconds – I think you’ll be surprised at the results. I think you’ll\nagree that this is uniformly better than ads.</p>\n<p>For argument number two, I can’t refute the research. But there is a quote\nfrom the article that is completely asinine in my opinion:</p>\n<blockquote>\n<p>From an audience member’s perspective, they are what makes network\ntelevision social. We use the commercial breaks to talk amongst ourselves, to\ntake bets on the J.D./Elliot situation and to decide that no one ever really\ndies on “Lost.”</p>\n</blockquote>\n<p>Say what? That we need commercial breaks to be social is ridiculous. In this\nday and age, we have ready access to the Pause button, and it’s a far more\nuseful tool for fostering discussion while watching TV. Elizabeth and I\nhave been watching quite a few documentaries lately, and we pause quite often\nto talk about whether or not we agree with what’s being said. I agree that\nadding discussion and dialog while viewing a show is positive (there’s a\nreason fans get together to watch episodes of their favorite shows), but I\nthink people use the commercial breaks because they’re there, not because they\n<strong>need</strong> them in order to have that conversation successfully.</p>\n<p>I hate ads in all forms (though I can appreciate particularly clever or well-\ndone ones), so I am definitely biased here. But seriously… there’s a reason\nDVD copies of shows sell so well, and it isn’t because people are dying to own\nseason one of “Scrubs” for eternity…</p>",
      "date_published": "2009-03-12T05:54:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/site-move-and-redesign/",
      "url": "https://tylerbutler.com/site-move-and-redesign/",
      "title": "Site Move and Redesign",
      "content_html": "<p>The server that is currently hosting the SharePoint version of tylerbutler.com\nis being decommissioned. Unfortunately, I wasn’t given much notice about this\nso I have not been able to secure an alternative SharePoint-ready location at\nMicrosoft to host the site. In the meantime I’ve used this opportunity to move\nthe site over to WordPress, and I’ve refreshed the look and feel. Hopefully\nthis will be temporary, since I intend to rebuild the site on the new version\nof SharePoint once it’s publicly available. But in the meantime, WordPress is\nserving my needs.</p>\n<p>The main www address should be redirecting to blog.tylerbutler.com as soon as\nthe DNS changes propogate. The main RSS feed should be switched over, but I\nhave not yet moved the others. Regardless, though, you shouldn’t notice any\ndifferences since I’m using FeedBurner.</p>",
      "date_published": "2009-02-19T10:06:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/sharepoint-updates/",
      "url": "https://tylerbutler.com/sharepoint-updates/",
      "title": "SharePoint Updates",
      "content_html": "<p>We’ve changed the way we’re managing and releasing updates here in the\nSharePoint team. This is all very good news. It makes things more manageable\ninternally for us, which translates into quicker, more effective turnaround on\nissues, but it also means that updates and patches will be much more\npredictable, so you can plan around those dates more effectively. There is\nstill recourse for you if you have an absolutely critical issue that needs to\nbe resolved ASAP.</p>\n<p>More details on this <a href=\"/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fsharepoint%2Farchive%2F2008%2F09%2F29%2Fannouncing-august-cumulative-update-for-office-sharepoint-server-2007-and-windows-sharepoint-services-3-0.aspx\">SharePoint blog post</a> and <a href=\"https://support.microsoft.com/kb/953878\">KB article 953878</a>.</p>",
      "date_published": "2008-10-02T00:10:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/but-why-0-but-why-but-why/",
      "url": "https://tylerbutler.com/but-why-0-but-why-but-why/",
      "title": "But Why? #0: But why, \"But Why?\"",
      "content_html": "<p>I love hearing stories. When I was growing up I used to love when people would\nvisit and my Dad would tell some of his stories. Even though I had heard most\nof them a thousand times, it was awesome to sit back and watch other people\nexperience them for the first time. I also read a lot of stories growing up,\nand I developed a special love for short stories in particular (I especially\nlike O. Henry).</p>\n<p>While I was in college, I discovered a site that I have since lost many hours\nof my life to — <a href=\"http://www.folklore.org/\">folklore.org</a>. It’s a site put together by <a href=\"http://en.wikipedia.org/wiki/Andy_Hertzfeld\">Andy\nHertzfeld</a> (not to be confused with <a href=\"http://en.wikipedia.org/wiki/Don_Hertzfeldt\">Don Hertzfeldt</a> of <a href=\"http://en.wikipedia.org/wiki/Rejected\">Rejected</a>\nfame), and contains “anecdotes about the development of Apple’s original\nMacintosh computer, and the people who created it.” It is incredible — it\ncombines my love of stories with a topic I find interesting — the early days\nof personal computing. Best of all, the stories there are written by the\npeople who experienced it, and often contain a healthy dose of humor and\nhumanity. But behind that, there’s some cool technical details about the\nchallenges the engineers faced, and why some of the decisions got made the way\nthey did. I find that part of it utterly spellbinding.</p>\n<p>I’ve been on the lookout for other sites like this for other tech companies,\nlike Atari or even Microsoft. The closest I’ve found for Atari is\n<a href=\"/link-not-available?url=http%3A%2F%2Fwww.dadhacker.com%2F\">DadHacker.com</a>, written by a guy who worked for Atari back in the day. His\nblog is interesting in a variety of ways, but I particularly like his Atari\nposts. In fact, his post titled <a href=\"/link-not-available?url=http%3A%2F%2Fwww.dadhacker.com%2Fblog%2F%3Fp%3D987\">Donkey Kong and Me</a> was what got him into\nmy RSS reader permanently. It’s good — you should read it.</p>\n<p>I actually work with a developer who was also on the team that developed\n<a href=\"http://en.wikipedia.org/wiki/Clippy\">Clippy</a>, and I’ve heard some interesting stories for him about what that\nwas like. Maybe I’ll try to convince him to write up some of his experiences…\nI am sure there are some more great stories out there… If you know of some\nsites, please do point me to them.</p>\n<p>Because I find this stuff so interesting, I thought it would be good to start\nchronicling some of the stuff I know about because I’ve been working on\nSharePoint. Thus, I plan to write a series titled “But Why?” about various\nSharePoint features that I either worked on or have been exposed to, and why\nthey behave the way they do. These posts will be one part SharePoint history,\none part storytelling, and if I do it right, will pull back the curtain a bit\nso you can see just why things wound up the way they did.</p>\n<p>But first, some disclaimers: These posts are my own thoughts and opinions, and\ndo not reflect those of Microsoft or of anyone else who works/worked on\nSharePoint. Also, my memory may be fuzzy and blatantly incorrect about some\nthings, so everything should be viewed through that lens. Finally, you\nshouldn’t expect these posts to be as interesting as anything you read on\nfolklore.org.</p>",
      "date_published": "2008-09-10T01:49:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/and-were-back-with-comments/",
      "url": "https://tylerbutler.com/and-were-back-with-comments/",
      "title": "And We're Back! (With Comments!)",
      "content_html": "<p>Wow, it’s been awhile. Almost a year since my last post. It truly is hard to\nbelieve. It’s been a busy year so far, but I’ve finally got some time to start\nposting again. I’ve got some interesting SharePoint posts coming down the\npipe, plus a new site design I’m working on. It’s still in its early stages,\nbut hopefully it’ll shape up pretty soon so I can get a sample up.</p>\n<p>One thing you’ll notice if you’ve been here before is that I’ve managed to\nmove the site into the 21st century by adding comments. I toyed with a few\ndifferent comment management add-ins and ended up going with <a href=\"http://disqus.com/\">Disqus</a>. It\nseems like it’ll suit my needs for now, and it was pretty straightforward to\nget integrated. Just added some script and markup to my master page and post\npage layout in SharePoint Designer. I’m not sure how I feel about the comments\nbeing stored separately from the site content, but it’s what I’ve got for now.\nIt will make migration difficult if page URL’s change, which they almost\ncertainly are when I change the architecture of the site in the next redesign.\nC’est la vie, I’ll cross that bridge when I get to it. Anyway, please go ahead\nand engage with me through the comments if you see something interesting on\nthe site.</p>\n<p>I should also note, for completeness, that SharePoint includes a blog template\nthat supports comments. I, however, <a href=\"/2006/11/building-tylerbutlercom-on-moss/\">rolled my own site</a> and didn’t use the\nblog template or features. There were lots of reasons for this that I won’t go\ninto right now, but there are certainly some features that SharePoint blogs\nhave that I also want, like comments and MetaWeblog support (which I added\nmyself). For now, I’m stuck with what I’ve got. But like I said, there are\nsome exciting new things coming with my site redesign.</p>",
      "date_published": "2008-09-05T01:19:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-wealthy-man-communication/",
      "url": "https://tylerbutler.com/the-wealthy-man-communication/",
      "title": "The Wealthy Man (Communication)",
      "content_html": "<p>Once upon a time, there was a very wealthy man. The man had so much money that\nhe bought anything and everything he could buy, and still had more money than\nhe could count. As he grew older and wiser, he realized he was very unhappy.\nSo he gathered all of his friends and confidants and asked them for their\nadvice.</p>\n<p>During the course of the conversation, a friend mentioned that there was a\nUniversity close by filled with struggling students. The man decided he would\ngive money to any student that wanted some.</p>\n<p>The next day, the man walked to the main section of the University campus and\narranged to rent out a small room in the center of the main campus student\nbuilding, where all the students could come to get their money from him. He\nthen sat down on a chair in the small room and waited.</p>\n<p>And waited.</p>\n<p>And waited.</p>\n<p>And waited.</p>\n<p>For months, he would visit the campus every day and wait in the small room for\nstudents to come and claim their money. But no one ever came. Eventually, he\nbecame a fixture on campus. Students would smile and wave at him as they\npassed by the small room; some would say hello and ask how he was. But no one\never asked for money.</p>\n<p>One day, while he sat in the small room, the man was approached by a student\nwho had always been very friendly to the man. She stopped by every day and\nsaid hello and told him about her classes. She was always bright and cheerful.\nOn this day, however, her eyes were puffy and red, and she walked as though\nthe weight of the world was on her shoulders.</p>\n<p>“Sir, I just wanted to come by and say goodbye…”</p>\n<p>“Oh? Why’s that?”</p>\n<p>“Well, my mom’s been really sick — and she’s better now, but my family has a\nton of hospital bills and I just can’t afford to stay here at school any\nlonger.”</p>\n<p>“Why didn’t you say something before? I’ve been sitting here every day for\nmonths just waiting for someone to ask me for money, and no one ever has! Why\ndidn’t you ask me before?” the man asked.</p>\n<p>The girl looked up, her eyes glimmering with hope.</p>\n<p>“Why didn’t <strong><em>you</em></strong> say something? How was I to know you were giving money\naway unless you said something? I would never have guess that’s why you sit\nhere every day. But… can I have some money?”</p>\n<p>The man smiled and pulled his checkbook from his pocket. “How much do you\nneed?”</p>\n<p>The next day, when the man arrived at the University, there was line of needy\nstudents outside the small room. The line reached out the doors of the\nbuilding and wrapped all around campus.</p>\n<p>The man asked every student why they had never come to him before, even though\nthey needed money. “Because you didn’t tell me that’s why you were here,” they\nsaid.</p>",
      "date_published": "2007-10-17T01:44:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/correlation-causation/",
      "url": "https://tylerbutler.com/correlation-causation/",
      "title": "Correlation != Causation",
      "content_html": "<p>Everyone repeat after me… <strong>Correlation does not <em>imply</em> causation!</strong> Just\nbecause two things can be proven to correlate does not guarantee a cause and\neffect relationship. Here’s a funny example from the <a href=\"http://en.wikipedia.org/wiki/Correlation_does_not_imply_causation\">Wikipedia article</a> on\nthe topic (courtesy <a href=\"http://en.wikipedia.org/wiki/The_Simpsons:\">The Simpsons</a>):</p>\n<blockquote>\n<p><strong>Homer</strong>: Not a bear in sight. The “Bear Patrol” is working like a charm!</p>\n<p><strong>Lisa</strong>: That’s specious reasoning, Dad.</p>\n<p><strong>Homer</strong>: [<em>uncomprehendingly</em>] Thanks, honey.</p>\n<p><strong>Lisa</strong>: By your logic, I could claim that this rock keeps tigers away.</p>\n<p><strong>Homer</strong>: Hmm. How does it work?</p>\n<p><strong>Lisa</strong>: It doesn’t work. (<em>pause</em>) It’s just a stupid rock!</p>\n<p><strong>Homer</strong>: Uh-huh.</p>\n<p><strong>Lisa</strong>: But I don’t see any tigers around, do you?</p>\n<p><strong>Homer</strong>: (<em>pause</em>) Lisa, I want to buy your rock.</p>\n</blockquote>\n<p>Please please please stop assuming that determining a cause and effect\nrelationship is as straightforward as observing a correlation. It’s not.</p>\n<p><strong>Note:</strong> I know the <code>!=</code> operator is not equivalent to “does not imply.” But I am\ntoo lazy right now to see if there’s even a Unicode character for the right symbol.</p>",
      "date_published": "2007-08-28T06:55:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/lessons-from-a-street-performer/",
      "url": "https://tylerbutler.com/lessons-from-a-street-performer/",
      "title": "Lessons from a Street Performer",
      "content_html": "<p>Should you ever find yourself watching a street performer’s act, and you end\nup volunteering, either willingly or unwillingly, to be a part of said act,\nhere’s a piece of advice: don’t run away when the performer’s not looking. If\nyou do, you might find out later that you’re missing something that might be\nimportant to you. This is what happened to Emily, a rather skittish young\nGerman woman who happens to be visiting Brisbane this week, and is now missing\nher watch.</p>\n<p>While I was walking back to the Kookaburra this afternoon, I passed through\nthe Queen Street Mall and stopped to view a street magician. Shortly after I\nstarted watching, he approached a girl in the audience to act as his second\n“assistant.” The girl didn’t look particularly happy to have been chosen, but\nrather than protest she joined the performer in front of the audience. Soon\nshe was introduced s Emily from Germany, to much enthusiastic adulation from\nthe crowd.</p>\n<p>The performer continued on with his act, which primarily involved his first\nassistant, another young woman named Charlie. While he turned to face Charlie\nand continued on, Emily turned and left, running swiftly into the swelling\ncrowd at the mall. It took a few seconds for both the audience and the\nperformer to figure out what was happening. The crowd started laughing at her\ndeparture, but the performer yelled after her, “Wait! You’re missing\nsomething!” With that, he pulled a hand watch from his pocket and waved it\nabove his head. Alas, Emily ran on, and was soon lost in the crowd. The\nperformer looked a bit baffled, jokingly offered the watch to anyone who would\nbuy it, then continued on with his act (with a new second assistant).</p>\n<p>My first thought was that Emily was in on it, but after the act a few people\napproached the performer and asked if it was scripted. He explained that it\nwasn’t. He had removed her watch surreptitiously as part of his act and was\nplanning to reveal it to her later on. His intention was by no means to steal\nher watch, but when she ran off so unexpectedly he didn’t know what to do.</p>\n<p>So people, if you wind up in a street performer’s act, please just be\ngood-natured about it and participate. It’s really not that hard.</p>",
      "date_published": "2007-08-21T09:08:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/in-portland-get-breakfast/",
      "url": "https://tylerbutler.com/in-portland-get-breakfast/",
      "title": "In Portland? Get Breakfast!",
      "content_html": "<p>Seriously, the next time you’re in Portland, go to <a href=\"http://www.sanbornsbreakfast.com/\">Sanborn’s</a> and get some breakfast. Freaking <strong><em>amazing</em></strong>\nfood. Elizabeth and I went there last weekend during our trip down there.\nDespite the fact that we got lost (I blame our crummy GPS technology — or\nmaybe it was the navigator?), once we found it it lived up to the hype.\nDefinitely get the biscuits — I am drooling right now just thinking about\nthem… The pancakes and omelette’s were also very very good. It was busy, but\nservice was decent. We also went to <a href=\"https://www.lucystable.com/\">Lucy’s Table</a> for dinner,\nwhich I can also highly recommend. Excellent food and service, though it was a\nbit pricey. I’d liken it to Café Juanita in Kirkland in terms of quality and\natmosphere. Unfortunately, not all of our dining experiences in the City of\nRoses were good. Despite good reviews on CitySearch, the <a href=\"https://www.google.com/url?sa=t&amp;ct=res&amp;cd=2&amp;url=http://portland.citysearch.com/profile/8470102/portland_or/j_m_cafe.html&amp;ei=F-2_Rt7KOJTshQPp7PHtCw&amp;usg=AFQjCNH9s9ncpZ9VZT_leK3fVMu9YQe7kA&amp;sig2=gBiGHh4kr9purLuxpfy2ng\">J&amp;M Café</a> left a lot to be desired. Not outright <strong><em>bad</em></strong>, but definitely nothing to write home about. Meh. And also note that the only <a href=\"http://www.sonicdrivein.com/\">Sonic</a> within 200 miles of Seattle is in a Portland suburb. Mmmmmm, <strong><em>so</em></strong> worth the drive.</p>",
      "date_published": "2007-08-13T12:41:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-secret-to-avoiding-telemarketers/",
      "url": "https://tylerbutler.com/the-secret-to-avoiding-telemarketers/",
      "title": "The Secret to Avoiding Telemarketers",
      "content_html": "<p>For some reason I’ve been the target of telemarketers recently, and I think\nI’ve found the secret to getting them to hang up and stop calling: <strong>just say no\nthree times.</strong> Three seems to be the magic number. The first two times you say\nyou’re not interested, they continue to pester, but the third time, they thank\nyou for your time and say goodbye. I have had much more success with this\nmethod than with simply hanging up on them. First, that makes me feel rude,\nand a telemarketer is still a person who has a job and there’s no reason for\nme to be rude to them just because I’m annoyed. But second, and more\nimportantly, simply hanging up seems to increase the likelihood that the same\npeople will call me back with the same offer. Saying no three times seems to\nreduce that likelihood in my non-scientific experimentation.</p>",
      "date_published": "2007-07-31T05:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/gettin-famous/",
      "url": "https://tylerbutler.com/gettin-famous/",
      "title": "Gettin' Famous",
      "content_html": "<p><a href=\"/link-not-available?url=http%3A%2F%2Fzorba.members.winisp.net%2F\">George</a> found <a href=\"/link-not-available?url=http%3A%2F%2Fsearchvb.techtarget.com%2ForiginalContent%2F0%2C289142%2Csid8_gci1256720%2C00.html\">this article</a> over at SearchVB.com that mentions my <a href=\"/link-not-available?url=http%3A%2F%2Fsessions.visitmix.com%2Fdefault.asp%3Fevent%3D1011%26session%3D2012%26pid%3DDEV06%26disc%3D%26id%3D1515%26year%3D2007%26search%3DDEV06\">MIX\n‘07 Session</a>. While I am not quoted directly, my name is mentioned, and the\ncontent of the session is referenced a bit:</p>\n<blockquote>\n<p>At Microsoft’s MIX07 conference, Tyler Butler, a program manager for\nMicrosoft Office SharePoint Server, pointed out three Web applications built\non SharePoint — Hawaiian Airlines, mobile phone game firm Glu Mobile and\nmusic and event firm Hed Kandi Radio.</p>\n<p>Butler also indicated that, since the SharePoint 2007 platform is built on\nASP.NET 2.0, developers can use ASP.NET AJAX and Silverlight to provide a rich\nuser interface.</p>\n</blockquote>\n<p>I’ll try not to let the fame go to my head.</p>",
      "date_published": "2007-06-02T07:57:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/pidgin/",
      "url": "https://tylerbutler.com/pidgin/",
      "title": "Pidgin",
      "content_html": "<p>Imagine my surprise when I was browsing my feeds at Google Reader today to see\nthe word “Pidgin” in my feeds. And in a Lifehacker post, no less! To\nunderstand why I would be surprised, you have to remember that I grew up in\nPapua New Guinea, where a trade language called <a href=\"http://en.wikipedia.org/wiki/Tok_Pisin\">Neo-Melanesian Pidgin</a>\n(Tok Pisin in the <a href=\"http://en.wikipedia.org/wiki/Vernacular\">vernacular</a>) is spoken by roughly 4 million people\nthere. It is commonly referred to as just “pidgin” by people that live in PNG.</p>\n<p>In reality, pidgin is a generic linguistic term that refers to a language that\ndevelops as a means to facilitate trade in areas where many different\nlanguages are spoken by small people groups. Since ~850 languages are spoken\nin PNG, it makes some sense that a pidgin would be born to facilitate trade\nand communication. Neo-Melanesian pidgin is based on English and German. One\nof the defining characteristics of pidgins is that they are typically just a\n<a href=\"http://en.wikipedia.org/wiki/Lingua_franca\">lingua franca</a>, and not spoken as a first language by any people group.\nPidgins sometimes develop into creoles, which means that they then become more\nfull-fledged languages, because people learn to speak them as their first (and\nsometimes only) language. This is the case with Haitian Creole (originally a\nFrench Pidgin, now a French Creole).</p>\n<p>Anyhow, the Pidgin Lifehacker was talking about is an IM client, much like\nTrillian. Not quite what I was expecting, but given what a pidgin is, the name\nis fitting. :-)</p>\n<p><a href=\"http://sourceforge.net/project/showfiles.php?group_id=235&amp;package_id=230234&amp;release_id=504761\">Pidgin 2.0 Beta 7</a></p>",
      "date_published": "2007-05-04T07:34:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/silverlight-coming-to-linux-courtesy-mono/",
      "url": "https://tylerbutler.com/silverlight-coming-to-linux-courtesy-mono/",
      "title": "Silverlight Coming to Linux Courtesy Mono",
      "content_html": "<p>According to <a href=\"/link-not-available?url=http%3A%2F%2Fnews.com.com%2F8301-10784_3-9714669-7.html\">an article over at news.com</a>, the <a href=\"http://www.mono-project.com/Main_Page\">Mono project</a> founder\nsays they’ll be working on a Linux port of Silverlight in the future. Sweet! I\nwas personally annoyed to find out that “cross-platform” only meant Mac and\nWindows when Silverlight was officially announced. But it’s nice to see Mono\ncommitting to filling the Linux gap. Best of luck to them!</p>",
      "date_published": "2007-05-04T07:10:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/the-social-revolution/",
      "url": "https://tylerbutler.com/the-social-revolution/",
      "title": "The Social Revolution",
      "content_html": "<p>I’ve been avoiding services like Facebook, MySpace, Friendster and the like\nfor a long time despite their growing popularity. In the MySpace case, it’s a\nphilosophical choice — MySpace sites are often so bad! They look horrible,\nmusic plays when you go to them, the formatting is terrible… This is a natural\noutcome of pure freedom; when you allow people to customize things and make\nthem look exactly like they want, you give them the freedom to make horrible\nlooking stuff. But I’m getting a bit off topic… Anyway, I avoid MySpace sort\nof on principal, but I avoid Facebook due to some other reasons that I think\nfinally crystallized in my mind while attending a roundtable discussion at MIX\nthat included folks from Six Apart, Twitter, and Facebook.</p>\n<p>The guy from Facebook was talking about how they view Facebook as being not an\n<em>extension</em> of your identity, but rather a <em>representation</em> of it (my words,\nnot his; I’m trying to paraphrase the conversation). In other words, your\nFacebook simply reflects the things that are happening to you, what’s going on\nin your life, etc., and then shortens the gap between those events and\noccurrences and the people that potentially care about you. Their philosophy\nas I understand it is to reduce the amount of overhead that comes with keeping\ntrack of what’s going on with people.</p>\n<p>That’s a noble goal, I suppose, and one I can certainly appreciate given that\nI have friends strewn all over the world (ever since the great Diaspora that\nwas my high school graduation in PNG). It certainly would be nice to always\nknow what was happening with those folks without ever having to do anything\nabout it. But I think that’s the crux of my opposition to it.</p>\n<p>You see, I think there is a great deal of worth in getting an email after a\nlong time from someone who has taken the time to write you and give you a\nbrief update about them. It took time and energy for them to write you and\nupdate you on their life — and I believe it shows they care. This type of rich\ninteraction with someone occurs more naturally after a time out of touch.</p>\n<p>Imagine a 30-year high-school reunion if everyone was on Facebook the entire\ntime after graduation? Would there be anything to talk about? I suppose the\nconversation would revolve around politics, religion, and other matters of\n<em>opinion</em>, because life events would simply be old news. Everyone would\nalready know that Sam got married last summer and Mary got a new job. There’d\nbe no excitement in learning that Joe’s son spoke his first words last week or\nthat Sally was finally able to get that surgery she needed.</p>\n<p>If we’re always connected to one another all the time, it removes the\nexcitement and enjoyment that comes from the <em>re</em>-connecting after a\ndisconnect. It’s cliché, to be sure, but absence makes the heart grow fonder,\nand for that reason, Facebook’s just not for me.</p>",
      "date_published": "2007-05-04T01:38:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/flittrbook/",
      "url": "https://tylerbutler.com/flittrbook/",
      "title": "Flittrbook",
      "content_html": "<p>The screen saver that loads Twitter posts and Flickr photos that I mentioned\nbriefly in my first MIX post is available at\n<a href=\"https://blogs.msdn.com/karstenj/archive/2007/04/30/the-debut-of-flittrbook.aspx\">http://blogs.msdn.com/karstenj/archive/2007/04/30/the-debut-of-\nflittrbook.aspx</a>.</p>",
      "date_published": "2007-05-02T00:49:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/presentation-problems/",
      "url": "https://tylerbutler.com/presentation-problems/",
      "title": "Presentation Problems",
      "content_html": "<p>My session went pretty well yesterday, but unfortunately I had quite a few\ndemo issues. The session before mine went late, which made me pressed for time\nto get things plugged up and ready to go. The first problem was that they\ndidn’t have my presentation pre-loaded on the presentation computer. So I\nspent a few minutes looking for it, and then finally gave up, plugged in my\nUSB key to the back of the machine and just loaded it. Problem 1 solved, but\nit got my nerves in a bit of a tizzy so I didn’t quite start with the bang I\nwanted to.</p>\n<p>The A/V guy thought I was ready to go as soon as the presentation was up and so\nstarted everything, but I didn’t get a chance to double check that my demo\nlaptop was working properly and that the demos were going to be displayed\ncorrectly. <em>Big mistake.</em> When it came time to do my demos, I couldn’t get any\nsignal from the laptop to the displays. I fiddled with it for what seemed like\nan eternity, but in the end made the executive decision to just continue on so\nI could make it through the core content. One problem with doing demos from\nVista machines is that I can never freaking find the right place to look to\nchange settings. It’s <em>very</em> frustrating, and when you’re nervous or anxious,\nit just makes matters worse. For the demos I just did my best to explain the\npoints in the demos verbally, but of course that was a very poor substitute.</p>\n<p>To add insult to injury, I offered to show the demos on my laptop after the\ntalk for those that were interested. However, there were a number of\nquestions, and due to the wait and inactivity, Virtual PC stopped cooperating\nand I couldn’t get anything to display on the demo box. &lt;sigh&gt;</p>\n<p>For those of you who were at my session, please accept my sincere apologies\nfor the lack of demos. I had a much better, more cohesive presentation\nplanned. Hopefully the extended Q&amp;A was useful. Judging from the number of\ngreat questions and business cards I got for follow up info, people still got\nsomething out of the session.</p>\n<p>I will be at the Mix Chat and attending various sessions throughout the rest\nof the conference. If you want to chat with me, catch up with me at the\nconference, or send me an email to set up some time to talk while we’re here.</p>\n<p>I was very serious when I said that I’d like to start conversations with\neverybody about their SharePoint experiences. We very much want to understand\nwhere you perceive the problems to be so that we can address them. Believe it\nor not, it’s not always as obvious to us as it is to you what we should do. So\nwe very much value your feedback!</p>",
      "date_published": "2007-05-02T00:04:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/twitter/",
      "url": "https://tylerbutler.com/twitter/",
      "title": "Twitter",
      "content_html": "<p>Despite my better judgment and my vehement opposition of most things “web\n2.0,” I now have a <a href=\"http://twitter.com\">Twitter</a> account.  See my tweets at\n<a href=\"https://twitter.com/tylerbutler\">https://twitter.com/tylerbutler</a>. I feel dirty… At least I’m not on\nmyspace…</p>",
      "date_published": "2007-05-01T04:01:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/net-browser-integration-demos/",
      "url": "https://tylerbutler.com/net-browser-integration-demos/",
      "title": ".Net Browser Integration Demos",
      "content_html": "<p>To expand on my post from earlier about .Net in the browser, here’s some of\nthe more salient points from the demos that Scott Guthrie et. al. showed:</p>\n<p><strong>Debugging in both Windows and Mac</strong></p>\n<p>Yup, you can attach to a remote process running on the Mac, and step into\nbreakpoints in your managed code locally in VS. This must have been <em>really</em>\nhard to build. Nonetheless, this is super useful.</p>\n<p>**Code behind for Silverlight projects **</p>\n<p>This is basically how you get your .Net code in the browser. As far as I can\ntell, your XAML has an associated code-behind page that contains all of your\ncode, as in pretty much all of ASP.Net</p>\n<p>**Integration between Expression and VS for inserting XAML into the Silverlight project from Expression **</p>\n<p>You can easily use the best app for the specific job. Designers can crack open\nthe XAML in Expression and munge it, then developers can live in VS and just\nwrite the code. Everybody wins.</p>\n<p>**Add Silverlight projects to ASP.Net projects, get them built and deployed together **</p>\n<p>Silverlight controls can be just like regular .Net controls, and get built as\npart of the same development workflow. Sweeeeeet…</p>\n<p><strong><a href=\"/link-not-available?url=http%3A%2F%2Fsilverlight.metaliq.com%2Ftopbanana%2F\">http://silverlight.metaliq.com/topbanana/</a></strong></p>\n<p>Really nifty light table app completely in the browser built in C# and XAML\nand delivered via Silverlight. Apparently this will be a sample app that will\nbe part of the SDK or something, which is pretty sweet. I was hoping it’d be\nlive so everyone could play, but it’s not. Built in a month with alpha\nSilverlight 1.1 code.</p>",
      "date_published": "2007-05-01T03:38:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/net-in-the-browser/",
      "url": "https://tylerbutler.com/net-in-the-browser/",
      "title": ".Net in the Browser",
      "content_html": "<p>Wahoo, .Net in the browser just announced with integration in Silverlight. The\ncrowd goes wild…</p>",
      "date_published": "2007-05-01T00:52:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/at-mix/",
      "url": "https://tylerbutler.com/at-mix/",
      "title": "At MIX!",
      "content_html": "<p>I’m at MIX! Got in late last night. Wow, Vegas is nuts. So gaudy — lights,\nsounds, smells everywhere. It’s pretty overwhelming. The Venetian is\nfantastically humongous. I have to walk a mile from my room to the part of the\nhotel where MIX is actually taking place. First time in a 5-star hotel for me,\nso I am pleased.</p>\n<p>Right now I am sitting in the keynote session waiting for it to get started at\n9:30 PST. There’s a pretty cool “screen saver” thing that is loading live\n<a href=\"https://twitter.com/\">Twitter</a> comments from MIX attendees and displaying them on the screen in\nreal-time. Pretty cool. Not a big Twitter fan myself, but it’s certainly being\nused in interesting ways here at MIX.</p>\n<p>There’s a three piece band playing with an accordion, violin, upright bass,\nand assorted other instruments. One attendee described it as a love child\nbetween Tom Waits and Oingo Boingo. Did I just hear a glockenspiel? A freakin’\nTheremin too? Fantastic…</p>\n<p>Well, keynote should start shortly… More coming up…</p>",
      "date_published": "2007-04-30T23:35:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/speaking-at-mix/",
      "url": "https://tylerbutler.com/speaking-at-mix/",
      "title": "Speaking at MIX",
      "content_html": "<p>Exciting news! My session for <a href=\"/link-not-available?url=http%3A%2F%2Fwww.visitmix.com%2F\">MIX ‘07</a> was approved, so it looks like I’ll\nbe in Vegas at the end of the month. Unfortunately, it’s sold out, so if\nyou’re not already registered, you’re unfortunately out of luck as far as I\ncan tell. However, I’m told all sessions will be recorded and available on the\nweb for everyone to see as early as the day after the session, so I’ll post a\nlink to it here for those who are interested.</p>\n<p>The title of the session is “Internet Sites with Microsoft Office SharePoint\nServer 2007,” which is sufficiently broad that there should be plenty to talk\nabout. Do you have specific things you’re interested in learning about, or\nthat you think I should talk about in my session? Feel free to drop me a\nline and let me know. I’ll also be at the MIX Chat on Wednesday afternoon,\nso swing by and say hello.</p>\n<p>And if you want to see some particularly poor yet frenetic dancing, join me at\nPURE on Tuesday night. Believe me, there’s nothing quite like a Microsoft\nProgram Manager out on the dance floor…</p>",
      "date_published": "2007-04-06T01:30:00.000Z",
      "tags": [
        "mix07"
      ]
    },
    {
      "id": "https://tylerbutler.com/corrections-on-nav-samples-in-my-ecm-blog-posts/",
      "url": "https://tylerbutler.com/corrections-on-nav-samples-in-my-ecm-blog-posts/",
      "title": "Corrections on Nav Samples in my ECM Blog Posts",
      "content_html": "<p>Way back when I wrote <a href=\"https://blogs.msdn.com/ecm/archive/2006/10/30/building-tylerbutler-com-part-1-planning-and-basic-branding.aspx\">part 1</a> of my series on building tylerbutler.com, I\nmentioned that I was using a custom sitemap provider to drive my “recent\npages” section on my site. I was doing this with navigation because navigation\ncontrols inherently know where they are in a site’s structure, which meant I\nonly needed one control in my master page to drive the links in the right hand\nsection. I was using the <code>DynamicChildLimit</code> property to make sure I only got 15\nlinks to show up in that section.</p>\n<p>Unfortunately, I started having problems with the ordering of the links that\nwere showing up, so I started talking with Chris Richard, the nav maestro. It\nturns out that the <code>DynamicChildLimit</code> isn’t meant to be used for that purpose.\nWhen you sort navigation, the sorting happens <em>after</em> the nodes are returned\nfrom the nav store. This means that if you have 50 navigation items sorted by\nlast modified time, and you set a <code>DynamicChildLimit=\"15\"</code>, for example, you’ll\nget back 15 pseudo-random items, then those resulting 15 items will be sorted\nby last modified time. I say a <em>pseudo-random</em> set of items is returned\nbecause even though items returned aren’t really random — there <em>is</em> a\ndeterministic way nodes get returned from the nav store — it’s complicated\nenough that you won’t be able to tell what 15 items will be returned at any\ngiven time.</p>\n<p>Anyway, this means that <code>DynamicChildLimit</code> doesn’t really work the way I\nthought and it makes navigation unusable for my needs in this instance.\nHowever, a helpful guy named Bram Kleverlaan left <a href=\"https://blogs.msdn.com/ecm/archive/2007/01/16/building-tylerbutler-com-part-6-what-was-tough-and-what-s-to-come.aspx#1512810\">a comment </a>on my Part 6\npost that he was able to use a SharePoint expression to make Content Query Web\nParts know where they are in the site hierarchy. The trick is to set\n<code>WebUrl=\"&lt;% $SPUrl:~Site/ %&gt;\"</code> in the web part’s properties. This expression\nwill get expanded by SharePoint at runtime, and your CQWP will suddenly change\nbased on the location of the page that’s loading it. I definitely had a “Why\ndidn’t I think of that?” moment when I read Bram’s comment.</p>\n<p>Anyway, I am using this now on my site, and I can verify that it works for web\nparts that live <em>outside</em> of web part zones. I have not yet tried it on a web\npart inside a zone, but I’ve heard reports that the property gets reset every\ntime you change properties on the web part in the browser, which you can’t do\nfor parts that live outside zones.</p>",
      "date_published": "2007-02-03T08:38:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/building-moss-master-pages/",
      "url": "https://tylerbutler.com/building-moss-master-pages/",
      "title": "Building MOSS Master Pages",
      "content_html": "<p>Now that MOSS is available to lots of people, and people are building lots of\nsites that <a href=\"https://www.fifteen.net\">don’t</a> <a href=\"https://www.shareview.co.uk/\">look</a> <a href=\"https://www.hedkandi.com/\">like</a> SharePoint, a lot of you might be\nwondering how you should get started in building your own custom master page\nfor your site. I talked a little bit about this in my first post on building\ntylerbutler.com, but I think it might be valuable to post some info about the\nminimal master page and its role in helping you build a custom master page for\nyour site. But first, some background…</p>\n<p>During the early betas, people heard that you could make SharePoint “not look\nlike SharePoint,” and so they set off to do just that. People started cracking\nopen default.master and trying to understand it. The problem many people\nreported was that the markup in default.master was ridiculously complicated,\nand it wasn’t clear what could be removed and what couldn’t. The complexity is\nsomewhat necessary for that master page because of all the delegate controls\nwe have to put in place to support a bunch of different back-end SharePoint\nstuff (I do believe, however, that there’s plenty of things we could/can do in\nthat master page to make it clearer and easier to customize without removing\nfunctionality, so this is not meant to be an excuse).</p>\n<p>Anyway, there were customers that were trying to build internet facing sites\non top of SharePoint, because <strong>a)</strong> we told them that they could/should and\n<strong>b)</strong> we rolled up a lot of web content management functionality from Content\nManagement Server 2002, and customers that were using that product were\ninvestigating how they would move to MOSS. These customers did not want their\nsite to look anything like SharePoint. These customers also often had a site\ndesign template that was coming from their design team, either in HTML or as\nimage mock-ups. Trying to fit that design into default.master was exceedingly\ndifficult because of all the unclear markup in that master page.\nDefault.master is designed for a SharePoint site — one that looks and acts\nlike SharePoint. But people who wanted to build non-SharePoint looking sites\nwere getting tripped up by using it as a starting point.</p>\n<p>We do have several master pages that we built that are much simpler than\ndefault.master. When you provision a Publishing Portal site collection, for\nexample, we default to BlueBand.master, which has customized CSS and MOSS\nnavigation out of the box. It’s a cleaner starting point, so we initially told\npeople to start there rather than with default.master. We still had problems,\nthough, because you never knew if a placeholder was absolutely necessary in\nyour master page. What would happen is you’d remove a seemingly innocuous\nplaceholder and your page would work fine until you browsed to some specific\npage that was overriding that placeholder, then things would break.</p>\n<p>What we needed was a sample master page that included only the markup that was\n<em>absolutely necessary to get your pages to render.</em> Thus, the <a href=\"https://msdn2.microsoft.com/en-us/library/aa660698.aspx\">minimal master\npage</a> was born. This master page is purposely bare. It’s just a bunch of\nplaceholders – those placeholders are necessary for things in your site to\nwork properly. With this master page, you can take your markup from your\ndesigner, paste it into SharePoint Designer, and move markups into the\nappropriate placeholders. If there’s some pieces you need/want from\ndefault.master or another page, you can always open them up and copy/paste the\nappropriate markup.</p>\n<p>So, should you start with <code>default.master</code>, <code>blueband.master</code>, or the minimal\nmaster page example when building your own custom master page? Well, the\nanswer depends on what you’re trying to do. If you’re building out a site that\nreally should look and work like vanilla SharePoint, then maybe <code>default.master</code>\nmakes sense. If you’re trying to do something more exotic, <code>blueband.master</code> and\nits siblings have examples of different navigational structures and color\nschemes, so maybe it makes sense to start from one of those that is close to\nthe navigation/color you’re aiming for. But my personal recommendation is to\nstart with the minimal page and copy/paste the appropriate controls/markup\nfrom other master pages as necessary. This ensures you get only what you need\nand want in your page, rather than having to weed through a bunch of markup to\nget rid of stuff that doesn’t <em>look</em> like it’s needed. If you do want to go\nthe default.master route, then Heather Solomon has <a href=\"http://heathersolomon.com/blog/archive/2007/01/26/6153.aspx\">a custom master page</a>\nthat she’s tweaked from <code>default.master</code> to make things cleaner and more\nstraightforward.</p>\n<p>I hope this helps you figure out how to get started building out your site\nlook and feel. There is a growing number of live custom sites on top of MOSS,\nand it’s exciting to see what people are able to build with this product!</p>",
      "date_published": "2007-02-03T06:57:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/hiding-vs-disabling/",
      "url": "https://tylerbutler.com/hiding-vs-disabling/",
      "title": "Hiding vs. Disabling",
      "content_html": "<p>Someone came by my office today and asked me if I could show him how to make a\ncolumn on a SharePoint list required. No problem! While this isn’t as simple\nas it could be, it’s pretty straightforward. Go into the list you want to\nchange, select <strong>List Settings</strong> from the <strong>Settings</strong> drop down, then click\nthe column you want to change in the <strong>List Settings</strong> page. You should see an\noption called “Require that this column contains information.” By default,\nthis is off, but turning it on will make the column required.</p>\n<p>However, in this case, that option wasn’t showing in the UI. The reason was\nthat the column was a <strong>Yes/No (check box)</strong> field. Now, if you think about\nit, this makes sense. A checkbox <em>always</em> has state, either checked or\nunchecked, so it’s by nature required. A user always has to fill in a checkbox\nwith some data, either by checking it or unchecking it. It all comes down to\nthe default state, which <em>is</em> settable in the SharePoint UI.</p>\n<p>The interesting thing here, though, is that the user didn’t stop to think\nabout this. And that makes sense. He just wanted to make a column required; he\ndidn’t think about what type of column it was. SharePoint totally removes the\nrequired field setting from the UI for Yes/No fields because it doesn’t make\nsense. However, the user got confused. He wasn’t sure if the UI was missing by\ndesign or if he wasn’t looking in the right spot for the setting. If you have\na task to accomplish using relatively unfamiliar UI, you go to the place that\nmakes sense to you, but you’re never sure you’re in the right place. In this\ncase, the user poked around other parts of the UI before coming to me, because\nhe thought he was looking in the wrong place.</p>\n<p>This might be alleviated by disabling (i.e. graying out) the part of the UI\nthat is not applicable. This is somewhat clearer, because it says, “Yes, this\nis where you would change this setting, but it doesn’t make sense here or is\nnot allowed.” This isn’t a hard rule. You can’t <em>always</em> display <em>all</em>\npossible settings in one piece of UI because if there are a large number of\nsettings, things can get confusing and distracting. Some hiding does make\nsense in many cases. But it is worth some dedicated thought about your UI and\nwhat your users are trying to accomplish when deciding whether to hide a piece\nof UI or simply gray it out.</p>",
      "date_published": "2007-01-23T15:49:00.000Z",
      "tags": [
        "design",
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/site-problems/",
      "url": "https://tylerbutler.com/site-problems/",
      "title": "Site Problems",
      "content_html": "<p>My site has been going up and down lately. It’s not a problem with MOSS or the\nserver. Both have stayed up and running without any problems. Unfortunately,\nthe environment that my server is in has been having problems with their\nswitch. Apparently it’s rebooting itself constantly, which is “a common issue\nfor this brand and model of router.” Anyway, no biggie, my site isn’t exactly\nmission-critical. But weekends are the best time for me to work on\nenhancements, and I have a few in mind that I was looking forward to getting\nset up. Alas, ‘twas not to be. Everything seems to be working now, though, so\nhopefully it’ll stay this way.</p>",
      "date_published": "2007-01-23T15:35:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/acrobat-reader-8-sucks-less/",
      "url": "https://tylerbutler.com/acrobat-reader-8-sucks-less/",
      "title": "Acrobat Reader 8 Sucks Less",
      "content_html": "<p>I upgraded to Acrobat Reader 8 last night because frankly, I figured it\ncouldn’t get any crappier than 7. I was right. In fact, it got a bit better.\nThe Yahoo toolbar and advertising bar across the top seem to be gone. The\ninterface is simpler, too. It still has automatic updating on by default, of\ncourse, which I immediately turned off just in case the update feature sucks\nas much as it did in 7.</p>\n<p>So it’s getting better. But even without Photoshop Album Starter Edition,\nwhich it tries to bundle with the download by default (freakin’ annoying, by\nthe way), it’s still <strong>20.8 MB</strong>. My goodness, that’s bloated…</p>",
      "date_published": "2007-01-18T04:15:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/i-hate-security-questions/",
      "url": "https://tylerbutler.com/i-hate-security-questions/",
      "title": "I Hate Security Questions",
      "content_html": "<p>Several of my banks have been “upgrading” their security since the beginning\nof the year. I have pretty much accepted the fact that “upgrading” security\nmeans my blood pressure will needlessly rise the next time I try to access my\naccount.</p>\n<p>The latest security craze seems to be these security questions. “Mother’s\nmaiden name” apparently doesn’t cut it anymore. Security questions drive me\ninsane, because there’s invariably a finite set of options I have to choose\nfrom. <em>Favorite childhood superhero?</em> <em>Name of firstborn child?</em> What is this\ncrap? <strong>None</strong> of it is easy for me to remember! Why don’t you let me pick my\n<strong>own</strong> question and my <strong>own</strong> answer? Now I have to remember some “fact”\nthat I made up as an arbitrary answer to some stupid question that a bank\ndecided was an excellent way to distinguish me from some sorry thief.</p>\n<p>To add insult to injury, many times I have to select** two or more** security\nquestions. <strong>OMG. <a href=\"/2004/08/i-hate-banks/\">I hate banks so much.</a></strong></p>",
      "date_published": "2007-01-18T03:56:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/rizzy-on-the-wii/",
      "url": "https://tylerbutler.com/rizzy-on-the-wii/",
      "title": "Rizzy on the Wii",
      "content_html": "<p>My pledge bro Craig “Rizzy” Rohe also has a Wii, and he sent me some mini-reviews on some games. Since he has no online presence (yet), I thought I’d\npost them. But before I do that, here’s what he has to say about getting\nonline with the thing:</p>\n<blockquote>\n<p>First, some bitching about Wii:</p>\n<p>Up until 10 minutes ago, all I’ve ever done with the Wii is played games.\nVery easy, very fun. However, trying to use the internet connectivity and\nadding friends made me want to punch a little Japanese person in the face. Do\nthey actually expect average people to be able to do this? I’m an embedded\nsystems designer, and I was frustrated with it. Other than letting our Mii’s\ntravel back and forth, is there even any benefit to doing it? Shame on you\nNintendo.</p>\n<p>Second, games only save to the internal Wii memory. If you want them on the\nSD card, you have to copy it over manually. Of course, you’d have to do that\neach time you play the game in order to keep the SD card up to date. It pretty\nmuch makes the $50 1G memory card I bought completely useless.</p>\n</blockquote>\n<p>I couldn’t have said it better myself. The Wii online setup is pretty bad. I’m\nreally surprised people are getting it to work without wanting to gouge their\nown eyes out with a spoon. As for me, I am still using it on my neighbor’s\nwireless because it won’t work on mine. And yes, I have changed to channels\n1/11 on the router. Yes, I have followed all stupid suggestions in the forums\nand on the support site. Nintendo could take a few pointers from Microsoft in\nthis particular part of the experience.</p>\n<p>The SD thing seems strange. I haven’t tried to use an SD card yet, but it does\nseem odd that you can’t save games directly to it. This does seem like\nsomething Nintendo could change with a firmware update though.</p>\n<blockquote>\n<p><strong>Wii Sports</strong> — It’s ok. Fun little games to showcase the controller\nabilities. I’ve found tennis to be pretty fun with multiple people, and you\ncan avoid the dreaded Wii tennis elbow once you learn that a skilled flick of\nthe wrist will do just as much as a full blown swing. I brought my Wii home\nfor Christmas, and since I have a zillion siblings we had continuously\nrotating doubles matches which were a blast.</p>\n<p><strong>Super Monkey Ball</strong> — I usually only play the mini games. Not as much fun\nas the versions for GameCube. I think they tried too hard to incorporate the\nmotion control into the games, and many of them are just too touchy, or they\nshould have put more time into making it fun. I guess they were pressed for\ntime trying to get that one out for launch. There are a few that are pretty\nentertaining though.</p>\n<p><strong>Zelda: Twilight Princess</strong> — This game rocks. It’s hella fun to play. They\nused the motion sensors in moderation, which is good. The game itself is\nreally fun - plenty of puzzles and tangent adventures to try out. I haven’t\nplayed any Zelda games since the one for 8-bit Nintendo, but I can still\nblindly say this is probably the best to date.</p>\n<p><strong>Excite Truck</strong> — So much fun my head almost exploded. It’s a very fast\npaced, physics defying game. There’s actually a lot of strategy needed for the\nmore advanced tracks, but at the same time you can just pick a level and have\nfun doing 720’s at 1000 ft in the air and smashing through trees with power-\nups. Definitely one of the best games I own.</p>\n<p><strong>Red Steel</strong> — I haven’t played this game very much. The reason? My damn\narm gets tired. Another example of how not to design a game interface. I think\nit would be much better if I could play for more than 20 mins at a time, so my\nreview may be biased. Basically, you are required to use the Wii-mote pointer\ncontinuously to aim and steer in the game. That’s not even too bad because you\ncould rest your arm on your knee; then they thought up the great idea of\nrequiring you to extend your arm towards the TV to zoom in/out. Combine all of\nthat movement and you have to hold your arm straight out for extended periods\nof time during game play. Very annoying. Maybe I need to hit the gym.</p>\n</blockquote>\n<p>Haven’t gotten into Twilight Princess yet myself. Elebits should be here from\n<a href=\"https://www.gamefly.com/\">Gamefly</a> this week, though in retrospect maybe I should have put Excite\nTruck at the top of my queue instead. Oh well, way too many awesome games\nthese days to get to. I still work occasionally, you know.</p>",
      "date_published": "2007-01-16T08:52:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/itunes-tagging/",
      "url": "https://tylerbutler.com/itunes-tagging/",
      "title": "iTunes Tagging",
      "content_html": "<p>One of the things that really annoys me about iTunes is the lack of\ncategorical tagging. Actually, I shouldn’t blame iTunes. I think this is a\nfundamental limitation in the ID3 tags. What I want is the ability to “tag”\nmusic as I listen to it, with terms like “story-song” (songs that tell a\nstory) or “ricardo” (songs that my friend Ricardo has introduced me to).\nSocial music sites like <a href=\"https://www.pandora.com/\">Pandora</a> and <a href=\"https://www.last.fm/\">Last.fm</a> have this concept, as\ndoes just about every “Web 2.0” site in the world. Why not my music player?</p>\n<p>Initially when I tried to implement this sort of thing I used the “keywords”\nfield. I would just add the tag to that field, then I created Smart Playlists\nbased on that field. <a href=\"/link-not-available?url=http%3A%2F%2Fwww.lifehacker.com%2Fsoftware%2Fitunes%2Ftag-your-songs-in-itunes-153970.php\">This post at Lifehacker</a> suggests using the\n“Grouping” field, but the premise is the same.</p>\n<p>This approach works fine until you want to edit a bunch of songs and **add **a\ntag. When you do a bulk edit of the keywords field in iTunes it’ll overwrite\nanything that was there previously. So suddenly tagging all that music with\n“Sasquatch 2006” removed all the other cool tags you had applied. Major\nsuckage.</p>\n<p>Today I decided to try a new approach: I just use dumb, old-fashioned\nplaylists. When I want a new tag, I create a new playlist for it. For\norganization purposes I keep all tag playlists in a folder called Tags. I can\nthen create additional nested folders for categories, and because of how\niTunes handles folders with playlists inside, the folders will become\naggregators of all the music in playlists underneath them, which is nifty.\nThis means I can see all of the music I have tagged just by clicking the Tag\nfolder</p>\n<p>This approach is pretty simple. Adding a tag is easy, and using the tags to\ndrive smart playlists is easy too. Just add an “If &lt;<strong>Playlist</strong>&gt; &lt;<strong>is/is\nnot</strong>&gt; &lt;<strong>Tag playlist name</strong>&gt;” clause to the Smart Playlist. There is a\ndrawback, though… **Removing **tags is now a pain. From the frying pan into\nthe fire… I have to make sure the song doesn’t appear multiple times in a\nplaylist, and if it does, remove all occurrences. This is because playlists\nare designed to support multiple occurrences of the same song. If I want to\nstart and end my playlist with <em>My Heart Will Go On</em>, then dang it, I can do\nit. But for my purposes, it’s not the ideal behavior.</p>\n<p>Anyway, none of this really helps my situation, because the iTunes app\n<strong>doesn’t help me</strong> manage my tags, build playlists based on them, or\nanything, natively. All of this is a hack. There are a lot things that it\ncould do to make it easier to tag music. And with the iTunes music store, what\nif I could check out how other users were tagging the track, and borrow their\ntags? This is all stuff that is provided by Last.fm, of course, but Last.fm\ndoesn’t manage my entire music collection — iTunes does.</p>\n<p>And of course <strong>none</strong> of this does anything on my iPod. Heck, <strong>it</strong> can’t\neven understand playlist folders, which is super <em>super <strong>super</strong></em> dumb.\nActually, I have a lot of gripes about the iPod UI…</p>",
      "date_published": "2007-01-02T11:30:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/web-site-intro-pages/",
      "url": "https://tylerbutler.com/web-site-intro-pages/",
      "title": "Web Site Intro Pages",
      "content_html": "<p>If you browse around the internet these days, you’re bound to come across a\nwebsite that has an intro page. Usually this page allows you to choose whether\nyou have a high- or low-bandwidth connection. If you select the high-bandwidth\noption, you invariably get taken to a Flash version of the site, while the\nlow-bandwidth version of the site is static HTML.</p>\n<p>When faced with these types of choices, I often forget that one should <em>always</em>\npick the low-bandwidth option, even if one is using a high-bandwidth\nconnection. The main reason is that these Flash sites often have annoying\nbackground music or annoying animations. From a site design perspective, Flash\nis best used as a <em>supplementary</em> web technology. A website shouldn’t be\ndesigned entirely in Flash. Some core reasons for this are accessibility and\nsearch-ability. Google and other spiders cannot crawl a Flash web site as\neasily. Not to mention the fact that these types of sites always have some\ncrazy navigation scheme and flashy transitions between sections that make it\nvery difficult to navigate around, because it doesn’t fit the typical web\nmold. Finally, Flash sites are typically absolutely scaled at a specific\nresolution, which means they don’t look or work great if they’re not at a\nspecific window size. To combat this, they’ll pop open a separate browser\nwindow at the specific size they want. Talk about annoying! There is very\nrarely <em>any</em> need at all to design your site in Flash completely. Many\nFlash-only site have a stripped down HTML version of the site, hence the intro page\nwhere you pick which version you want to see. Since you already have to create\nan HTML version of the site, why not scrap the flash site and focus your\nattention on making the HTML site much better?</p>\n<p>The trend of completely Flash-based web sites has declined dramatically in the\ncommercial web of late, which is a great development. Instead, sites are using\nFlash as a way to add a bit of pizzazz to the site in strategic places, or to\nadd a slightly more interactive portion to their site. Judicious use of Flash\nin this way is good.</p>\n<p>The next time someone tells you that you should design your entire web\npresence in Flash, or have two versions of your site, shoot them.</p>",
      "date_published": "2006-12-29T09:00:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/buying-toothpaste/",
      "url": "https://tylerbutler.com/buying-toothpaste/",
      "title": "Buying Toothpaste",
      "content_html": "<p>I had to buy a new tube of toothpaste the other day. This isn’t something I do\nterribly often. I live alone, and even with my braces, which requires a more\nstringent dental hygiene regiment, I don’t go through a tube that quickly.</p>\n<p>But as I browsed the seemingly endless toothpaste section at my local Fred\nMeyer, looking for a tube, I realized that I have never bought the same type\nof toothpaste twice. I get to the store and I realize that I don’t know what\ntype I bought last time, and all of the tubes look the same and have\nfrustratingly similar names. <em>Did I get Mint Zing last time? Or was it Fresh\nMint? Maybe it was Minty Fresh… Yeah, it was Minty Fresh.</em></p>\n<p>Nope, it wasn’t Minty Fresh. It wasn’t even Fresh Mint or Mint Zing. It was\n<strong>Mega Mint with Scope, Baking Soda and Peroxide Whitening ++</strong>. <em>Sigh</em>. Why\ndoes it have to be so hard to buy freaking toothpaste?</p>",
      "date_published": "2006-12-25T11:25:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/nintendo-wii/",
      "url": "https://tylerbutler.com/nintendo-wii/",
      "title": "Nintendo Wii",
      "content_html": "<p>I managed to snag a Wii this past weekend at Target. It was a bit of a chore.\nI spent seven hours in 30 degree weather with 20 other brave souls who dared\ntochallenge the elements. I brought my heavy coat, a couple of blankets, a\nfolding chair, and some reading material, and settled in with the other\nfriendly members of the line around 1 am on a Saturday night. I was 10th in\nline, and at about 3am the night shift manager walked out and told us that\nthey’d “probably” have 21 Wii’s. The info was accurate, and at 8:30am, a very\ntired, cold Tyler walked out of the store with a bundle of Japanese electronic\nawesomeness.</p>\n<p>When I got home I plugged it in and got everything wired up. It was pretty\nstraightforward. I didn’t have component cables yet, so I had to use the\ncomposite cable. My gosh, does 480i suck. Ever since I got my new 50” plasma\nlast month I haven’t been able to watch low quality signals for long. I had\ninitially planned to wait to get the component cable, but I ordered one from\nNintendo the very next day. They must have shipped from Redmond, too, because\nI got it the following day, which was awesome. 480p makes the picture less\nnauseatingly bad.</p>\n<p>Anyway, the Wiimote is surprisingly easy to set up and use. Just put the\nsensor bar in the appropriate location, and you’re pretty much done. I\nexpected to have to do some sort of calibration like you do on a PDA touch\nscreen, but there wasn’t any. Mnoving it around to select things on the screen\nis easy, and it has a very mouse-like feel. One of the coolest things is that\nit can detect the orientation of your hand, so if you hold the Wiimote upside\ndown, the pointer icon on the screen goes upside down as well. This capability\nis important in games too, most notably in Wii Sports Bowling. Pretty cool\nstuff from a technological perspective.</p>\n<p>I had a ton of problems getting my Wii on the internet, though. I still\nhaven’t gotten it working with my own network. I’m mooching off a neighbor’s\nuntil I get mine figured out. I keep getting random errors when testing the\nconnection. The Wii of course just gives you an error code, and then you have\nto look it up on their support website to try and figure out what it is. And\nthen, you have to type in the error code and hit search, because they don’t\njust have a flat list of the codes and what they mean. And to add insult to\ninjury, they have ranges of error codes that all have the same recommendation.\n<em>Change the wireless channel to 1 or 11. Check your SSID, blah blah blah.</em>\nNone of it has worked for me. This is one area where I think Microsoft really\nhas it down when you compare the 360 experience to the Wii.</p>\n<p>Once I got it online, updating it was painfully slow. It took about a half\nhour to get all the updates downloaded and installed. Compare this to the 360,\nwhich has taken less than 3 minutes for every update I’ve ever applied.</p>\n<p>The Wii UI is very minimalistic. There’s not a lot of color, just grey, black,\nand white, and the occasional blue. And it has this annoying pinging sound\nthat it makes whenever you’re applying an update or testing a wireless\nconnection. It gets to you after awhile. And the Wii Store has this background\nmusic that is fun at first, but you get sick of it real quickly.</p>\n<p>After all of the fooling around with getting it online and updated, I was\npretty frustrated. It took me the better part of the day to get it up and\nrunning. So when I finally decided it was time to play Wii Sports, I was in a\nkind of bad mood. But within 5 minutes of standing in front of my TV,\ngesticulating wildly, my attitude had changed. Wii Sports is just freaking\nfun! I majorly suck at baseball and tennis, but I bowl pretty well, and I find\nboxing pretty fun. It took me awhile to figure out that I could use both hands\nwhile boxing. Yeah, I’m an idiot.</p>\n<p>I also got Zelda, but I haven’t played it yet. I also have a ton of GameCube\ngames that I haven’t tried yet. That is one really cool thing — my Wavebirds\nare still useable, as are my memory cards with all my save games. I could\nfully retire my GameCube if it weren’t for the Gameboy Player, which I use to\nplay Gameboy games on the big screen.</p>\n<p>I still have a lot of stuff to check out. I added Patrick to my address book\n(seriously, this is a painful experience compared to the Xbox Live accounts\nand friends list. A 16 digit number? Come on! I can’t remember that to tell my\nfriends!), so hopefully we’ll be exchanging Mii’s soon. Not sure what that\nmeans, but no doubt it will be a cultural experience.</p>\n<p>It’s clear that this console was designed by a Japanese company. The design\nand focus are very different from something like the 360. And that is awesome!\nVariety is good. I look forward to better online experiences as they roll out\nnew services and channels. There’s a lot of potential, and just like Xbox\nLive, it’s going to take some time to really grow.</p>\n<p>Until then, anybody up for a round of Wii Bowling?</p>",
      "date_published": "2006-12-25T11:00:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-zune-and-wireless/",
      "url": "https://tylerbutler.com/the-zune-and-wireless/",
      "title": "The Zune and Wireless",
      "content_html": "<p>A lot of people have made a big deal about the limitations of the <a href=\"/link-not-available?url=http%3A%2F%2Fwww.zune.net%2F\">Zune</a>\nwireless functionality since it was released a few weeks ago. While I totally\nagree that there is a lot of untapped potential with the device currently,\nthere is at least one “obvious” omission that people have pointed out that\nsimply isn’t a good idea, to be honest.</p>\n<p>I’m talking about syncing to the device using the wireless. Sounds cool,\nright? You just walk into your apartment, turn on the Zune, and Boom! All of\nyour music is synchronized to it. But what people don’t seem to realize is how\nslow this would be. The maximum bandwidth for USB 2.0 is <a href=\"http://en.wikipedia.org/wiki/USB_2.0#Transfer_speed\">480 Mbit/s</a>, or\n60 MB/s. 802.11g, on the other hand, has a <a href=\"https://en.wikipedia.org/wiki/802.11g#802.11g\">maximum raw data rate of 54\nMbit/s</a>, or about 24.7 Mbit/s net throughput. Now, by applying some simple\nmathematics:</p>\n<p>480 / 24.7 = 19.4332</p>\n<p>This means that syncing to your device using wireless would be roughly 20\ntimes slower than using USB 2.0. Even if we assume the theoretical max data\nrate for 802.11g, which isn’t realistic, to be clear, you’re still looking at\na transfer speed that’s ten times slower. And don’t even think about using\n802.11b. Frankly, this doesn’t sound like a good idea.</p>\n<p>“So what?” you say. “I can leave the Zune syncing all night and it’ll be ready\nto go in the morning. Speed isn’t a real issue.” OK, fine. You walk into your\napartment, you turn on your Zune, and it starts syncing. You go to bed. You\nwake up the next morning, and your Zune is finished syncing, but it’s battery\nhas also been drained. Good luck using it on your commute.</p>\n<p>So what do you do next time? You plug it in so it can charge while it’s\nsyncing. But at this point, why not just plug it directly into your computer\nto sync and charge at the same time, at a much faster rate? So to me, it’s\nclear that isn’t really a desirable feature, and I’ll bet that some Program\nManager on the Zune team came to the same conclusion.</p>\n<p>One thing that I will point out, however, is that many times, when you sync,\nyou’re not syncing that much data. Your library hasn’t changed that much, and\nthe only thing that’s being synced is play counts or updated track info or\nsomething. In that case, this feature might make sense. The amount of data\nwouldn’t be large, so the process wouldn’t take long and the battery drain\nwould be minimal. There might be some scenarios where this feature would be\nuseful. However, I think that a lot of people had a knee-jerk reaction and\nhaven’t really thought through the ramifications and technical limitations of\nthat feature. But hey, that’s what we PM’s get paid for, right?</p>",
      "date_published": "2006-12-20T10:20:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/patrick-has-a-wii-or-experimenting-with-microformats/",
      "url": "https://tylerbutler.com/patrick-has-a-wii-or-experimenting-with-microformats/",
      "title": "Patrick Has a Wii, or, Experimenting with Microformats",
      "content_html": "<p>My friend <a href=\"http://patrick.wagstrom.net/\">Patrick</a> managed to <a href=\"/link-not-available?url=http%3A%2F%2Fpatrick.wagstrom.net%2Fweblog%2Fwii%2Fwiik-wiith-wii.xml\">get his hands on a Wii</a>, and I am a bit\njealous, to say the least. My own weekend Wii hunt did not go well, but I plan\nto persevere and head back out next weekend. Supposedly the Redmond\n<a href=\"https://www.target.com/\">Target</a> is getting a bunch in on December 17th, so I’ll be standing in\nline if you want to join me.</p>\n<p>However, this post is <em>really</em> meant to be about <a href=\"http://microformats.org/\">Microformats</a>, an\ninteresting little technology that allows you to add a bit more metadata to\nexisting markup, ostensibly to provide a better way to work with that data and\nleverage it in unique ways. I learned about it at the Gilbane Conference a\ncouple weeks ago, and I wanted to do some checking to make sure you could\nleverage them on your MOSS site if you wanted. Seems like you can, as this\npost suggests.</p>\n<p>If you view this post in Firefox you’ll see a little icon next to Patrick’s\npicture above. This is done using CSS, but you won’t see it in IE because <a href=\"https://www.quirksmode.org/css/beforeafter.html\">IE\ndoesn’t support <code>:before</code> and <code>:after</code></a>. But anyway, this isn’t all that\ninteresting, because I could already do that using CSS. What _is _interesting,\nhowever, is if you go to <a href=\"/link-not-available?url=http%3A%2F%2Finside.glnetworks.de%2F2006%2F06%2F05%2Fmicroformats-have-arrived-in-firefox-15-greasemonkey-06%2F\">http://inside.glnetworks.de/2006/06/05/microformats-\nhave-arrived-in-firefox-15-greasemonkey-06/</a> and download the <a href=\"/link-not-available?url=http%3A%2F%2Fgreasemonkey.mozdev.org%2F\">Greasemonkey\n</a>script there. Then return to this page, and you’ll see that miraculously\nthe following menu has been added above Patrick’s name:</p>\n<p><img alt=\"This image has been lost to the sands of time\" loading=\"lazy\" width=\"1536\" height=\"1024\" src=\"/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d\" srcset=\"/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69ed77a7c7274100086fd13d 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69ed77a7c7274100086fd13d 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69ed77a7c7274100086fd13d 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69ed77a7c7274100086fd13d 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69ed77a7c7274100086fd13d 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d 1536w\" /></p>\n<p>Nifty, huh? If you’re using that same Greasemonkey script you’ll also notice\nthat the text above about standing in line to get a Wii at Target is an event\nthat you can add to your calendar:</p>\n<p><img alt=\"This image has been lost to the sands of time\" loading=\"lazy\" width=\"1536\" height=\"1024\" src=\"/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d\" srcset=\"/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69ed77a7c7274100086fd13d 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69ed77a7c7274100086fd13d 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69ed77a7c7274100086fd13d 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69ed77a7c7274100086fd13d 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69ed77a7c7274100086fd13d 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d 1536w\" /></p>\n<p>All of the data in the sentence I wrote is wrapped in some appropriate tags\nthat a compatible client reader (Firefox + Greasemonkey script in this case)\ncan parse out and act on. Plus, because it’s well-known markup, there’s a nice\nbackwards compatibility story for downlevel clients. For example, looking at\nthis page in IE is pretty boring, but stuff lights up when you use Firefox and\nthe script.</p>\n<p>Anyway, this all goes to show that there is a lot of opportunity for\nMicroformats to take off if there’s better client support. Just consider RSS -\nnow browsers inherently know how to read some markup in the header of the page\nand automatically detect RSS feeds on a page. It’s not hard to image a time\nwhen Firefox will include the functionality currently offered through the\nGreasemonkey script natively. Plus there’s some great tools already out there\nfor dealing with this type of data. Just check out this link to Technorati,\nwhich will <a href=\"/link-not-available?url=http%3A%2F%2Ftechnorati.com%2Fcontacts%2Fhttp%3A%2F%2Fwww.tylerbutler.com%2Fgeekdom%2FPages%2FPatrickHasaWii%2Cor%2CExperimentingwithMicroformats.aspx\">automatically parse out the hCards on this page</a> and let you\ndownload them as vCards.</p>\n<p>I could also write some code that runs on the server and outputs special\nJavaScript and CSS when Microformats are encountered. Then no client side\nsupport would be necesarry. I’ll be looking into this in the next few weeks.\nAnyway, I think there’s a lot of potential to include Microformats in more\nplaces on my site, so keep your eyes peeled.</p>",
      "date_published": "2006-12-12T08:45:00.000Z",
      "tags": [
        "games"
      ]
    },
    {
      "id": "https://tylerbutler.com/problem-finders-vs-problem-solvers/",
      "url": "https://tylerbutler.com/problem-finders-vs-problem-solvers/",
      "title": "Problem Finders vs. Problem Solvers",
      "content_html": "<p>Many comedians begin their routine by stating the obvious differences between\ntwo groups of people. Perhaps it’s men and women, or white and black, or\nwhatever. We humans <em>love</em> to categorize other people into groups. Pessimists\nand optimists, liberals and conservatives, the list goes on and on. Well, I’m\nnot going to buck tradition that much; I am convinced that there are two basic\ntypes of people as well: problem <em>solvers</em> and problem <em>finders.</em></p>\n<p>The definition for these two groups is fairly self-evident. A problem finder\nis someone who excels at finding problems. That’s a pretty large scope, to be\nsure. These are the types of people that are never satisfied. They find\nsomething to complain about in every situation. When you ask how they’re\ndoing, they say things like, “Well, I could be better.” They are experts in\nidentifying the nearly-invisible cracks in the glass, the slight imbalance in\nthe supposedly symmetrical piece of machinery.</p>\n<p>You may be saying to yourself that this type of person is a pessimist, but I\nmaintain that an important distinction between a problem finder and a\npessimist is that a problem finder can be very specific about exactly <em>what</em>\nin a given situation or event is bad, while a pessimist is less able to do\nthis in general. A pessimist can tell you how bad he thinks it is, but getting\ndown to specifics is difficult because it’s not about specific issues or\nproblems he sees, it’s about the way he perceives his environment and the\nevents surrounding him. Hope that distinction makes sense.</p>\n<p>Obviously a problem solver is someone who solves problems. These aren’t\nparticularly complex definitions, are they? This is the type of person\nthat is constantly trying to save the world. You have a problem? They have a\nsolution! Well, they believe they do. There is nothing they can’t help you\nwith. If they’re self-aware enough to realize they <em>don’t</em> know the answer,\nthen they’ll happily redirect you to someone who does. After all, they have a\npathological need to solve your problem, whether that’s what you want or not.\nSometimes, you just want someone to listen to your story about your horrible\nexperience or situation, and simply agree with you. “Yeah, that <em>does</em> suck!”\n“Yeah, that pisses me off too!” You’re looking for a friendly acknowledgement\nof the suckiness of your situation, and it can be frustrating when a problem\nsolver patronizes you by offering what they think is a simple solution for\nyour problem. “What are you complaining about? Take action!” they say.</p>\n<p>I think it’s clear that everyone has a bit of both of these quirks in their\npersonalities. We all are proactive about solving problems on some occasions,\nand sometimes we’re very good about finding the problems, the holes, the\ncracks. However, since I am an engineer, and I work with engineers, I have\nconcluded that engineers are predominately problem solvers.</p>\n<p>This makes sense. What is engineering? At its core, it’s finding elegant\nsolutions to complex problems while maintaining an awareness of the needs and\nconstraints of the solution (such as cost). It’s problem solving, pure and\nsimple, so it is not unusual that good engineers are good problem solvers.\nHowever, I maintain that problem finders are equally, if not more important\nthan problem solvers, if only because good ones are harder to find.</p>\n<p>I know plenty of engineers who can solve problems in fantastic, elegant ways,\nbut can’t easily identify the problems in their solutions, or even potential\nproblems outside of the original problem description that was given to them.\nThey need someone who can do that for them. The best teams at Microsoft in my\nopinion have a cynic, a guy who takes everything and tears it apart. It’s\n<em>never</em> good enough. And the best problem solvers I know are able to take that\ninformation and make a better solution.</p>\n<p>So I guess my conclusion is that it’s OK if you’re not the best problem solver\nor problem finder. Just <em>know</em> that you aren’t. Self-awareness is the key, you\nknow. In my own case, I have realized that I am a much better problem\nfinder. I’m a natural cynic, and a bit of a perfectionist. And hey, I’m OK\nwith that.</p>",
      "date_published": "2006-12-07T14:35:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/building-tylerbutlercom-on-moss/",
      "url": "https://tylerbutler.com/building-tylerbutlercom-on-moss/",
      "title": "Building tylerbutler.com on MOSS",
      "content_html": "<p>It was a bit of a toss-up whether to categorize this post under Geekdom,\nDaily Dose of Tyler, or Work, since this project certainly has a bit\nof all three. However, since I haven’t gotten around to implementing arbitrary\ntagging on my site, I can only pick one, so I went with work. Anyway, as you\ncan see from visiting this site, I am in the process of transitioning things\nfrom my old <a href=\"https://www.geeklog.net/\">GeekLog</a>-based system to MOSS 2007. (A quick note on GeekLog -\nI love it. It’s been great for me, it has a lot of great features, it’s\ncustomizable, highly recommended! The only reason I’m moving is because I\nhelped build MOSS, and I like it a lot.)</p>\n<p>Anyway, you can follow my progress by checking out <a href=\"https://learn.microsoft.com/en-us/archive/blogs/ecm/building-tylerbutler-com-part-1-planning-and-basic-branding\">my first post</a> on this\nprocess at the <a href=\"https://blogs.msdn.com/ecm\">Enterprise Content Management blog</a>. There will be several\nmore posts over there, and I am working on an in-depth piece-by-piece feature\nbreakdown for the site that I’ll put up here at some point. Gotta get the site\nfinished first, though.</p>\n<p>This is a bit of a sandbox right now, as I am still actively working on the\nimplementation of the site. It might go up and down, and things will probably\nlook wrong. Feel free to send me bug reports if you find something that\nlooks wrong.</p>",
      "date_published": "2006-11-04T10:15:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/content-deployment/",
      "url": "https://tylerbutler.com/content-deployment/",
      "title": "Content Deployment",
      "content_html": "<p>Yesterday I posted an <a href=\"/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fsharepoint%2Farchive%2F2006%2F05%2F02%2F588140.aspx\">entry</a>\non the Microsoft SharePoint team blog about Content Deployment, a feature I work on. Take a look if you’re interested… This is the kind of thing that’s causing me never to update this site…</p>",
      "date_published": "2006-05-03T08:38:00.000Z",
      "tags": [
        "sharepoint"
      ]
    },
    {
      "id": "https://tylerbutler.com/xbox-360-r0x0rs/",
      "url": "https://tylerbutler.com/xbox-360-r0x0rs/",
      "title": "XBox 360 R0x0rs",
      "content_html": "<p>Yes, I have entered the ranks of the 1337 gamers. I finally gave into the urge\nand paid $75 premium to get an XBox 360 off of eBay. Yeah, I could have waited\neven longer, but frankly, I was sick of the constant monitoring of the\n<a href=\"http://untitlednet.com/\">unt1tled XBox tracker</a>, the random phone calls to friends to see if they\ncould pick me up one in their area, etc. Anyway, the unit arrived Saturday\nmorning, so I immediately plugged it in and wasted an entire day playing with\nit.</p>\n<p>So what do I think of it? Well, in a word, it is <strong>awesome</strong>. It outputs\nbeautifully on my 480p HDTV (alas, I don’t think my TV supports 720p — time to\nbuy a 73”) in glorious widescreen deliciousness, and it was brain-dead easy to\nget logged on to XBox Live. Once there, I downloaded a bunch of Arcade game\ndemos, including the utterly fantastic <a href=\"http://www.xbox.com/en-US/games/g/geometrywarsevolvedlivearcadexbox360/default.htm\">Geometry Wars</a>, which I bought for\n400 Microsoft Points ($5) within 20 minutes of playing. There is so much\nawesomeness in this sexy little machine that it is tough to write it all down.\nBut there are a couple of areas that really stand out, so I thought I’d write\na little about them.</p>\n<h2><a href=\"#achievements\">Achievements</a></h2>\n<p>The concept is so simple — set mini goals within games and award players\npoints when they achieve these goals. Then centralize everything on a website\nso players can compare their results to all players globally, or just amongst\ntheir friends. This is what the XBox team has done with Achievements. An\nexample of an achievement in Geometry Wars is the Pacifism Achievement, which\nis awarded for playing the first 60 seconds of the game without shooting\n(pretty tough when you first start out). Another is awarded when you earn\n100,000 points, and still another when you make it all the way to 100,000\npoints without dying once. You get the idea. Because achievements are super-\npublic — you can go <a href=\"http://live.xbox.com/en-US/profile/profile.aspx\">visit my profile</a> on xbox.com and see all the\nachievements I’ve attained for a certain game — it adds a huge competitive\nedge to the games. For example, because I can compare my achievements with my\nfriends, I am more apt to keep playing so that I can keep my edge over other\nplayers. It also adds extra incentive to purchase full versions of games,\nsince you can’t earn achievements in demos.</p>\n<h2><a href=\"#demos\">Demos</a></h2>\n<p>And speaking of demos — the online nature of XBox Live allows publishers to\nput up downloadable game demos in the XBox Live Marketplace. So if you have\nthe hard drive, you can download demos of games such as Condemned, Fight\nNight, Full Auto, etc. before you buy them. It’s great — but unfortunately the\ndemos are very large (nearly 600 MB for the Condemned demo), and there is no\nway to <strong>a)</strong> queue up multiple downloads and <strong>b)</strong> download in the\nbackground. This actually really sucks — it means that while you’re\ndownloading a demo, or any other type of content, you can’t do anything else\non your 360. The only silver lining is that downloads are resumable, so if you\nget bored downloading something and want to get in another round of Geometry\nWars, you can cancel it and resume it later. You’d think with 3 cores on the\nCPU, they could spawn a background thread to handle downloads in the\nbackground, but whatever. Its still freakin’ cool.</p>\n<h2><a href=\"#media-center\">Media Center</a></h2>\n<p>The original XBox had a Media Center extender that you could use with your\nMedia Center 2005 PC (I’m ignoring the hacks you could use to get XBMC or\nLinux on there). Unfortunately, there were two core faults — it required a\ndisc to be inserted into the XBox, and it was pretty low quality because all\nthe graphic processing had to be done on the Media Center PC and then\ntransmitted through the network. Plus the XBox couldn’t be turned on and of\nremotely (the 360 does this <strong>beautifully</strong>). In short, I bought it and did\nnot like it <strong>at all</strong>. The 360 changes that. It runs the media center app\nnatively, and connects up to your Media Center just to start streaming the\nvideo/music/pictures. I think all the graphics processing is done on the 360\nitself, so it just looks better and is more responsive. Plus, it uses the same\nremote as a typical media center remote, so you can move your large, loud\nMedia Center PC (which is what you wind up with when you build your own on a\nbudget as I did) into some dark corner of your apartment and use the 360 as\nyour sole media center. <strong>Trust me — words cannot describe how freakin’\nawesome this is.</strong></p>\n<p>Well, there’s a ton more to say about this stunning piece of hardware/software\nengineering, but I am already suffering Geometry Wars withdrawal, so I’d\nbetter get back to it. I have achievements to earn, after all. Look me up\nif you’re on XBox Live — my Gamertag is <a href=\"http://live.xbox.com/en-US/profile/profile.aspx?pp=0&amp;GamerTag=Diametrix\">Diametrix</a>.</p>",
      "date_published": "2006-02-07T12:31:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/giving-thanks/",
      "url": "https://tylerbutler.com/giving-thanks/",
      "title": "Giving Thanks",
      "content_html": "<p>Thanksgiving is a bit of a non-holiday to me. The problem is that it comes to\nclose to Christmas. Heck, I started hearing Christmas music in the grocery\nstore the week before Thanksgiving. What’s up with that? Anyway, this makes\nthe third year that I haven’t done anything for the holiday. I got invited a\nfew places this year, but frankly, I wasn’t in the mood. I felt like I needed\nsome serious alone time (which is weird, because I am alone most of the time\nanyway), and I have definitely gotten it this weekend. But I realized that a\nlot of the posts — heck, all of the posts — I’ve made today have been pretty\nnegative, so I guess it’s time to be positive and post some of the things I am\nthankful for. This is a Thanksgiving tradition, I guess, but I was reminded to\ndo it after I read <a href=\"https://marcoandkristin.blogspot.com/2005/11/my-favourite-things.html\">Kristin’s post about it</a> on <a href=\"https://marcoandkristin.blogspot.com/\">her and her husband’s\nblog</a>. Thanks for the reminder Kristin. (I also read about her <a href=\"https://marcoandkristin.blogspot.com/2005/11/well-it-is-sunday-night-and-i-felt.html\">baking\npeanut butter cookies</a> for Marco. Lucky guy, that Marco.) Anyway, here\ngoes:</p>\n<ul>\n<li><strong>Friends</strong>: The transition to living in Puget Sound hasn’t been easy, but it would have been harder if I didn’t have some awesome friends that make an effort to keep in touch, come to visit when they can, and generally do their part to keep me in good spirits.</li>\n<li><strong>A good job</strong>: I complain a bit about my job, but I am thankful for it. Relative financial stability is a wonderful thing, and I know I’m in the right line of work for now.</li>\n<li><strong>My desire to continue learning and improving myself</strong>: Not to toot my own horn, but I am thankful and proud that even though I am out of school and am a working stiff now, I continue to try and learn new things and improve myself. It’s not just the learning, either, but also the physical stuff I am doing for my body and self. Losing weight has been tough, and two years in braces won’t be easy (I start the orthodontic journey January 6th, wish me luck), but I am thankful I have a positive attitude about it, and am proud of myself for doing these things instead of just pushing them aside or to the back of my mind.</li>\n<li><strong>Music</strong>: I guess this is a little over-indulgent, but I am thankful for music. Both music I listen to and music I write/perform. It’s such an important part of my life — I don’t know where I’d be without it. I have a hard time remembering what life was like without an iPod these days.</li>\n</ul>\n<p>I guess it’s kind of short, but it’s my list.</p>",
      "date_published": "2005-11-27T07:27:00.000Z",
      "tags": [
        "thanksgiving"
      ]
    },
    {
      "id": "https://tylerbutler.com/being-sick-sucks/",
      "url": "https://tylerbutler.com/being-sick-sucks/",
      "title": "Being Sick Sucks",
      "content_html": "<p>Guh. I hate being sick. And of course it has to hit me during my four-day\nThanksgiving weekend. To make matters worse, today is the <strong>only</strong> day this\nentire weekend that has been sunny. I’ll probably force myself to hobble\noutside at some point to get some vitamin E, though. You can’t waste a day\nlike this, considering what the weather’s been like out here lately.</p>\n<p>Anyway, I feel like I’ve got malaria. I know it isn’t (if it was, I’d still be\nin bed), but the nausea and fever/chills reminds me too much of it. Oh well,\neven if it is, I’ve survived it before, so I can do it again. The only\nthing that would make this suck less is if my mom was here. She would serve me\nsoup and Sprite until I felt better. Mmmm… Luckily mom and dad’ll be\nback in the US this Christmas, so maybe I can get sick again while they’re\nhere. Gotta live it up while you can.</p>",
      "date_published": "2005-11-27T07:14:00.000Z",
      "tags": [
        "thanksgiving"
      ]
    },
    {
      "id": "https://tylerbutler.com/new-music/",
      "url": "https://tylerbutler.com/new-music/",
      "title": "New Music",
      "content_html": "<p>Since I’ve moved out here to Seattle, I have discovered a ton of awesome new\nmusic. There are a ton of good local bands (Modest Mouse, Death Cab for Cutie,\nPresidents of the USA, and of course Pearl Jam…), and several more great\nones from Portland (The Decemberists, for example). Plus thre is a great\nsupport for local bands and good music in general from the radio stations out\nhere, especially 107.7 The End. For all the complaining I do about Seattle,\nthe music scene is pretty good, and much more accessible than Chicago’s (I do\nstill terribly miss 97.1 The Drive, though. Thank God for internet radio\nbroadcasting!)</p>\n<p>Anyway, it would take me forever to write individual reviews about all the\ngreat music I’ve found, so I’m just going to give brief synopsis of some of\nthe best new stuff I’ve been listening to.</p>\n<h2><a href=\"#morningwood\"></a><a href=\"http://www.MorningwoodRocks.com\">Morningwood</a></h2>\n<p>The End has a new music show every weeknight, and I have heard some fantasic\nstuff on it, including this band. You can stream a couple of their songs\nonline from their website, <a href=\"https://www.morningwoodrocks.com/\">MorningwoodRocks.com</a> (<a href=\"https://www.morningwoodrocks.com/music.asp\">direct link to the\nmusic page here</a>). You have to listen to The Nth Degree - it’s so awesome.\nReminds me a bit of The New Pornographers for some reason. It’s very poppy,\nbut it works somehow without sounding too bubblegum. I was <strong>psyched</strong> when I\nfound out you can buy some of their stuff in the iTunes Music Store! When I\nplayed it for my friend Dan, he said, “I want more Morningwood!” I heartily\nconcur.</p>\n<h2><a href=\"#the-books\"></a><a href=\"/link-not-available?url=http%3A%2F%2Fwww.rollingstone.com%2Fartist%2F_%2Fid%2F7292717\">The Books</a></h2>\n<p>This summer at Microsoft, while our intern population was quite high, I\nstarted a music-listening thing. We’d get together in a conference room and\neveryone would play a song they thought no one else had heard. We only met a\nfew times, but I am definitely doing it again next year. This band was one\nthat a guy named Gilbert Bernstein brought in. Fantastic stuff. He played the\nsong “Tokyo” for us, and it remains my favorite. Unfortunately, I can’t find\nany of their stuff on iTunes, but Rolling Stone has some more info on them,\nand you can buy the discs from Amazon if you can’t find it anywhere else. If\nyou want to have a listen beforehand, try Tokyo for starters. Stylistically\nit’s pretty indicative of what you can expect from them. Good stuff.</p>",
      "date_published": "2005-11-08T14:12:00.000Z",
      "tags": [
        "music"
      ]
    },
    {
      "id": "https://tylerbutler.com/harsh-reality/",
      "url": "https://tylerbutler.com/harsh-reality/",
      "title": "Harsh Reality",
      "content_html": "<p>When I told people I was moving out to Puget Sound earlier this year, a common\nreaction was, “I hope you like rain.” When I got here in late March, though,\nthe weather was beautiful, and it remained so until the last couple of weeks.\nI knew it was too good to be true. To get an idea of what I’ll be dealing with\nfor the rest of the winter, look at what my <a href=\"/link-not-available?url=http%3A%2F%2Fwww.konfabulator.com%2F\">Konfabulator</a> weather widget\ntells me…</p>\n<p><img alt=\"This image has been lost to the sands of time\" loading=\"lazy\" width=\"1536\" height=\"1024\" src=\"/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d\" srcset=\"/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69ed77a7c7274100086fd13d 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69ed77a7c7274100086fd13d 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69ed77a7c7274100086fd13d 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69ed77a7c7274100086fd13d 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69ed77a7c7274100086fd13d 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d 1536w\" /></p>\n<p>Depressing…</p>",
      "date_published": "2005-11-02T15:34:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/nanowrimo-2005/",
      "url": "https://tylerbutler.com/nanowrimo-2005/",
      "title": "NaNoWriMo 2005?",
      "content_html": "<p>November is nigh upon me, but I don’t think I’ll be able to fully participate\nin <a href=\"https://www.nanowrimo.org/\">NaNoWriMo</a> this year like <a href=\"/2004/11/tyler-a-novelist/\">I did last year</a>. Between the job\nand the working out, I’m simply not going to have the time for a 50,000\nword novel this year. It really is a shame, since I had a couple of good\nideas. Oh well, store them up for the future.</p>\n<p>I am, however, considering trying to complete a short story during the month.\nI have a few ideas… They’re listed below, along with some possible quotes\nfrom the story and some pros and cons about doing one. After you’ve read the\ndescriptions, vote for your favorite on the left of the site…</p>\n<h2><a href=\"#sex-drugs-and-polka\">Sex, Drugs, and Polka</a></h2>\n<p><strong>Description:</strong> A semi-autobiographical story about a guy who goes to\ncollege and deals with the overall college experience. He figures most of it\nout, but the fairer sex leaves him utterly confused — that is, until he meets\n<em>her</em>. (This makes it sound really cheesy — I don’t think it will be once I\nget it written.)</p>\n<p><strong>Possible excerpts:</strong></p>\n<p>“Years later he would think back in awe of the\nsquander in which he now lived — but at this very moment, it was home, and a\ngood one at that.”</p>\n<p>“He had the fleeting thought that all men of his generation had. ‘Am I gay?’”</p>\n<p>“In his heart he knew that what he really wanted was a meaningful relationship\nfilled with trust, sacrifice, and love, culminating in marriage and a slow\nride into the proverbial sunset of his later years with his beautiful bride;\nfor now, though, he’d settle for a passionate make-out session in the corner\nwith some girl whose name he wouldn’t remember tomorrow.”</p>\n<p><strong>Pros:</strong> Will give me a chance to get some of my college experiences out on\npaper (with some fictional embellishments, of course) before middle-age sets\nin and I forget it all. Plus, would be a lot of fun for my friends to read\nsince they’ll probably make appearances.</p>\n<p><strong>Cons:</strong> Far too much for a short story — I doubt I’ll ever finish it once\nI start, because there’s too much material to work with.</p>\n<h2><a href=\"#the-hill\">The Hill</a></h2>\n<p><strong>Description:</strong> A children’s story about friendship. A boy grows up with a\nhill in his back yard, and when he grows older, a construction company buys\nthe property and threatens to flatten the hill, so the boy has to find a way\nto save it — or say goodbye.</p>\n<p><strong>Possible excerpts:</strong> Hmmm, I can’t find them right now… I know they’re\nsomewhere…</p>\n<p><strong>Pros:</strong> I like to experiment with different styles (Mike’s character in\n<a href=\"/tags/novel/\">Knot</a> was an experiment with anger and rage), so it would be interesting\nto try my hand at a children’s story, with some simpler language and richer\ndescriptions. The presence of a non-talking character (the Hill) would allow\nme to forgo dialog and focus more on description (one of my weaker points, I\nthink).</p>\n<p><strong>Cons:</strong> Might be kind of boring, and difficult to prevent sounding cheesy\nor overly didactic. The core concept isn’t very original either.</p>\n<h2><a href=\"#the-childrens-democracy\">The Children’s Democracy</a></h2>\n<p>**Description: **A lonely suburban writer suffers writer’s block until he\nstarts to observe a group of kids around his housing complex. He writes about\nhis observations about the way the children deal with each other socially and\npolitically.</p>\n<p><strong>Possible excerpts:</strong> Probably the same place <strong>The Hill</strong> excerpts are…\nI’ll put them in here when I locate them…</p>\n<p><strong>Pros:</strong> Interesting concept to me, and I’d get to alternate between\nanalytical essay-style writing, description, and dialog pretty easily with the\ncharacters.</p>\n<p><strong>Cons:</strong> Very little subject matter to use, since I don’t have too much\ninteraction with kids. The idea is based on some run-ins I’ve had with some of\nthe kids around my apartment complex, but I don’t think I have nearly enough\nmaterial to keep this interesting.</p>\n<p>Have another plot idea you think I should write about? Let me know…</p>",
      "date_published": "2005-10-17T10:39:00.000Z",
      "tags": [
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/java-memory-allocation/",
      "url": "https://tylerbutler.com/java-memory-allocation/",
      "title": "Java Memory Allocation",
      "content_html": "<p>I saw this article linked over at Slashdot today and found it to be a very\ninteresting read. I’ve had many debates with people that think that byte-\ncompiled languages like Java and C# just have inherent performance problems.\nOften they’ll spout off some nonsense about how garbage collection is\ninefficient or something. Sure, <em>sometimes</em> it’s better to have manual control\nover your memory allocation/deallocation, but this article makes a\nsurprisingly good case for why the perceived performance hits in dynamic\nmanagement don’t even exist. A great read, especially if you don’t know much\nabout how memory management works in the first place.</p>",
      "date_published": "2005-10-10T08:00:00.000Z",
      "tags": [
        "java"
      ]
    },
    {
      "id": "https://tylerbutler.com/operation-look-good-feel-good/",
      "url": "https://tylerbutler.com/operation-look-good-feel-good/",
      "title": "Operation: Look Good, Feel Good",
      "content_html": "<p>One of the many benefits of working at <a href=\"http://www.microsoft.com\">Microsoft</a> is the relatively\nlittle-known weight management benefit. Essentially, the benefit pays for a\nlarge majority of a diet/weight loss/exercise program administered by the <a href=\"http://www.proclub.com/\">Pro\nClub</a>, the semi-official Microsoft sports club. I found out about it fairly\nsoon after I started, and I knew I wanted to get involved, but I didn’t have\nthe time. Finally, about a month ago, I took the plunge and got things going.</p>\n<p>I’ve been overweight for as long as I can remember, and though I’ve been\nrelatively static the past few years in terms of weight gain, I’ve known for\nawhile that I need to do something about it. Since I’m making use of all the\nother Microsoft benefits (getting my teeth fixed, medical check-ups, etc) I\nfigured I might as well do everything.</p>\n<p>Anyway, I officially started on the diet last Thursday and the exercise the\nprevious day. This week I’ve lost <strong>13.6 pounds.</strong> That’s a lot, I know, but I\nshould put this in perspective. I work out 90 minutes 3 days a week with a\npersonal trainer, and 60 minutes 3 more days a week by myself. I bought a\nheart rate monitor and with the help of Jeremiah, my trainer, am learning how\nto do heart-rate-focused work-outs. But the big thing last week was the diet…</p>\n<p>Basically I ate nothing but chicken, protein shakes, and a little peanut\nbutter. The dietitian called it ‘detox’ and she was right. I had withdrawal\nsymptoms including severe headaches and numbness in my hands and feet for the\nfirst 4-5 days. It seems like most of it has passed though, and fortunately\nthis week I get to add veggies back into my diet. I went out for a salad at\nlunch and it was quite possibly the best thing I’ve ever had in my entire life\nafter 7 days of chicken and protein shakes. I also talked about my aversion to\nthe protein shakes (I had to drink 5 per day, so I was getting pretty sick of\nthem) with the dietician and she moved me to another diet without the shakes.</p>\n<p>I was having a lot of trouble keeping my calories up. I’m supposed to eat\nbetween 1500 and 1600 a day, but last week I averaged ~1300. I was sluggish\nand mentally challenged the whole week, so I am eager to get my count back up\nso I can feel better while still losing the weight and eating better. I think\nI’ll be a little happier now with the variety. Plus, with the veggies back and\nyogurt coming back next week, I should be good to go.</p>\n<p>I am pleased with the progress so far, but I do miss the freedom I exercised\npreviously when it came to food. As things go on, I’ll be adding more food\ngroups back in, so I should be OK. The weirdest thing about the whole program\nis the counseling stuff. The counselor is awesome, and I only meet with here\nonce a month or so, but she gave me a business card that just said Sara\nS-----, Psychotherapy. That word just seems scary to me, especially since I\ndon’t consider myself psychotic or even ‘troubled’ but whatever.</p>\n<p>Anyway, 1 week down, 19 left to go.</p>",
      "date_published": "2005-10-06T00:35:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/celebrating-30-years-of-papua-new-guinean-independence/",
      "url": "https://tylerbutler.com/celebrating-30-years-of-papua-new-guinean-independence/",
      "title": "Celebrating 30 Years of Papua New Guinean Independence",
      "content_html": "<p><a href=\"http://en.wikipedia.org/wiki/Papua_New_Guinea\">PNG</a> celebrated 30 years of independence on September 16, 2005. To\ncelebrate, I decorated my office at work, blew up some balloons, and served\n<a href=\"http://en.wikipedia.org/wiki/Timtam\">Tim Tams</a>. Pictures are in the PNG Independence 2005 Gallery. A few\nof my co-workers joined in the celebration by putting up balloons and\nlistening to PNG music in my office. Not a bad way to waste time on a slow\nFriday afternoon.</p>",
      "date_published": "2005-09-19T03:52:00.000Z",
      "tags": [
        "png"
      ]
    },
    {
      "id": "https://tylerbutler.com/thunder-thunder-thunder-thundercats-ho/",
      "url": "https://tylerbutler.com/thunder-thunder-thunder-thundercats-ho/",
      "title": "Thunder, Thunder, Thunder, Thundercats - HO!!!",
      "content_html": "<p>I have gotten into a pretty nostalgic mood the last few years. I’ve started\nre-watching a lot of the old cartoons I used to watch on static-ridden PAL\ntapes when I was a kid. One of my all-time favorite shows was Thundercats, and\nit seems that you can <strong>finally</strong> get <a href=\"/link-not-available?url=http%3A%2F%2Fwww.amazon.com%2Fgp%2Fproduct%2FB0009IW8AI%2Fref%3Das_li_ss_tl%3Fie%3DUTF8%26tag%3Dtylerbutlerco-20%26linkCode%3Das2%26camp%3D1789%26creative%3D390957%26creativeASIN%3DB0009IW8AI\">the first season on DVD</a>. All I can\nsay is, “It’s about time!” And with my new job, I might even be able to afford\nthem!</p>",
      "date_published": "2005-08-22T13:26:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/most-recent-songs-in-itunes/",
      "url": "https://tylerbutler.com/most-recent-songs-in-itunes/",
      "title": "Most Recent Songs in iTunes",
      "content_html": "<p>I decided this morning that I was going to try and learn XSLT today. I think I\nsucceeded somewhat. I decided that my tutorial application would be an iTunes\nXML feed transformed into a page on my site with the most recent songs I’ve\nlistened to in iTunes. I created my own iTunes XML schema (a really really\nsimple one), though in retropect, I probably should have just tried to use the\nbuilt-in iTunes XML stuff (though I don’t know if this capability is exposed\nin the SDK). Anyway, once I had the XML (created by my program in C# and the\niTunes COM SDK), I started fooling with the XSLT. It still needs a lot of\nstyle work, but I managed to get it formatting the data the right way and\neverything.</p>\n<p>The album art is actually taken directly from the metadata on the audio files\nin my collection, not from another source like Amazon. I think this is a\nbetter solution because I have some crazy stuff that Amazon simply doesn’t\nknow about. Besides, I spent a long time trying to clean up the album art in\nmy music collection, and though there are still a lot of gaps, I might as well\nget some reward for all my hard work.</p>\n<p>As far as the XSLT is concerned, it’s pretty easy stuff, I guess, but there\nare a lot of “gotchas.” For example, I couldn’t get things to render in\nFirefox until I added the \"\" line. It was working fine in IE and I couldn’t\nfigure out what the heck was wrong. Plus, if you’re not careful about dividing\nyour templates for different elements up properly, things come out pretty\nwierd. Also, my Apache web server isn’t configured right, I guess, because it\nmesses up the MIME types on *.xslt files, so for awhile, Firefox complained it\ncouldn’t attach the stylesheet. Rather than fool with Apache, I just changed\nthe extension of the stylesheet. How’s that for lazy?</p>\n<p>Anyway, here’s the xml file with attached stylesheet: <a href=\"/SiteCollectionDocuments/Post%20Content/nowplaying.xml\">nowplaying.xml</a>.\nObviously, you’ll need at least IE 6.0 or Firefox (or another XSLT-ready\nbrowser)to see it right. And here’s the <a href=\"/SiteCollectionDocuments/Post%20Content/fullview.xsl\">XSLT itself</a>. Like I said, I want\nto do a lot more styling, but I have been doing this stuff all day, so I’m\ncalling it quits for now.</p>",
      "date_published": "2005-08-22T06:19:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/i-have-no-friends/",
      "url": "https://tylerbutler.com/i-have-no-friends/",
      "title": "I Have No Friends",
      "content_html": "<p><a href=\"https://www.netflix.com/\">Netflix </a>has this (relatively) new Friends feature. When I went there the\nother day, it kindly reminded me, with a happy-looking purple box that I have\nno friends yet. Totally brightened my day. It would have been worse, but at\nleast there was a link there where I could get a friend if I needed one. Too\nbad life’s not that easy. Anyway, add me to your friends’ list if you have\nNetflix.</p>\n<p><em>Lest some of you get the wrong idea… All of the above is mostly sarcastic.\nI have lots of friends. I just thought the fact that Netflix would blatantly\nsay “No friends yet” on their website was funny.</em></p>",
      "date_published": "2005-08-14T05:10:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/wikipedia-in-tok-pisin/",
      "url": "https://tylerbutler.com/wikipedia-in-tok-pisin/",
      "title": "Wikipedia in Tok Pisin",
      "content_html": "<p>While visiting Wikipedia this morning, I saw a link to the <a href=\"https://tpi.wikipedia.org/wiki/Main_Page\">Tok Pisin\nversion.</a> There doesn’t seems to be a whole lot there, and the spelling and\ngrammer strikes me as being quite bad, but even so, I think it’s pretty cool.\nI might need to start contributing some to keep my Pidgin skills up to par.\nAlso of interest: the <a href=\"http://en.wikipedia.org/wiki/Tok_Pisin\">main Wikipedia article on Tok Pisin</a> and <a href=\"https://en.wikibooks.org/wiki/Tok_Pisin\">an entry\non Wikibooks</a> with more about the grammatical structure. Of course, nothing\nbeats hearing it spoken for real, so give me a call and listen to the real\ndeal!</p>",
      "date_published": "2005-07-05T00:09:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/bad-product-designs/",
      "url": "https://tylerbutler.com/bad-product-designs/",
      "title": "Bad Product Designs",
      "content_html": "<p>As a software designer, I ask myself these questions everyday: “Will a user be\nable to figure this out? Is this intuitive?” Someone at Microsoft shared this\nlink with me. It’s about bad designs of physical things, but the principles can be applied\nto other design work. I don’t agree with everything there, but it’s a good\nread nonetheless.</p>",
      "date_published": "2005-06-29T01:21:00.000Z",
      "tags": [
        "design"
      ]
    },
    {
      "id": "https://tylerbutler.com/irony-of-ironies/",
      "url": "https://tylerbutler.com/irony-of-ironies/",
      "title": "Irony of Ironies",
      "content_html": "<p>One of my peeves is having to register for websites just to <em>view</em> their\ncontent. You’ll notice that while you do have to sign up for my site to post\ncomments (the reasoning is in <a href=\"/link-not-available?url=http%3A%2F%2Fwww.nytimes.com%2F2005%2F03%2F15%2Fnyregion%2F15annoyances.html\">this post</a>), my content is always visible to\neveryone.</p>\n<p>That’s one reason I love <a href=\"http://www.bugmenot.com\">BugMeNot.com</a>, a website that stores usernames\nand passwords that can be used to access these types of sites without\nregistering yourself. There’s even a <a href=\"https://roachfiend.com/archives/2005/02/07/bugmenot/\">nifty Firefox extension</a> that will\nautomatically fill in forms with BugMeNot data for you. Do you need any more\nreason to get Firefox?</p>\n<p>Anyway, there’s <a href=\"/link-not-available?url=http%3A%2F%2Fwww.nytimes.com%2F2005%2F03%2F15%2Fnyregion%2F15annoyances.html\">a story at the NYTimes site</a> about “life’s little\nannoyances,” and it mentions having to register for websites. But guess what,\nin order to read New York Times articles online, you have to register. Gosh,\nthat’s dumb. Perfect time to try out BugMeNot.com! The article itself is\ninteresting, though, and has some good ideas about how to stick it to the junk\nmail advertisers. I think I’m going to start doing some of the stuff in there,\nlike stuffing Business reply envelopes with heavy paper and sending it back\njust to make the company pay for the postage. Take <strong>that</strong> suckers!</p>",
      "date_published": "2005-06-18T02:24:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/interview-with-a-search-engine/",
      "url": "https://tylerbutler.com/interview-with-a-search-engine/",
      "title": "Interview with a Search Engine",
      "content_html": "<p><a href=\"https://www.the-underdogs.org/game.php?id=330\">Dr. Sbaitso</a> was a psychiatrist program that I first played with as part\nof my Sound Blaster 16 (my first sound card!) Friends and I actually made some\nprank phone calls using it. Hysterical! Anyway, here is a funny article\noutlining a “conversation” with the Jeeves search engine of Ask.com. Prepare\nto laugh.</p>",
      "date_published": "2005-06-16T06:41:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/what-have-you-done-for-your-country-lately/",
      "url": "https://tylerbutler.com/what-have-you-done-for-your-country-lately/",
      "title": "What Have You Done for Your Country Lately?",
      "content_html": "<p>I hate a lot of things. There’s a lot of things that really bug me; that\nreally get under my skin. But the one thing I am absolutely <strong><em>sick and\ntired</em></strong> of hearing about is Senators and Congressman tacking little\nprovisions onto other relatively benign bills in order to get them passed.\nThis <strong><em>really</em></strong> pisses me off, because it’s blatently dishonest!</p>\n<p>The latest example of this is the Real ID Act, written by one Congressman <a href=\"/link-not-available?url=http%3A%2F%2Fwww.house.gov%2Fsensenbrenner%2Findex.htm\">F.\nJames Sensenbrenner, Jr. </a>(R), of Wisconsin. This act would mandate\nnational ID cards for all citizens that are machine readable, with a lot of\npersonal information going into some big government controlled database. It’s\nbeing tacked onto a bill giving our troops in Iraq further governmental\nfinancial support. Now, what does a national ID card system have to do with\npassing funding requests for our troops in Iraq? <strong><em>Nothing!</em></strong></p>\n<p>This is being voted on <strong>tomorrow</strong>. Here’s an email from my good friend\nPatrick Wagstrom with a little more information about it.</p>\n<blockquote>\n<p>Hey,</p>\n</blockquote>\n<blockquote>\n<p>So as part of the “emergency” funding bill for the troops, Sen Stensenbrenner\nof Wisconsin got the Real ID bill attached, and it passed the house. The\nsenate votes on it this Tuesday (TOMORROW), and Bush will certainly sign the\nbill if nothing happens.</p>\n</blockquote>\n<blockquote>\n<p>Here’s a brief overview of what’s going on:</p>\n</blockquote>\n<blockquote>\n<p>Real ID basically mandates a national ID card. It requires that all state\ndrivers licenses have a uniform set of data, including biometric data and that\nit be readable by a smart card and 2d barcode reader. In addition, this\ninformation will be forwarded to a federal government database of individuals.</p>\n</blockquote>\n<blockquote>\n<p>What’s so bad about all this? After all, we don’t have any privacy left\nanyway. Well, the issue is that your information in this centralized database\nbecomes a requisite for all sorts of things, bank accounts, plane tickets,\nsocial security, etc. Furthermore, it’s a centralized clearing house for the\nthe government to spy/black list it’s citizens. This could very realistically\nturn into a massive new form of the no-fly list where individuals will not\nknow why they’ve been flagged. We could have thousands of second class\ncitizens who have no hopes of a better life because they fit a profile. What’s\nworse, it could happen to you (nothing like fear mongering to make a point).</p>\n</blockquote>\n<blockquote>\n<p>The bill has lots of other nasty provisions that do things like take away\nhabeus corpus for non-citizens and SUSPECTED terrorists (technically leeching\nsomeone’s wifi access is terrorism as it’s unauthorized computer access which\nis classified as computer terrorism). The fact that this was attached to a\nspending authorization for the troops is horrible and it <em>MUST</em> be stopped.\nCall your senators and let them know that you don’t support this sort of\npiggybacking and that the government needs to allow open and public debate on\nthis issue. It’s too important to be piggybacked and rammed through in this\nmethod.</p>\n<p>—Patrick</p>\n</blockquote>\n<p>I want to reiterate that this is being voted on tomorrow! This means that if\nyou want to speakup you need to do so now. There’s a website that you can use\nto contact your seantor(s). <a href=\"/link-not-available?url=http%3A%2F%2Fwww.unrealid.com\">http://www.UnRealID.com</a>. <strong>[Note: The site\nseems to be having problems right now. I tried to submit my fax but I got an\nerror. If it doesn’t come back up, you might have to call your Senator.]</strong>\nPlease take the time to speak up about this if you’re even half as irate as I\nam. At the very least, even if you would support the Real ID Act, at least\ntell your Senator(s) that they should <strong>read</strong> a bill before passing it, just\nto make sure shenanigans like this don’t happen.</p>\n<p>Oh, and if you’re interested, here’s what I wrote to the Washington State\nSenators.</p>\n<blockquote>\n<p>Good morning Senators Murray and Cantwell,</p>\n</blockquote>\n<blockquote>\n<p>I am writing to voice my opposition of the Real ID Act, which is being voted\non by the Senate on Tuesday, May 10. First of all, I feel that this Act is the\nfirst step leading to a national ID card system, not unlike that of Soviet\nRussia, communist China, and Vietnam. Frankly, if I wanted to live in China, I\nwould move there. I would like to think that here in the US we support our\ncitizens’ right to privacy.</p>\n</blockquote>\n<blockquote>\n<p>Second of all, because these cards would be the same throughout all 50 states,\nand be machine readable, there is nothing preventing companies and individuals\nfrom the private sector from reading the data on these cards and selling\ncitizens’ personal information to the highest bidder.</p>\n</blockquote>\n<blockquote>\n<p>Thirdly, there is no proof that ID documents help prevent or deter terrorism.\nAn ID document says nothing about evil intent. Forcing our citizens to\ndocument themselves is NOT a deterrant to terrorism; rather, it is a VICTORY\nfor terrorists!</p>\n</blockquote>\n<blockquote>\n<p>Finally, and most importantly, this Act has been tacked on to another bill,\nand has not been discussed or debated on the Senate floor. I believe that as\nSenators, it is your responsibility to read and understand all bills before\nyou, and make an informed decision. The fact that the Real ID Act is\npiggybacking on another bill seems to imply that the author did not feel it\ncould pass on its own merits. Please read and understand the Real ID Act in\nits entirety, and consider the ramifications of passing this bill.</p>\n</blockquote>\n<blockquote>\n<p>Sincerely,<br />\nTyler W. Butler</p>\n</blockquote>",
      "date_published": "2005-05-10T00:44:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-history-of-the-gui/",
      "url": "https://tylerbutler.com/the-history-of-the-gui/",
      "title": "The History of the GUI",
      "content_html": "<p>I really enjoyed <a href=\"https://arstechnica.com/articles/paedia/gui.ars\">this article</a>, though it could have gone further in depth\nabout some of the advances made in the 90’s. The 80’s coverage was pretty\ngood, and the history of PARC and even before was excellent, but it abruptly\nended with Windows 95 and OSX, and left out a lot of the *nix GUI\n“experiments” from the mid-90’s. It really made me want to learn more,\nespecially about NeXT and BeOS (which I have actually used, believe it or\nnot!) and their history. Thank God for <a href=\"https://www.wikipedia.org\">Wikipedia</a>! Oh, and there’s also a\ndecent screenshot archive at\n<a href=\"/link-not-available?url=http%3A%2F%2Fwww.aci.com.pl%2Fmwichary%2Fguidebook%2Finterfaces\">http://www.aci.com.pl/mwichary/guidebook/interfaces</a>.</p>",
      "date_published": "2005-05-08T11:52:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/how-lightsabers-work/",
      "url": "https://tylerbutler.com/how-lightsabers-work/",
      "title": "How Lightsabers Work",
      "content_html": "<p>As if we needed any more proof that lightsabers are cool, HowStuffWorks.com\nhas a story explaining <a href=\"https://www.howstuffworks.com/lightsaber.htm\">how lightsabers work</a>. It is <strong>hilarious</strong>, and\nfrighteningly informative, and made my entire day at the office bearable. Here\nare some choice quotes from the article:</p>\n<blockquote>\n<p>…be sure to handle any active lightsaber with extreme care until you are\ncompletely familiar with its feel and handling.</p>\n</blockquote>\n<blockquote>\n<p>By using the Force, the wielder can anticipate the path of the blaster bolt\nand align the blade with that path prior to the bolt’s arrival. Using normal\nvisual tracking to accomplish the same effect can be far more difficult.</p>\n</blockquote>\n<blockquote>\n<p>The risk of personal injury is much higher with a double-bladed lightsaber,\nand their practical applications around the home are limited. Therefore, it is\nprobably best to save your money and stick with the single-blade version.</p>\n</blockquote>\n<blockquote>\n<p>Although a lightsaber is typically used as a defensive weapon by Jedi\nknights, the availability of lightsabers on consumer sites such as eBay is\ngrowing. It is a sad fact of life, but if a Jedi knight falls on hard times,\nhis lightsaber is one source of quick cash. He can always build another one.</p>\n</blockquote>\n<blockquote>\n<p>…many new owners are pleasantly surprised by the many domestic uses of a\nlightsaber around the home or office.</p>\n</blockquote>\n<p>There are also some excellent pictures with captions.</p>",
      "date_published": "2005-05-06T06:59:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/congratulations-hawktour/",
      "url": "https://tylerbutler.com/congratulations-hawktour/",
      "title": "Congratulations Hawktour!",
      "content_html": "<p>I’m pleased to say that the Hawktour project came away from IPRO Day with the\nwebsite award, and picked up second place in their track. I am really proud of\nthe team and how they managed to come together even though I abandoned them\nhalf way through this semester. Santhosh did a great job pulling everything\ntogether. Even though we didn’t win our category, for three semesters we have\nbeen a top-ranked team, and it’s a source of great personal pride to know that\nI was instrumental in getting us there.</p>\n<p>But the real boon this semester was to finally beat out our arch-nemesis in\nthe website category, <a href=\"/link-not-available?url=http%3A%2F%2Fwww.iit.edu%2F~ipro329s05%2F\">IPRO 329</a>. They have consistently beat us in the\nwebsite category for the past two semesters, even though we have consistently\nimproved our site and they have done very little, if anything at all, to\ntheirs. At the beginning of the semester, Satish (the designer of the website\nthat rocketed us to website stardom three semesters ago) said that it was his\ngoal to win that category this semester. I am glad he made it happen. Topping\nthem was an even bigger deal than winning our category. I feel that IPRO Day\nis a bit of a sham anyway. Of course, we’ll take the awards if they want\nto give them to us.</p>\n<p>Check out the <strong>award-winning</strong> <a href=\"/link-not-available?url=http%3A%2F%2Fwww.hawktour.net%2F\">Hawktour website</a>, and see why all IPROs\nshould strive to be as good as we are.</p>",
      "date_published": "2005-04-30T23:18:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/delicious-rss-feed/",
      "url": "https://tylerbutler.com/delicious-rss-feed/",
      "title": "Del.icio.us RSS Feed",
      "content_html": "<p>I removed the <a href=\"/link-not-available?url=http%3A%2F%2Fdel.icio.us%2F\">Del.icio.us</a> RSS feed from the right side of the site\nbecause it was getting too long. If I had <a href=\"/link-not-available?url=http%3A%2F%2Fdel.icio.us%2Fpridkett\">as many</a> as <a href=\"http://patrick.wagstrom.net/\">Patrick</a>, the\nfront page would render about a mile long. So I’m looking for a way to limit\nthe number of entries in the feed to something more manageable, like 10. I\nreally only want to share the most recent entries through a feed anyway —\nthat’s what a feed is for! If I want to share <em>everything</em> I’ll point people\nto the site! So if anyone knows how to cut down the number of entries in the\nfeed, let me know.</p>",
      "date_published": "2005-04-24T13:14:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/im-baaaaaack/",
      "url": "https://tylerbutler.com/im-baaaaaack/",
      "title": "I'm Baaaaaack!",
      "content_html": "<p>I finally managed to get things set up here in Redmond. Hopefully The DNS\nchanges I made will take effect soon, so my domain will be redirecting\nproperly. I have lots to post after such a long abscence. Stay tuned!</p>",
      "date_published": "2005-04-22T13:20:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/code-line-counter/",
      "url": "https://tylerbutler.com/code-line-counter/",
      "title": "Code Line Counter",
      "content_html": "<p>I have been working on HawkTour now for over two years, and I started\nwondering today exactly how much code we’ve generated since we started. I\nthought maybe <a href=\"https://www.eclipse.org\">Eclipse</a> had a project-wide line counter somewhere, but I\ncouldn’t find it, so I just wrote a simple <a href=\"https://www.python.org\">Python</a> script to do it. The\ncode is below.</p>\n<div><figure><figcaption><span>linecounter.py</span></figcaption><pre><code><div><div><div>1</div></div><div><span># Tyler Butler, 03/08/2005</span></div></div><div><div><div>2</div></div><div>\n</div></div><div><div><div>3</div></div><div><span>import</span><span> os</span></div></div><div><div><div>4</div></div><div>\n</div></div><div><div><div>5</div></div><div><span>total </span><span>=</span><span> </span><span>0</span></div></div><div><div><div>6</div></div><div><span>extensions </span><span>=</span><span> [</span><span>'java'</span><span>,</span><span> </span><span>'cpp'</span><span>,</span><span> </span><span>'h'</span><span>]</span></div></div><div><div><div>7</div></div><div>\n</div></div><div><div><div>8</div></div><div><span>for</span><span> root</span><span>,</span><span> </span><span>dir</span><span>,</span><span> files </span><span>in</span><span> os</span><span>.</span><span>walk</span><span>(</span><span>'.'</span><span>)</span><span>:</span></div></div><div><div><div>9</div></div><div><span>  </span><span>for</span><span> file </span><span>in</span><span> files</span><span>:</span></div></div><div><div><div>10</div></div><div><span>    </span><span>if</span><span> </span><span>str</span><span>(file)</span><span>.</span><span>split</span><span>(</span><span>'.'</span><span>)[</span><span>-</span><span>1</span><span>] </span><span>in</span><span> extensions</span><span>:</span></div></div><div><div><div>11</div></div><div><span><span>      </span></span><span>filename </span><span>=</span><span> os</span><span>.</span><span>path</span><span>.</span><span>join</span><span>(root</span><span>,</span><span> file)</span></div></div><div><div><div>12</div></div><div><span><span>      </span></span><span>f </span><span>=</span><span> </span><span>open</span><span>( filename )</span></div></div><div><div><div>13</div></div><div><span><span>      </span></span><span>total </span><span>+=</span><span> </span><span>len</span><span>(f</span><span>.</span><span>readlines</span><span>())</span></div></div><div><div><div>14</div></div><div><span><span>      </span></span><span>f</span><span>.</span><span>close</span><span>()</span></div></div><div><div><div>15</div></div><div>\n</div></div><div><div><div>16</div></div><div><span>print</span><span> </span><span>\"TOTAL LINES IN PROJECT: \"</span><span> </span><span>+</span><span> </span><span>str</span><span>(total)</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Pretty simple, isn’t it? It just works in the current directory, but you can\nchange that pretty easily. Also, if you want to add more extensions to count\nthen just add them to the extensions list.</p>",
      "date_published": "2005-03-09T05:14:00.000Z",
      "tags": [
        "python"
      ]
    },
    {
      "id": "https://tylerbutler.com/print-copy/",
      "url": "https://tylerbutler.com/print-copy/",
      "title": "Print Copy",
      "content_html": "<p>I posted a new PDF copy of my novel on the site that is formatted for\nprinting. You can also read it on the screen, of course, but I wanted to print\nout couple of copies with nice typesetting to give to a couple of my\nprofessors. Anyway, enjoy. Also, I added a disclaimer, since there’s some\nobjectionable material in there and I think it’s fair to notify the reader\nbeforehand. Finally, I am working on a write-up of the entire NaNoWriMo\nexperience and will post it as soon as I get a chance. Bottom line, though: I\nrecommend it.</p>",
      "date_published": "2005-02-19T04:56:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/microsoft-program-manager-interview-the-breakdown/",
      "url": "https://tylerbutler.com/microsoft-program-manager-interview-the-breakdown/",
      "title": "Microsoft Program Manager Interview: The Breakdown",
      "content_html": "<p>Early last week I went through a <a href=\"/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Fcollege%2Fft_pm.mspx\">Program Manager</a> interview at Microsoft. I am happy to say that it went reasonably well, since I did get an offer. This has been a long time coming… Since I did a fair amount of research before going into the interview, and was helped out a lot by the written experiences of others, I want to add my own experience to the mix. Also, while Googling for information on the interview process and what to expect, I found a lot on the Dev/Test side of things, but very little about the Program Manager interviews. There were significant differences (though I have never had a Dev/Test interview, so perhaps I’m off-base here), so my hope is that I can shed a little light on the PM interviewing process itself.</p>\n<p>Before I go into more details about the actual interviews themselves, here’s a brief overview of the entire day:</p>\n<ul>\n<li>Total number of interviews: <strong>7 + debrief</strong></li>\n<li>Total number of teams with which I interviewed: <strong>3</strong></li>\n<li>Length of day: <strong>8:30am --- 5:30pm</strong></li>\n</ul>\n<h2><a href=\"#interview-breakdown\">Interview Breakdown:</a></h2>\n<ul>\n<li><a href=\"#hr\">Human Resources (Ron Honcoop)</a></li>\n<li><a href=\"#pub1\">Publisher Team (Jeff Bell)</a></li>\n<li><a href=\"#pub2\">Publisher Team (Tara Kraft)</a></li>\n<li><a href=\"#cms1\">Content Management Server --- Lunch (Dave Quick)</a></li>\n<li><a href=\"#cms2\">Content Management Server (Dan Kogan)</a></li>\n<li><a href=\"#cms3\">Content Management Server (Jim Masson)</a></li>\n<li><a href=\"#project\">Project (Dieter --- didn’t catch last name)</a></li>\n<li><a href=\"#debrief\">Debrief (Ron Honcoop) </a></li>\n</ul>\n<p>Being the conscientious young man that I am, I took notes on each interview and wrote down most of the questions I was asked, so I will share those. Please note that I honestly don’t know exactly what they’re looking for, but I did get an offer, so I must have done something right. I did do some preparation work for the interview.</p>\n<h2><a href=\"#pre-interview-preparation\">Pre-interview Preparation</a></h2>\n<h3><a href=\"#blog-reading\">Blog reading</a></h3>\n<p>I did a simple Google search for “Microsoft interview questions” and wound up with quite a few blogs from people that had had interviews. The search process to uncover really useful information took me a couple of days. Here’s a few of the ones that proved most helpful:</p>\n<ul>\n<li><a href=\"/link-not-available?url=http%3A%2F%2Fwww.sellsbrothers.com%2Ffun%2Fmsiview%2F\">http://www.sellsbrothers.com/fun/msiview/</a></li>\n<li><a href=\"/link-not-available?url=http%3A%2F%2Fblog.mattgoyer.com%2Fstories%2Fftjobintinseattle.html\">http://blog.mattgoyer.com/stories/ftjobintinseattle.html</a></li>\n<li><a href=\"https://blogs.msdn.com/adamu/archive/2004/06/18/159130.aspx\">https://blogs.msdn.com/adamu/archive/2004/06/18/159130.aspx</a></li>\n<li><a href=\"/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fjobsblog\">http://blogs.msdn.com/jobsblog</a></li>\n</ul>\n<h3><a href=\"#brain-teasers\">Brain teasers</a></h3>\n<p>I had heard the Microsoft was fond of asking brain teaser questions, so I looked around for a few of those as well. Even though I had been told that they really no longer asked these questions, I was interested in trying to solve them anyway. They proved to be very stimulating bar conversation on my weekly Thursday-night outing to John Barleycorn’s with the guys. Also, they helped to focus my nervous energy into something mentally stimulating, and provided hours of amusement at work. Here are a couple of the sites that had a lot of interesting problems:</p>\n<ul>\n<li><a href=\"/link-not-available?url=http%3A%2F%2Fhalcyon.usc.edu%2F~kiran%2Fmsqs.html\">http://halcyon.usc.edu/~kiran/msqs.html</a></li>\n<li><a href=\"https://www.cut-the-knot.org/algebra.shtml\">https://www.cut-the-knot.org/algebra.shtml</a></li>\n</ul>\n<p>It should be noted that these brain-teasers provided me <strong>absolutely no useful information for my interview!</strong> I was not asked any of these questions, nor any others that were similar. Their only value was in keeping my mind off of my nervousness and making me the life of the party at Barleycorn’s.</p>\n<h3><a href=\"#phone-conversation\">Phone conversation</a></h3>\n<p>My friend Matt’s sister had an interview with Microsoft a few months ago and got an offer (which she accepted), so Matt got us in touch and she provided me a lot of useful information. She had some tips for the actual day (scope out the location the night before, be ready for it to last the whole day, etc.), and she helped to calm me down a bit, since at that point I was pretty nervous. She did not interview for a PM position, though, so there were differences in my experience. If you know someone or can find a friend of a friend that interviewed for the specific position you’re interviewing for, it would be the most useful.</p>\n<h3><a href=\"#important-points\">Important points</a></h3>\n<p>I also made a mental list of major points I wanted to be sure to mention during the interview. This basically reflected the major points I hit in my resume’s professional summary. I wanted to be sure I hit a lot about <a href=\"/link-not-available?url=http%3A%2F%2Fwww.hawktour.net\">HawkTour</a>, since my experience there directly relates to the PM position. I also wanted to stress my multi-cultural background (lots of teamwork benefits there) and communication skills. These were the things that set me apart from other people --- I wanted to make sure I talked about them. I wrote out a list of questions that I wanted to ask each interviewer (things like “what are your core responsibilities?” and “how many people are on your team?”). This list gave me a baseline for every interview. I knew they would ask if I had any questions, so I always looked back and my list to make sure we’d covered everything I wanted to go over.</p>\n<p>So with all of that background out of the way, let’s get into the guts of every interview. I will go in chronological order. Please hold your questions until the end of the lecture.</p>\n<p>Oh, one other thing --- I got four basic flavors of questions during the day:</p>\n<p>Background\n:    Questions about projects I have worked on, what my interests are, why I am interested in Microsoft, how I solved past technical problems, etc. These are pretty easy if you anything about yourself.</p>\n<p>Greenlight/Ideas\n:    These are questions where you’re given a scenario and you need to formulate ideas about usage. I got an equal number of these and design questions. This type of question seems to be all about formulating creative ideas quickly. I had some good ideas, some horrible ones for every question. The interviewer would often ask “What else?” after every idea, prompting me to frantically analyze the problem again to come up with something else. These are a lot of fun and pretty easy if you’re creative and keep a cool head.</p>\n<p>Design\n:    These were the meat of my interview. Basically, they give you a new feature or new product idea and ask you to design a solution. I was clear about any assumptions I made and tried to ask questions to really understand the goal of the product/feature before I started designing. Design can and probably should be done on the ubiquitous office whiteboard. That’s what I did. Design problems were tons of fun as well, and I had several good ideas throughout the day (and a few bad ones), which I was pretty proud of.</p>\n<p>Technical\n:    These are the hardest problems for me. Luckily, I only got one or two. These questions have to do with algorithms, computer architecture, etc. These are tough for me because they require complex thinking about details and optimizations which I don’t do quickly. I am a big-picture sort of guy.</p>\n<p>My day began at 6:30am PST. I was supposed to be at Building 19 at 8:30 to report in. I had driven out to the campus from my hotel the night before, so I knew approximately how long it was going to take me to get there. I had intended to eat some breakfast, and in retrospect I probably should have, but I just didn’t feel very hungry, so I filled up my water bottle, left the hotel about 7:15, and headed straight for Building 19.</p>\n<p>I arrived at 7:30. Traffic was kind of bad, but it certainly wasn’t as bad as I had anticipated. The hotel was literally within walking distance of the building anyway, so leaving an hour early was not necessary by any means. I didn’t really want to sit in a lobby for an hour, so I decided to just drive around the area for awhile and listen to the radio. The area is quite hilly and very beautiful, so I drove around in circles and through some rather affluent-looking neighborhoods for awhile. This helped to clear my head and allowed me to kind of mentally prepare for the day. As is typical of me, I wasn’t nervous at this point (it always passes just before the big day), but I was a little worried because I didn’t know what to expect. I consoled myself by remembering that after that day, whether I got an offer or not, it would be over. One of the hardest things for me during this whole job-hunting process has been uncertainty. At least after the interview I would have a better idea of my plans for the next few years.</p>\n<p>I got back to Building 19 at around 8:05. I parked and checked in with the receptionist, who gave a me a couple of forms to fill out, and pointed me to a rather nice sunlit lobby to sit and wait. I was soon joined by a Stanford sophomore who was there for a internship interview. He could not stop yawning. I inquired about how much sleep he had gotten, and he had actually gotten more than I had. And here I was, bouncing off the walls… Anyway, Rondell Honcoop, my HR contact, came to get me at about 8:45.</p>\n<h2><a href=\"#human-resources-----rondell-honcoop-----845-am-pst\"></a><a name=\"hr\"></a>Human Resources --- Rondell Honcoop --- 8:45 am PST</h2>\n<p>Ron began by explaining briefly how the day would go. I would not know the identity of my next interviewer until after each interview (I had been told this before). He also explained a little about the teams I’d be interviewing with (Authoring and CMS). He didn’t know much about CMS (indeed, no one seemed to have much info on it), but he told me that Authoring was Office-related. He asked me if there were other companies I was looking at. I told him Google and Lexmark. He asked me to rate them in order of interest, and I put Google at the top and Microsoft second. He asked me specifically what I liked about Google and what it would take to get Microsoft to the top of that list. I was very honest through this process and also made sure to let him know that I was not as far along at Lexmark or Google (I do not have interviews at either of them yet) as with Microsoft. He encouraged me to keep an open mind during the interview and try to figure out how Microsoft dealt with the things that excite me about Google.</p>\n<p>Somehow we eventually segued into a deep discussion about HawkTour. I gave him the entire story, from the summer NSF work to the IPRO to the current state of things. I was extremely thorough and he wrote <strong>everything</strong> down. At several points I had to stop so that he could catch up. I finally realized just how complex the project is, but I think I did a good job of describing everything and specifically my role. I discussed the design process, the reasons behind our decisions, and my far-reaching responsibilities. I didn’t really focus on it, but I’m pretty sure I came across as being passionate, which I know is a huge thing for them. I did not have to fake this, though, because I really am passionate about HawkTour. Otherwise I wouldn’t have stayed on for two and a half years. They’re certainly not paying me <strong>that</strong> well.</p>\n<p>I was pretty verbose in my discussion, so I ran over time with Ron. We stopped at 9:45 and he said he’d call over to Jeff Bell to let him know we’d gone late. I made more of an effort to trim down my discussion in future interviews, but when they kept asking questions, I kept giving answers.</p>\n<p>Ron walked me outside and made sure I got on the recruiting shuttle to the next building. He is a really nice guy --- it is easy to see why he works in recruiting. He is friendly, easy to talk to, and comes across as genuinely concerned about you. He asked me pointed questions about what I wanted and what my concerns were, and went to extra lengths to make sure the questions got answered or that my needs were met. He’s the kind of guy I could see myself chilling out with on the weekends --- all in all, he’s good at his job.</p>\n<p>I arrived at the next building and checked in with the receptionist. Jeff came to get me just before 10am.</p>\n<h2><a href=\"#publisher-team-----jeff-bell-----1000am-pst\"></a><a name=\"pub1\"></a>Publisher Team --- Jeff Bell --- 10:00am PST</h2>\n<p>Jeff, like all the people I met with, was very friendly. He talked to me about the basic role of the PM (manages features, not people; influence without authority), then asked me about the HawkTour project. I talked about the design architecture and our use of SOAP. He asked me about other solutions we had considered, and I mentioned XML-RPC. He asked me if there were any benefits to using it over SOAP other than it was more lightweight. He posed the question in an interesting way: “If someone else were to enter the market with a similar product, but that used XML-RPC, would they have any advantages over your product?”</p>\n<p>He then posed my first greenlight question. He briefly talked about <a href=\"/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Foffice%2Fonenote%2Fprodinfo%2Fdefault.mspx\">OneNote</a> and what it aims to do. Then he asked me how I would extend the note-taking functionality and possibly tie it into HawkTour. I discussed location-based notes, which makes a lot of sense in a tour application, and I talked about the importance of analyzing the needs of the customer to determine additional uses that they would like. All in all, it was a pretty weak answer, but I think I made a good case, and my approach to the problem was sound.</p>\n<p>We then switched gears and got into a design problem. He basically framed it like this (not direct quotes):</p>\n<blockquote>\n<p>I have a large digital audio collection. It works great in my computer room, but I want to pump the music to other rooms in my house without buying a lot of expensive equipment. Design a solution.</p>\n</blockquote>\n<p>I started by restating the problem, making sure I understood it fully. I asked a little about the customer and target price range. Then I started drawing on the board. I basically assumed that the user had a simple home network (I stated <strong>all</strong> of my assumptions --- if they were invalid assumptions, then the interviewer would tell me). My solution was a simple hardware device that was networked and had a simple web-based interface for configuration. I missed quite a few things initially (like volume, a way to connect speakers, a way to start playing the music, etc.), but I caught most of them with a little prompting from Jeff. He added a network constraint as well in the form of network cards.</p>\n<blockquote>\n<p>Lets say that my OEM can provide me with cheap network cards that only run at 10MBps. They’re slower, but they’re cheap. Is it worth it?</p>\n</blockquote>\n<p>I asked for information about the cost difference and made a decision based on that, and also disclosed the assumption that 10 MBps would be enough bandwidth to support streaming the audio. He then changed the scenario again.</p>\n<blockquote>\n<p>Someone has entered the market with a $60 device that does what you just described. We have research that indicates customers would be willing to pay $200 for a very full-featured solution. What features can you add that might push it into that price range and make it desirable to the target customer(s)?</p>\n</blockquote>\n<p>At this point it became a green light question, so I talked a little about adding video capabilities to it, and possibly higher fidelity audio. Again, pretty weak stuff, but my forte is designing software, not hardware, so I didn’t let it get me down too much.</p>\n<p>Jeff led me to a waiting room after our interview, and I continued thinking through the problems he’d posed, sketching on the whiteboard that was there in the room. Tara came and got me in a few minutes.</p>\n<h2><a href=\"#-publisher-team-----tara-kraft-----1100-am-pst\"></a><a name=\"pub2\"> </a>Publisher Team --- Tara Kraft --- 11:00 am PST</h2>\n<p>Tara talked to me a little about her role in the Publisher team and the overall PM position. She then asked me about HawkTour and asked for clarification when I said I was the “go-to” guy for the project. She then posed a question related directly to Publisher. It was about an email sharing feature. She treated it as a greenlight question initially, then transitioned into design after I had a few ideas. We proed and conned the solutions, then made a decision based on the simplicity of the solution. I made all my assumptions clear, as per usual. I really enjoyed this interview, even though it was kind of short, because Tara actually got up and worked on the whiteboard with me, which made it seem more teamwork oriented, rather than observational.</p>\n<p>At this point I was kind of hungry, so I was glad that lunch was coming up. I had been told that the interviewers shared notes between meetings and stuff, but I don’t know if they did it for me, because I got a lot of questions about HawkTour, even though I went into great detail with nearly every interviewer. Perhaps they just wanted me to talk about it each time. I’m not sure. But by the end of the day, I was talking less and less about it because I was sick of defining context awareness and pervasive computing and explaining the architecture of the application.</p>\n<p>I had to take the shuttle to a different building for the next interview, and when I arrived, the receptionist informed me I would be meeting with Dave Quick instead of Dan Kogan, who I was scheduled to meet with. Dave came down in a couple of minutes and asked if I wanted to eat in the cafeteria or go out somewhere. It really didn’t matter to me, so we went to a teriyaki place at his suggestion.</p>\n<h2><a href=\"#content-management-server-team-----dave-quick-----1230-pm-pst\"></a><a name=\"cms1\"></a>Content Management Server Team --- Dave Quick --- 12:30 pm PST</h2>\n<p>The beginning of the meeting was pretty informal, since we went to lunch. Dave talked a lot about his hobbies and interests, and we discussed technologies. He was Greek at <a href=\"https://www.rpi.edu/\">RPI</a>, and knew some of the Delts from the chapter there, which was cool. It was nice to talk to someone who knew about the Greek system and didn’t find it strange that I was in a fraternity. I had a good time with him and enjoyed talking about blogging, movies, photography, cars, etc.</p>\n<p>When we got back to his office, we talked about the CMS product, since no one up to that point had really been able to tell me what it was, and he went over the PM position as it related to the CMS team. He then posed my first technical question:</p>\n<blockquote>\n<p>You have an array of positive and negative numbers. Find the largest consecutive sum of numbers. The summation can start and end at any array index and can be of any length.</p>\n</blockquote>\n<p>I told him I would start with the brute force approach and mapped out a dual for-loop solution that works, but is certainly the least efficient (<code>O(n^2)</code>). He asked me if I knew Big-O notation, which I do, but my brain was sizzling and I couldn’t think of it. I offered to analyze the algorithm and try to optimize it, but he seemed satisfied with the solution. I’m sure if I was interviewing for a Dev/Test position my solution would <strong>not</strong> have been sufficient. But then, I knew going in that I wanted a PM position because it’s what I am best at, and I explained that to Dave as well.</p>\n<p>He then asked me about integrating the LCS into Excel. How could we do it? What makes the most sense? This was more of a design question. I developed a customizable bar based on the auto-sum feature that Excel already provides. I tried to keep it simple. When I suggested we make the bar customizable, Dave asked me to draw the user interface on the board. This was actually a recurring theme throughout the day: <em>“What does the UI look like?”</em> I discovered that the PM does a lot of interface designing, even though they may not have any design training or experience.</p>\n<p>Dave led me back down to the lobby and chatted with me a bit before heading back upstairs. Dan Kogan would be my next interviewer.</p>\n<h2><a href=\"#content-management-server-team-----dan-kogan-----200-pm-pst\"></a><a name=\"cms2\"></a>Content Management Server Team --- Dan Kogan --- 2:00 pm PST</h2>\n<p>This interview was my worst, I think. Dan and I didn’t really hit it off and he mentioned that I was his third interview, so he was probably as tired as I was. I felt my brain slow down tangibly towards the end of my interview with Dave, and it pretty much stayed checked out for the entire interview with Dan. Dan asked me some questions about the HawkTour survey UI, and seemed to be checking that I knew what UI components made the most sense in certain situations.</p>\n<p>He then drew two boxes on the board, one labeled “IIS” and the other labeled “browser.” He wanted me to tell him what happens when someone requests a website in their browser. I wasn’t really clear what he wanted, but couldn’t get any clarification from him (though I just might have been asking the wrong questions. My brain was pretty fried at this point), so I just explained the basic request-response architecture. I skipped the network architecture part of things initially, like DNS, but came back to it later when he asked more pointed questions.</p>\n<p>Then he asked several localization questions. Things like:</p>\n<blockquote>\n<p>I have one page that I want displayed in three different languages. How do I do it? What changes are necessary on the server and client side? What does the site administrator see when he wants to add new languages? How do we determine what language to display by default? How to we make this setting persistent if the user changes it?</p>\n</blockquote>\n<p>I think I may have gotten a little too defensive in this interview. Dan made some good points about flaws in my solution(s), but I took it as an attack on my solution, so I immediately became defensive. Anyway, this interview could have gone better, but I suppose it could have gone worse as well.</p>\n<p>After the interview, Dan was unsure of who I’d be meeting with next, so he took me to the lobby and said he’d check for me. A few minutes later, Jim Masson came out and led me to his office.</p>\n<h2><a href=\"#content-management-server-team-----jim-masson-----315-pm-pst\"></a><a name=\"cms3\"></a>Content Management Server Team --- Jim Masson --- 3:15 pm PST</h2>\n<p>Jim got right down to business, I think because I was an unexpected interview for him, and he didn’t have much time. He told me a little about himself, then set up the following scenario:</p>\n<blockquote>\n<p>My grandmother and I both have lots of digital photos. I am a conscientious computer user and I regularly back up, but my grandmother doesn’t. However, we’d both be equally heartbroken if we lost our photos because of some sort of computer failure. How do we make it easy for my grandmother to back up her photos?</p>\n</blockquote>\n<p>I did the typical clarify the problem approach, then started writing on the board. I tried to fit it in to a format that Microsoft is fond of: the wizard. So I designed the “Photo Migration Wizard.” I divided the entire process into four major steps, then defined each step clearly. One thing I did not explain was that this was intended to be an iterative process --- after the initial run of the wizard, it should be a quick and painless process to run it again and update the backup. Some highlights from the design I came up with were that it should be able to export to multiple volumes (ie, multiple CD’s), then import from just a subset of those CD’s (in case you lose one), robust import options, scheduled running, tying in with online backup service of some kind, etc. Jim asked me to go into greater detail, including the UI screen shots, of the importing process, and also asked to consider other usage options for the feature. This led to me brainstorming about photo recovery options if you accidentally delete a photo, and simple comparison functions to compare existing photos to the version in the backup archive.</p>\n<p>I came away from the interview refreshed because I felt like I had offered a robust solution, and a couple of times I mentioned features that seemed to surprise Jim, so this served to re-energize me.</p>\n<p>Next up was Dieter from the Project Team. I never got fully introduced to him, so I don’t know his last name. This was my final interview on-site.</p>\n<h2><a href=\"#project-team-----dieter-----400-pm-pst\"></a><a name=\"project\"></a>Project Team --- Dieter --- 4:00 pm PST</h2>\n<p>My interview with Dieter consisted of a lot of questions and answers (I’d actually had a chance throughout the day to think of a couple of new ones) and a greenlight session that was interestingly related to pervasive computing:</p>\n<blockquote>\n<p>I want to integrate a PC into a refrigerator. Brainstorm possible uses and/or features.</p>\n</blockquote>\n<p>I went right to work. I’d actually had some experience with this particular problem because it is an application of pervasive computing. I talked about getting the information of the contents of the fridge into the computer and using it to create shopping lists, and integrating recipes into the computer to make shopping lists based on what you need and what you have. Also, I talked about providing web access using the fridge computer, then mentioned that we would probably have to redesign the browser UI specifically for a touch screen. I discussed possible ways to let the fridge know what was inside it, and went into limitations and such for each of them.</p>\n<p>Dieter walked me to Building 19, I checked out with the receptionist, then headed back to my hotel room. I was pretty tired, but desperately needed food. I browsed the web for a bit and found a nice-looking steakhouse, and was almost ready to go when Ron gave me a call to debrief.</p>\n<h2><a href=\"#debrief-----rondell-honcoop-----545-pm-pst\"></a><a name=\"debrief\"></a>Debrief --- Rondell Honcoop --- 5:45 pm PST</h2>\n<p>Ron basically wanted to go over the day and how I felt things went. He asked me if I had gotten answers for my questions, and wanted to know how Microsoft stacked up against Google post-interview. Honestly, I was pretty impressed with the whole interview process and the people I had met, so I told him honestly that they were at the front now. He encouraged me to let him know if I had questions, and I got permission from him to follow-up if I hadn’t heard anything from him by Friday (which ended up being overkill, because I got an offer the next day).</p>\n<p>I came out of the interview pretty confident that I would get an offer. I felt that I had done a very good job during the whole process, and was excited to hear what they would say. In the end they have made a very generous offer and I am happy to say that I accepted. Anyway, I hope that the information contained here will be of some use to you as you pursue employment at Microsoft.</p>",
      "date_published": "2005-02-15T07:44:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/iit-student-sued/",
      "url": "https://tylerbutler.com/iit-student-sued/",
      "title": "IIT Student Sued",
      "content_html": "<p>According to <a href=\"https://games.slashdot.org/games/05/02/10/0347222.shtml?tid=211&amp;tid=123\">this story</a> on <a href=\"https://www.slashdot.org\">Slashdot</a>, the maintainers of\nninjahacker.net are currently being sued by Tecmo under the DMCA. This is\npretty ridiculous, in my opinion, but I am anxious to hear how it turns out.\nGame hacking has been an interesting (sub)culture, and has provided us with\nawesome games, not the least of which is <a href=\"https://www.counter-strike.net/\">Counter-Strike</a>. Obviously, there\nis probably more to the supposed DMCA “violations,” but I daresay it’s a\nmisuse of the law nonetheless. Maybe the <a href=\"https://www.eff.org/\">EFF</a> should take a look? Oh, and\nby the way… the guy that runs (or ran, since it’s now offline) the site\nlives in State Street Village and attends IIT. Cool!</p>",
      "date_published": "2005-02-12T06:00:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/interview-updates/",
      "url": "https://tylerbutler.com/interview-updates/",
      "title": "Interview Update(s)",
      "content_html": "<p><strong>1:15 pm PST, Feb. 7, 2005</strong>\nI am writing this from the Marriott Courtyard hotel here in Bellevue, WA. It’s\nprobably the nicest hotel I’ve ever stayed in, and it has decent high-speed\ninternet service. I left my apartment in Chicago at 4:15 CST, and the flights\n(I was routed through Denver on Frontier) went pretty well. I only had 30\nminutes between flights in Denver so I was a little worried that I wouldn’t\nmake it, but I ended up having plenty of time.</p>\n<p>Picking up the rental car and checking into the hotel was a breeze. It was\nnice to hear, “Well, Microsoft has taken care of everything already, Mr.\nButler. Enjoy your stay,” as they handed me the paperwork. I could get used to\nthis. :-)</p>\n<p>I went out and grabbed some lunch, and I plan on driving out to Building 19,\nwhere my interview is, later on this afternoon. I am trying to figure out if\nit’s worth trying to go downtown and do something, but I might just take a\nnap. We’ll see. I also have to go over my interview notes again. Anyway, more\nlater.</p>\n<p>** 12:06 am CST, Feb. 11, 2005**\nWell, I intended to write more, and I still do, but I have been getting quite\na few questions about my status, especially since I promised to put stuff\nhere, so here goes. I <strong>did</strong> receive an offer from Microsoft, which I am\ncurrently considering. More info will be coming, especially about the\ninterview itself and how it went/what I did, but for now: I do have an offer.\n:-)</p>\n<p><strong>3:43 pm CST, Feb. 14, 2005</strong>\nI have officially accepted Microsoft’s offer, and am aiming for a start date\nof March 28th. I suppose it seems kind of fast, but there are benefits to\ngetting out there soon. Dr. Sun has accepted the news more gracefully than I\nhad anticipated, so things are looking up. I will be posting my overview of\nthe interview day itself in a few minutes.</p>",
      "date_published": "2005-02-08T07:12:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/yiddish-curses/",
      "url": "https://tylerbutler.com/yiddish-curses/",
      "title": "Yiddish Curses",
      "content_html": "<p>My friend Dan is Jewish, and he was telling me the other day about Yiddish\ncurses. He had some pretty funny ones, and he managed to find a site or two that listed some more. I don’t know Yiddish, and I can’t even pronounce it based on the spelling, so I’m not going to waste the space of including the\nactual Yiddish here. If you actually want the Yiddish, go to the sites listed\nat the bottom of the page. Anyway, here are a few of my favorites.</p>\n<ul>\n<li>All problems I have in my heart, should go to his head.</li>\n<li>He should marry the daughter of the Angel of Death.</li>\n<li>God should visit upon him the best of the Ten Plagues.</li>\n<li>Venereal disease should consume his body.</li>\n<li>I should outlive him long enough to bury him.</li>\n<li>God should bless him with three people: one should grab him, the second should\nstab him and the third should hide him.</li>\n<li>He should have a large store, and whatever people ask for he shouldn’t have,\nand what he does have shouldn’t be requested.</li>\n<li>God should bestow him with everything his heart desires, but he should be a\nquadriplegic and not be able to use his tongue.</li>\n<li>He should be transformed into a chandelier, to hang by day and to burn by\nnight.</li>\n<li>May your bones be broken as often as the Ten Commandments.</li>\n<li>May you every day eat chopped liver with onions, herring, chicken soup with\nmatzo balls, carp with horseradish, roast beef with tsimmes (a sweet side\ndish), pancakes, and tea with lemon – and may you choke on every bite.</li>\n</ul>\n<p>[<a href=\"http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html%5D%5B1\">http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html][1</a>]\n[<a href=\"/link-not-available?url=http%3A%2F%2Fwww.yiddishradioproject.org%2Fexhibits%2Fstutchkoff%2Fcurses.php3%3Fpg%3D3%255D%255B2\">http://www.yiddishradioproject.org/exhibits/stutchkoff/curses.php3?pg=3][2</a>]\n[1]: <a href=\"http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html\">http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html</a> (A news story about Yiddish curses.)\n[2]: <a href=\"/link-not-available?url=http%3A%2F%2Fwww.yiddishradioproject.org%2Fexhibits%2Fstutchkoff%2Fcurses.php3%3Fpg%3D3\">http://www.yiddishradioproject.org/exhibits/stutchkoff/curses.php3?pg=3</a> (A short list of curses… in Yiddish of course!)</p>",
      "date_published": "2005-02-02T01:45:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/title-droppers/",
      "url": "https://tylerbutler.com/title-droppers/",
      "title": "Title Droppers",
      "content_html": "<p>In my line of work, I deal with uppity people every day. When you’re in the\nposition to serve people, you will no doubt encounter countless people who\nthink their problem is more important than everyone else’s. This is to be\nexpected. But what really gets me is when some fool appends their official job\ntitle to the end of their email communications, or in a phone conversation,\nfor the sole purpose of getting better service because they’re “important.” If\nanything, it makes me do the exact <em>opposite</em>. If they think they’re that\nimportant, then screw them. I do not care if you’re the executive vice consul\npresidential aid’s assistant. You will wait, just like everyone else. Screw\nyou and your self-important ego. We’ll see how you talk to me when I’m a\nmillionaire at 25.</p>\n<p><strong>PS.</strong> Something else that bugs me is people that feel it necessary to include <em>all</em> of their titles in their email signature. This is especially troublesome for students. For example, there was a semester when I could have signed all my emails like this:</p>\n<p>Tyler Butler<br />\nPresident, Delta Tau Delta, Gamma Beta Chapter<br />\nPresident, Keygrips Films<br />\nTechnical Manager, OTS Support Desk<br />\nTeam Lead, IPRO 305, HawkTour Project</p>\n<p>Now really… for any given email, only <strong>one</strong> title makes sense. I don’t\nneed to notify the world that I am involved in lots of different things. If I\nwrite an email where a title the pertains to me is relevant, then I’ll include\nit. Otherwise, I’ll let my actions, not my titles, speak for me.</p>",
      "date_published": "2005-02-02T01:11:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/parsing-xfdf-in-php/",
      "url": "https://tylerbutler.com/parsing-xfdf-in-php/",
      "title": "Parsing XFDF in PHP",
      "content_html": "<p>This past week at work I have been working on using Adobe Acrobat to submit\nform data. The value of this is that the form data can be reimported into the\nPDF form then printed all purty-lookin’. Anyway, Acrobat allows you to submit\nyour form data in several different formats. One, FDF, is usable in PHP\nprovided you load this module thingy. Unfortunately, the server I want to run\nthe PHP script on uses Irix and the module is unavailable for Irix. Poo.</p>\n<p>I then turned to XFDF, which is essentially FDF data all XML-ified. PHP has an\nXML parser built in, so I don’t have to load any crazy modules to parse the\ndata. Unfortunately, PHP’s parser is SAX-based rather than DOM-based, so it\ntook me a rather long time to figure out how to get it working right. Anyway,\nhere’s the PHP code that essentially takes XFDF data (declare <code>$file</code> as a\nstring pointing to the location of your XFDF file) and parses it into an\nassociative array (<code>$values</code>). The array is indexed by the XFDF field names.\nThe code below is not entirely complete since I snipped it out of a larger\nfile, but if you look at it, I think you’ll get the idea. It’s pretty simple\nonce you figure out the way PHP does XML processing.</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>/* BEGIN VARIABLE DECLARATIONS */</span></div></div><div><div><span>//global variables for XML parsing</span></div></div><div><div><span>$values = array();</span></div></div><div><div><span>$field = \"\";</span></div></div><div><div><span>$curTag = \"\";</span></div></div><div><div>\n</div></div><div><div><span>/* BEGIN XML PROCESSING */</span></div></div><div><div><span>// XML Parser element start function</span></div></div><div><div><span>function startElement($parser, $name, $attrs)</span></div></div><div><div><span>{</span></div></div><div><div><span><span>    </span></span><span>global $curTag, $field;</span></div></div><div><div>\n</div></div><div><div><span><span>    </span></span><span>//track the tag we're currently in</span></div></div><div><div><span><span>    </span></span><span>$curTag .= \"^$name\";</span></div></div><div><div>\n</div></div><div><div><span><span>    </span></span><span>if( $curTag == \"^XFDF^FIELDS^FIELD\" )</span></div></div><div><div><span><span>    </span></span><span>{</span></div></div><div><div><span><span>        </span></span><span>//save the name of the field in a global var</span></div></div><div><div><span><span>        </span></span><span>$field = $attrs['NAME'];</span></div></div><div><div><span><span>    </span></span><span>}</span></div></div><div><div><span>}</span></div></div><div><div>\n</div></div><div><div>\n</div></div><div><div><span>// XML Parser element end function</span></div></div><div><div><span>function endElement($parser, $name)</span></div></div><div><div><span>{</span></div></div><div><div><span><span>    </span></span><span>global $curTag;</span></div></div><div><div>\n</div></div><div><div><span><span>    </span></span><span>// remove the tag we're ending from the \"tag tracker\"</span></div></div><div><div><span><span>    </span></span><span>$caret_pos = [strrpos][1]($curTag,'^');</span></div></div><div><div><span><span>    </span></span><span>$curTag = [substr][2]($curTag, 0, $caret_pos);</span></div></div><div><div><span>}</span></div></div><div><div>\n</div></div><div><div>\n</div></div><div><div><span>// XML Parser characterData function</span></div></div><div><div><span>function characterData( $parser, $data )</span></div></div><div><div><span>{</span></div></div><div><div><span><span>    </span></span><span>global $curTag, $values, $field;</span></div></div><div><div><span><span>    </span></span><span>$valueTag = \"^XFDF^FIELDS^FIELD^VALUE\";</span></div></div><div><div>\n</div></div><div><div><span><span>    </span></span><span>if( $curTag == $valueTag )</span></div></div><div><div><span><span>    </span></span><span>{</span></div></div><div><div><span><span>        </span></span><span>// we're in the value tag, so put the value in the array</span></div></div><div><div><span><span>        </span></span><span>$values[$field] = $data;</span></div></div><div><div><span><span>    </span></span><span>}</span></div></div><div><div><span>}</span></div></div><div><div>\n</div></div><div><div><span>// Create the parser and parse the file</span></div></div><div><div><span>$xml_parser = xml_parser_create();</span></div></div><div><div><span>xml_set_element_handler($xml_parser, \"startElement\", \"endElement\");</span></div></div><div><div><span>xml_set_character_data_handler($xml_parser, \"characterData\");</span></div></div><div><div>\n</div></div><div><div><span>if (!($fp = fopen($file,\"r\")))</span></div></div><div><div><span>{</span></div></div><div><div><span><span>    </span></span><span>die (\"could not open XML for input\");</span></div></div><div><div><span>}</span></div></div><div><div>\n</div></div><div><div><span>while ($data = fread($fp, 4096))</span></div></div><div><div><span>{</span></div></div><div><div><span><span>  </span></span><span>if (!xml_parse($xml_parser, $data, feof($fp)))</span></div></div><div><div>\n</div></div><div><div><span><span>    </span></span><span>{</span></div></div><div><div><span><span>        </span></span><span>die(sprintf(\"XML error: %s at line %d\",</span></div></div><div><div><span><span>                    </span></span><span>xml_error_string(xml_get_error_code($xml_parser)),</span></div></div><div><div><span><span>                    </span></span><span>xml_get_current_line_number($xml_parser)));</span></div></div><div><div><span><span>    </span></span><span>}</span></div></div><div><div><span>}</span></div></div><div><div>\n</div></div><div><div><span>xml_parser_free($xml_parser);</span></div></div><div><div><span>flclose($fp);</span></div></div><div><div>\n</div></div><div><div><span>/* END XML PROCESSING */</span></div></div></code></pre><div><div></div><div></div></div></figure></div>",
      "date_published": "2005-01-25T06:56:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/c-messagebox-strangeness/",
      "url": "https://tylerbutler.com/c-messagebox-strangeness/",
      "title": "C# MessageBox Strangeness",
      "content_html": "<p>I am working on a C# program and I want to pop up a message box when certain\nfields aren’t filled out properly in the GUI. .Net’s MessageBox class makes it\nsimple to do. However, when I ran my code, my message box looked like this:</p>\n<p><img alt=\"This image has been lost to the sands of time\" loading=\"lazy\" width=\"1536\" height=\"1024\" src=\"/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d\" srcset=\"/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69ed77a7c7274100086fd13d 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69ed77a7c7274100086fd13d 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69ed77a7c7274100086fd13d 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69ed77a7c7274100086fd13d 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69ed77a7c7274100086fd13d 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d 1536w\" /></p>\n<p>I fooled around with it for awhile, trying different combinations of arguments\nto the <code>Show()</code> method, but I wasn’t able to figure it out. Thankfully, my\nGoogle search turned up <a href=\"/link-not-available?url=http%3A%2F%2Fwww.xtremevbtalk.com%2Fshowthread.php%3Ft%3D191026\">this forum post</a> pretty quickly. Apparently\ndisabling McAfee’s Buffer Overflow Protection solves the problem. But this\nmakes me wonder whose fault this is. Is it something in C#/.Net? Is it\nWindows’ fault? Is McAfee just really dumb? Who knows… I’m too lazy to try\nand figure it out right now.</p>",
      "date_published": "2005-01-22T04:33:00.000Z",
      "tags": [
        "CSharp"
      ]
    },
    {
      "id": "https://tylerbutler.com/ubuntu-lvm/",
      "url": "https://tylerbutler.com/ubuntu-lvm/",
      "title": "Ubuntu + LVM",
      "content_html": "<p>I spent this past weekend hacking away at my Media Box, which serves as my\npersonal free PVR. I wanted to get <a href=\"http://www.ubuntu-linux.org\">Ubuntu</a> on it with LVM so I could use\nall four of my hard drives as one for <a href=\"/link-not-available?url=http%3A%2F%2Fmythtv.org\">MythTV</a>. I borrowed one of Vlad’s\nUbuntu CD’s (mine haven’t arrived yet and I couldn’t find the one I burnt) and\ngot the installer running. During the partitioning section of the install, I\nset everything up for an LVM volume group and thought I had everything\nworking. Apparently I didn’t. Silly me for not having a clue how LVM works\n(always read the directions, kids).</p>\n<p>Anyway, my installation was b0rked so I figured I’d just reboot and start from\nscratch. No. My LVM data was still present every time I tried to install\nUbuntu. I would try to remove the volume groups and it would fail, reporting\nthe drives were still in use. I was getting manifest errors up the wazoo. So I\nthought, ‘OK, I just need to wipe the drives with something else and I’ll be\nfine.’ So I tried booting off an XP CD into rescue mode and formatting the\ndrives there. No dice. I downloaded a few CD-based disk formatting tools that\n<strong>said</strong> they cleared things out but apparently they didn’t. <a href=\"https://www.google.com\">Google</a>\nsearches were returning a whole bunch of information about how to remove\nvolume groups, but <strong>nothing</strong> about how to forcefully wipe LVM volumes.\nFunny… most people that use LVM and software RAID are concerned about\nkeeping their data safe. Whatever.</p>\n<p><strong>Finally</strong>, I came across <a href=\"/link-not-available?url=http%3A%2F%2Flists.suse.com%2Farchive%2Fsuse-linux-e%2F2001-Nov%2F1413.html\">this forum post</a>, which has the necesarry command. In retrospect it makes sense - just write zeroes to the first part of the disk. But I would have never figured it out. For posterity, here’s the command you need to run on a device to remove all previous LVM info:</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><span>dd if=/dev/zero of=/dev/sda bs=1k count=10</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Then of course, I had to figure out how the Ubuntu installer was mounting all\nmy drives… but that’s another story. And by the way… after all of this,\nMythTV just wasn’t liking my remote, and I was suffering PVR withdrawal pretty\nbad, so I’m back to MCE2005. Looks like I’ll have to keep fast-forwarding\nthrough the commercials manually. Such is life.</p>",
      "date_published": "2005-01-20T13:42:00.000Z",
      "tags": [
        "ubuntu"
      ]
    },
    {
      "id": "https://tylerbutler.com/merry-christmas/",
      "url": "https://tylerbutler.com/merry-christmas/",
      "title": "Merry Christmas!",
      "content_html": "<p>Ahhh, Christmas, a time for food, family, and of course, gifts. Some of my\nfriends this year, however, are giving me gifts that <strong>cost</strong> me money. These\ngifts come in the form of mobile phone text messages, which are not included\nin my cell phone plan. T-Mobile charges me 50 cents a pop for every one sent\n<strong>and</strong> received. Many of my friends have sent me Christmas greetings the past\nfew days via text message, and I can just see the ogres at T-Mobile jumping\nwith glee as my bill skyrockets. Oh well. At least I have friends.</p>",
      "date_published": "2004-12-28T03:51:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-internet-is-down/",
      "url": "https://tylerbutler.com/the-internet-is-down/",
      "title": "The Internet is Down!",
      "content_html": "<p>If you’ve been at <a href=\"http://www.iit.edu\">Illinois Tech</a> this week, you’ve had the absolutely\nwonderful opportunity to see what carnage a Denial of Service attack against a\ncore DNS server can create. Now, I honestly don’t know much about network\ninfrastructure or the mechanics behind a Denial of Service attack; frankly, my\npassion is software, not hardware, so I’ve never sought out the knowledge.\n(Unfortunately, <a href=\"https://www.howstuffworks.com\">HowStuffWorks.com</a> doesn’t have anything specific on DoS.\nThey do, however, have articles on <a href=\"http://computer.howstuffworks.com/router.htm\">routers</a>, <a href=\"https://computer.howstuffworks.com/firewall.htm\">firewalls</a>, and\n“<a href=\"https://computer.howstuffworks.com/internet-infrastructure.htm\">Internet Infrastructure,</a>” for those that want to learn more about the\nhardware that makes the Internet work.) But despite my lack of knowledge, this\npast week has been an excellent chance to experience the effects a DoS can\ncause.</p>\n<p>A DoS <strong>destroys</strong> your ability to use the network — much moreso than I ever\nthought possible. For my own sake, I am going to write a little bit about what\nI’ve seen and make some conclusions about what went wrong, and even try to\nsuggest possible solutions that we can implement to solve things in the\nfuture. But before we start, a little disclaimer. The network people here at\nIIT are not the most apt people in the world, but they’re not the most inept\neither. We do have some truly brilliant people around here, but frankly, they\ndon’t get recognized or listened to nearly enough. So before you start railing\non the fact that if <strong>you</strong> were a network engineer here, this never would\nhave happened, let me say this: the main problem I have seen this past week is\nnot a lack of technical experience, knowledge, or anything like that; the\nproblem is a <strong>lack of communication.</strong> I cannot stress that enough. So let’s\nget started.</p>\n<p>On Sunday evening, Felix, one of our network engineers, noticed an inordinate\namount of traffic to random ports and stuff, and suspected a worm or virus had\nmade its way onto the network. In an effort to contain the attack, he blocked\nthe MAC addresses of 160 computers with the highest traffic on the network at\nthe time, effectively banning <strong>all</strong> network traffic from those people. The\nthought was that this would diagnose the problem — block the addresses, watch\nthings go back to normal, then go through the PC’s that were blocked and\nfigure out what worm or virus had caused the problem, fix it, and reopen the\nnetwork.</p>\n<p>Problem was — blocking the addresses didn’t fix the problem. In fact, it got\nworse. The DNS server started going down, and then finally went kaput\naltogether. This effectively knocked out internet access for all of campus.\nThe internal network still worked, and some cached DNS entries still resolved\nall right, but most people were locked out. Here at the Support Desk we got\nback up and running for awhile by switching to an external DNS, but we\ncouldn’t exactly tell the whole campus to do that, because it wouldn’t have\nsolved the root of the problem. Eventually, because of the bogus traffic that\nwas being spit out from our network and our DNS server, our own ISP blocked\nour DNS server.</p>\n<p>This is where things started to go downhill — fast. Felix provided us with the\nlist of blocked MAC addresses initially, but by the time the DNS went down,\nwhich was late Monday afternoon, that list was out of date. On top of that,\nbecause of the rampant random network issues, we couldn’t tell a customer what\nwas wrong when they called. They might be blocked, they might not. It might\njust be the random DNS problems, it might not. We had still not been provided\nwith a process through which people could get checked and unblocked if\nnecessary. Thus, problem number one:</p>\n<p><strong>1) We at the Support Desk were not provided with information, sketchy or\notherwise, to tell people when they called.</strong></p>\n<p>So we started telling people whatever we knew — there were network issues,\nthere were some people with blocked MAC’s, we didn’t know when things would be\nback up. It is useful to remember that at this point, OTS had no idea what the\nproblem was (the DNS server was the <em>problem</em>, but it had been brought down by\nthe DoS attack, which hadn’t been identified yet), and no information had been\nsent out to the IIT community. Hence, problem number two:</p>\n<p><strong>2) OTS was extremely slow at getting public information out to the IIT\ncommunity, and when they did, provided it via unreliable methods (email,\nmainly).</strong></p>\n<p>Yup, most information went out in the form of emails, which is certainly a\nvalid form of communication, but it shouldn’t be the only one. But more on\nsuggestions later…</p>\n<p>As the week dragged on, and more and more customers became agitated from a\nlack of information and a seeming lack of action on our part, things just got\nworse. Apparently, there was much debate about the actual cause of the problem\nwas. Virus scans and other searches had revealed nothing on many of the\nblocked PC’s, except a small VBS worm that remained under most virus scanner’s\nradar. One camp held that there was just a problem with the DNS server -\nsomething was wrong with it. The other camp held that we were under an attack.\nOne — it’s our fault, two — it’s not our fault (at least, not directly).</p>\n<p>It was suggested at this point that we remove the DNS server and replace it\nwith a fresh one, which would make the choice between the two theories simple.\nBut, for some unknown reason, this was resisted for quite some time.\nEventually, a new DNS server was put in. It lasted 30 minutes. It was clear we\nwere under attack. Thus, point number three:</p>\n<p><strong>3) When DNS went down, it should have been replaced immediately. That\nwould have made it clear from the beginning that we were under attack.</strong></p>\n<p>During all of this hullabaloo, we at the Support Desk remained ignorant of any\ninformation regarding the problem, its causes, and what OTS was doing to\nresolve it. The calls we received were getting angrier and angrier as final’s\nweek loomed closer and they still couldn’t get to their course websites, or do\nresearch, or browse the net to relax, or anything. In addition, we didn’t have\nan updated MAC block list, which had been changed (at one point it got to 400\nMAC’s) several times at this point. Points numbers four and five:</p>\n<p><strong>4) The Support Desk was not provided with up-to-date information (such as\nupdated MAC block lists) that would have assisted them in diagnosing the\nproblem(s), and cut down the workload on other OTS divisions, and maybe, just\nmaybe, would have left customers feeling a little happier about the state of\nthings.</strong></p>\n<p><strong>5) When OTS Communications went out, they were overly vague and seemed to\ntake forever to write. Communications went out with information that seemed\nout of date as a result.</strong></p>\n<p>Well, those are the main points. The core problem was a lack of communication\nand information-sharing amongst departments. If the Support Desk is a voice\nfor OTS, then we have to know what to say, and we simply weren’t provided with\nany information. Also, (and this really bugs me) the OTS communications just\ntold people to call the Support Desk if they had a problem, presumably to get\nmore information, but we didn’t have anything to tell them. So these were the\nproblems, now what about solutions? Here are my thoughts, for what they’re\nworth.</p>\n<p><strong>Provide the Support Desk access to information such as MAC block lists.\nThe info has to be <em>up-to-date</em>, otherwise it’s not really useful.</strong></p>\n<p>This seems to be a no-brainer to me. If we’re going to be sending out emails\nthat say, “Call the OTS Support Desk for assistance in troubleshooting your\nnetwork access,” then the Support Desk has to have up-to-date information\nabout it. If people are going to be calling with their MAC’s, we can’t be\nlooking at a list over a week old. In fact, it was just this morning that we\nfinally got the updated list, <em>after</em> it had grown to over 400 people and\nshrunk back down to about 25.</p>\n<p><strong>Make one person responsible for communicating with the students.</strong></p>\n<p>By this, I don’t mean that one person should be taking calls with problems.\nThat’s the Support Desk’s job. What I mean is that one person should write the\ncommunication emails, and should be responsible for getting accurate\ninformation from the appropriate people to send out. The process would be as\nfollows: Network goes down… Communicator calls Networks, finds out problem X\nis the cause, gets an ETA… Communicator sends out email information, and\nmakes arrangements to notify via other means. See below. The more I think\nabout this, someone at the Support Desk should have this responsibility. But\nit should only be one person.</p>\n<p><strong>Communication should be done through a variety of means.</strong></p>\n<p>In this instance, email was, and usually is, the primary form of\ncommunication. But we need to send out voice mail to faculty, put up flyers in\nMSV and SSV, and, dare I say it, <strong>hold a press conference</strong>. This isn’t\nalways necessary, but in this case, it would have been nice if students could\nhave gone to a public meeting one evening in the MTCC auditorium or something,\nheard a brief statement about what the problem was and what action we were\ntaking, and had a chance to ask questions and get some straight answers.\nPeople who aren’t in the dark are less likely to make up their own\nexplanations for why something went wrong. Ending speculation can help end\nangry customer calls.</p>\n<p>I guess that’s really all I have. This week has been trying for all of us here\nat OTS, but I hope that maybe the staff here will learn from this experience\nand make it better the next time this happens. But of course, I am just a\nlowly peon here, so what do I know?</p>\n<p>By the way, for anyone that cares: <strong>The problem was caused by some (like\n8-10) PCs on campus getting hacked (externally, internally, who knows) and\nparticipating in a DoS attack against the DNS server. The problem now seems to\nhave been contained, and about 25 people still remain blocked.</strong> Yeah, DoS\nsucks, but it is kinda cool to realize that 8-10 machines can destroy a\nnetwork connection serving a university of 3000 people. <em>Kinda</em> cool.</p>",
      "date_published": "2004-12-14T06:30:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/then-vs-than/",
      "url": "https://tylerbutler.com/then-vs-than/",
      "title": "\"Then\" Vs. \"Than\"",
      "content_html": "<p>I started looking at some open-source software and came across Blender, a\ncool-looking 3D modeling program. On <a href=\"https://www.blender3d.org/\">their homepage</a>, I noticed this image\n(it may no longer be on their page):</p>\n<p><img loading=\"lazy\" width=\"1536\" height=\"1024\" src=\"/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d\" srcset=\"/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69ed77a7c7274100086fd13d 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69ed77a7c7274100086fd13d 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69ed77a7c7274100086fd13d 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69ed77a7c7274100086fd13d 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69ed77a7c7274100086fd13d 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69ed77a7c7274100086fd13d 1536w\" /></p>\n<p>Now what’s wrong with this picture? Well, the designer of the image was not\nvery careful when selecting the words to use. The words “than” and “then,”\nwhile differing only by one letter, are vastly different in meaning. <a href=\"/link-not-available?url=http%3A%2F%2Fdictionary.reference.com%2Fsearch%3Fq%3Dthen\">Then</a>\nis most commonly an adverb, but can sometimes be a noun or adjective (time-\nrelated). <a href=\"/link-not-available?url=http%3A%2F%2Fdictionary.reference.com%2Fsearch%3Fq%3Dthan\">Than</a>, on the other hand, is a conjunction, used to compare\nthings. <em>I am better at English <strong>than</strong> you are</em>, for example. So when you\nwant to compare things, as the person making this advertisement image\napparently wanted to, you want to use than.</p>\n<p>I think the confusion regarding this stems from the use of “then” as a time-\nrelated adjective or noun. For example, “I was there then,” or “the then\ndirector of OTS” are valid uses of the word, which confuses people when they\nwant to compare things, especially in time-related constructs, such as “more\nthan before.” Then implies a previous state of being, so previously — then -\nthere were less than there are now. This, I think, is the root of the\nconfusion. If you really want to get your head spinning, try this: “There were\nmore employers there then than previously.” I <em>think</em> that’s grammatically\ncorrect, but many people seem to get this confused. It could also be that they\nare often pronounced similarly if not exactly the same, so drill yourself on\nit if you’re having problems remembering.</p>\n<p>Since I have noticed some common grammatical and language-related mistakes at\nwork, in the IPRO, and just on blogs and websites in general, I think I might\nstart a regular column on here with common problems people have with similar\nsounding, yet different meaning words. After all, I am the master of all that\nis English. And I <a href=\"/tags/nanowrimo\">wrote a novel</a>.</p>",
      "date_published": "2004-12-11T07:09:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/official-comments/",
      "url": "https://tylerbutler.com/official-comments/",
      "title": "Official Comments",
      "content_html": "<p>In case you haven’t noticed, <a href=\"/tags/novel/\">my novel is done</a>. Well, at least the 50,000\nwords are done, so I am a <a href=\"https://www.nanowrimo.org/\">NaNoWriMo</a> winner. I still need to edit it, and\nwith some artistic help from Joe Parry, I will add some illustrations and lay\nit out in InDesign or something to make a nice PDF booklet. I am also going to\nwrite up an essay on the experience of NaNoWriMo and my influences for the\nbook. But that’s in the future. I know at least one or two people have been\nfollowing along throughout the month, so now is the time for you to let me\nhave it… I will be putting some polls up soon for people that have read the\nnovel, but if you want to compliment me or criticize me for anything in the\nbook, comment in this post or send me an email. I really want feedback…\nseriously. It’s the only way to improve.</p>",
      "date_published": "2004-12-03T03:27:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-29th/",
      "url": "https://tylerbutler.com/november-29th/",
      "title": "November 29th",
      "content_html": "<p>Well, here’s the last of it. I added some new material to previous chapters,\nso the additions are listed here along with the chapter in which they go. The\nPDF has been updated with all the new material.</p>\n<p><strong>Chapter 29: Epilogue</strong></p>\n<p>Angela was bobbing up and down in her chair almost uncontrollably as Melissa\ncame down the stairs into the kitchen. Lawrence , of course, sat reading a\npaper next to her, ignoring her completely as she knocked plates, cups, and\nother random items on the table to the floor with her movement.</p>\n<p>“Angela, settle down and eat your brea kfast!” Melissa knew it wouldn’t\nhappen. The five-year-old looked down in disgust at the strange mixture of\nfoodstuffs on her plate. The toast was now soggy from spilled apple juice, and\nthe remaining bits of egg swam in a pool of juice as well. Angela turned her\nnose up at the plate primly and crossed her arms across her chest.</p>\n<p>She was pouting at the reprimand. Melissa rolled her eyes at her daughter’s\nsilliness and flipped on the small television in the room, pushing down two\nslices of brea d in the toaster as the picture faded in.</p>\n<p>“Can we watch cartoons, mommy?”</p>\n<p>“No, we cannot,” Melissa responded fla tly. The question was asked each\nmorning, and the answer always remained the same. But Angela nev er gave up;\none day her mother would relent, and she would get to watch cartoons while she\nate breakfast… <em>But today is not that day</em>, Melissa thought to herself.</p>\n<p>Lawrence had his morning paper and cup of coffee, Melissa had her morning\nnewscast and toast. It was their routine; the sole moment in the day that she\nwould not vary — it was her tether to the world and to her own sanity. No\nmatter what mischief Angela would cause throughout the day, it was all\nbearable if she’d had her toast and caught up with the world.</p>\n<p>She sat down on the chair to Lawrence ‘s right, ignoring her daughter’s\ncontinued pleas for cartoons. “Angela, I said no! Settle down and <em>be quiet</em>!”\nAngela resumed her sulking, but at least it got quiet.</p>\n<p>She had just missed the weather report, but she was in time for the morning\nheadlines. The newscaster droned on with little emotion through the long list\nof headlines, and Melissa listened only passively until something caught her\nattention.</p>\n<p>“ Twenty-three-year-old McAllister Park resident Joel Mendocino is dead this\nmorning, the victim of a car accident at the Franklin-Niles intersection late\nlast night. Mendocino, who had recently returned from an overseas trip, had\nleft the Elston Memorial hospital where he was being treated for a near-fatal\ngunshot wound he received earlier in the day. His father was the vehicle’s\ndriver, and is listed in stable condition at Elston Memorial.”</p>\n<p>“ Lawrence , listen to this! This poor kid lived around here!” Lawrence\nlooked over his paper and murmured an acknowledgement, then resumed reading\nhis paper. Melissa focused intently on the television as the news anchor\ncontinued.</p>\n<p>“In related news, police were able to discover an illegal “fight club” of\nsorts that is believed to be the source of a rash of unexplained abductions\nand beatings of homeless individuals that has been plaguing the city of late.</p>\n<p>“In a statement released early this morning, Detective Angus Cobb credited\nMr. Mendocino’s identification of his attackers as the crucial clue that led\nthe detectives to a supposedly abandoned warehouse in the ind ustrial area of\nthe city.</p>\n<p>“Several participants in the “fight club” were apprehended by city police\nofficers, and it is expected that the ringleader will soon be located.”</p>\n<p>The news anchor seemed to be enthralled by the story as it continued on.</p>\n<p>“But the story doesn’t end there, folks. Mike Turner, a former Copeland\nAdvertising executive, was shot and killed by detectives on the scene when he\nrefused to discontinue his beating of a mentally-challenged homeless man, and\ninstead charged towards police officers.</p>\n<p>“It is believed that Mr. Turner was also responsible for the brutal beating\nand death of his wife’s lover, Brandon Lloyd, a story that we brought to you\nyesterday on the 6 o’clock newscast.</p>\n<p>“Police are confident that the criminal’s behind these recent activities\nwill soon be rounded up, but remind all city residents to report any\nsuspicious activity immediately and exercise common sense when moving around\nthe city at night.”</p>\n<p>Melissa was almost sad to realize that the story had come to an end. It was\nmore interesting than the plot to one of the afternoon soap opera’s that\nLawrence berated her for watching. Who knew so much could happen one day in\ntheir city?</p>\n<p>“Makes you wonder sometimes, doesn’t it honey?”</p>\n<p>“Hmmm?” Lawrence murmured, looking over his newspaper again.</p>\n<p>“Makes you wonder how many people you see and interact with each day will be\ndead tomorrow. It’s kind of sad, really.”</p>\n<p>Lawrence looked back at his paper. “I suppose. But I don’t worry too much\nabout it. After all, what do they have to do with us?”</p>\n<p>Melissa stood and ran her dishes under the warm water at the kitchen sink.\nShe wouldn’t think about Joel much after that. Lawrence was right, after all;\nwhat did it all have to with her?</p>\n<p><strong>Chapter 3</strong></p>\n<p><em>Joel shrugged as she moved as quickly as she could to the opposite side of\nthe train, sat down, and eyed him warily. Whatever.</em></p>\n<p>While he had traveled in Asia , he’d been amazed at the hospitality and\nfriendliness of nearly everyone he met, including the tourists with which he’d\nhad the opportunity to converse. All travelers there seemed to be inexplicably\nlinked; they al shared that undeniable experience that was Asia , and that\nexperience drew them together. That experience, combined with the basic human\nneed to communicate, at least occasionally, with people from similar\nbackgrounds and worldviews, produced a level of camaraderie with some of his\nnew acquaintances that Joel had seldom had with friends from home.</p>\n<p>Two, in particular, Sean and Pang, had become very close to him during the\nthree days he’d known them. They had met outside a market while he was staying\nin Thailand for a week. Sean had been excited at spotting someone with the\nsame color skin as his own, and Pang, who’d spent a year studying at a\nuniversity in the States, was glad to have a Westerner with which she could\nconverse. Pang and Joel hit it off immediately; they both had an affinity for\nanalytical thought, much to Sean’s dismay, and spent many of their nights\nchatting about philosophy, art, literature and even mathematics, late into the\nnight.</p>\n<p>Sean played the dumb oaf, but behind his goofy exterior was a curious, sharp\nyoung man with a razor sharp wit. Together, the three of them had traveled the\ncity high and low, seeking out coffee shops, bars and pubs, and sampling every\npiece of the Thai nightlife that Pang could think to show them. It was hard\nfor Joel to believe that they’d only been together for three days before\nthey’d split paths. He looked forward to calling them when he got the chance;\ntheir ongoing relationship was an opportunity to relive their past experience\nvicariously through each other, and it was an opportunity that Joel was\nthankful for.</p>\n<p>But it didn’t stop there. The Asian people he’d met, from Sumatra to\nThailand , were friendly, eager to please, and very rarely had any desire for\nprofit, monetary or otherwise. On several occasions, while he’d carried his\nbags to and from a taxi, a random man off the street would run up to assist\nhim, and many times, refused payment. Their payment was his smile and\ngratitude, and in the wake of their unabashed kindness, Joel felt obligated to\nat least attempt to repay them by spreading that kindness. It was just too bad\nno one could believe he was just trying to be helpful.</p>\n<p><em>As the train began to move towards its downtown destination, Joel found an\nempty seat and sat down, peering out the window at the cars passing on the\nhighway alongside him.</em></p>\n<p><strong>Chapter 8</strong></p>\n<p><em>The path along State Avenue to the tower was relatively clear; it was so\nlate in the morning, a majority of people had already made it to their jobs.</em>\nHe eyed the homeless men on the corner warily. Why the hell didn’t they get\njobs? They were always standing there, begging for change, occasionally\noffering a useless trinket or piece of shoddy journalism up in exchange.</p>\n<p>But even worse than the beggars were the ones with the squeegees. They\nattacked his car every single time he drove to work, splashing his windshield\nwith their vile liquid and doing a piss-poor job of cleaning it off. They\nalways left his car in worse shape than when they started, and they expected\nto get paid! Bull <em>shit</em>! The mere thought of them soured his entire mood\nconsiderably, if it were even possible for him to be more pissed off at this\npoint.</p>\n<p>His previous physical activity had left his body reeling, and he was unable\nto move faster than a brisk walk towards the tower. He was interrupted several\ntimes by beggars along the way, huddling against the looming stone buildings\nfor shelter from the wind. He ignored than each time, yelling whatever\nobscenities surfaced to his mind first, until finally he slapped at the hands\nof the last one, knocking the small collection of nickels and dimes from the\nman’s hand. He smiled cruelly as the man cried out and dropped to his knees to\nreclaim the coins that would serve as his dinner for the day. That would show\nthe bastard.</p>\n<p>He continued as fast as he could along State Avenue, ding his best to ignore\nthe legs’ increasing cries of anguish as they suffocated, until the doors of\nthe Tower stood before him, peering down at him with a foreboding gaze. <em>He\npushed his way through the revolving doors and ignored the pleasant greetings\nof the security guard as he headed straight to the elevator.</em></p>",
      "date_published": "2004-11-30T13:16:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-28th/",
      "url": "https://tylerbutler.com/november-28th/",
      "title": "November 28th",
      "content_html": "<p><strong>Chapter 28: Goodbye</strong></p>\n<p>Holly and Ned sat together in Ned’s dining room starling listlessly at the\nbroken Walkman sitting in the center of the table. The discovery of the\nWalkman on the street had filled them with a sense of elation at having made\n<em>some</em> progress in their search, but it had been short-lived when they\nrealized that its discovery ind icated Ernie was ind eed missing.</p>\n<p>Holly ran her hand against the worn buttons and the faint scrawls in the\nback that spelled out Ernie’s name. She hoped he was okay.</p>\n<p>Lavina bustled into the room with a fresh pot of coffee and a platter of\npastries. She had not been pleased initially with Ned bringing Holly back with\nhim, but he had taken her to the kitchen and shared with her the story Holly\nhad told him outside St. Ives.</p>\n<p>Even Lavina’s insecure jealousy was overcome by the sadness of the story,\nand she had set about making them all comfortable in the best way she knew how\n– by cooking for them. There had been no end to the del icious sweets produced\nin the kitchen, and the coffee seemed to be in infinite supply as well.</p>\n<p>The silence was broken by the sudden stentorian ring of the telephone,\nsending Holly bolting upright in her chair in surprise at the sound. Ned\npicked up the call.</p>\n<p>“Hello? Oh, hi Rhonda.” Holly craned her neck anxiously. Did she have news\nabout Ernie?</p>\n<p>“Really? Is he OK? Hmmmm. OK, Elston you say? Yeah, we’ll be over in a few\nminutes.” He slowly put down the phone. Holly asked impatiently, “Well, what\ndid she say?”</p>\n<p>“They found Ernie. He’s in pretty bad shape. They’ve got him up at Elston\nMemorial. The doctors aren’t sure if he’s gonna pull through.”</p>\n<p>Holly’s eyes moistened again. “Well, we have to go see him.” She stood up\npurposefully and grabbed her coat from the rack in the corner. Ned pushed the\nfront door open for her and smiled wryly at his wife as they stepped out into\nthe cold again.</p>\n<hr />\n<p>Ames and Cobb both brea thed a long sigh of relief as they sat down in their\ncar and started the engine, waiting for the heater to kick in. Once their\nbackup had arrived, the warehouse was a non-stop circus of detectives, beat-\ncops, and forensics experts. It seemed like Foster had called in the entire\nforce to the scene.</p>\n<p>Ambulances had arrived at the scene shortly after Ames had called them in,\nbut were now all gone, hurtling towards hospitals as fast as they could go.\nThe man that was shot, identified as Mike Turner by the license in his wallet,\nwas declared dead on arrival by the paramedics, but the victim, whose name was\nstill unknown, was barely clinging to life and had been sped away in an\nambulance quickly.</p>\n<p>Turner’s death came as no surprise — few men could survive five bullets to\nthe chest from moderate range. The other man’s survival came as a surprise to\nboth Ames and Cobb. He had been beaten badly, and both detectives had their\ndoubts as to whether he’d make it through the night. Only time would tell.</p>\n<p>Cobb and Ames had answered hundreds of questions already, and there were\ngoing to be plenty more tomorrow, especially about the shooting and their\nabandonment of the car accident. Questions would have to wait for now, though;\nboth of them had agreed that they needed to go and check on the victims of the\ncar accident. It was the least they could do after abandoning the scene.</p>\n<p>“So did you hear about that guy, Turner?” Ames asked as he leaned back\nwearily against the headrest.</p>\n<p>“No, what about him?” Cobb replied.</p>\n<p>“Apparently, he killed his wife’s boyfriend earlier today after he found\nthem in bed together. Beat him to a pulp with a baseball bat, and did a fair\nnumber on his wife, too.”</p>\n<p>Cobb shook his head. “Well, I can’t say I’m sad to see him gone, then.\nEspecially after seeing what he did to that poor guy.”</p>\n<p>Ames nodded in agreement. “So where we heading? Were you able to find out\nwhere they took the car wreck people?”</p>\n<p>Cobb replied as he looked over his shoulder to back out into the street,\n“Yeah, they all got taken to Elston Memorial.”</p>\n<p>“Elston?” Ames exclaimed. “Wasn’t Schumann closer?”</p>\n<p>“Yeah, but apparently some nut took a shotgun into the mall on Franklin and\nwent crazy, so Schumann was full of gunshot victims.”</p>\n<p>Ames chuckled wryly. “Well, nev er a dull day around here, huh?”</p>\n<p>“No kidding. Well, they took the guy here to Elston as well, so we can check\nup on both of them, and let that Mendocino kid know what’s going on, all at\nthe same time.</p>\n<p>“Nothing like killing three birds with one stone,” Ames commented as they\ncareened down the road.</p>\n<hr />\n<p>Joel opened his eyes and noticed immediately that he was back in the strange\nroom of his dreams. Directly in front of him was the old man, roll of cloth\nbeside him, still looking intently at the mass of threads in his lap. He\ncontinued to ignore Joel.</p>\n<p>Joel looked around slowly. The room was exactly as it had been the last time\nhe had been here. The candle flickering on a low table, the infinitely long\ndark room stretching out behind him, light peeking in through a solitary\nwindow in the distance. Yes, this was definitely the room in which he’d found\nhimself a few hours ago. What was he doing back here?</p>\n<p>“Joel.” He started at the sound and stepped back as the speaker strode out\nfrom the shadows behind the old man.</p>\n<p>“Don’t worry,” the man smiled warmly. “I’m not here to hurt you.”</p>\n<p>Joel looked the man up and down. He was dressed in a long thin robe, a rich\ndark brown in color. His features were nothing special — he appeared to be an\naverage middle-aged man in every respect. A thin black cord lined his neck,\nand his robe hung loosel over his broad shoulders.</p>\n<p>His skin was dark, but seemed to shine strangely as well, and the air was\nfilled with a pleasant freshness as he strode towards Joel and extended his\nhand towards him. Joel glanced in confusion at the old man, who sat,\nunperturbed by the strange man.</p>\n<p>The man laughed. “Oh, don’t mind Qismah, he’s married to his work. He\ndoesn’t pay attention to anything except those threads. Come, I have plenty to\nshow you. I’m sure you have questions, and hopefully I can answer some of them\nfor you. I am Hospes.”</p>\n<p>Joel took his hand, marveling at the warmness exuded by it on his own\nchilled limb. Hospes led him beyond Qismah, to the back of the impossibly long\nroom, talking as the went slowly.</p>\n<p>“Well, Joel, you were supposed to have been here some time ago, but Qismah\nhad to improvise a little when things didn’t go as planned with Mr. Turner.”</p>\n<p>What was he talking about?</p>\n<p>Hospes laughed again. “I suppose you’re a little confused, aren’t you? Well,\nwelcome to the afterlife, Joel — or the gateway to it, anyway.”</p>\n<p>Joel gaspe d in surprise. “You mean… I’m…”</p>\n<p>“Dead? Yes… Or truly alive, depending on how you look at it.”</p>\n<p>Joel was taken aback by his guide’s flippant attitude. If he really was\ndead, he didn’t think Hospes should be laughing about it.</p>\n<p>“Oh, I’m sorry, Joel, but I think you’ll find that there are worse things\nthan dying.” Hospes continued along past Qismah’s position.</p>\n<p>“Like I said before, Joel, the last time you were here, I was supposed to\ngreet you and give you ‘the talk,’ as we call it, but Qismah ended up putting\nyou back out there, due to an unexpected development with Mr. Turner.” Hospes\nmotioned to his right, and Joel saw, to his amazement, another bewildered man\nfollowing another robed figure, just beyond a mysterious glass partition.</p>\n<p>“We do our best to keep track of things around here, and Qismah does a fine\njob of keeping things running smoothly, but we’re far from fortune tellers, so\nevery once in awhile something slips through that has to be dealt with, like\nwhat happened tonight. It makes things harder, for you especially, but I think\nyou can handle it.” He stopped abruptly and turned to face Joel.</p>\n<p>“Well here I am, prattling on… What about you? Do you have any questions?”</p>\n<p>Joel had plenty. He was still unclear about where he was and what was going\non. But where to begin?</p>\n<p>“Ummm, well, what exactly does — Qismah — do?”</p>\n<p>Hospes smiled. “Qismah is the weaver. You see, Joel, you interact with lots\nof different people. Your choices and your actions affect a lot of different\nthings, even if you don’t see those effects first hand. Qismah is responsible\nfor keeping the system sane, for making sure the knots get tied properly…”\nHospes could tell he was losing Joel.</p>\n<p>“Here, it might make more sense if you could see some things.” He motioned\nto the left wall, where Joel saw a window that he hadn’t noticed before. He\npeered out, looking over the lush jungle, but then it faded, replaced by a\nbeaten man in a hospital bed.</p>\n<p>“Joel, meet Ernie. You saved his life, but you didn’t even know it until\nnow. In fact, that man you tried to save today when you were shot was a good\nfriend of Ernie’s. But that’s beside the point right now.</p>\n<p>“When Qismah retied your knot, you went and got in that car accident, but if\nyou hadn’t, a police car carrying two detectives would have been hit by the\nspeeding car instead, and Ernie would have died in the meantime. But now,\nthanks to you, he has a chance.”</p>\n<p>“But will he be OK?”</p>\n<p>“I don’t know. Like I said, we’re not fortune-tellers. But I do know if you\nhadn’t done what you did, he would have died. And here’s another interesting\nfact,” Hospes continued as the hospital scene faded, replaced by a scene that\nJoel recognized. He was standing on the train, holding the door for a man\nrunning towards the train.</p>\n<p>“You held the train for Mike this morning, a man who would later kill his\nwife’s boyfriend and would try to kill Ernie, the man you ended up saving.”</p>\n<p>“So I’m actually responsible for Ernie’s almost-death?” Joel asked.</p>\n<p>Hospes nodded. “Sort of, but not really… It’s complicated. That’s the\npoint. Your entire life s one big complicated knot of events and interactions.\nMost people don’t realize that, but I think you do, to some extent at least.”</p>\n<p>Joel remembered some of the late-night conversations he’d had while in Asia\n. What Hospes was saying made sense in a lot of ways.</p>\n<p>“So now I’m dead?”</p>\n<p>“Yes. But your time had come anyway. You were supposed to die from an\nunexpected heart failure, which is what brought you here in the first place,\nbut then, like I said, Qismah retied your knot. But he tied it in such a way\nthat would bring you back here while fixing things. It’s not yet Ernie’s time\n– at least, we don’t think it is. Like I said before, this isn’t fortune-\ntelling.”</p>\n<p>“What is going to happen to that guy, Mike?” Joel motioned beyond the\ntransparent partition to his right. Hospes shook his head.</p>\n<p>“I don’t know, really. That’s all up to the judge. My job is to answer your\nquestions. Do you have any more?”</p>\n<p>Joel remembered suddenly that he was <em>dead</em>. What about his father? His\nmother?</p>\n<p>“Can I see my parents?”</p>\n<p>In response, an image of his mother, huddled by his father’s side in a\nhospital room, faded in the window.</p>\n<p>“Your dad’s going to be all right. And your parents will grieve, to be sure,\nbut they’ll move on eventually. And someday they’ll be having the exact same\nconversation we’re having now.”</p>\n<p>Tears came to Joel’s eyes as he considered the finality of everything Hospes\nhad told him. He was so young! He had so many things he had wanted to do, but\nnow he wouldn’t get that chance!</p>\n<p>Hospes wrapped his arm around Joel’s shoulder and walked him towards the\ndoor at the end of the room.</p>\n<p>“It’s not so bad, Joel. I think you’ll like the eternal afterlife.”</p>\n<p>“Am I going to heaven or hell?” Joel asked. It seemed the logical question.\nIf he was going to be spending eternity somewhere, he wanted to know whether\nhis tears were warranted.</p>\n<p>Hospes chuckled. “I was waiting for that one. It’s a good question, but I\ndon’t have the answer. It’s up to the judge. But if you want my opinion…” He\nopened the door and motioned for Joel to walk toward the streaming light the\npoured from the opening.</p>\n<p>“I think your chances are pretty good.”</p>\n<hr />\n<p>Three rooms from where Mr. and Mrs. Mendocino cried together over the loss\nof their son, tears of a different kind were being shed. Both Rhonda and Holly\nhugged Ernie close as he came to and uttered a few indecipherable words. He\nwas going to be okay.</p>\n<p>Out in the hall, Ames and Cobb listened incredulously as Heather explained\nthat Joel Mendocino had been killed in the accident. It was a lot for two\ntired cops to take in, after all that had already occurred that day. Without\nJoel’s help with the tattoo, they’d never have found out about the fight club,\nand the poor other guy would probably be dead…</p>\n<p>Ames and Cobb stopped by the Mendocino’s hospital room to express their\ncondolences, then walked out to their cold car. It had been a long day.</p>",
      "date_published": "2004-11-29T15:42:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-24th-27th/",
      "url": "https://tylerbutler.com/november-24th-27th/",
      "title": "November 24th-27th",
      "content_html": "<p>So my server went down this weekend, hence I wasn’t able to post updates.\nHere’s what you’ve missed. I’ll update the PDF when I get a chance. I’ve\npassed the 45,000 word mark… Almost there!</p>\n<hr />\n<p><strong>Chapter 23: The Knot</strong></p>\n<p>Joel felt disoriented. Where was he? He glanced around the small, dimly-lit\nroom in which he found himself, trying to remember how he’d gotten there.\nLight streamed in from a lone window to his left. Outside, the lush Sumatran\njungle glistened with morning dew. But he didn’t remember this place from his\ntravels. Where was he?</p>\n<p>Standing up unsteadily, he looked down the length of room, searching for the\nexit. He found none. The room was of a short width, about 15 feet, but\nimmensely long; it stretched out infinitesimally both in front and behind him.\nThe only perceptible light was from the window beside him, and he suck his\nhead out, peering around the landscape for signs of civilization.</p>\n<p>The jungle stretched out for miles below him, and looking out either side of\nthe window revealed a plain exterior that stretched out at least as far as the\ndark interior did. The building he was in was on a long plateau; looking down,\nhe realized that there would be no escaping through the window. The plateau\nabruptly ended at the edge of the building and dropped straight down 30 or 40\nmeters. <em>So much for that plan</em>, he thought.</p>\n<p>He stepped back into the dim inside of the building. Looking to his left, he\nnow noticed a dim flicker of light. “Hello? Is anyone there?” his voice echoed\neerily down the length of the room, but he received no response.</p>\n<p>The flicker of light seemed to grow stronger, so he began to walk towards\nit. The light from the window faded behind him as he moved on, and he\nstruggled to see anything around him. The light ahead seemed to be much\nsteadier now, so he continued towards it, driven by burning curiosity and a\nstrong desire to determine how he was going to get out of the room. Surely the\nsource of the light would hold some answers for him.</p>\n<p>He blinked his eyes in the darkness, attempting to force them to adjust to\nthe near pitch-blackness of his surroundings, and when he opened them again,\nhe noticed a window, similar, if not identical, to the one he had passed some\ntime back. It hadn’t been there before… had it? How could he have missed it?\nHe ran up to it and looked out of it towards the jungle and to either side of\nthe building. The view was the same as before; the precipice below him, the\nplain smooth sides of the building on either side, stretching out towards\ninfinity.</p>\n<p>The cool breeze was refreshing against his skin, moistened by perspiration\nfrom his short hike through the stuffy interior of the building. He inhaled\ndeeply, letting the clear, humid air clear his lungs and his mind. How he\nloved that feeling! The clear, warm air — such simple pleasures that you\nsimply couldn’t get back home in the city.</p>\n<p>He reluctantly remove his head from the window and continued his journey\nthrough the long room. The window’s light faded behind him, but then,\nunexpectedly, another appeared in front of him. The pattern continued as he\njourneyed endlessly on.</p>\n<p>The flickering light grew more steady, but seemed to increase in size almost\nimperceptibly. It occurred to Joel unexpectedly that perhaps he wasn’t moving\nforward at all; the lack of substantial increase in the apparent size of the\nlight source ahead was less than encouraging. Somehow, though, he felt that\nthat light held the answer to his escape, so he pressed on towards it, despite\nhis doubts.</p>\n<p>He continued on for what seemed like miles. Window after window appeared and\ndisappeared as he journeyed, but he ignored them, intent on making it to the\nlight, to the answer.</p>\n<p>Then, without warning, as the windows had appeared, he blinked and he was\nthere. The light was coming from a solitary candle sitting on a low table.\nBehind the table, deep in the shadows, sat an elderly man with a strange\nlooking cloth draped over his shoulder and in his lap. His features were\nbarely visible in the candlelight, and Joel stepped closer to examine him.</p>\n<p>His long grey hair was unkempt and hung in long strings around his head,\nfurther sheltering his face from Joel’s prying eyes. The man gazed intently at\nthe cloth in his lap, and Joel noticed his fingers working with expert\nprecision and the utmost care on the loose thin strings that spidered out from\nthe cloth. To the man’s left, Joel saw a roll of finished cloth — the man was\nweaving it himself.</p>\n<p>The pattern was intricate, and the thin strings the man handled shone with a\nsparkle that Joel had never seen before. He was overcome with a desire to\ntouch the cloth, and he knelt down and placed his hand gently on the roll. It\nwas tremendously soft, and seemed to radiate a soft warmth as well as a gentle\nshine. Joel longed to take the cloth and wrap himself in it’s comforting\nwarmth, but he was interrupted by the man’s quiet voice.</p>\n<p>“You’re not supposed to be here.” Joel started at the sound. He removed his\nhand from the cloth quickly and looked at the man. He did not look up; his\ngaze remained inextricably fastened to the work in front of him.</p>\n<p>Joel gazed, transfixed, as the man reached back to the roll of cloth that\nJoel had though finished and pulled a loose thread from the center of the\nroll. He pulled it slowly and surely towards his lap; the thread seemed to\ngrow longer and longer as necessary until it reached his lap, where, with\nquick indecipherable flicks of the wrist, he tied it to the strands he had\nbeen presently working on.</p>\n<p>A small smile crossed his face as he completed the knotting of the\ncollection of thin strings, and pushed the multicolored mass towards the\nnearly completed line of cloth he held in his lap, guiding it slowly along the\nblack wire-like string to which they were all bound.</p>\n<p>“You’re not supposed to be here,” he spoke again, still not breaking his\nsteadfast gaze.</p>\n<p>“I’m sorry. I don’t know how I got here…” Joel responded unsteadily. The\nman frowned as he grasped another two threads and tied a simple knot, binding\nthem together.</p>\n<p>“This isn’t right…”</p>\n<p>“Again, I don’t really know how I got here. If you could just…”</p>\n<p>The man interrupted before Joel could continue, “You’ll need to go…”</p>\n<p>Joel sighed, perplexed. Was the man not hearing him, or was he simply\nignoring him? “Well, if you’d just tell me how to get out, I’d gladly leave.\nCould you tell me where the exit is?”</p>\n<p>The man continued staring at his lap, a look of utter vexation on his face.\nHe pulled one of the threads from the collection that laid in front of him. As\nhe pulled on it, the end broke unexpectedly off, and the man held in his hand\na single thread unattached to the others. He raised his eyebrows and furrowed\nhis brow. “This isn’t right.”</p>\n<p>Joel was confused. The man seemed o be totally ignoring everything he had to\nsay, totally engrossed in his own work. “What are you doing?” he asked.\nPerhaps a direct approach would be more effective.</p>\n<p>“Knots,” the man mumbled under his breath. Was it a response, or the\nverbalization of a random thought by a crazy old man? It was clear to Joel\nthat the man was tying knots — he didn’t need to be schooled in the obvious,\nhe needed to be told how to get out of this endless room.</p>\n<p>“Hmmm, yes, I’ll have to fix this…” the man continued mumbling under his\nbreath. “What to do… What to do?” Joel sympathized. He also wondered what he\nshould do.</p>\n<p>Unexpectedly, the man started smiling down at the mass of threads. He\ngrasped one of them by the end and pulled it up in front of his face, peering\ninto the swirling colors and light that seemed to emanate from it.</p>\n<p>Joel was enthralled by the string — what kind of cloth was it? As he peered\nmore closely at the thread, he noticed pictures reflecting on the man’s face\nand the surrounding walls. The candlelight projected through the thread was\nproducing swirling images all around. Upon closer inspection, Joel noticed\nhimself in the pictures, which, he now noticed, were actually moving. They had\na home video quality to them; the colors were washed out, the overall picture\ngrainy, but his own image was unmistakable.</p>\n<p>There he was at his sixth birthday party, when Afton Matthews had hit him\nafter he called her a doodoo-head. In another, he was arguing with Sara over\ntheir breakup, pleading with her to reconsider. Then he was at St. Ig’s\npresenting his solution to the Math Club’s weekly mathematical brain twister,\nsoaking in the incredulous looks of the other students at his mental\nfaculties. And then, in another, he was lying in his hospital bed, doctors\nswarming over him, his parents standing outside, peering in the window\nfrantically.</p>\n<p>What was going on? He glanced back down at the man, who now held a small\npair of scissors open, prepared to cut the thread at it’s base, severing it’s\nconnection to the rest of the cloth. “Wait, what are you doing?” Joel cried\nout as the man deftly snipped the thread free.</p>\n<p>“I’m sorry… this has to be done,” the man spoke softly. Joel felt a sudden\nemptiness overcome him, and he collapsed to his knees. Joel felt as if his\nbody was disintegrating; he was wasting away rapidly. The pictures faded as\nthe man moved the now solitary thread away from the candlelight.</p>\n<p>Joel fell prostrate on the floor and struggled to turn, facing the man. “Why\nare you doing this?” he asked, aware that his own voice was\nuncharacteristically low and raspy.</p>\n<p>The man picked up the thread he had previously examined, and, apparently\nfinding what he was looking for, took the newly cut thread and tied them\ntogether in a complicated knot, then fastened them to another thin black\nthread that protruded out of the cloth, using an even more intricate joint.</p>\n<p>Joel tried to cry out again, but no sound came. The man smiled broadly at\nhis work. “There, that should do it.” Joel continued his attempts to cry out\nas everything disappeared from view.</p>\n<hr />\n<p>“What happened?” Doctor Ross said as he entered the room.</p>\n<p>“I don’t know,” Heather responded fearfully. “He just went into cardiac\narrest — there was no forewarning. He was awake and talking, then this!”</p>\n<p>“OK.” The doctor looked at the instruments along Joel’s bedside, then\nexamined his chart quickly. Nothing seemed to fit. Two orderly’s wheeled in a\nportable defibrillator and heather ripped open the hospital gown covering\nJoel’s chest.</p>\n<p>The doctor barked almost incomprehensible orders and the nurses and\norderlies scrambled to fulfill them. As the defibrillator’s cold metal leads\nwere placed on his chest, Joel shot up in his bed, shouting maniacally, “What\nare you doing?”</p>\n<p>The hospital staff froze in confusion and amazement. Joel grabbed Heather’s\narm tightly and looked fiercely into her eyes. “I have to go.”</p>\n<p><strong>Chapter 24: Search</strong></p>\n<p>“Holly, I don’t see him anywhere. We’ve been up and down every street I can\nthink of and he’s just not here.”</p>\n<p>“Well, we have to find him, Ned. We have to.”</p>\n<p>Ned was frustrated. All Holly could say was “We have to find him,” but she\nhad no ideas as to how to go about doing just that. She just wanted to\ncontinue driving around in circles until they stumbled upon him. At first, Ned\nhad humored her, but he was now convinced they weren’t going to find Ernie\nthis way. He wasn’t ready to give up — quite the opposite, in fact — but he\nwanted to go back to St. Ives and talk to Rhonda, and see if she had any ideas\nas to his whereabouts. Perhaps she knew some of the places Ernie went when he\ndidn’t stay at St. Ives.</p>\n<p>But Holly would hear none of it. She refused to go back to St. Ives with\nhim; she wanted to stay out on the street — the whole night if they had to –\nto find Ernie. Ned was puzzled by her complete reluctance to go to St. Ives.\nShe was not entirely without reason or logic, even in her excited state of\nmind, but she refused to even entertain the idea, no matter how many times he\nmentioned it.</p>\n<p>But this was getting ridiculous. They weren’t getting anywhere, and\nsomething had to be done. “Holly, I am going to St. Ives to talk to Rhonda.”</p>\n<p>“Ned,” Holly protested. “I don’t want to go to St. Ives. He’s probably just\naround the next alley… Come on, let’s check.”</p>\n<p>She wasn’t going to get her way this time. “No. I am going to St. Ives, I’m\ngoing to talk to Rhonda, and then we’ll decide what to do.” He spoke\ndefinitively, and Holly turned her head and stared listlessly out the window\nat the passing grayness of the outside.</p>\n<p>She remained quiet throughout the rest of the drive, and Ned wondered if he\nhad permanently damaged their friendship. Still, it had to be done. Their goal\nhad to be to <em>find</em> Ernie, not to merely <em>look</em> for him.</p>\n<p>As the looming stone structure of St. Ives came into view, Holly turned her\nhead away from the window and looked straight ahead. Her eyes closed as she\nbent down at the waist, placing her hands under her thighs and whimpering\nsoftly.</p>\n<p>It occurred to Ned, as he sat there observing her, how like his youngest\ndaughter she was acting. When his youngest didn’t get her way, she would often\nsit down, wrap her arms around her body, and pout. Ned shook his head. The\ndifference between a three-year-old and a twenty-year-old weren’t that great\nafter all.</p>\n<p>He pulled the van to a stop along the side of the nearly empty street and\nprepared to get out, but as he opened the door, he noticed Holly was crying\nagain softly. He closed thee driver side door again and touched her shoulder\ngently.</p>\n<p>“What’s wrong, Holly?” Her body shook convulsively as her tears overwhelmed\nher. Ned kept his hand on her shoulder, and she gradually became calmer and\nstopped shaking so much.</p>\n<p>She pulled her head up from it’s position on her forearm and looked at Ned,\nan expression of despair and immense pain on her face. “You know how I told\nyou I grew up in McAllister Park ?” she asked.</p>\n<p>Ned nodded. They had had this conversation. She had told him she was born\nand raised right here in this neighborhood. “Well, that’s not exactly true,”\nshe continued. I did spend a lot of time here when I was younger, but I was\nreally raised in a nice house out in the northwest suburbs.</p>\n<p>“But when I was 8, my parents were in a car accident and both of them were\nkilled — I told you that; that is true. And I did get put in a foster home,\nlike I told you. Well, I actually got put in three or four different foster\nhomes. I didn’t adjust well to my parents’ death, and I was a real wild child.</p>\n<p>“When I was 16, I ran away fro my fourth foster family. I had planned to\nmove out west and build myself a new life out there, but I only made it as far\nas McAllister Park .” She laughed hollowly. Ned looked intently at her and\nlistened.</p>\n<p>“Well, the neighborhood wasn’t too good, even back then, and things were\ntough for me. I lived on the street, but being a woman, and a young one at\nthat, I dealt with a lot of shit. A kind old woman — Elsie was her name, I\nthink — brought me here, to St. Ives, one especially cold night, and I liked\nit. It seemed to be perfect. Everyone was very friendly, they seemed to have\nplenty of food, and there were warm beds.</p>\n<p>“I especially liked John, the director of the shelter. He would sit and tell\nme great stories, and he always listened to me when I talked. I honestly\nthought I was in heaven. I thought I could get back on my feet, then I could\nfinish my trip out to California . Things were going to work out.</p>\n<p>“I stayed there — or here, I guess — for a few days, and everything was\nfine. But then I began to notice John touching my shoulder while I ate, or\nrubbing his leg on mine while he sat next to me at mealtimes. He seemed to go\nout of his way to find me, and he often asked me to come see him in his\noffice. Ordinarily, I wouldn’t have considered that a big deal, but the way he\nwas touching me was making me feel extremely uncomfortable, so I always found\nan excuse, thankfully.” She paused, and Ned wondered if perhaps she wouldn’t\nbe able to or want to continue.</p>\n<p>“It’s all right if you don’t want to talk about it,” he said.</p>\n<p>“No… I need to tell <em>someone</em>.” She took a deep breath, then continued.\n“Usually we were in rooms with at least another woman, but one night, the\nwoman who I’d been staying with didn’t come back for the evening, so I was in\nthe little room alone. John came in late that night. I was asleep, and the\nnext thing I knew, I had a pillow over my head and somebody was groping at my\npanties. I tried to scream, but the pillow covered it, and made it hard to\nbreathe…” She broke off, and Ned put his hand back on her shoulder. She\ncontinued haltingly, tears welling up in her eyes again.</p>\n<p>“I don’t really know what happened — I think I tried to block it out. He was\non top of me… <em>raping</em> me… and I couldn’t do <em>anything</em>. He took off the\npillow because he ‘wanted to see my beautiful eyes,’ but even then I couldn’t\ndo anything. Mentally, I wanted to scream and shout and twist and turn and\nscratch, but no matter what my brain said, my body just sat there. I can still\nremember the smell of the soup in the room, the muffled sound of the washing\nmachines down the hall, the feeling as he…” She broke off again, and Ned\nstrengthened his grip on her shoulder, hugging her shuddering body to him.</p>\n<p>There they sat in silence for what seemed like hours, until Holly finally\npushed herself away from him. “I’m sorry… but even now I can’t bear the\nthought of that place. I didn’t stay long after that night. John said if I\never told anybody, no one would believe me. I guess he’s gone now, but the\nmemory’s still with me…”</p>\n<p>Ned nodded. It made so much more sense now. He hated himself for bringing\nher here, when she had asked — begged, even! — him not to. He hated himself\nfor recommending on a daily basis that she volunteer here, reminding her each\nday of that terrible experience. What an idiot he’d been!</p>\n<p>“I’m sorry,” he spoke quietly. “I shouldn’t have made you come here.”</p>\n<p>Holly smiled wistfully. “Honestly, it feels kind of nice to finally tell\nsomeone — someone who believes me that it happened — someone that cares. So\ndon’t beat yourself up over it. You couldn’t have known.” She looked out the\nwindow at the large stone building.</p>\n<p>“Well, since we’re here, you might as well go in and talk to Rhonda.”</p>\n<p>Ned nodded and opened the driver door, stepping into the bitter cold of the\nnight. When he entered St. Ives, he found Rhonda in the kitchen, on the\ntelephone.</p>\n<p>“Missin’ for 24 hours? Hell, he might be dead in 24 hours! There’s nothin’\ncan be done? OK. Thank you.” She hung up the phone angrily. “Can’t report\nsomeone missin’ ‘til they’ve been missin’ 24 hours. Now that’s just stupid!”</p>\n<p>She looked up, noticing Ned in the kitchen doorway. “Oh, sorry ‘bout that…\nwhat can I do for ye?” Ned walked in and explained the whole story of their\nsearch to her as she prepared them both a cup of tea.</p>\n<p>“Wal, I’ve been feelin’ a little strange myself — this isn’t the firs’ time\nErnie hasn’t come back, but this time it seems different. I mean, he was out\nlast night, and I know that he wouldn’t let it happen two days in a row — he\nknows I’d lay into him for dat.” She sighed and took another sip of her tea.\n“But da police say dey can’t do anything yet. You say you’ve looked through\nall the streets and alleys ‘round here?”</p>\n<p>Ned nodded. Holly had insisted that they leave no stone uncovered. “Wal, I\ndon’t know then. I hope he’s all right. Give me your number. If I hear\nanything or he shows up, I’ll give you a call.”</p>\n<p>Ned wrote his number on the pad she handed him, thanked her for the tea, and\nheaded back out in the cold towards the van. Holly was staring anxiously out\nof the window at the stone building as he approached.</p>\n<p>“Did she have any ideas?” she asked as Ned closed the door and started the\nengine.</p>\n<p>“No, but she said she’d call us if she heard anything or he appeared there.”\nHolly looked disappointed, and Ned couldn’t blame her. He had hoped Rhonda\nwould have some ideas as well.</p>\n<p>“Where are you going?” Holly asked, as Ned turned back towards their main\nsearch area instead of going straight back towards his home.</p>\n<p>“Well, I figured we owed it to Ernie to check one more time. Maybe we missed\nsomething.” Holly smiled.</p>\n<p>The roads were as empty as they’d been during their previous search, and\nthere was still no sign of Ernie along any of the streets or the narrow\nalleyways. They were disappointed, but neither of them had really expected to\nfind anything. They were both tired — it was time to call it a night and hope\nfor new developments in the morning.</p>\n<p>“Ned, do you see that?” Holly asked, pointing up ahead at a shiny glint on\nthe street curb.</p>\n<p>“Yeah.”</p>\n<p>“What is it?”</p>\n<p>“I don’t know… Probably a plastic bag or a hubcap or something.”</p>\n<p>“Stop for a sec.”</p>\n<p>Ned obeyed and jumped as Holly threw the passenger door open and hopped out,\nrunning towards the glint up ahead. She returned a few seconds later, excited.\n“Look, Ned!” she exclaimed, thrusting the object in her hand at Ned’s face. It\nwas Ernie’s Walkman.</p>\n<p><strong>Chapter 25: Fight</strong></p>\n<p>When Mike came to he was alone in a small maintenance closet. He was no\nlonger tied to the chair, but the appearance of freedom was short lived. The\ndoor to the closet was closed, and a quick test revealed it was locked as\nwell.</p>\n<p>He sat down on the floor and waited, rubbing the back of his head gingerly.\nHe felt the telltale rough surface of the scab on the back of his skull where\nthe previous blows had broken the skin. His head was really taking a beating\ntoday. Between the bouts of unconsciousness earlier in the day — had that just\nbeen this morning? — and the more recent knocks given him by Angelo’s goons,\nit was a wonder he was still standing.</p>\n<p>He was standing, though, unsteadily. He leaned against the door, balancing\nhimself, waiting for the lightheadedness to pass. The swirling of his brain\ncells slowly stopped, and he began to feel like his old self again.</p>\n<p>The slightly muffled sound of cheering could be heard beyond the door. He\nstrained his hearing to focus on the sound, to pick up any specific sound that\nmight tell him something about what Angelo had in mind.</p>\n<p>A man was speaking, his voice Angelo didn’t recognize.</p>\n<p>“Well, folks, we have a very special event tonight. You know, normally we\ntry to encourage audience participation during the “battle,” as we like to\ncall it…” The crowd cheered again, louder than before.</p>\n<p>The man continued, speaking loudly over the din of the crowd. “But… BUT\ntonight, we have something special planned. I’d like to tell you about Mike –\nhe’s a guy just like you. He had a job downtown, he had a nice house, a nice\nwife — things were great. But this morning, Mike got fired from his job…”\nThe crowd booed.</p>\n<p>“When he got home, he found his wife in bed with another man.” The crowd\nbooed even more loudly, and Mike discerned several insults flying from their\nmouths. “That bitch!” “Whore!” “Cunt!”</p>\n<p>“But Mike didn’t sit back and take that shit, no! He fought back! He picked\nup a baseball bat and beat the fucking shit out of that adulterous bastard,\nand did a nasty number on his wife, too!” The crowd cheered maniacally and\nsome even clapped. Mike felt pretty good. He <em>had</em> done the right thing,\nafter all. What else could he have done? Finally he was getting some\nrecognition for the hard work he’d put in, for the talent that he had nurtured\nand developed over countless years.</p>\n<p>The door to the closet opened unexpectedly, and Angelo stood there, backed\nby two large sullen-looking men. He looked Mike up and down, and smiled\ncryptically.</p>\n<p>“Looking good, Mike. Have you heard what they’re saying about you? Mike, I’m\ntelling you, this is the place for you. The guys here <em>love</em> you! Listen to\n‘em!” He motioned down the hall where the sound of the crowd grew louder\nagain. “Now let’s go and show ‘em why you’re king shit of fuck mountain.”</p>\n<p>Mike hated Angelo, but the sound of that crowd was incredibly enticing. They\nwere now shouting his name. “Mike… Mike… Mike…”</p>\n<p>“You really want to see him? You want to see him fight some degenerate\nbastard?” The crowd cheered even more, and the chant of his name grew more\npowerful. Mike felt good. They wanted him. They needed him. The rage from the\nday’s events came rushing back, and he smashed his fist against the closet\ndoor impulsively.</p>\n<p>“That’s right,” Angelo smirked. “Tap into that anger. You have a right to,\nafter what those bastards have done to you. Go show ‘em all why you’re a bad-\nass motherfucker.” Angelo stepped aside and motioned down the hall. Mike\nhadn’t heard him. He was focused on the chanting from the crowd.</p>\n<p>He followed the noise into the large room. There must have been hundreds of\nmen there, all shouting for him. The announcer glanced over his shoulder, and\nseeing Mike behind him, turned back to the raucous crowd and announced his\narrival.</p>\n<p>“Here he is, Mike Turner!” The crowd shouted in frenzied excitement, and\nMike stepped forward confidently. He didn’t feel like himself — he felt more\npowerful. He felt like a hulking menace, a “bad-ass motherfucker,” as Angelo\nhad termed it, and he was going to give these fans a show.</p>\n<p>He stepped out in the center clearing and the announcer stepped back,\nallowing the circle of excited faces to close around him. Mike looked around\nat the faces. The men were mostly dressed in suits, and all looked to be about\n30 or 40 years old. Their faces were tired, but a maniacal frenzy shone in\ntheir eyes, and they cheered, clapped and shouted as Mike raised his right\nhand above his head, fist closed defiantly. They were not unlike him — they\nwere his peers. And he commanded their respect. Every man in that room wanted\nto be him at that moment, and the ceaseless applause confirmed it.</p>\n<p>He turned around 360 degrees, hand still in the air, letting each and every\nmember of the crowd survey their new god. Their look of awe was magnificently\nboosting his ego, and any qualms he had about participating in something\nAngelo had suggested and sanctioned were now only distant considerations. He\nhad killed a man, and tonight, he’d kill another.</p>\n<p>Much more than at any other point in his life, Mike knew that this was his\ndestiny. This was his purpose, his reason for existence. Everything up until\nthis night was preparation — the shaping of his temper, his nightly boxing\nworkout to funnel away the constant anger he felt, the events of the past day\n– they had all prepared him to find himself. And when all was revealed, there\nwas no sign of Mike Turner, the man. There was only Mike Turner, the _animal\n_.</p>\n<p>He was primal, he was brutal, he was everything that Angelo had said he was.\nAnd this was his arena — his home. This battleground was the place where he\nwould complete the transformation. But to do that, he would need an opponent.\nWhere was the man these joker’s had found to fight him?</p>\n<p>He wheeled around, searching for the man he would soon kill. The crowd\nparted, and a man was pushed roughly into the right side of the circle. He\nstood there unsteadily, peering out from behind thick glasses.</p>\n<p>This was the man they had selected for Mike to fight? <em>This</em> was him, this\nscared, shaking man with geeky glasses? For a moment, Mike felt slighted. As\npsychotically driven as he was, he probably could kill a man twice his size,\nmaybe even ten men, and they had found this little bastard.</p>\n<p>The crowd’s shouting and cheering would not let him object, however; he’d\nhave to fight the man, no matter how small or insignificant he was. This fight\nwould be easy. He’d win their favor, then they’d send him someone greater,\nsomeone more powerful to fight the next time. But this man would need to be\nkilled, of that Mike was certain.</p>\n<hr />\n<p>Ernie was confused. He had been unconscious until his abductors had pulled\nhim out of the car trunk and waved some strange-smelling stuff in front of his\nnose. They had pulled him roughly into some building and held him firmly in a\nsmall hallway. He could hear loud shouting ahead.</p>\n<p>Then, without warning, the two men holding him pushed through a mass of\nbodies and threw him out into a large circle, facing another man who paced in\na frenzy around the outside of the circle, his fist raised above his head.</p>\n<p>His glasses were foggy from the warm humidity in the building, but he dared\nnot remove them to wipe them off. He was frightened beyond reason, and he\ndidn’t want to risk the blindness that would come with the removal of his\nglasses. He had to be able to see everything.</p>\n<p>The man across from him lowered his arm when he noticed Ernie. His eyes were\ncrazed and bloodthirsty, and Ernie got the distinct impression from his look\nthat he was not in the mood to make friends.</p>\n<p>The man sidestepped towards him slowly. Ernie was unsure what to do, but he\ndidn’t want to get in the man’s way. All he wanted to do was get away. He\nturned and tried to get out through mass of bodies that now blocked the path\nthrough which he had entered the circle, but the men there laughed and grabbed\nhim pushing him back into the center.</p>\n<p>As he turned his head, his jaw met with the man’s fist, sending him\nsprawling to the floor. His glasses clattered on the concrete alongside him.\nThe man towered over him menacingly, silently daring him to get up. Ernie\ndidn’t want to, but the man’s fists were less damaging weapons than his feet,\nso against his will, he forced himself to stand again.</p>\n<hr />\n<p>Mike had been right about his opponent. There was very little resistance. He\nhad initially tried to turn and run, but the circle of fans had sportingly\nprevented <em>that</em>. Mike had taken the opportunity to run up behind him\nquickly, and planted his first punch squarely on the man’s jaw. It had been a\nclean punch, a powerful one, and the man had crumpled to the floor under his\nstrength.</p>\n<p>Mike grinned and stepped towards the man, raising his hand at the crowd\nagain, proclaiming his strength. The man looked up fearfully, bleary-eyed\nwithout his glasses, tears streaming from his eyes.</p>\n<p>Mike ignored him completely, and as the man struggled to stand again, on all\nfours, Mike planted a swift kick to his stomach, eliciting a gasp and low moan\nas the man went down again.</p>\n<p>Mike diabolically repeated the cycle, following the man as he crawled around\nthe circle, trying to find means of escape. Sometimes he’d let the man stand,\nthen punch him down to the floor again, other times he’d kick viciously while\nthe man stood moaning on the ground. Blood was now everywhere, and the sight\nof the maroon flow only increased the crowd’s agitation and Mike’s frenzy.</p>\n<p>He was no longer himself. His sole purpose was to beat the pure existence\nout of this man. The crowd pulsated at every punch, every kick, and he drew\npower from their yells and shouted encouragement.</p>\n<p>At one crowd member’s shouted suggestion, he kicked the man’s head, hard,\nwhile he lay on the ground. The neck whipped back with a satisfying crack, and\nthe man’s body curled up, motionless. He made no attempt to rise this time.\nThe crowd crooned approvingly.</p>\n<p>Mike stood over the man’s limp, crumpled body, his bare muscled back\nglistening magnificently under the fluorescent lights of the warehouse. The\ncircle of men chanted methodically. “Finish him… Finish him…” Mike looked\nup the faces around him. They were crying for finality, for annihilation, for\nblood, and he would give it to them. This was it. He had finally found it.\nThis was his shining moment.</p>\n<p><strong>Chapter 26: Crash</strong></p>\n<p>“ Just where are we going, son?” Joel’s father seemed puzzled by his son’s\nstrange request to leave the hospital and drive off somewhere, but he knew his\nson well enough to not ask too many questions; Joel wouldn’t flip out like he\nhad about anything that wasn’t important.</p>\n<p>Joel wished he could answer his dad, but he honestly didn’t know where they\nwere going. He had woken up in the hospital with an uncontrollable urge to get\nup, leave the hospital, and drive somewhere, <em>anywhere</em>. His mother, not to\nmention the doctors, had all protested valiantly, but in the end his father,\nsensing the urgency that Joel was attempting to communicate, had volunteered\nto take his son where he felt he needed to go, and had successfully silenced\nthe doctors.</p>\n<p>But his faith in his son was thinning as they drove on aimlessly. Joel was\nunable to give any concrete information about their destination, instead\ngiving last-second directions, forcing him to make hairpin turns and nearly\nflipping their old station wagon over several times. But the urgency on Joel’s\nface never wavered.</p>\n<p>Joel looked intently out the window, waiting for the next spur of intuition\nthat would prompt another turn. He thought back on the fading memory of the\ndream — is that what it was? — and of the man with the threads, weaving the\ncloth. What had it all meant? His father had told him that his heart had\nstopped suddenly in the hospital, for no apparent reason, but Joel felt fine\nnow. In fact, the pain in his side was almost non-existent, though the bloody\npiece of gauze taped tightly to his side served as a reminder of his injury.</p>\n<p>He had a suspicion that there was more to his dream than normal. Something\nabout it felt final, like he was supposed to learn something from it. And the\nfeeling of complete emptiness when the man had cut the thread… He glanced\ndown as the memory of that feeling returned; no, there was no hole in his\nstomach, thank God.</p>\n<p>He finally answered his father, “I don’t know, Dad.”</p>\n<p>“What?”</p>\n<p>“I don’t know where we’re going.”</p>\n<p>“Ummm, OK… Well, just try to give me a little more warning with the turns,\nall right?”</p>\n<p>Joel smiled. His dad hated driving anything more than the speed limit; their\nbreakneck speed and last minute turns could not be good for his nerves.\n“Thanks for doing this, Dad.”</p>\n<p>His father smiled wryly. “Well, it’s not like you gave me much…”</p>\n<p>“Right! Turn right!” Joel shouted suddenly, bracing himself against his seat\nas his father complied. The tires screeched angrily, and the drivers behind\nthem honked as they screamed by, seemingly balanced on two wheels.</p>\n<p>“…choice. It’s not like you gave me much choice,” his father continued\nhaltingly as they bounced along the narrow side street Joel had directed them\nonto.</p>\n<p>“Sorry,” Joel said sheepishly. He didn’t even really know why he had yelled\nto turn — it just sort of came out. Well, hopefully it would all make sense\nonce they arrived at their destination, where ever it was.</p>\n<hr />\n<p>Cobb and Ames were on their way to Delome when the call came in over the\nradio. “Unit 402… Cobb, Ames , you there?”</p>\n<p>It was Foster. Ames picked up the radio transmitter and responded. “Yeah,\nFoster, we’re here. What’s up?”</p>\n<p>“There’s some trouble over on Delome… You guys are headed there, right?”</p>\n<p>“Yeah, we’re on our way right now.”</p>\n<p>“Well pick it up. There’s somethin’ wrong over there. OC called and said\nthey can’t raise either of the blue and whites on the radio, and Mrs. Riley,\nthe old woman that had been calling to complain, called in and said that the\nnoise was louder than it had ever been before. He said it sounded like a war\nwas goin’ on over there. You’re the closest unit we’ve got, so step on it.\nWe’re sending backup — be careful.”</p>\n<p>“You’ve got it, Lieutenant.” Ames hung up the radio receiver and looked at\nCobb. “Well, you heard her partner. Let’s go.” Cobb flipped on the siren and\nlights, and, as instructed, floored the accelerator.</p>\n<hr />\n<p>Neither Joel nor his father even saw the other car zooming into the\nintersection. They had heard the siren approaching behind them, and had pulled\nas far as possible to the right as the cop car passed them, speeding into the\nintersection.</p>\n<p>Joel’s father, monitoring the fla shing lights in his left-side mirror, had\nnot noticed the red light in the Franklin — Niles intersection until it was\ntoo late. Suddenly the left side of station wagon crumpled with a magnificent\nscreeching sound, and the world was spinning around them.</p>\n<p>Joel felt weightless for a moment, then felt searing pain in his legs as\nthey were crushed in a mass of metal. His head bounced viciously against the\ntop of the station wagon as the huge vehicle spun out of control, and finally\ncame to a scrapping stop, upside down on the far side of the intersection.\nJoel looked over at his father, whose head was slumped back against the\nheadrest, cuts and scrapes on his face and neck. He wasn’t moving.</p>\n<p>Cold air rushed in from the windows, now free of glass. Joel tried to speak,\nbut everything was silent. His ears were ringing; he couldn’t hear anything;\nthe entire world seemed to move in silent slow motion, like a Charlie Chaplin\nfilm at half speed.</p>\n<p>He became aware of movement outside the car. Strange upside-down people came\nrunning towards the car. Faces peered in both windows, shouting something at\nhim, but he couldn’t hear them above the ringing in his ears.</p>\n<p>His unexplainable sense of purpose, which had driven him to rise from the\nhospital bed and brought his father out here along with him, was now gone. He\njust wanted to sleep. Couldn’t these people see he just wanted to rest? With a\nwave of his hand, he dismissed the faces and closed his eyes, beckoning sleep\nto come as his door opened and strong hands pulled him out of the car.</p>\n<hr />\n<p>Cobb sat dazed in the driver seat of the car as it came to a stop, having\ncompleted a full 360 degree spin, facing the direction it had initially been\nheaded. “Holy shit!” he said under his brea th. He looked over at Ames , who\nwas clutching the dashboard with white-knuckled hands, a breathing hard and\nlooking straight ahead, wide-eyed.</p>\n<p>“Holy shit is right…” Ames responded, peeling his hands from the dashboard\nand looking back over his shoulder at the wreckage behind them. The blue fla\nshing lights cast at eerie glow over the whole scene.</p>\n<p>Cars on either side of the intersection had stopped, doors hanging open as\nmotorists stepped out and ran towards the vehicles to offer what assistance\nthey could.</p>\n<p>Cobb and Ames now had a dilemma. Ordinarily, their purpose would have been\nclear; they would have exited their vehicle and gone back to the scene of the\naccident, offering whatever help they could. But in this case, there was also\na developing situation down on Del ome that also required their attention. It\nwas not immediately clear what they should do, and in fact, either choice\nwould no doubt leave them with a disciplinary inquiry.</p>\n<p>Ames decided that the other motorists had the accident covered. Ames ’ and\nCobb’s presence would only add more confusion to the scene. He picked up the\nradio and motioned for the still-stunned Cobb to move on.</p>\n<p>“Dispatch, this is unit 402, we’ve got an accident at the Franklin — Niles\nintersection. Looks pretty bad, send ambulances and road clearing equipment.\nOfficers leaving the scene in pursuit of another possible crime.”</p>\n<p>“Ten four, unit 402, ambulances are on their way.”</p>\n<p>“Hope everybody’s all right,” Cobb muttered as he sped up again, continuing\non towards the ind ustrial section of town.</p>\n<p>“Not much else we could do. I have a feeling something is wrong with those\nblue and whites, and even if we’d stayed, the ambulances would have taken just\nas long to get there.”</p>\n<p>“Yeah, I know, but it seems wrong to just leave them there, you know.”</p>\n<p>“Yeah. Let’s hope whatever’s going on down here is worth it.”</p>\n<p>**Chapter 27: Takedown **</p>\n<p>Angelo had a problem. That bitch old woman from down the street had been\ncalling the cops again, and not one, but <em>two</em> blue and whites were running\nalong the street, looking for signs of trouble.</p>\n<p>There was no way he could stop the fight now. The crowd was in too much of a\nfrenzy, and Mike was doing a hell of a job beating this guy to a pulp. It was\ntrue magic, and if Angelo hadn’t been so preoccupied with dealing with the law\nenforcement threat, he would have enjoyed watching the fight himself.</p>\n<p>But now, he stood pacing in front of four bound and gagged city cops,\nwondering what he should do. He had sent out several of his best men to grab\nthe cops before they could call for backup, but he couldn’t be sure they had\nsucceeded entirely, and even if they had, it wouldn’t be long until backup\nwould show up anyway, since no one was responding to the radio calls.</p>\n<p>Shit! Why tonight? Mike was giving them the show of a lifetime out there –\nhe’d bring in at least <em>double</em> the normal attendance next week! But he’d\nprobably have to stop the fight early. He couldn’t risk getting shut down at\nthis point, and he had little doubt that more cops were on their way.</p>\n<p>He motioned to the men who stood guard over the bound officers, and they all\nstepped out of the small closet room, closing and locking the door behind\nthem.</p>\n<p>“OK, here’s what I want you to do… Go around quietly to the outside of the\nfight circle and let people know cops are on their way. It won’t take long for\nword to get around. People’ll start clearin’ out on their own. I’m getting’\nout of here.”</p>\n<p>“What about the guy?” one of the men asked, motioning towards the arena\nwhere Mike stood hunched over, delivering vicious blows to Ernie’s back and\nskull.</p>\n<p>“Leave ‘im. We don’t have time to deal with ‘im right now.” It was a pity,\nreally, since Mike had already shown such promise, but Angelo didn’t have much\nchoice at this point. Mike was crazed — out of his mind — right now. It would\ntake him too long to cool down enough to be lucid. Angelo couldn’t take the\nrisk of being anywhere near here when the cops showed up.</p>\n<p>His men ran off to follow his directions, and he turned, Marty close behind,\ntowards the door where his car waited outside. He shot one glance back towards\nthe arena, where Mike’s latest maneuver elicited another scream of approval\nfrom the frenzied crowd. _What a shame. _</p>\n<hr />\n<p>As Cobb and Ames made the final turn towards the industrial section, they\nnoticed several cars moving quickly towards the highway, headed the opposite\ndirection. “Looks like we missed the party,” Ames commented, taking note of\nthe frantic, frightened look on the face of one of the drivers as he passed\nby.</p>\n<p>“Not quite,” Cobb responded. “Look.” He pointed ahead to a warehouse on the\nleft side of the street. Faint light streamed from the windows, and men in\nbusiness suits and loose ties poured out of the doors, scrambling over each\nother towards lots on either side of the building, where their cars sat,\nobscured behind overgrown weeds and shrubbery.</p>\n<p>“Well, somethin’s been goin’ on,” Ames commented, drawing his gun from his\nwaist and preparing to jump out of the car at a moment’s notice.</p>\n<p>“I’m going to pull up to the back,” Cobb said, turning the steering wheel\nexpertly to the left. “There’s no way we’re gonna take all these guys by\nourselves. Let’s go in the back and see if we can find out what’s going on.\nThere’s gotta be somethin’ going on in there.”</p>\n<p>Ames nodded as he checked the barrel on his gun again. He was ready.</p>\n<p>Cobb pulled the car to a screeching halt and the detectives threw both doors\nopen, pumped out, and ran to the back door, one on either side of it, backs\npressed against the wall. Ames nodded, and Cobb turned and kicked the door in\nwith a crash. Ames followed him into the building, gun held ahead of him at\nthe ready.</p>\n<p>They moved quickly through the small labyrinth of office and maintenance\nrooms, checking for anyone or anything, but no one was there.</p>\n<p>They eventually came to the small hallway which led to the main area of the\nwarehouse. Light crept under the closed double doors leading into the room,\nand from their position they could hear echoic footsteps a man shouting.\n“Wait! Where are you going? What the hell do you think you’re doing? Get back\nhere! You’re missing the fuckin’ grand finale!”</p>\n<p>They stepped through the heavy doors and saw a man, bare-chested, covered in\na sheen of perspiration and grit, standing over a bloody mess of a man, a\ncrazed look in his eyes, shouting at the opposite side of the room, where the\nswinging doors indicated the last of the spectators had recently departed.</p>\n<p>“Freeze! Police!”</p>\n<hr />\n<p>Mike’s audience was gone. Out of the corner of his eye, he had seen the\nexodus begin. Someone had yelled, “The cops are coming!” With that, the entire\nroom had turned into a stampede of suits, each one heading for the door as\nfast as he could.</p>\n<p>Mike was surprised and annoyed that they were such pussies. The cops? What\ncould they do to him? He was fuckin’ invincible! He could take a whole army of\ncops on himself, none of the men would have to worry at all — he could protect\nthem.</p>\n<p>He shouted at them to stay, to watch his finale, to observe his final\ncrushing of the man beneath his foot, but his words fell on deaf ears. When\nthe last of the men passed through the double doors to the cold night outside,\nhe became aware of movement behind him.</p>\n<p>“Freeze! Po lice!” He turned and eyed the two men warily. Were they serious?\n<em>This</em> was who’d been sent to take <em>him</em> on? They leveled their guns on him\nand repeated their warnings.</p>\n<p>Mike looked down at the mess below him. He had done quite a job. Angelo had\nbeen right when he had called him an artist. The blood smeared across the\ncold, dusty concrete from his opponent’s escape attempts did remind him of a\nJackson Pollack work.</p>\n<p>He leveled his eyes with the two police officers in front of him. They\ncontinued to yell at him, but he ignored them. He was invincible, right? Fuck\nthem! They’d pay, just like everyone else had.</p>\n<p>With that thought he screamed his battle cry and ran towards them, sweat,\nblood, and dirt sliding off of him and landing in miniature puddles on the\nfloor behind him. He was an ancient warrior, an animal, the personification of\nrage, brutality incarnate. None would stand in his way.</p>\n<p>The first bullet struck him on his right side, and threw him slightly off\nbalance, but the second bullet struck his left side, restoring his balance.\nWas this the best they could do? He barreled on, until the third, fourth, and\nfifth bullets whizzed through his chest. He was vaguely aware of the small\nexplosions of blood that erupted as they pierced his skin, and he faltered.\nHis mind willed his legs to continue their motion, their support of his body,\nbut they refused.</p>\n<p>He fell on the floor in front of the detectives, sliding forward as far as\nthe force of his momentum would carry him, and ended in a heap of crumpled\nhumanity at the feet of the detectives.</p>\n<p>His chest heaved, and he willed himself to rise up, to destroy these\nbastards, but his body refused, and he exhaled once in final defeat before his\nbody ceased to move at all.</p>",
      "date_published": "2004-11-29T08:38:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/turducken/",
      "url": "https://tylerbutler.com/turducken/",
      "title": "Turducken!",
      "content_html": "<p>I really should be writing my novel right now, since it is due in six days and\nI still have quite a bit to write, but this is just too cool. I heard about it\non the radio yesterday, and I wish I’d heard about it sooner, because I would\nhave ordered a turducken for Thanksgiving, instead of buying a bunch of fried\nchicken from Popeye’s, which is what I am probably going to do. What is a\nturducken, you ask? Only the <strong>coolest</strong> thing ever known to man: It’s a\nboneless chicken stuffed in a bonless duck, stuffed in a boneless turkey. The\nwhole thing is stuffed with Cajun sausage, I believe. I should have known\nsomething this awesome would come from the Cajun culture. Anyway, you can\nactually purchase them online at <a href=\"/link-not-available?url=http%3A%2F%2Fwww.cajungrocer.com%2Fproduct_info.php%3FcPath%3D15_24%26products_id%3D340\">CajunGrocer.com</a>, which I plan to do as\nsoon as the holiday is over. I’ll let you know how it goes. My mouth is\nwatering already…</p>",
      "date_published": "2004-11-25T00:32:00.000Z",
      "tags": [
        "thanksgiving"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-23rd/",
      "url": "https://tylerbutler.com/november-23rd/",
      "title": "November 23rd",
      "content_html": "<p><strong>Chapter 21: The Mark</strong></p>\n<p>Ames and Cobb were excited. Joel had been able to give them a description,\nalbeit a rather poor one, but he’d also been able to give them a rough sketch\nof the tattoo the man had on his hand, and <em>that</em> was something that they\ncould look into.</p>\n<p>They ignored the dagger-like stares of Joel’s parents as they stood up\nquickly, their movements taking on an almost frenzied speed, and rushed out of\nthe room, murmuring thanks to Joel as they went. Joel was just glad to be rid\nof them. The pain had returned, and he was overcome with weakness again. Sleep\novercame him as Karen wordlessly maneuvered the notebook from his hands and\nwalked briskly out of the room, trying to catch up to Ames and Cobb.</p>\n<p>Ames had a feeling that he had seen the mark before, but he couldn’t\nremember where. Maybe if he looked at it again… Wait, where was the sketch?</p>\n<p>“Damn it, Cobb, we forgot the sketch.” They both turned and nearly bowled\nover a panting Karen, who thrust the note book at them. Cobb and Ames smiled.\n“Thanks Karen. See you back at the station.”</p>\n<p>They turned and continued out of the hospital and on to their car. Ames took\nthe passenger seat and examined the sketch more closely as Cobb started the\nengine and headed out of the parking lot, turning towards the station.</p>\n<p>“Recognize something, Ames ? ” Cobb asked, amused at his partner’s look of\ncomplete perplexity as he peered at the sketch.</p>\n<p>Ames sighed and reluctantly moved his eyes away from the sketch. “I dunno.\nIt looks so familiar.” He shook his head. “But I can’t put my finger on it\nright now.” He rubbed his eyes and leaned his head back against the headrest.</p>\n<p>“What a day. I’ll be glad when we can get some rest. What time is it,\nanyway?”</p>\n<p>Cobb glanced at the green clock in the dash. “‘Bout 4:30,” he said. “No rest\n‘til we get this thing straightened out though — I’ve got a feeling we’re on\nto something. We need to finish this out as soon as we can. This is a make-it-\nor-break-it case for us, you know?”</p>\n<p>Ames gave a low snore as a response, and Cobb smiled. Might as well let him\nsleep for the few minutes it would take them to get to the station. It would\nhopefully clear his head enough to help him remember where he’d seen the\ntattoo before.</p>\n<p>The station was clearing out when they arrived. It was quitting time for\nmany of the administrative workers, and the parking lot was becoming deserted\nas they pulled in.</p>\n<p>Their first stop was Foster’s office. She was on the phone when they\nentered.</p>\n<p>“I understand that, Mrs. Mendocino. I will speak to them. Of course. If you\nhave any other concerns, please just give me a call. I know… you’ll be the\nfirst to know. And if your son happens to think of anything else, please let\nus know. OK, you have a nice day, and I am sorry about your son… Bye bye.”</p>\n<p>Foster exhaled slowly as she laid the handset down. “That was Joel\nMendocino’s mother. She was upset because you stormed in and disturbed her\nson.” She looked up at them pleadingly. “Was it really necessary to barge in\nthere like you did?”</p>\n<p>“We ran into a complete dead end, Lieu. We figgered the kid could probably\ngive us more information than he already had, and based on other things we\nwere able to find out, we think this case may be bigger than just a simple\nmugging.”</p>\n<p>“Really? What have you found?”</p>\n<p>Both Cobb and Ames pulled out their notebooks, scanning the cluttered pages\nfor reminders of the day’s conversations. “Well, we got confirmation that the\ndead victim <em>is</em> homeless. His name is Darryl; we weren’t able to get a last\nname. He’s in and out of St. Ives, a homeless shelter down around McAllister\nPark .”</p>\n<p>Ames continued, “We went and talked to a number of homeless people in the\narea, especially down on 59 th , and they all told us stories of some\n‘abductions,’ for lack of a better word, of homeless people these lat few\nweeks. Seems they all show up a day later, all beat up. Apparently it happened\nto Darryl, but no one we spoke to could tell us if it somehow related to his\ndeath.”</p>\n<p>Ames paused, and Cobb interjected again. “Both of us feel like the\nabductions and Darryl’s death are related, but we’re not sure how yet…”</p>\n<p>“But this,” Ames said, slamming the sketchbook down on Foster’s desk\nexcitedly. “May be the link between everything. Joel Mendocino was able to\nsketch this for us. He said that the man who’d shot him had that symbol\ntattooed on his hand.”</p>\n<p>Foster held the sketch up to the light, examining it more closely. She\nfrowned. “You said there have been a lot of abductions lately?”</p>\n<p>Ames nodded. “Is it possible that Darryl told someone a little too much\nabout his experience and they had to have him killed?”</p>\n<p>Cobb smiled. “That’s what we’re thinking.”</p>\n<p>“Well, check with Organized Crime,” Foster said, handing the sketch back to\nAmes . “See if the sketch rings any bells with them. If these abductions are\nrelated, then there’s probably a kingpin involved somewhere along the line. OC\nmight know something about it.”</p>\n<p>Ames and Cobb nodded before turning and exiting the office, walking to their\nown desks in the main office. The station was still populated, but the usual\nbustle of the day had calmed down substantially since everyone had gone home.</p>\n<p>Cobb picked up his phone and dialed the extension for the Organized Crime\ndivision as Ames headed back towards the records room. “Hi, this is Detective\nCobb from Homicide. We got a victim over here, homeless man, possibly related\nto a rash of abductions and assaults that’s been happening recently in the\nMcAllister Park area. One of the shooters had a mark on his hand. We’ve got a\nsketch, and we were wondering if you guys could take a look and see if you\nrecognize it. Sure. OK, I’ll do it right now.”</p>\n<p>He out down the receiver. “They want me to fax it over.” He walked over to\nthe fax machine and fed the paper quickly through. Ames returned carrying a\nstack of folders and sat down, poring through them.</p>\n<p>“These are reports from some of the other assaults that have been reported\nby hospitals recently. Most of them are from McAllister Park , which isn’t\nsurprising in and of itself, but here’s something interesting. There are other\nreports of assault-like wounds from some middle-aged businessmen from the same\nday or the day following the same report from a homeless man. Coincidence?”</p>\n<p>Cobb glanced over Ames ’ shoulder at the cluttered data in front of them.\n“So what are you thinking?”</p>\n<p>“I dunno. But it seems strange to me that a bunch of businessmen get beat\nup, and a bunch of homeless men get beat up, all at the same time, and nobody\nwants to press charges or talk about it. Hell, a lot of them made excuses\nlike, ‘I fell down the stairs,’ or some bullshit like that.”</p>\n<p>The phone rang, shattering their contemplation. Cobb picked up. “This is\nCobb. Uh-huh. Really? So soon, huh? Great. Yeah, fax it over. You say there’s\na unit over in the area right now? OK, yeah, I’ll do that. OK, thanks a lot.\nBye.”</p>\n<p>Ames looked up from his reading excitedly.</p>\n<p>“Well, we got a match,” Cobb said, walking over to the fax machine, where a\ncopy of a police report was spitting out. “The OC guys said there’s an\nwarehouse over on Delome that has been investigated by some blue and whites\nfor the past couple of weeks. A woman has been calling to complain about noise\ncoming from it for awhile, but by the time the blue and whites get out there,\nthere’s nothing to be seen.”</p>\n<p>“But how does this tie into the tattoo, and what does OC have to do with it?\nAnd furthermore, what’s a woman doing <em>living</em> down on Delome?”</p>\n<p>Cobb chuckled. The old industrial section of the city centered around Delome\nAvenue , and it was generally considered to be one of the worst places in the\ncity to live, but some residents refused to move.</p>\n<p>“Well, OC started looking into it because there was a major OC-related drug\nbust around the area, and they’re thinking the entire area is probably used by\ngangs and whatnot for all kinds of nefarious activities. So they had a few of\ntheir guys look into it, and he remembers seeing a symbol sort of like the\ntattoo on the shooter’s hand etched into a door on one of the warehouses. They\nsent a blue and white out there tonight to keep an eye on things, and see if\nthey could figure out what’s going on. What do you say we join ‘em.”</p>\n<p>“Worth a shot, I guess. Strange that a mark like that would be etched in a\ndoor, but whatever. Thank God for small miracles, I suppose. Let’s go.”</p>\n<p><strong>Chapter 22: Disappearance</strong></p>\n<p>The silence that had followed James’ story was finally broken by Holly’s\nexpression of thanks. She stood up slowly, reaching her hand towards the\ngrizzled storyteller.</p>\n<p>“Thank you, James, for telling us about this.”</p>\n<p>“Wal, I figgered somebody oughtta know. Somethin’s got to be done, I think.\nI mean, most folks don’t seem to care too much about us down here, but still,\nit just ain’t right for us to get kidnapped and beat up like we do. Anyway, I\nhope maybe you all can tell the right people…”</p>\n<p>Holly smiled as she released his hand. Ned nodded in acknowledgement and\nthanks as he and Holly turned around, looking for Ned and Ken. They weren’t\nsitting behind them where they had been initially. Where had they gone?</p>\n<p>Holly glanced around frantically and began to call Ernie’s name. Ned calmed\nher down. “Holly… maybe they’ve just gone to the van… let’s just go and\nlook.” He took her hand and led her towards the van. Holly wasn’t calm. The\nstress of the day was finally catching up to her. She needed a stiff drink –\n<em>very</em> stiff.</p>\n<p>And now Ernie had disappeared! Her emotional side had taken over, leaving\nrationality by the wayside, and Ned’s confidence was not as comforting as it\nordinarily was. She continued to look around as Ned dragged her towards the\nvan, and called Ernie’s name at increasing volume even after they had left the\nbounds of the bridge community.</p>\n<p>Ned, unlike Holly, still had a sense of rationality despite the straining\nand confusing events of the day. Perhaps it was the fact that he was an\nengineer, a professional, perhaps it was that he was male, but whatever the\nreason, he was dealing with the situation as calmly and coolly as could be\nexpected.</p>\n<p>Upon their arrival at the van, he peered around, looking for signs of Ernie\nand Ken both in and around the vehicle, but he found none. And Ken’s bike\nwasn’t in the back. His initial reason for going to the van was to see if the\nbike was still there, but upon inspection, he remembered that Ken had insisted\nthat he remove it when they had arrived. Holly was growing increasingly\nagitated, allowing the worry of her maternal instinct get the best of her.</p>\n<p>“Holly! Cal m down! I am going to go back and see if they went to the east\nside of the bridge. I’ll be back in a few minutes. You wait here in case they\ncome back. OK?”</p>\n<p>Holly nodded reluctantly in response. Ned made sure she was comfortable in\nthe passenger seat of the van, then turned and walked back towards the bridge.\nHe made his rounds, following roughly the same path that the quartet had made\nearlier in the day, but no one had seen Ernie or Ken for quite some time. Some\npeople reported seeing them ride off on the bike about 45 minutes ago, so\nNed’s suspicion that they had left of their own accord was satisfactorily\nanswered.</p>\n<p>He returned to the van and continued to try and calm Holly, reassuring her\nthat both Ernie and Ken were not stupid, that they knew this area of town\nwell, that they had most likely ridden home on their own; they were fine.</p>\n<p>Holly didn’t seem to believe him, but she reluctantly calmed down and agreed\nthat they should drive home. She could call St. Ives from home and make sure\nErnie was back. Ned was glad when he finally spun the wheel and maneuvered his\nway back onto the road. He wanted to get home and have a stiff drink himself.</p>\n<p>When he reached Holly’s small apartment, he debated whether or not to leave\nher alone. She had calmed down considerably during the trip, and assured him\nthat she’d be fine. If she felt she needed anything, she’d call him and let\nhim know. She exited the van and waved half-heartedly as she opened the door\nto her apartment building and entered.</p>\n<p>Ned felt like he needed to calm his nerves, and driving had always been a\ngood way to do that, so he decided to take the long route home. His mind\nwandered back to his homeland as he drove.</p>\n<p>One of the core reasons that he and Lavina had emigrated to America was to\nescape the violence that had plagued their country. Thankfully, neither Ned\nnor Lavina had ever experienced the violence firsthand, but they had heard\nterrible stories of roving “death gangs” that would travel around, raping,\nbeating and robbing anyone who got in their path. If they didn’t physically\nkill you, they’d do enough psychological damage that it was essen tially the\nsame.</p>\n<p>Ned shook his head. America was not the land of promise that he had hoped\nand dreamed it would be when he had contemplated the move from his European\nhome. America was no better than the rest of the world — it had the same\nvices, the same violence and depravity, the same distaste for the less\nfortunate. No, America was not the land he had been promised.</p>\n<p>He approached the small house that his family called home and parked the van\non the street on the next block. His six children poured out of the front door\nof the house, the older ones smiling in warm welcome, the youngest running up\nto him and attaching themselves steadfastly to his legs. It had been an entire\nday! How had they <em>ever</em> gotten along without him?</p>\n<p>He walked, children in tow, towards their home. Lavina stood in the doorway,\na strange expression of disapproval on her round face. Ned entered the house\nand hugged her close, ignoring the children’s burst of laughter as he swept\nher back and kissed her fiercely on the lips. What a wonderful family they had\ncreated — together!</p>\n<p>But it soon became apparent that Lavina was not in the mood to revel in the\nmarvelous nature of their family. She pushed him away and said, “Someone is on\nthe phone for you. Young and she sounds upset.”</p>\n<p>Ned sighed. Lavina had so many astonishing qualities, but she was jealous.\nShe thought that every young America n girl was on a personal mission to steal\nher husband away, and she fought fiercely for her man, though Ned knew <em>that</em>\nbattle had been won long, long ago.</p>\n<p>He walked into the small living room, sitting down heavily on the chair that\nwas his. The children did try, on many occasions, to claim it for themselves,\nbut it was well acknowledged among all members of the family that when Ned was\nhome, the chair was <em>his</em>, and no one else’s.</p>\n<p>He was looking forward to a few minutes of relaxation on the chair, then it\nwould be time to do something really fun — work on the Jetta and get it up and\nrunning again. He grinned just at the thought of getting under the hood and\nimmersing his hands in the greasy machinery.</p>\n<p>He picked up the receiver and held it to his ear. “Hello?”</p>\n<p>“Ned…” It was Holly, and she was crying. “I called St. Ives, and they said\nhe isn’t there! He hasn’t come home yet! Ned, something’s wrong, I know it. I\ncan’t explain it, but I <em>know</em> something isn’t right!”</p>\n<p>“OK, what do you want to do?” Ned was tired, but he knew he couldn’t just\nlet her sit in her apartment, by herself, and worry. No, he had an obligation,\nas both a friend and a man, to help her — to make sure she felt like she was\nhelping the situation — if there even was a “situation.”</p>\n<p>“Let’s go look for him. Maybe he’s hurt or something, you know, and if we\ncould just…”</p>\n<p>“Holly, he’s probably OK — the chances of something happening are just\nso…”</p>\n<p>“ <strong><em>Dammit</em></strong>, Ned! I <strong><em>know</em></strong> he’s not OK!” she screamed into the\nphone, forcing Ned to move the handset away from his hear in a self-preserving\nreflex.</p>\n<p>“OK, OK, we’ll go looking for him. I’ll be there in 20 minutes.”</p>\n<p>“Thanks Ned.”</p>\n<p>“OK. I’ll see you in a few minutes.”</p>\n<p>“OK, bye.”</p>\n<p>“Bye.”</p>\n<p>He set the handset gently back on it’s rest, and laid his head back on the\nchair, closing his eyes blissfully for a few seconds. Well, rest, relaxation,\nand the Jetta would have to wait.</p>\n<p>He stood up and called to Lavina. “I have to go out. Holly is worried about\none of the homeless guys she knows, and I’m going to go help her look for him.\nI should be back in a couple of hours or so.”</p>\n<p>Lavina met him in the hallway with yet another disapproving gaze. Out with a\nbeautiful young woman, no doubt. Well, <em>this</em> one wouldn’t steal her husband\naway, oh no. She’d make sure of <em>that</em>.</p>\n<p>Ned shook his head, knowing what she was thinking. “You needn’t worry,\ndarling. You’re the only woman for me.” He reached for her but she pulled\naway. Oh well, someday she’d get over it.</p>\n<p>“OK, well I will see you and the children when I get back. Children, be\ngood, obey your mother, and I’ll be back soon.” A chorus of acknowledgments\ncame from various corners of the house, and he turned, threw his jack over his\nshoulders, and stepped out into the darkness.</p>",
      "date_published": "2004-11-24T14:52:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-21st/",
      "url": "https://tylerbutler.com/november-21st/",
      "title": "November 21st",
      "content_html": "<p>**Chapter 20: Kidnapped **</p>\n<p>Mike’s surrounding’s slowly faded into view as he came to. He had been\nunconscious twice today! It was starting to wear on his mind physically, not\nto mention his self-confidence.</p>\n<p>He soon realized that he was tied, completely unable to move, to a chair in\nthe center of Angelo’s office. The pieces of the broken coffee table still lay\nin front of the loveseat, though the girl was now gone. He struggled against\nthe ropes that tied him down, but they were tight around his wrists and\nankles, and the metal chair to which he was tied seemed too tough to break. It\nwouldn’t matter much, anyway. There was no way he’d make it out of the\nwarehouse alive. He was more likely to rob a casino and run out of the front\ndoor unopposed than to get out of the warehouse with his skin intact.</p>\n<p>He was, to be honest, a little surprised to find himself still alive anyway.\nIt was very uncharacteristic of Angelo. But Angelo did have a bit of the James\nBond villain in him, and Mike assumed that a delightfully painful death or\nmaiming awaited him.</p>\n<p>Angelo entered from the side door, smiling at Mike’s present consciousness.\nHe was closely followed by Marty, the man whose blow from behind had created a\nlump on Mike’s head that still ached painfully.</p>\n<p>“Well, Mike, it certainly is good to see you awake. It’s just not\ngentlemanly to come and visit someone, then fall asleep while they’re trying\nto be hospitable.” Mike ignored him as he paced around the chair to which Mike\nwas tied, his hands held behind his back in their customary formation, a smile\nof supreme, gloating self-confidence written on his face.</p>\n<p>“You may be wondering, Mike, why you are still alive after such an egregious\nbreach of my rules, of the trust that you and I have built over these past\nmonths.” He paused, waiting for a response from Mike. There was none.</p>\n<p>“And well you should. Ordinarily I would have killed you immediately –\nwouldn’t have blinked, wouldn’t have given you a second thought.” He paused\nagain, ensuring Mike was listening.</p>\n<p>“But I like you, Mike. I do. So I thought I’d give you a chance. You’ve\nalways been one to stick to my rules in the past, Mike, which gave me reason\nto believe that something had happened to you. So, being the extremely\ngenerous individual that I am — I <em>am</em> a humanitarian at heart, Mike, you\nmust believe me — I did a little sleuthing and discovered some very\ninteresting things about you Mike.”</p>\n<p>Mike bristled. What the hell had Angelo dug up on him? And how had he done\nit so quickly? Surely he hadn’t been out <em>that</em> long…</p>\n<p>“Mike, I don’t know how to express to you my regret that Copeland saw fit to\nfire you today.” That son of a <em>bitch</em>! “But Mike, you have to understand the\ncompany’s position — you simply weren’t performing for them. You were a bad\nhorse to bet on, Mike. And you know something about betting on bad horses,\ndon’t you?” Angelo glanced at Mike, taking a perceptible pleasure in his\ndiscomfort at the enraging comments.</p>\n<p>“But it didn’t stop there, Mike, and I can honestly say that I fully\nunderstand your actions in light of the new developments on the Turner home\nfront. From what I hear, Mrs. Marie Turner has told the police all about her\nenraged husband who came home early and, in a fit of rage, brutally killed the\nman she called her ‘one, true love.’ Sad, really. You really need to learn to\ncontrol your anger, Mike. Didn’t I warn you about that last time we discussed\nthe races? Well, it doesn’t matter… it’s obvious you didn’t listen.” He\nraised his hands above his head in mock consternation.</p>\n<p>“Why do I even try? It’s so obvious that no one ever takes my advice to\nheart!” Mike struggled violently against the ropes, causing the chair, and\nhimself, to fall to the floor, crushing his immobile arm uncomfortably beneath\nhim as he lay on his side.</p>\n<p>Angelo knelt down, bringing his sweaty face within inches of Mike’s. His\nbreath reeked of acrid smoke and stale coffee; his eyes were still bloodshot\nand spacey from the drugs. The toothpick he chewed in his mouth was crushed to\nfine fibers from hours of nervous chewing. “The police are crawling the city\nlooking for you, Mike. It won’t be long before they find your wife’s SUV\noutside… and then, I’ll have no choice but to hand you over. After all, I am\na law-abiding citizen — I don’t want to be party to a <em>murder</em>!”</p>\n<p>He stood up, resuming his pacing. Mike remained on the floor, looking up at\nAngelo, whose body seemed oddly out of proportion from this strange angle. “I\nhave a little surprise for you, Mike. A solution to <em>all</em> your problems. You\nsee, I have the resources necessary to keep you from the pigs’ hands. I can\nkeep you safe. And all I ask in return is a little…” He held his index\nfinger and thumb slightly apart, illustrating just how little “a little” was.\n“…Cooperation. Just a little cooperation. And if this goes well, I may even\nbe willing to forgive you that sizeable debt that you owe me. Now wouldn’t\nthat be something?”</p>\n<p>Angelo’s mock-friendliness was beginning to annoy Mike, and the lack of\nblood flow to his right arm was becoming extremely uncomfortable. He struggled\nagain against the ropes, but he had even less mobility than when he had made\nhis previous attempt, and his movements only confirmed the futility of his\nsituation.</p>\n<p>“Oh, Mike, forgive me, please! What a terrible host I am!” Angelo motioned\nto Marty, who stood Mike’s chair back on it’s four legs. Mike winced as the\nblood rushed back into his right arm, sending burning needles through its\nentire length.</p>\n<p>“You must forgive me, Mike. Sometimes I just get so caught up in the moment\nthat I forget my guests completely. It’s never intentional, I promise you.”</p>\n<p>The phony act was really getting old. “You know what, Angelo, just cut the\nbullshit and get to the point.”</p>\n<p>Angelo frowned. He was having fun. But business was business. “Fine,” he\nsaid. “Mike, you’re in deep shit. The cops are after you because of your\nlittle ‘indiscretion’ back at your house. So really, you don’t have much\nchoice. You’re going to do what I tell you, or I turn you over to the cops.\nIt’s that simple. Understand?”</p>\n<p>Mike chose not to dignify the patronizing question with a response. Angelo\ncontinued anyway. “You really should see the pictures of the man you killed,\nMike. It’s brilliant, the brutality of it, the unbridled primal passion of it\nall. It’s damn near a work of art! And that’s what I need — an artist –\nsomeone with a sense of the truly brutal, the truly primal. Someone like you,\nMike.</p>\n<p>“The organization I work with organizes a weekly ‘fight,’ of sorts, and\nyou’re going to be the next prime attraction. You’re going to tap into that\nvicious side of yourself that you love to channel so much and beat some other\nguy to all hell. Or you’ll get beat to hell yourself. Either way, I win.”</p>\n<p>He got close in to Mike’s face again. “Remember what I used to tell you,\nMike. The house <em>always</em> wins.” He smiled eerily. “Tell you what, you think\nabout it, and let us know.”</p>\n<p>With that, a swift painless knock against his head brought on the blackness\nonce again.</p>\n<hr />\n<p>Ernie was walking alone along the nearly empty street, on his way back to\nSt. Ives. He hadn’t lasted long when James had started telling his story.\nThere were too many details, too many things to remember. Ernie liked his\nstories short and sweet, and happy too. That was the worst part about James’\nstory — it had a sad ending.</p>\n<p>He had grown bored and restless quickly, so he and Ken had left Ned and\nHolly and had continued around the area asking people about Darryl. But Ken\nhad grown restless too, worried that his parents would be expecting him soon.</p>\n<p>Ned and Holly were nowhere to be found, but fortunately, Ken had already\nclaimed his bike from the back of Ned’s van, anticipating needing to leave\nbefore the others. 59th Street was within biking distance of Ken’s home, so\nhe and Ernie set off towards the nice suburban neighborhood, Ernie riding on\nthe rear pegs again.</p>\n<p>The corner was empty as they passed by on Ken’s bike; the kids had all gone\nin for the evening. The sun was sinking low — night was almost upon them.</p>\n<p>Ken had offered to let Ernie stay in the garage again, so that Ernie\nwouldn’t need to make the dangerous journey back to St. Ives, but Ernie had\ngrown hungry again, and he longed for some of Rho nda’s soup and the warmth of\nhis soft, familiar bed. So despite Ken’s protests and his own judgment, he had\nset off alone back towards St. Ives.</p>\n<p>The light had steadily decreased as he had progressed on his trip, until the\nsun had dropped completely beyond the curvature of the earth, leaving nothing\nbut the occasionally visible stars and moon and the flickering streetlamps to\nlight the way.</p>\n<p>Ernie wasn’t particularly nervous. He had made the trip plenty of times\nbefore, and even in the darkness, but the stories that he and Ken had been\nhearing throughout the day of mysterious abductions caused him to be more wary\nthan normal.</p>\n<p>There was nothing to give him concern, though. The street was quiet, except\nfor the occasional rustle of a paper cup or newspaper blowing along the\nasphalt in the wind. Every so often, a car would round a corner and pass\nslowly by him, but for the most part, he had the entire quiet street to\nhimself.</p>\n<p>And so he walked on, not paying much attention to the car that passed by\nhim, moving more slowly than the others, and not noticing that it was the same\ncar that had passed him three ties now. It came to a stop at the curb a half\nblock in front of Ernie, and the back door opened. A nice looking man stepped\nout, dressed in a suit and tie, wearing a fedora on his head, and smiling\nbroadly at Ernie as he approached.</p>\n<p>“Ernie!” he exclaimed as he approached, arms wide in greeting. “I thought it\nwas you! I’m glad I stopped. No music today?”</p>\n<p>Ernie didn’t recognize the man. How did he know his name? He stiffened as\nthe man encompassed his body with his arms.</p>\n<p>“I haven’t seen you in awhile! Hey, are you heading to St. Ives? How about a\nride? It’s getting kind of chilly out here… I’m sure Rho nda would prefer it\nif you came in and got yourself something to eat. How about it?” He motioned\nto the still open back door of the car a few meters in front of them.</p>\n<p>Ernie nodded. This man may know him, but Ernie didn’t recognize his face,\nand Rho nda had warned him nev er to get into strange cars with people he\ndidn’t know. In fact, Rho nda had been clear that he shouldn’t even speak with\nthose he didn’t know, but he wasn’t really brea king that particular rule; the\nother man was doing all the talking.</p>\n<p>Ernie stepped around the man and continued on his way, but the man followed\nhim and kept talking. “Oh, come on, Ernie,” he said, wrapping one arm around\nhim as if they were pals. “I really have something I want to talk to you\nabout! I know you have a lot of problems… you know, money problems, and\nproblems remembering things, and stuff… I just want to help you out. Tell\nyou what, get in the back of the car, and I’ll feel you in on my plan… I can\nsolve all of your problems, I can get you out, Ernie, honest, but you need to\nget in the car.”</p>\n<p><em>If a man ever comes to you, sayin’ he’s got da answer, dat he can get you\nout, you just gots to do one thing, don’t listen to ‘im.</em> Darryl’s warning\ncame flooding back to him, and he felt a sudden chill of fear. He wrenched his\nbody away from the man’s arm and began to run down the street, but the man’s\ncar was already pulling up ahead of him.</p>\n<p>Two men stepped out and ran towards him. He attempted to turn and cross the\nstreet, but they were surprisingly quick, and headed him off in the middle of\nthe street. They wrapped their strong arms around his body, and forced a\nstrange-smelling rag in his face. He struggled briefly, and felt his Walkman\nslide from it’s customary position on his waistband and clatter on the floor.\nThe men dragged him towards the car, and pushed him roughly into the trunk as\nhe passed out.</p>",
      "date_published": "2004-11-22T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-20th/",
      "url": "https://tylerbutler.com/november-20th/",
      "title": "November 20th",
      "content_html": "<p>**Chapter 19: Story **</p>\n<p>Holly and Ned sat down along the slope beside the drain pipe, looking\nintently at the grizzled man who lounged on the pipe in front of them. He wore\na small, faded green kufi on his head, hiding his graying hair underneath it.\nHis face was crinkled with age, and his kind eyes glowed warmly out of the dim\nsurroundings. He held his hands in his lap, moving them expressively as he\nspoke softly. His dark, rich voice echoed below the bridge as he told his\ntale.</p>\n<p>“Well, like I was sayin’, me and Darryl was good friends. We tried to stick\ntogether, you know, have each other’s back. ‘Course it wasn’t always that way.\nFact is, when we first met, we didn’t much care for each other at all.</p>\n<p>“You see, we first met when I tried to work his part of State Ave. one day.\nI hadn’t been doing too well on my old strip, so I thought I’d move up further\nnorth and see if I could do any better.</p>\n<p>“The week before, I’d managed to come across some tools at a construction\nsite and had nabbed a squeegee there, so not only was I imposin’ on Darryl’s\nsection of the street, I was also doing the exact gig he was. Not to mention,\nI was just learnin’ the trade, you know, and I hadn’t really had a chance to\nhone my technique. So I wasn’t doin’ the best job of cleain’ the windows,\n‘specially compared to Darryl.</p>\n<p>“It was all right the first few days, since we didn’t run into each other. A\ncouple of guys had told me that Darryl normally squeegeed that section of the\nstreet, but to be honest, I didn’t care. I was just trying to eke by, know\nwhat I mean?</p>\n<p>“But eventually, Darryl and I ran into each other. He had been hearin’ stuff\nabout another guy down on his street ruinin’ his reputation and all, so when\nhe finally saw me, he wasn’t to pleased. But if you know Darryl, he wadn’t one\nto get real angry and up in your face about somethin’. So he stopped me later\nthat afternoon after most people had cleared the street ad I was headin’ home,\nand he simply asked me to move either further north or further south.</p>\n<p>“He explained that he’d been workin’ that partickler section of the street\nfor some time, and that he had reputation that he’d built, and it just\nwouldn’t work to have two guys tryin’ to squeegee the same section. He\nexplained that it made more sense for us to split up ‘cause we’d be able to\nhave more customers.</p>\n<p>“Wal, what he said made sense, but it wasn’t what I wanted to hear. And him\nbein’ so friendly about everything, I didn’t take him seriously. So I told him\nhe could shove it and I just kept on goin’, doin’ what I always did.</p>\n<p>“Next day, Darryl came up and said basically the same thing, askin’ me to\nmove on north or south again. And again, I told him the same thing. But he was\na persistent bastard, and every day he came up to me, polite as the last time,\nand explained the situation again.</p>\n<p>“Eventually, it got to the point where I was considerin’ movin’ on just so I\nwouldn’t have to listen to his lecture every day. I started tryin’ to avoid\nhim during the day, but he usually found me.</p>\n<p>“One day, I had had it partickly rough, and there he was, comin’ on to ask\nbe to move on, and I just lost it. I let him have it. We got into a bit of a\nscuffle, and Darryl, bein’ as mild-mannered and small as he was, didn’t put up\nmuch of a fight. Oh, don’t get me wrong, I didn’t hurt him real bad or\nnothin’, but I did pound on him a bit.</p>\n<p>“It made me feel a lot better, and I thought that he’d finally get the\npicture that I wasn’t plannin’ on goin’ anywhere, but the next day, he found\nme again and started talkin’ to me.</p>\n<p>“This time, though, he’d changed his tactics. He said that if I wasn’t\nmovin’ on, the least I could do was stop ruinin’ his reputation. So he offered\nto teach me how to do a better job with the squeegee. I could hardly believe\nmy ears. I mean, I’d just hit him up the day before — he still had a bruise on\nhis face from where I’d let him have it.</p>\n<p>“But as usual, it was a genuine offer, so I spent that day workin’ with him,\nlearnin’ his technique and listenin’ to him ramble on about his experiences\nand whatnot. Man, he liked to talk.” He paused, smiling and shaking his head.</p>\n<p>“I mean, Darryl’d talk and talk and talk — didn’t matter if no one was\nlistenin’. He just liked to talk. But anyway, that night he invited me back\nhere, to this bridge, with him, and we spent the rest of the night talkin’\n‘bout everything under the sun.</p>\n<p>“And that was really all it took. We started workin’ together every day, and\nhe taught me a lot. And he and I just became real good friends. I don’t really\nknow why. By all accounts, we really shoulda still hated each other. We were\nvery different people, but somehow we ended up makin’ it work.</p>\n<p>“Eventually he and I agreed to stop workin’ together. It really made the\nmost sense, since we could cover twice as much area in the same amount of\ntime. He finally got his way, I guess — I moved on up a lit further north and\nhe stayed working his area, but we would get together here at the end of the\nday, and share whatever we had. Sometimes he had a good day, sometimes I did,\nmost times neither of us did, but we shared everything and we ended up all\nright I guess.</p>\n<p>“As time went on, me and him didn’t talk as much as we had, and he started\nspending more time at the shelter, I guess. I never much cared for places like\nthat, though he told me St. Ives was diff’rent. Anyway, when we started\nhearin’ all the stories ‘bout people disappearin’, we decided we’d better\nstart stickin’ together again. It just made sense. So we started workin’\ntogether again, and we did all right.</p>\n<p>“But one night, Darryl decided he wanted to go to the shelter for a meal,\nand when I told him I really didn’t want to go, he just left without me. I\ndidn’t seem him until really late the next day. I figgered he’d just ended up\nstayin’ the night there or somethin’, but when he came back he was all beat\nup. He’d stopped by St. Ives ad I guess got cleaned up, but he looked\nterrible. He was limpin’, cuts and bruises all over his body — he was a wreck.</p>\n<p>“He wasn’t talkin’ much either, and I knew better than to press him to tell\nme what had happened. So we just kept on doin’ what we always did for the next\nfew days. I figgered he’d tell me when he was ready. And finally, about a week\nafter it had happened, he did.”</p>\n<p>James paused and leaned forward, lowering his voice substantially. “Now,\nthere were two cops snoopin’ around here earlier today, askin’ about him and\nshowin’ pictures and whatnot, but I didn’t tell ‘em anything.” Holly and Ned\nglanced at each other as James frowned. So Ames and Cobb <em>had</em> been by.</p>\n<p>“I don’t like cops — don’t trust ‘em. Anyway, you have to understand, I’m\ntakin’ a big risk tellin’ you this, just like Darryl took a risk by tellin’\nme, but people need to know. Maybe then somethin’ can be done.”</p>\n<p>He paused again, drawing Ned and Holly in closer before continuing at an\neven lower volume. “Darryl told me, that as he was walkin’ to St. Ives, that a\nman had pulled over on the street — he couldn’t remember exactly where — and\nstarted talkin’ to him. He had said he recognized Darryl from a time when he’d\ncleaned the windshield of his car, and he just wanted to compliment him on the\njob.</p>\n<p>“He gave Darryl a twenty dollar bill, and then asked him if he wanted to\nmake a lot more. He told Darryl that it was a really simple thing he needed\ndone, and that if Darryl was willing there could be a lot of money in it.</p>\n<p>“Darryl wasn’t one to believe in these get-rich-quick schemes, but he told\nme that the man seemed so sincere — so honest and friendly. So Darryl accepted\nthe offer and had accepted a ride in the man’s car. He didn’t know where they\nhad gone. He said they had driven for quite awhile.</p>\n<p>“They arrived at some warehouse or somethin’, and the man had led Darryl\ninto this huge empty room. Then, while Darryl waited, a whole bunch of men\nstarted coming in and standing around the inner walls of the room. Darryl said\nat least 30 to 40 men had come in, and they just stood around, not talkin’ to\nhim or anything, just stayin’ quiet with these serious expressions on their\nfaces, like they were anticipatin’ somethin’ exciting. Most of ‘em were\nwearin’ suits or sports jackets, Darryl had said, and they all seemed to be\nbusinessmen or somethin’ judgin’ from what they were wearin’.</p>\n<p>“Then the man who had picked Daryl up walked in and started talkin’. ‘Well\ngentlemen, tonight we have a man named Darryl. He works down on State Ave. ,\nwhere many of you work, and squeegees your windows for loose change… I think\na lot of you are familiar with him.’ A lot of the men standing around let out\na whoop, and the man smiled. ‘Well, I think you all know how this works, so\nwho’s first tonight?’ A bunch of men raised their hands, and the man pointed\nto one in the back of the room. ‘OK, looks like you’re our lucky guy tonight.\nMake us proud.’ The man who’d picked Darryl up stepped out with the other men,\nand the one he’d pointed out stepped into the center of the circle with\nDarryl. Darryl didn’t know what was happenin’.</p>\n<p>“The man took his shirt off and ran towards Darryl, and hit him square in\nthe face, knocking him to the ground. He waited for Darryl to get back up,\nthen hit him again. Darryl tried to get up and run away, or out of the room,\nbut the men in the circle would grab him and throw him back in.</p>\n<p>“I asked ‘im if he tried to fight back, and he said he did, but there were\ntoo many of ‘em. As soon as he got a good shot in, somebody else would step\ninto the circle and beat him even harder. By the end of the night, he said he\nwas just layin’ on the floor, blood leakin’ out of him, prayin’ that’d all be\nover soon. He passed out while they were still beatin’ on him.”</p>\n<p>Holly felt like she was going to be sick. She had experienced her share of\nviolence, but this beating that James spoke of sounded almost sports-like. Who\nwere all these men? Did they really get off on beating a defenseless homeless\nman nearly to death?</p>\n<p>James noticed his audience’s discomfort and broke off his more detailed\ndescription that Darryl had given him. His voice was still low and he looked\naround nervously, searching for anyone that might be listening in\nsurreptitiously. Satisfied that all was clear, he continued.</p>\n<p>“Anyway, Darryl came to after the man who’d picked him up splashed some\nwater on his face. They threw him back into the car and drove him back to the\nstreet where they’d picked him up. Before they dropped him off, the man said,\n‘Darryl, I hope you understand that if you tell anyone about this, and I mean\nanyone,’ — he was very clear on this point — ‘I’m gonna hunt you down and kill\nnot only <em>you</em>, but <em>every single person that you told</em>.’ Darryl believed\nhim. He said there was somethin’ in his eyes that told him he was serious.</p>\n<p>That’s why Darryl wouldn’t tell nobody — and that’s why I’ve been careful\nm’self. But there comes a time when this kinda things got to be exposed, and\nmaybe y’all can do it.”</p>\n<p>James sat back on the pipe and sighed heavily. He was pleased to finally\ntell someone Darryl’s story, but worried too — now these fine people, friends\nof Darryl’s, also had the burden of Darryl’s experience? There was little\ndoubt in James’ mind that the man responsible for Darryl’s abduction and\nbeating was also responsible for his death. Would he also now harm these\npeople, and James himself?</p>\n<p>Holly and Ned looked at each other. They also understood the magnitude of\nthe situation. It seemed their quest for answers had yielded some, but also\ncreated more questions.</p>",
      "date_published": "2004-11-21T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-18th/",
      "url": "https://tylerbutler.com/november-18th/",
      "title": "November 18th",
      "content_html": "<p>**Chapter 18: Memory **</p>\n<p>“Joel?” He opened his eyes slowly, allowing them to adjust to the bright\nlight that now shone into his room. His mother’s concerned eyes stared down at\nhim, his father smiled grimly from the corner.</p>\n<p>“It’s good to see you awake, son,” his father said, walking over and placing\na hand on his shoulder as his mother buried her teary face in his chest.</p>\n<p>“Mom, I’m OK…” he protested. Why did she always have to worry so much?</p>\n<p>“I know, that’s why I’m crying.” He rolled his eyes. His mother slowly tore\nherself away from him, content eventually to hold his hand.</p>\n<p>“When we didn’t hear from you, we started to worry,” his dad began. “But we\nfigured you were tired and forgot to call or something. Then the police\ncalled, and we tried to get down here as fast as we could, but you were in\nsurgery, and even after that the police wouldn’t let us get in here until\nthey’d had a chance to talk to you. What did they want to know, anyway?”</p>\n<p>“Just what happened, that’s all,” Joel answered, staring up at the white\nceiling.</p>\n<p>“Well, we’re just glad that you’re all right,” his mom interjected.</p>\n<p>“I am, mom, I am.” He patted her hand in reassurance.</p>\n<p>“Well, how was the return trip? We read all your letters. Sounds like you\nhad a great time.”</p>\n<p>“Yeah, the trip back was pretty uneventful. It was sort of sad, really. I\nmean, I was excited to be coming back here, you know, but I sort of felt like\nI was leaving home, too. It was very strange.”</p>\n<p>“Well, son you were there for almost 6 months. I suppose that place is a\npart of you now.”</p>\n<p>Joel smiled at his father’s phrasing. It was a little melodramatic, to be\nsure, but he did like the sound of it, and in truth, it wasn’t that far off\nthe mark. The culture he’d experienced there, the people, the way the people\nthere had approached life — it was all a part of him. It was something that\nhe’d nev er forget, something that would shape all of his decisions and\nthoughts from now on.</p>\n<p>“Well, I guess if you’ve read my letters, then there’s not a whole lot left\nto tell…”</p>\n<p>“Oh, nonsense! We have plenty of questions! Do you feel up to talking?”</p>\n<p>Joel smiled. If there was one thing he felt like doing, it was talking. It\nwas nice to revel in their interest for awhile, to explain the experiences\nwhich had changed him so much, and the pain was bearable now, so he should\nmake the best of the opportunity.</p>\n<p>His father pulled up a chair and sat, and Joel told them about his trip from\nstart to finish, making embellishments here and there for dramatic effect.\nThey were a captive audience — neither of them had nev er traveled outside the\nstate, let alone the country — and Joel did his best to explain the paramount\ndifferences in culture and world-view that he had experienced on his trip, and\nwhat he had felt he learned.</p>\n<p>None of the trio noticed when Ames and Cobb entered the room.</p>\n<p>“So Sean pauses, for effect, you know, then says, ‘A date with Natalie Port\nman.’ That’s all he wanted!” His parents broke out in appreciative chuckles.\n“So after we all got done laughing…”</p>\n<p>“Excuse me Mr. Mendocino,” Ames broke in, clearing his throat to get their\nattention. Joel looked up at him. What did they want?</p>\n<p>“Hi detective. What can I do for you?”</p>\n<p>The two detectives strode in, dragging chairs from the small table in the\ncorner and sat down around his bed. They had been traveling around for most of\nthe day, talking to every homeless man they could find in an effort to figure\nout who was responsible for Darryl’s murder.</p>\n<p>What they had been told baffled them. The homeless men had told them all the\nsame story — some mysterious disappearances had occurred, people would wind up\nbeaten up, but wouldn’t say anything more about it. No one they’d spoken to\nknew Darryl personally, so they said, but both Ames and Cobb had gotten the\nfeeling that some of them were holding back, especially a grizzled man down on\n59 th .</p>\n<p>They had checked some records back at the station and at local hospitals,\nand had found several unsolved crimes the past few mont hs, all involving\nhomeless people. Nearly 100% of the cases they had found involved men.</p>\n<p>None of the homeless had pressed charges, of course, and were tight-lipped\nabout what had happened, so the cases were closed and no one took a second\nlook. But Ames and Cobb agreed — there was a pattern there.</p>\n<p>It was still a long shot to tie Darryl into the whole scheme. By most\naccounts, he had been abducted, but none of the other abductees had been\nkilled, and it was still a distinct possibility that his death was just\nrandom. But in the end, Cobb and Ames agreed that their instincts needed to be\ntrusted, especially this early in the investigation, and their instincts said\nthat there was something behind all of this — something sinister, something\nthat needed to be stopped, and behind it all, there was a case that could make\ntheir careers.</p>\n<p>Bereft of clues, they decided to go back to the source, to the only witness\nto the crime, even though he hadn’t been able to tell them anything useful on\ntheir first visit. Perhaps he’d remember more now.</p>\n<p>“Well, Mr. Mendocino, we’re hoping you can give us some more information.\nYou see, we’ve been around talking to a lot of homeless people today, and\nthey’ve given us some leads, but we really need a description of your\nassailants.</p>\n<p>“Admittedly, this is a long shot, but we think the men who killed Darryl –\nthat was the name of the homeless man we found with you — and shot you are\npossibly connected to a lot other violent crime, especially among the\nhomeless. Obviously, if these guys have escalated to m ur der and have a\nhistory of violence, we’re probably going to see a lot more needless deaths if\nwe don’t find them soon.”</p>\n<p>Joel protested, “Well, I already told you what I know… I’m not sure what\nelse you want me to try and remember. I didn’t really get a good look at\nthem…” This wasn’t entirely true. In fact, Joel had gotten a solid look at\ntheir faces, but he hadn’t been paying attention. After all, they were\npointing a gun at him. He wasn’t making mental notes about their shoe size or\nthe number of freckles on their faces at that point.</p>\n<p>His mother joined in the protest. “Detectives, my son just got shot! Can’t\nyou give him a little time to recover before you come in here barraging him\nwith questions and making…”</p>\n<p>“Monica,” Joel’s father interrupted. “They’re just trying to find the men\nthat did this. Joel can say no if he wants to. It’s his decision.”</p>\n<p>Ames continued. “Well, what we’d like to do, Joel, if I may call you that,\nis just have you relax and concentrate on the experience as you think back on\nit. We’ve found that many times, if you just relax and focus on a single\nelement of your memory, you can recall things that you forgot or didn’t even\nfully realize before.”</p>\n<p>Joel nodded. He wasn’t terrible keen on trying to think back on the\nexperience of getting shot, but if it would help the detectives find the men\nand possibly save someone else, then it would be worth his discomfort.</p>\n<p>Ames motioned outside Joel’s door, where a young woman stood with a large\nsketch pad and an assortment of pencils in her arms.</p>\n<p>“Joel, this is Karen, one of the artists on our staff down at the station.\nShe’s just going to try and draw some sketches based on the descriptions that\nyou can give us. Don’t worry about her. Just close your eyes and ell us what\nyou can. We’ll do the rest.”</p>\n<p>Joel laid back against the pillow and shut his eyes as Karen moved yet\nanother chair into the cramped suite and sat down, pencil at the ready.</p>\n<p>He thought back to the delicious taste of the bagel on his tongue, the feel\nof the concrete and loose gravel as it crunched under his feet, and the\nfeeling of sudden isolation he felt upon discovering he was lost.</p>\n<p>He was standing in the empty alien alley again, turning round and round,\nlooking for signs of familiarity, but he found none.</p>\n<p>“I was in this alley that I’d nev er been in before — I didn’t know where I\nwas.”</p>\n<p>Bang! There it was — the shot! But was it a shot, or just a firecracker, or\na car misfiring?</p>\n<p>“I heard a loud shot, but I didn’t know what it was.”</p>\n<p>Then he was running, running, running towards the shot. Why was he running\ntowards it? Why not away? His actions made no sense. He tried to force his\nbody to turn, to stop, to at least slow, but he ran on.</p>\n<p>There were voices now… what had they said?</p>\n<p>“I heard them talking before I got there. One of them was yelling at the\nother for pulling the trigger and shooting the man, and he was saying he\ndidn’t do it on purpose.”</p>\n<p>He rounded the corner — there they were, looking down at the dumpster, where\nthe shot man was lying, his body obscured from Joel’s view by the dumpster.</p>\n<p>“OK, I see them now. They’re looking down at the man, but they don’t see me\nyet. The man with the gun is average height and build, dark brown hair,\nleather jacket, stubble on his face. The other man is a little shorter, say 5’\n5” or so, with blonde hair, clean shaven, and a light black windbreaker. Both\nof them are wearing jeans.”</p>\n<p>Ames glanced at Karen, then at Cobb. This description was so generic it’d be\nimpossible to get Karen to create a useful drawing from it. Yet another dead\nend…</p>\n<p>They turned and spotted him. He felt a strange, uncontrollable sense of\nfear. The gun was pointed directly at him. The man was saying something…</p>\n<p>“Joel,” Cobb broke in. “Can you see any distinguishing features on either of\nthe men? Something bout the way they walk, or a scar, or something?”</p>\n<p>“No, no, don’t shoot…” A sweat broke out on his brow and he shook his head\nfrom side to side on the pillow, eyes still clenched shut.</p>\n<p>“ Cal m down Joel, it’s all right,” Cobb continued. “Concentrate — is there\nanything that stands out in your mind?”</p>\n<p>Joel let out a gasp, then a low moan, then went limp on the bed. He was\nlying on the sidewalk, reeling in agony; his insides felt as though they’d\nbeen ripped apart. He looked up at the men as they t ur ned away, vaguely\naware of Cobb’s voice trickling down from the heavens.</p>\n<p>Then, a sudden point of clarity — there, on the shooter’s hand, a mark. As\nthey turned and ran, Joel willed himself to focus on that mark. Time slowed\ndown; he stepped frame by frame through the scene, and zoomed in on the mark,\nbringing it into better focus. Then, suddenly, it was gone, and he was falling\nendlessly again.</p>\n<hr />\n<p>He awoke a few minutes later, amidst confused chatter and argument from his\nparents, the detectives, and Heather, who had come in after hearing the\ncommotion.</p>\n<p>“Give me the paper,” Joel said. No response. “Give me the paper!” he said\nagain, finally getting the attention of the others in the room. There was a\nmoment of stunned silence, then Karen thrust her pad and pencil at him. She\nheld the pad for him while he awkwardly sketched the mark he had seen on the\npage as best he could.</p>\n<p>He finished it, and handed the pencil back to Karen. “That mark was tattooed\non the right hand of the shooter, between the thumb and forefinger. Now _that\n_ is all I can remember.” He sunk back into the bed — he wanted peace, quiet,\nand sleep.</p>\n<p>Cobb and Ames looked at the picture, than at each other. Now <em>this</em> was\nsomething they could work with.</p>",
      "date_published": "2004-11-19T15:03:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-17th/",
      "url": "https://tylerbutler.com/november-17th/",
      "title": "November 17th",
      "content_html": "<p><strong>Chapter 17: Journey</strong></p>\n<p>Ernie was stuffed. He and Ken pushed away from the table, entirely satisfied\nwith the hearty meal that Rhonda and the other St. Ives volunteers had\nprovided them. The dining hall, which had been silent during the meal as\ngroups of hungry homeless dug in to their meals, was now home to a healthy din\nof activity, as well-fed men and women chatted, discussed, and joked.</p>\n<p>Rhonda and her staff bustled around the hall, stopping occasionally to say\nhello to someone they hadn’t seen in a long time, or to welcome someone new\nand make sure they felt welcome to come and dine at St. Ives any time.</p>\n<p>This afternoon, Rhonda was particularly busy. The unseasonably warm weather\nhad brought visitors from all over. When the weather was warm, people tended\nto get out and walk further, so the dining hall was bursting at the seams with\nhungry mouths. She ran back and forth from the kitchen, stopping every once in\nawhile to greet some of the visitors personally and introduce herself\npersonally. She wore a big friendly smile on her face, and despite her\nbusiness, always gave each individual her full attention while she talked with\nthem.</p>\n<p>Ernie and Ken were seated a smaller table in the corner of the room right\nnext to the kitchen door, where they observed the other diners with passive\ninterest. Ernie didn’t recognize many of the people there today. They were\nprobably from the west side, and were only able to make it to St. Ives today\nbecause of the weather.</p>\n<p>He had overheard a couple of conversations, while he and Ken ate their soup\nquietly, about Darryl. It wasn’t uncommon to hear familiar names, especially\nafter someone got arrested, hurt, or killed, particularly amongst residents or\nfrequent visitors to St. Ives.</p>\n<p>He hadn’t gotten any more information about exactly what had happened to\nDarryl, but there had been quite a bit of talk about the mysterious\ndisappearances of people the past few weeks, and their reappearance with fresh\ncuts and bruises. The general consensus among those Ernie overheard was that\nDarryl had gotten “abducted” as well, except this time, he’d wound up dead.</p>\n<p>Ernie and Ken relaxed at their table once the meal was complete, waiting for\nthe dining room to clear out somewhat. It was just as well; their bellies were\nso overstuffed with Rhonda’s hearty soup that they could barely move.</p>\n<p>It didn’t take long for the crowd to leave the dining hall after lunch was\ncomplete. It was a warm day, after all; a day that would best be spent working\ntheir corner or block, making the most of the warmth. It was __ a day to\nbe spent inside, warming oneself in the heated interior of the shelter.</p>\n<p>Ken, who’d been keeping a watchful eye on the clock that peered down across\nthe dining hall, motioned to Ernie that they should get going. They had a few\nminutes to walk back to Dominick’s and meet Holly there. Neither Ken nor Ernie\nreally knew what to expect from their journey to 59 th Street , but Holly\nseemed to think that someone there would know something, and it made sense to\nfollow her lead. Ernie’s presence with them would increase their credibility\nanyhow, and they’d be more likely to get the information they were seeking.</p>\n<p>Ken’s zeal for the investigative arts had cooled somewhat. He had come to\nthe conclusion, after they were unable to gain access to the hospital, that\nthe life of a true investigator was nothing like that in his books, and that\nhe’d be better off finding another occupation. He had, however, dragged Ernie\nalong on this whole escapade, and felt somewhat responsible to see it through\nto its conclusion. Besides, if they did by some miracle manage to find out\nwhat happened to Darryl… well, <em>that</em> would be cool. His friends on the\ncorner would <em>definitely</em> give him mad props for that.</p>\n<p>They stood up from the table and waved at Rhonda in the kitchen, then headed\nout of St. Ives towards Dominick’s.</p>\n<hr />\n<p>The hours between Ernie and Ken’s initial visit and three seemed to stretch\non forever as Holly and Ned rang up customer after customer. Ned was moving a\nlittle more slowly than usual; his mind was on other things. He worried about\nHolly. She had put on a brave face when they had come back into the store, but\ninside he knew she wasn’t doing so well. He had seen her talking at length\nwith Darryl after work in the parking lot; they had talked about life, love,\nthe pursuit of happiness, and everything else under the sun.</p>\n<p>It continued to amaze him how easily Holly spoke to everyone, especially the\nhomeless. Her natural listening ear combined with Darryl’s love to speak had\nnaturally drawn them to each other. Ned had not been privy to many of their\nconversations, but he knew that to Holly, Darryl was a special friend — she\nwould miss him.</p>\n<p>He looked at his watch for what seemed like the millionth time. Only a few\nminutes had passed, but three o’clock was almost upon them. He flipped the\nlight on his register, signaling that he was now closed.</p>\n<p>“Don’t worry,” he said to the confused customers still in his line. “I’ll\nfinish up with whoever’s in my line right now, I’m just not going to be taking\nany new customers.” He smiled reassuringly back at them, and finished checking\nout the final customer in record time.</p>\n<p>Holly was already headed back towards he back of the store to punch out, so\nhe quickly double-checked his register and followed her blonde head back to\nthe time-card system.</p>\n<p>They remained silent as they walked together to the front of the store and\npushed through the revolving door into the glaring mid-afternoon sun. Ernie\nand Ken were just walking into the parking lot, and the four of them\nrendezvoused in the middle of the nearly deserted lot.</p>\n<p>Ernie still wasn’t his usual active self, Holly noticed, but the lunch had\ndone him good; at least he didn’t look so peaked — just sad. His headphone’s\nstill hung around his neck uselessly, which was unusual and ind icated that\nperhaps he had been taking this harder than she had initially thought. Well,\nhopefully the guys at 59 th street would be able to shed some light on the\nwhole situation and give them all a little bit of closure.</p>\n<p>Ned was glad that he’d driven the van today. Normal ly he drove an old,\nbarely running Volkswagen Jetta, but it had not been cooperating this morning,\nso Lavina had offered to take the bus to her job across town, so Ned could\ntake the van. The van would easily accommodate all four of the travelers; the\nJetta would have been quit a squeeze.</p>\n<p>Everyone piled in, Ned driving, Holly in the passenger seat, and Ken and\nErnie in the back, staring silently out the window as they pulled out of the\nparking lot. The trip to 59 th was not far, and traffic was light at this\npoint in the afternoon, so they arrived at the underpass within a few minutes.</p>\n<p>Ned pulled over to the right and turned on his emergency fla shers. There\nwas nowhere to park in this area, but he hoped they wouldn’t be staying long;\nthough Holly knew several of the people here, and Ernie was no doubt a\nfamiliar face to most, he still felt uncomfortable. He didn’t readily admit\nit, especially to Holly, but the grubby faces with their piercing eyes and\nwary stares, the dirty, worn corduroys, jeans, and jackets, and the makeshift\ndwellings made of cardboard and newspaper — all of it made him very\nuncomfortable.</p>\n<p>He stuck close to Holly as she moved confidently through the individual\ndwellings under the bridge, Ernie and Ken trailing a short distance behind.\nShe stopped several times to speak with people she recognized, but moved on\nafter determining that the person knew nothing about Darryl.</p>\n<p>They milled about for around 20 minutes, Holly growing more and more\nimpatient as they walked. No one knew anything — or if they did, they weren’t\ntelling her. As they passed by the dark recesses of a drain pipe along the\nlower end of the slope, a low, rich voice called out softly.</p>\n<p>“Hey.” Holly turned, peering in the direction from which the voice had come.\nShe saw nothing. “Down here, in the pipe.” Looking down she saw the\nsilhouetted outline of a man lying inside the large pipe, a thin blanket\nwrapped around him.</p>\n<p>“As long as the water ain’t runnin’, there’s not a better bed for miles,” he\nsaid, referring to the pipe in which he laid. “I hear you guys are lookin’ for\nDarryl.”</p>\n<p>Holly stepped closer to the man, who pulled himself out of the pipe and\nstood to greet them.</p>\n<p>“Well, not exactly… Darryl’s dead…” Holly said softly, looking down at\nher feet as she spoke.</p>\n<p>“Oh, I know,” the man responded. “My name’s James. We’se quite a pair, me\nand him. Used to share everything we made, everything we had. We were good\nfriends. So if there’s somethin’ you want to know about him, I’m your man.” He\nthrust his hand out at Holly, who took it and shook it firmly. Ned followed\nsuit.</p>\n<p>“Well, it ain’t much,” James said, motioning at the concrete slope alongside\nthe drain pipe. “But have a seat… let’s talk about Darryl.”</p>",
      "date_published": "2004-11-18T15:45:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-16th/",
      "url": "https://tylerbutler.com/november-16th/",
      "title": "November 16th",
      "content_html": "<p>The scene faded out, movie like, and Joel was once again in the hospital.\nHis body ached, but at least the sharp pain had dulled. <em>It must have been a\ndream</em>, he thought. A dream based on the memory of that tremendous night the\nthree of them had shared. The following day he had said goodbye to both Pang\nand Sean, and had continued on his trip alone. He had taken Sean’s thoughts to\nheart, and had made a concerted effort throughout the rest of his trip to just\nsit back and take it all in; to fully absorb the experience and make it his.\nHis only regret had been that Sean hadn’t made the comment earlier.</p>\n<p>But now, laying in the hospital bed, staring up at the ceiling, he wondered\nif Sean had been right. He didn’t feel like he had a lot of time. He had been\n<em>shot</em>! He felt robbed. This was supposed to be his triumphant return. He had\nlearned so much, and now he was to apply it to his life, to make sense of\neverything, and to make things <em>better</em>. But instead some idiot had shot him,\nfor no apparent reason, and he was laying in a hospital, probably barely\nclinging to his life.</p>\n<p>It seemed ludicrous. Fate had such a twisted sense of humor. He had gone so\nfar, learned so much, only to be idle again, his brain left to stew and figure\nout ways to defeat itself.</p>\n<p>Heather appeared in the doorway again, looking as angelic as she had before.\nAt least it wasn’t <em>all</em> bad around here.</p>\n<p>“Hi again, Joel. Feeling all right?” she asked softly, sitting down in the\nchair next to his bed. He looked over at her and smiled weakly.</p>\n<p>“I’m OK.”</p>\n<p>She smiled back. “Well, there are a couple of detectives here that would\nlike to talk to you if you’re feeling up to it. They’re trying to figure out\nwhat happened.”</p>\n<p>Joel nodded. “OK.”</p>\n<p>Heather stood up and signaled to the two men waiting outside, then moved to\nthe back of the room as they entered.</p>\n<p>“Good afternoon, Mr. Mendocino, I’m Detective Cobb, and this is my partner,\nDetective Ames. We know you need to rest, but it would really help us out if\nyou could tell us what happened.”</p>\n<p>Joel closed his eyes and thought back to the plane, to the train ride, to\nthe bagel, and to the altercation in the alley — all of the events that had\nhappened since his return. His thoughts were muddy, everything seemed to run\ntogether.</p>\n<p>“I was walking to my apartment…” he began. “I had gotten off the train,\nand had stopped by Dominick’s to get something to eat.”</p>\n<p>Ames interrupted, “We found you a few blocks east of your apartment? How did\nyou wind up there?”</p>\n<p>Joel furrowed his brow, trying to remember exactly what had happened. “I\ndon’t know,” he responded. “I wasn’t really paying attention. I was pretty\ntired and wasn’t concentrating. I remember hearing a loud bang and running\ntowards it… there were two men there, and one of them had a gun. I pleaded\nwith them, but they were crazy. The guy with the gun just shot me for no\nreason, then they ran off.”</p>\n<p>“I didn’t see the other guy on the ground until after I got shot. I picked\nhim up and tried to walk to the street, but I don’t know how far I made it.\nThat’s all I remember.” He laid back against the pillow. The pain was growing\nagain.</p>\n<p>“Did you know the other man?” Cobb asked, taking notes on a small notepad.</p>\n<p>“No. Is he OK?”</p>\n<p>“Unfortunately, he was dead when we found you. From what the doctor tells\nme, you barely made it yourself.”</p>\n<p>Joel groaned. The pain was becoming unbearable again. “I think that’s enough\nfor now, Detectives,” Heather spoke up as she moved towards Joel’s bedside\nagain.</p>\n<p>Cobb nodded. “OK, Mr. Mendocino. Thanks a lot for your help. We’ll let you\nknow if we find anything.” The detectives turned and exited, and Joel\nfloundered, feeling for the plunger that would bring him relief. Heather\nplaced it back in his hand and he pressed it, feeling the relaxing drug flow\nwonderfully through him again.</p>\n<p><strong>Chapter 16: Angelo</strong></p>\n<p><em>Breakin’ the law, breakin’ the law…</em></p>\n<p><em>Breakin’ the law, breakin’ the law…</em> Mike sang along with the Judas\nPriest song blaring on the radio as he hurtled down the highway at high speed,\nweaving in and out of traffic, using the shoulder as his own private lane. He\nfelt __. In fact, he felt invincible! He was going to go to Angelo’s\nseedy “office,” explain the situation to him, and if he didn’t understand,\nthen tough shit.</p>\n<p>He was sick of taking it up the ass from everyone. Bill at work, Marie at\nhome, and Angelo… he was sick of it. It was going to stop today — <em>now</em>.</p>\n<p>He abruptly noticed his exit on the left and swung the wheel dramatically,\ncutting across the four lanes of traffic that separated him and the exit, and\nlaughed aloud as the cars behind him slammed on their brakes and their horns.\nHe was in control — everyone else still worried about their cars, their jobs,\ntheir <em>lives</em>, but he was free. He didn’t care about any of it anymore, and\n<em>that</em> made him powerful.</p>\n<p>He careened toward the old warehouse that Angelo called his office, just\neast of the highway, in a part of town that was about as far from ritzy as you\ncould get. Mike didn’t know exactly which arm of the underworld Angelo worked\nfor, but he knew he wasn’t all that powerful. If he had been, Mike would never\nhad seen him — he would be protected behind other, more expendable characters.</p>\n<p>Angelo was not to be underestimated, though. He had quite a temper, despite\nhis cold, calculating persona, and enough goons under his control that Mike\nknew it would be suicidal to approach Angelo violently. That wasn’t his goal,\nat least at this point.</p>\n<p>He parked the oversized SUV in the empty lot across from Angelo’s abandoned\nwarehouse, wondering as he stepped out of the vehicle just <em>how</em> Marie had\nmanaged to talk him into buying something so obviously out of place in a city.\nHe locked the door remotely, a happy beep-beep confirming the vehicle’s\nsupposed security as he stepped towards the warehouse entrance.</p>\n<p>He looked at the dilapidated brick and faded signs posted on the outside of\nthe warehouse. Angelo really didn’t keep his place in very good condition,\nconsidering his annual income — all tax-free, Mike noted. It really wasn’t a\nbad deal, if you could handle the constant worry of law enforcement and the\nthreat of prison. Not a bad deal at all.</p>\n<p>Mike pounded on the door with his fist, then stepped away, anticipating the\nburly guard who swung the door open and inquired in a gruff voice. “Whaddya\nwant?”</p>\n<p>“I’m here to see Angelo about a payment,” Mike replied, brushing past the\nguard as he spoke. The door closed behind him, and the small sliver of\nsunlight disappeared. Mike stopped, waiting for his eyes to adjust to the\ndimly lit interior of the warehouse.</p>\n<p>European techno-pop blasted from a deceptively small boom box in the corner,\nwhere a group of card players seated around a table ignored his entrance\ncompletely, engrossed in their own game of chance.</p>\n<p>On his left, a group of shady-looking characters stood next to a makeshift\nbar constructed of stacked crates and other miscellaneous junk; they regarded\nhim with little interest as he walked on down towards Angelo’s main place of\nbusiness in the back of the warehouse, maneuvering around crates of random\nitems as he went.</p>\n<p>The guard who’d granted him passage trailed behind him, monitoring his\ntravel and ensuring he didn’t deviate from his stated purpose of visiting\nAngelo.</p>\n<p>Upon reaching the door to what had been the warehouse’s small records\noffice, he knocked quickly three times and twisted the doorknob, not waiting\nfor the invitation to enter. There Angelo sat before him on the small love\nseat facing the door, three rather long lines of cocaine laid out on the low\ncoffee table in front of him. A thin waif sat next to him, rouge and blush\nsmeared clumsily on her once-attractive face.</p>\n<p>Angelo looked up from the table, and seeing Mike, broke into a smile.\n“Mike!” he stood, opening his arms in welcome. “You know, I was just thinking\nabout you. Here, here…” He motioned at the table in front of him. “Join me,\nthere’s plenty for everyone.”</p>\n<p>The girl bent down and inhaled one of the lines, whimpering softly upon its\ncompletion, then laid back in the love seat, bringing her hand to her nose as\nher pupils dilated and the stimulant began to take effect.</p>\n<p>“No thanks, Angelo.”</p>\n<p>“No? Well, more for me, I suppose.” He sat down and promptly inhaled both\nremaining lines, one in the left nostril and the other in the right, shaking\nhis head hard when he was done. He looked up at Mike again, his nose bright\nred and an unfocused look in his eyes.</p>\n<p>“Well, where is it?”</p>\n<p>“I don’t have it,” Mike stated calmly.</p>\n<p>Angelo raised his eyebrows. “You don’t have it?”</p>\n<p>Mike nodded. “I don’t have it.”</p>\n<p>Angelo stood again and approached Mike slowly. His five-foot-three frame was\ndwarfed next to Mike’s, but the maniacal gleam in his eyes indicated to Mike\nthat he meant business. Mike stood his ground.</p>\n<p>“Mike, your debt isn’t due until the end of the month, but you know the\nrules.”</p>\n<p>Mike did know the rules, but he knew that that wouldn’t stop Angelo from\nreminding him of them now. Angelo seemed to take special pleasure in reminding\npeople of the rules after they’d already been broken.</p>\n<p>“The only reason you come to visit me unannounced is to pay off a debt.\nAnything else, you call me and I <em>invite</em> you here or we deal with it over\nthe phone. You know how it works.” The girl on the couch looked up at them\nboth and giggled, giddy with the coke and tension in the room.</p>\n<p>“Shut up, bitch!” Angelo turned and yelled at her, causing the smile to melt\nright off her face. He turned back to Mike</p>\n<p>Mike nodded. “I know, Angelo, but I wanted to come and tell you in person\nthat I won’t be able to pay you back… ever.”</p>\n<p>Angelo raised his eyebrows even higher in disbelief. “Ever? Hmmm…”</p>\n<p>He turned, clasping his hands behind him as he paced slowly in the small\nroom. “Well, I certainly appreciate the gesture, Mike, but as you know, I\ndon’t run that kind of business. Around here, we have strict rules that we\nadhere to, and when someone breaks them, they’re punished. And whether you’ll\nhave the money by the time it is due or not is really irrelevant to these\nproceedings. You came to visit me uninvited, without payment, which is an\negregious breach of the contract you and I arranged at the time you bet on\nthat horse. What was it’s name?” He paused, trying to remember the name, then\nresumed his pacing when the name eluded him.</p>\n<p>Mike became aware of the guard from the entranceway behind him. “Well, it\ndoesn’t matter what it’s name was now, I suppose.”</p>\n<p>The guard reached towards Mike’s arm, but Mike was prepared. He’d been\nwaiting for this moment. He sidestepped, grabbing the guards own wrist as he\nreached for Mike’s, and thrust his body against the guards, forcing him off\nbalance and sent him tumbling towards the cocaine powdered coffee table.</p>\n<p>He smashed face first into it, sending shards of imitation wood throughout\nthe room. The girl screamed and picked her feet off the floor just in time to\navoid getting them smashed by the falling body. Angelo moved towards the\nfalling twosome, and Mike pushed himself off of the falling body and whirled\naround 180 degrees, grasping his hands together as he spun. His two united\nfists collided with Angelo’s cheek as he completed his spin, sending Angelo\nreeling.</p>\n<p>Mike didn’t skip a beat. He separated his hands and pounced on Angelo while\nhe was still off balance, pinning him against the wall and grabbing him around\nthe neck. He was in control, and it felt good. He searched Angelo’s face for\nsigns of fear, but there were none.</p>\n<p>“You motherfucker,” Angelo squeaked, pushing hard on Mike’s hands with his\nown, trying to release Mike’s strangle hold, but it was useless.</p>\n<p>“You don’t control me, Angelo!” Mike yelled, squeezing his hands tighter\naround the soft flesh of Angelo’s neck. His face was turning a satisfying\ncolor of red. “I’m going to fucking kill you, just like I killed that other\nfucking prick.”</p>\n<p>The feeling of complete supremacy that he’d had while pounding away on\nMarie’s lover returned. He <em>was</em> invincible.</p>\n<p>He felt a sharp pain on the back of his neck and felt his muscles go\nsuddenly limp, then another strike to the back of his skull brought complete\nblackness.</p>\n<p>Angelo pushed his motionless body off of him, inhaling deeply to regain his\ncomposure. He leaned on Marty, who had come to his rescue from the interior of\nthe warehouse, catching his breath. He kicked Mike’s body as hard as he could.\n“Who’s in control now, bitch?”</p>",
      "date_published": "2004-11-17T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-15th/",
      "url": "https://tylerbutler.com/november-15th/",
      "title": "November 15th",
      "content_html": "<p><strong>Chapter 14: Watson</strong></p>\n<p>Ernie wasn’t his usual self. His thoughts had cleared a bit since he had\nfirst set his eyes on Darryl’s motionless body, but the image kept coming back\nto him at inopportune times, sending a shudder through his body each time.</p>\n<p>Ken was riding alongside him, occasionally breaking off to scout out ahead\nin a large circle, then riding back to resume a slower pace beside him. The\nboth of them were headed to Elston Memorial hospital to see the other guy\nwho’d been shot. Ken had said his name was Joel.</p>\n<p>Ernie wasn’t particularly interested in any of this, but Ken seemed excited\nabout trying to figure out what had happened, and Ernie felt it necessary to\ncome along, if only to keep Ken company. They had, in the past, kept each\nother out of trouble by posing as father and son, or uncle and nephew, or any\none of a number of fictitious relationships that proved advantageous in\ncertain situations. It had gotten them out of a few scrapes, and rewarded Ken\nwith a rather large collection of otherwise unattainable mens’ magazines.</p>\n<p>Ernie’s thoughts wandered back to what Darryl had said that day in the\ndining hall at St. Ives. He wasn’t much of an analytical thinker. He knew he\nhad been frightened at the tone of Darryl’s voice, and he’d made it a point to\nremember exactly what he’d said, even though his memory was especially\nterrible. But what could the meaning have been? It seemed obvious that\nDarryl’s comments and his death were somehow linked, but how, Ernie didn’t\nknow.</p>\n<p>Ken returned from one of his scouting trips and said hurriedly, “Come on,\nErnie, let’s <em>go</em>! We’re almost there.” He motioned to the large riding pegs\nmounted on his rear wheel. “Hop on… it’ll be faster.”</p>\n<p>Ernie grimaced as he stepped up onto the pegs and gripped Ken’s shoulders\nfor balance. He hated riding with Ken this way — he much preferred to walk.\nBut when Ken was in a hurry, there was no arguing with him, so Ernie held on\ntightly and together they zoomed down the shallow hill towards Elston\nMemorial.</p>\n<p>Ken was right; the bike was faster, and the looming multistoried building\nthat was Elston Memorial was soon upon them. The hospital wasn’t as busy as\nKen and Ernie had imagined. The parking lot was only half-full, and the\noccasional flashing lights and flurry of activity at the emergency room\nentrance as an ambulance drove up was the only sign of life in the entire\nhospital grounds.</p>\n<p>Ken wheeled around the parking lot, weaving between parked cars, and Ernie\nheld on more tightly. He knew Ken was doing this for his benefit. He’d have to\nget him back later. He had to admit that the wind rushing through his hair\nfelt nice, though. If he could get the fear of falling off out of his head,\nriding with Ken might actually be <em>fun</em>.</p>\n<p>Ken pulled to a stop in front of the main entrance and pulled his chain lock\naround the front tire, locking it securely. Together he and Ernie walked into\nthe hospital.</p>\n<p>Ernie wasn’t exactly sure what Ken’s plan was, but hopefully it’d be\nsomething they’d done before. Ernie didn’t improvise well, but they had a\nlarge enough repertoire of practiced scams that improvisation was rarely\nnecessary.</p>\n<p>They approached the front desk and Ken peered over the counter at the nurse\nsitting there. “We’re here to see Joel Mendocino,” he said.</p>\n<p>The nurse looked over at them. “OK, friends or family?” She addressed the\nquestion to Ernie. Ken interjected, “My uncle’s deaf; you’ll have to have me\nask him questions in sign language. But we’re family. Joel’s my cousin. We\nheard something had happened to him, and that he’d been taken here.”</p>\n<p>Ernie was relieved; no quick thinking would be necessary today. The deaf\nuncle role was one with which he was very familiar. Neither he nor Ken really\nknew sign language, but they had perfected a series of motions that convinced\nmost people they were really communicating, and if faced with someone who\nactually did know ASL, they would simply say that Ernie had learned a little\nknown Eastern European signing style, and leave it at that. It was a simple\nscam, but worked amazingly well.</p>\n<p>The nurse turned back towards the computer in front of her. “Mendocino, you\nsay? Hmmm, he’s still in surgery. He should be out in the next hour or so, but\nhe’ll be unconscious for awhile after that. I’m afraid I can’t let you see\nhim.”</p>\n<p>Ken frowned. This wasn’t working out at all like the mystery novels he’d\nbeen reading. He’d have to think of something else. Ken motioned at Ernie with\nhis hands. Ernie responded, waving his hands in a strange wavy arc.</p>\n<p>“My uncle wants to know if anyone else in his family has been contacted, or\nif anyone else has come to see Joel.”</p>\n<p>The nurse examine her monitor again. “Well, it looks like the police have\ncontacted his parents. They should be here shortly.”</p>\n<p>Ken and Ernie exchanged hand motions again. “OK, thanks a lot miss. You have\na nice day.” The two of them turned and walked out of the hospital back into\nthe afternoon sun. Ernie suddenly realized he was getting hungry.</p>\n<p>Ken seemed to read his mind. “Let’s get something to eat, Ernie. You think\nRhonda would mind if I ate with you at St. Ives?” Ernie nodded. Unlike the van\nZandt’s, Rhonda’s kitchen was open to everyone. Ernie’s rumbling stomach got\nthe better of him and he hopped on the back of Ken’s bike. Ken knew a few\nshort cuts, which combined with the faster speed of the bike would put them\nback at St. Ive’s in pretty good time.</p>\n<hr />\n<p>As Ken dodged the large puddles of water behind the Dominick’s, one of his\nfavorite shortcuts, Ernie glanced over behind the store, and glimpsed the nice\ngirl from the store talking with two other strange looking men. He didn’t\nrecognize the other man that stood with them, but he was dressed the same way\nthe girl was, so he probably worked with her.</p>\n<p>He tapped on Ken’s shoulder, signaling him to stop. Ken put on the brakes\nand looked over his shoulder. “What is it?”</p>\n<p>Ernie motioned towards where the girl and her companions stood talking. The\ngirl had started to cry and the her apparent coworker was hugging her.</p>\n<p>Ken knew what Ernie was thinking. He turned the handlebars and wheeled\naround the sidewalk towards the back of the store, staying within the bounds\nof the alley in order to appear as though the two of them were just innocently\nriding by. After they cleared the back wall of the store, he stopped and they\nboth dismounted. He laid the bike down on the asphalt and together they poked\ntheirs heads around the wall, peering surreptitiously at the motley group\nbefore them.</p>\n<p>The two strange looking men turned and walked back towards the store,\nforcing both Ken and Ernie to quickly hide their heads back behind the wall to\navoid being seen. After a minute, Ken slowly stuck his head back around and\nlooked again. The coast was clear this time; the two men were gone, and the\ngirl stood with her head against her coworker’s chest, crying quietly.</p>\n<p>“Ernie, you know her, right?” Ken turned and looked back at Ernie, who was\nstill pressed against the wall, eyes closed. “Don’t worry, they’re gone. I\ndon’t think they saw us.”</p>\n<p>Ernie opened his eyes and relaxed slightly, then nodded in response to Ken’s\ninquiry.</p>\n<p>“Well, let’s go talk to her. I’m think she knew Darryl.” Ernie nodded again.\nHe was aware that the girl and Darryl knew each other; in fact, Darryl was\npartly responsible for introducing Ernie to her in the first place.</p>\n<p>Ken picked his bike up off the asphalt and together they rounded the corner\nand walked towards the girl and her companion.</p>\n<p>Holly noticed them approaching and smiled at Ernie amidst her tears. She\nbroke from Ned’s arms and walked over to meet them, a small smile on her face\ndespite the tears in her eyes. “Hi, Ernie,” she said, wrapping her arms around\nhim in a short embrace.</p>\n<p>“Hi…” Ernie replied softly, willing himself to remember her name.</p>\n<p>“Holly,” she smiled as she pulled away from him. She giggled softly, then a\nsad looked reappeared on her face.</p>\n<p>“Did you hear about Darryl?” she asked. Ernie nodded, sadness enveloping his\nface as well. Holly looked down at her feet. “Do you know what happened?”</p>\n<p>Ernie nodded again, memories of Darryl’s face in the ambulance swirling in\nhis mind once again. They stood in silence for awhile, looking at their feet,\nthoughts of Darryl pin balling between them.</p>\n<p>Holly looked up a few minutes later, dried tears on her face, the sign of\ndeep thought in her eyes. “Do you think maybe some of the guys down at the 59\nth Street bridge might know what happened to him?” Ernie looked up at her and\nlocked his gaze with her clear green eyes. He shrugged.</p>\n<p>They looked down at the asphalt again, until Holly turned to Ned, who had\nquietly approached from behind them. “What time do you get off work, Ned?”</p>\n<p>“Three o’clock today,” he said, glancing at his watch.</p>\n<p>“Me too,” Holly replied. “Fancy a trip down to 59 th Street ?”</p>\n<p>Ned shrugged. How could he refuse her now, with her tear-stained face and\nbright, expectant eyes?</p>\n<p>Holly turned back to face Ernie, who was gazing at his feet once again.\n“We’re going to go to 59 th street to talk to some of the guys there at 3\no’clock, if you want to come, Ernie.” She glanced at Ken to make sure he’d\nheard the time, knowing Ernie wouldn’t remember it. She looked back at Ned.\n“Well, I guess you and I had better get back to work.”</p>\n<p>Ernie looked up again and nodded in affirmation before turning slowly and\nwalking back towards the alley beside the store and the sanctuary of St. Ives.\nHolly called over his shoulder at him as Ken walked his bike up alongside him.</p>\n<p>“Ernie, I <em>am</em> sorry. I know Darryl was your friend too.” Holly turned and\nfollowed Ned back into the store. Ernie kept walking towards St. Ives, Ken\nalongside him.</p>\n<p><strong>Chapter 15: Awakening</strong></p>\n<p>Joel awoke in the hospital, only vaguely remembering how he’d gotten there.\nThe circumstances surrounding his arrival at the hospital were not at the\nforefront of his mind — the pain he was in was. His side ached terribly.\nLooking down at his torso, he saw the white gauze covering it. He groaned as\nhis movement shot white hot pain through his entire abdomen.</p>\n<p>He rubbed his head and moaned again. His movement seemed to have set off a\nchain reaction of pain within his body that now radiated from his stomach\nthrough to the tips of his fingers. The door opened quietly and a strikingly\nattractive nurse glided in.</p>\n<p>She smiled compassionately down at him and reached down to cover him with\nhis blanket. He hadn’t even realized he was so cold, but her firm warm hands\non his body made its uncontrollable shaking that much more apparent.</p>\n<p>“Hi, Mr. Mendocino. My name is Heather. It’s good to see you awake. Try not\nto move too much. Your body needs some time to try and recover. I know you’re\nin a lot of pain. We’ve got you hooked up to a morphine drip, so just push on\nthis to administer yourself another dose.” She placed a small white cylinder\nin his hand and gently wrapped his fingers around it.</p>\n<p>“Joel…” he murmured.</p>\n<p>“Excuse me?” Heather replied.</p>\n<p>“Joel…” he swallowed. “ Cal l me Joel.”</p>\n<p>Heather smiled. He pushed the small button on the top of the white cylinder\nand felt a wonderful warmness spread throughout his body. He relaxed almost\nimmediately and lay back against the soft pillow. He sighed. Heather’s smiling\nface was the last thing he saw before he drifted off to sleep again, oblivious\nto the two men who stood outside his door, arguing with the doctor.</p>\n<hr />\n<p>“So what do you think, Joel?”</p>\n<p>Joel looked around to get his bearings. Where was he? He examined his\nsurroundings slowly, taking in the dark claustrophobic walls of the building\nhe was in, the light painting soft silhouettes against the tables and chairs,\nthe murmur of mouths loosened by too much alcohol. This was the bar that he,\nSean and Pang had gone to the night before Sean headed back to the States. He\nremembered now.</p>\n<p>Sean repeated the question, getting Joel’s attention. “Huh?”</p>\n<p>“Wow Joel, you can be so spacey sometimes!” Sean and Pang both laughed. Joel\nchuckled as well. “Come on, what’s the most important thing you want to do\nbefore you die?”</p>\n<p>Joel looked down at his nearly empty cup of beer, now warm. “I don’t know,”\nhe said. “There’s a lot of experiences I want to have, you know? I mean, the\nreason I came all the way over here was to try and figure things out, to find\nout who I am, to experience parts of the world I’ve only read about, you\nknow?” Sean and Pang grinned and nodded in understanding.</p>\n<p>“But I feel like I’ve wound up with more questions than answers. I feel even\nmore confused than I did when I came. This whole trip has made me realize that\nthere’s so many things in the world that I will nev er see, let alone\nunderstand, and how can I have an impact on anything, when the world is so\nbig, and I understand so little of it.” He became conscious that he was\nrambling.</p>\n<p>“I guess I just feel like it doesn’t matter what I do in the end, and that’s\ndisheartening for me, because I need to feel like what I do matters, that it\nhas an effect…” He looked down at his beer again and took the final swig of\nit.</p>\n<p>“Well, you know…” Pang began. Sean groaned, rolling his eyes and burying\nhis head in his hands. “ Cam us might say that life’s all about amassing\nexperience, and that it doesn’t really matter what you do, or what effect you\nhave, it only matter’s what experiences you…”</p>\n<p>“Oh come off it, Pang.” Sean interrupted good-naturedly. They all laughed.\nPang had a habit of bringing up literature or philosophy at somewhat random\npoints in a conversation, and Sean, not being the most scholarly person one\nwould ever meet, always ended up confused. None of them could deny the simple\nfacts though; they had all come to Asia by different means, but searching for\nthe same thing: answers to the big questions, or at least a compass to help\nthem find the right direction.</p>\n<p>Joel sighed, peering once again into his now empty glass of beer. “I used to\nthink I had the world figured out,” he murmured. “I used to think that life\nwas just a simple equation, and if I could figure out all the variables and\nall the constants, I could solve it and be happy. But it’s not that simple is\nit?” It was a rhetorical question, and there was a brief moment of silence\nbefore Sean interjected.</p>\n<p>“You two,” he said, shaking his head. “I ask a <em>simple</em> question about what\nyou guys want to do before you die, and <em>you</em> start talking about literary\nthemes, and <em>motifs</em>, and all that <em>crap</em>, and <em>you</em> go off on this sad sob\nstory about how you can’t figure life out. And to think I came all the way\naround the world just to run into two self-indulgent idiots like you guys.”</p>\n<p>Pang and Joel exchanged satisfied glances. They enjoyed making Sean squirm.</p>\n<p>“Since you guys can’t give a straight answer, I guess I’ll have to show you\nhow it’s done.” He sat up straight in his chair, pausing for dramatic effect\nbefore continuing. “I would be totally complete, if I could do only one thing\nbefore I die.” He paused again, milking the attention that Pang and Joel were\npaying him.</p>\n<p>“Just one date with Natalie Port man. That’s all.” He pushed back from the\ntable as Pang and Joel burst out in laughter.</p>\n<p>“What? I think it’s a noble pursuit! And trust me, with my charm and good\nlooks, she’ll be putty in my hands. _Putty! _” He nodded confidently.</p>\n<p>The other patrons of the bar shot confused glances over at Pang and Joel,\nwho were laughing raucously, pounding on the table in an effort to rid\nthemselves of the excess energy the mental image of Sean on a date with\nNatalie Portman had given them.</p>\n<p>Sean pulled his chair back into the table as their laughter died down and\nthe din of the bar returned to normal.</p>\n<p>“Are you serious?” Joel asked, eyes still teary from the laughter.</p>\n<p>“Hell, yeah! In all honesty, there’s not much else I want or need right now,\nreally.”</p>\n<p>“Yeah, I know, I feel the same way, but aren’t there things you want to see\nand experience while you can? I mean, you’re the one who asked the stupid\nquestion.”</p>\n<p>“Yes, there are plenty of things I want to see and experience, but I also\ntry my hardest not to take for granted what I do have, and what I have been\nable to experience. I seriously think you’re just pining away for things that\nyou haven’t had a chance to experience yet. I guess it’s a cliché, but you\nseriously seem to think the grass is greener on the other side, but you\nhaven’t even tasted the grass on your side, you know?”</p>\n<p>Joe started to interrupt, but Sean held up his hand.</p>\n<p>“Wait a second. Think about this. You’re sitting in a bar in Thailand , on a\ntrip to Asia you saved up for mont hs and mont hs to take, with two random\npeople you met during your travels, shootin’ the shit, and all you can talk\nabout is how you’re worried that you don’t have it all figured out. Look\noutside, man, and remember where you <em>are</em>. Friggin’ just enjoy it.”</p>\n<p>Joel looked out the open window, where the bustle of the nighttime street\nwas slowing down gently, and the stars peeked out behind a haze of clouds that\nhad earlier graced them with a gentle rain. The goofy oaf had a point. He\nsighed and let a smirk cross his face. Sean smiled.</p>\n<p>“You’ve got plenty of time to change the world, Joel, if that’s what you\nreally want to do. Plenty of time.”</p>",
      "date_published": "2004-11-16T15:24:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-13th-and-14th/",
      "url": "https://tylerbutler.com/november-13th-and-14th/",
      "title": "November 13th and 14th",
      "content_html": "<p>The lights downstairs were all off. The dishes from Mike’s breakfast earlier\nin the morning still sat in the sink; the soft sound of water drops echoed in\nthe silent twilight of the room.</p>\n<p>Mike glanced around expectantly, all five of his sense on maximum awareness,\nready to respond. Someone was in his house — he could feel it. Someone had the\naudacity to enter his home — <em>his home</em> — and do something — what he didn’t\nyet know — but whatever it was, he knew he wasn’t going to like it.</p>\n<p>He stepped quietly to the closet in the den and picked up his trusty\nbaseball bat. If someone wanted to get physical with him, he was going to have\nsomething other than his fists to protect him. He still had seen no sign of\nthe intruders, but he knew they were there somewhere, and he was going to\nintroduce them to Big Bertha.</p>\n<p>Now armed with the bat, he moved slowly towards the stairs up to the second\nfloor of the house. The creaking of the carpeted stairs hid the sounds\nfloating down from upstairs until he made it to the narrow hall at the top of\nthe stairs.</p>\n<p>Once there, the sound was clearly audible. He turned left towards it, bat\nheld at the ready, and crept towards the bedroom. The perspiration collected\nin large beads along his forehead, then ran down into his eyes. He didn’t dare\nremove his hands from the bat to wipe them, and instead ignored the burning\nsensation and slightly blurred vision the saline sweat produced.</p>\n<p>He reached the bedroom, the apparent source of the sound. The door was only\npartly open, and he sidled alongside the doorway, back pressed against the\nwall. He peered inside the crack of the door, but nothing was visible.</p>\n<p>The sounds were growing louder. Soft, hushed breathing and occasional low\nmoans had turned into groans and raspy, labored breaths, coming at a much\ngreater frequency than before. Mike took a deep breath, gripped the handle of\nthe bat till his knuckles turned white, turned and stormed into the bedroom,\nyelling at top of his lungs.</p>\n<p><strong>Chapter 12: Identification</strong></p>\n<p>“Wow, what a dump,” Cobb said as he stepped into the small one bedroom\napartment. “Not much of a decorator, is he?” The apartment was bare except for\na small unmade bed in the corner. The floor was bare cement, the normally\nwhite walls a light brown from months of city soot and grime.</p>\n<p>“Well, I guess you get what you pay for,” Ames commented as he moved deeper\ninto the interior of the apartment. “Doesn’t look like there’s a whole lot\nhere. The landlord did say the kid had been subletting the place, and that the\nother two tenants left about a month ago.”</p>\n<p>“Two people lived here?”</p>\n<p>“Well, not everyone has the benefits of a detective’s salary, Cobb,” Ames\nsmiled wryly. Cobb shook his head in response. “Hard to believe, that’s all.”</p>\n<p>He detectives glanced around again.</p>\n<p>“Yeah, I don’t think there’s anything here. Maybe the kid was just coming\nback today. He did have those tickets in his backpack.”</p>\n<p>“All right. What next?”</p>\n<p>Cobb sat down on the bed, looking around the room in thought. “They said the\nother guy was most likely homeless, right?” Ames nodded. “Not too unusual in\nthis part of town. I think there’s a shelter down on Sullivan. Maybe somebody\nthere knows the guy.”</p>\n<p>“You read my mind. Let’s go.” He slapped his hands on his thighs and stood\nup, following Ames out of the ground floor apartment and back to their car.\n“You drive,” he said, throwing Ames the keys.</p>\n<p>Ames was surprised. “Say what? You never let me drive? What’s the deal?”</p>\n<p>“I just want to look around a bit. You drive.”</p>\n<p>Ames didn’t argue. Cobb was reticent as he started up the engine and pulled\nslowly out of the apartment complex and back onto the main road, making his\nway towards Sullivan Street .</p>\n<p>Cobb looked out of the passenger side window at the groups of homeless men\nand women underneath the bridges as they passed. Their faces were dirty, hair\ngreasy, a broken, beaten look in their eyes.</p>\n<p>He thought back to the last summer he’d spent with his mother. He’d grown up\nin a neighborhood not unlike this one. He didn’t remember exactly how it had\nhappened, but one day, his mother had come home from work telling him to pack\nhis things into his small backpack, and they’d left the apartment that had\nbeen his home.</p>\n<p>They had walked forever that day, him with his backpack, his mother with a\nsmall blue suitcase. When evening fell, they had found shelter under a bridge\nwith others like themselves — others with nowhere else to go.</p>\n<p>Cobb hadn’t liked it there at first. The cement was a hard, cold bed, and\nthe others there had smelled funny, but his mother had held him close, told\nhim that everything was going to be OK, and eventually he was able to fall\nasleep.</p>\n<p>Every day they followed the same routine — they’d get up, repack their\nbelongings, and walk around the city streets, looking for whatever they could\nfind. At first, his mother went into a few places looking for jobs. Cobb would\nsit out in front of the store, patiently watching his backpack and the blue\nsuitcase, but every time his mother returned with a sad look on her face, and\nthey started walking again.</p>\n<p>Eventually, his mother stopped looking for jobs and started looking for\nfood. Cobb was always hungry, and so their lives became a constant search for\nsustenance. His mother would take his hand and they’d walk along the alleys,\nlooking in dumpsters for food or other things that might prove valuable in\ntrade to someone else.</p>\n<p>This had been his life for that summer. Towards the end, his mother had\nstarted leaving him under the bridge in the evening. She would return a few\nhours later, often with new bruises, but the next morning, his mother would\npull out a small wad of crumpled cash, and they would go out and have a big\nbreakfast, with orange juice, eggs, and pancakes, and sometimes, they’d go to\nthe carwash and wash themselves with the hose. Those had been his favorite\ndays.</p>\n<p>One day a policeman had stopped them on the street and had taken them to the\npolice station. He had sat on the bench with his mother fearfully clutching\nher hand, and had cried incessantly when she said she had to go and he would\nhave a new family and a new life.</p>\n<p>Social Services had placed him with a foster family, and he had gone back to\nschool. The foster family was nice enough, but all he had really wanted was\nhis mother. He hadn’t seen her since that day in the police station. He\nwondered now, as he peered out on the dirty faces, if perhaps one of them was\nher.</p>\n<p>Abruptly, the car turned onto Sullivan Street and Cobb was drawn back into\nreality.</p>\n<p>“There it is, at the corner, on the right,” said Ames quietly as they\napproached the St. Ives shelter. Cobb looked up at the large stone structure\nlooming in front of them. The white brick exterior was worn and caked with\ncity grime. The large orange neon cross above the entrance flickered “Jesus\nLoves You.” A few grubby, coated figures sat on the large stairs, sharing a\ncigarette between them.</p>\n<p>Ames pulled up next to the entrance and parked the car. “Ready?”</p>\n<p>“Yeah, let’s go.” Cobb pulled his jacket tighter around him as they exited\nthe car and walked towards the figures sitting on the stairs. They seemed to\nhave the right idea. He could really use a cigarette right now. He pulled one\nfrom his pocket and lit it as he and Ames took the stairs towards the\nentrance.</p>\n<p>“Better not smoke that inside,” one of the figures on the stairs said as\nthey passed by. Cobb stopped and turned. “Why not?”</p>\n<p>“Rhonda won’t like it. She doesn’t let us smoke inside. Why else you think\nwe’d be sittin’ out here? Shit, it’s <em>warm</em> in there.” The man gestured\ntowards St. Ives. The others sharing the cigarette laughed.</p>\n<p>Cobb handed the cigarette to the man. “Well, I guess you guys can have this\none on me.”</p>\n<p>“Thanks, officer,” the man responded, accepting Cobb’s offer.</p>\n<p>“Is it that obvious?” Cobb asked, putting his hands in his jacket pockets.</p>\n<p>“Only cops move the way you two do,” the man responded, inhaling Cobb’s\ncigarette slowly before passing it along to the next one in the small circle.</p>\n<p>Cobb smiled. “Must be our police training.” A few men chuckled as he turned\nand followed Ames into the large St. Ives vestibule.</p>\n<p>“Sounds like Rhonda’s the one we want to talk to,” said Cobb as they hung\ntheir coats on the rack in the corner. Ames murmured in agreement, and they\nwalked up the short staircase into the large dining hall. It was mostly empty,\nexcept for one of two men sitting at distant tables, eating.</p>\n<p>The only sounds seemed to be coming from a door at the far side of the room,\nso they walked in that direction, aware of the strong smell of food wafting\nmore strongly as they approached.</p>\n<p>“They say it’s warm in here?” Ames commented as they entered the doorway to\nthe kitchen. “Seems chilly to me.”</p>\n<p>“Wal, you try heatin’ a big old place like dis wit what money we got!\n‘Sides, it’s warmer than outside, and that’s warm enough for most folks here.”\nRhonda turned from the kitchen sink and wiped her hands on her apron.</p>\n<p>“Are you Rhonda?” Ames asked, stopping at the entrance to the kitchen.</p>\n<p>“Sho ‘nuff,” Rhonda replied. “And you must be cops. Only cops walk the way\nyou do. What can I do for you?”</p>\n<p>Cobb interrupted, “Hi Rhonda, I’m Detective Cobb and this is my partner,\nDetective Ames. I don’t know if you’ve heard yet, but there were a couple of\nmen found earlier this morning, and one of them is dead. He appeared to be\nhomeless, so we were wondering if he’d have maybe come in here. We’re just\ntrying to find out who he is and how he got shot.”</p>\n<p>“Shot? Well, dat’s a new one for one of my guys. Usually they do a pretty\ngood job of staying out o’ da way of guns. You got a picture?” Ames nodded,\nreaching into his jacket pocket for the Polaroid.</p>\n<p>“Ma’am, this is from the crime scene, so…”</p>\n<p>“Just let me see it. I’ve seen worse, I’m sure.” Rhonda walked over,\naccepted the picture, and inspected it with a frown on her face, shaking her\nhead.</p>\n<p>“Yeah, this is Darryl. I don’t know his last name.” She shook her head\nagain. “Poor guy. Guys around here call him da Squeegee Man, on ‘ccount o’ his\nalways cleaning car windows down on State Ave. Last time he came in, he was\npretty beat up, but he didn’t seem to wanna talk about it. We don’t pressure\n‘em ‘round here. He ate a bit, talked to Ernie once, but didn’t stay the\nnight. I hadn’t seem him since den.” She handed the picture back to Ames .</p>\n<p>“Do you know anything more about him? Any reason you can think of that he\nwould have been shot?” Rhonda shook her head.</p>\n<p>“No, Darryl was a nice guy, real friendly and he’d talk your ear off if you\nlet him. He was different last I saw him, though. Real quiet. Like I said, he\nwas beat up. I spect he got in front of that bullet by accident — he wasn’t\nthe kind to seek out trouble.”</p>\n<p>“OK. You mentioned he talked to Ernie last time he was here. Who’s Ernie?”</p>\n<p>Rhonda smiled. “He’s a reg’lar ‘round here. He’s not all right in the head,\nbut he’s a sweet boy. He didn’t have anything to do with this, I can tell you\ndat. He used to talk to Darryl a lot; went out with him to State Ave. once.”</p>\n<p>“Any idea where we can find him?”</p>\n<p>“Wal, he usually goes down and hangs out with some kids around 34 th and\nBroadway, but I doubt you’ll get much from him. Ernie can’t describe things\nvery well. His mind don’t work dat way. Tell you what, though, there’s a girl\nthat some of da guys talk about ‘round here. She works up at the Dominick’s\njust up the street. Da guys say she’s real nice. I know Darryl knew her; Ernie\ndoes too. She might know somethin’ more. Sometimes dey talk to other people\nbetter — they don’t tell me too much. Now, I’ve gotta get the rest of this\nfood made, we’ll be having a large crowd here for lunch in a bit. ‘Scuse me.”\nShe brushed pas Ames and Cobb and rummaged around the counter.</p>\n<p>“OK. Thanks a lot ma’am. If you hear anything just give us a call at the\nstation.” Rhonda nodded, and Cobb turned back and left the kitchen, Ames close\nbehind.</p>\n<p>“You want to head over to the Dominick’s?” Ames asked.</p>\n<p>“Might as well. Foster’s going to call us when the kid wakes up. Might as\nwell try to figure out why the homeless guy’s dead.”</p>\n<p>Cobb pulled out another cigarette as they exited St. Ives. The men on the\nstairs were gone.</p>\n<p>“Maybe the kid was bein’ held up or something, and this Darryl guy went to\nhelp him out. From what she said, he sounds like he might have done somethin’\nlike that,” Ames commented as he unlocked the doors. “Am I still driving?”</p>\n<p>“Yeah.”</p>\n<hr />\n<p>Ned felt uneasy as soon as Cobb and Ames entered the store. There was a\npurposefulness in their walk that said they were on the job, they were looking\nfor someone; this was not just friendly stop for donuts and coffee.</p>\n<p>Positioned at the register nearest to the entrance, he was their first stop.\nThey flashed a badge. “Police. Can you call the manager down for a second? We\nneed to speak with him.”</p>\n<p>Ned nodded and walked to the intercom mounted on the support beam behind the\nregister. “Bob, please come to register one, Bob, to register one.” Bob was\nthe nearest thing to a manager today. He wasn’t the big man himself, but he\nwas in charge for the time being.</p>\n<p>Ned returned to his position behind the register. “He’ll be right over.\nAnything I can do for you gentlemen?”</p>\n<p>Ames looked at Cobb for confirmation. “We’re looking for a girl that works\nhere, may be real friendly with the homeless guys that live around here.”</p>\n<p>They were talking about Holly, no doubt. “This girl in some kind of\ntrouble?” Ned asked.</p>\n<p>“Not at all. There was a homeless man that was murdered earlier this\nmorning, and we’re trying to identify him and figure out what happened. Rhonda\nfrom St. Ives said this girl might know him.”</p>\n<p>Ned was relieved. He had been concerned as soon as they had mentioned Holly.\nHe knew she’d had her run-ins with law enforcement before, but she was a good\nkid — he didn’t want anything bad to happen to her. It looked like the police\nofficers just needed information.</p>\n<p>“Yeah, she was probably talking about Holly. She works here. She knows a lot\nof the guys that live around here. I go out with her and talk to them every\nonce in awhile. Maybe I can help you out.”</p>\n<p>Ames had already taken the Polaroid out of his pocket and thrust it into\nNed’s hand. He peered into it. It was a grisly photograph — the man in it was\nobviously dead.</p>\n<p>“Yeah, Holly’s talked to him a couple of times. He’s stopped by when she\nbrings pizza or hot chocolate or something, but I don’t know if she knows\nanything more than what he does and where he works — on the street, I mean.\nNone of these guys have real jobs.” He handed the photo back to Ames .</p>\n<p>“Tell you what, I think Holly just took a break. She might be out back\nsmoking or something. I can take you out there if you’d like.” He wanted to be\nthere when they talked to her — he could keep an eye on things and make sure\nthey hadn’t been lying to him about why they wanted to talk to her.</p>\n<p>Bob approached from the back of the store, smile pasted on his pale face as\nalways. “Hey Ned, you called? What do you need?”</p>\n<p>Cobb spoke up before Ned had a chance to answer. “Well, your employee here\nhas been kind enough to help us out. We’ll let you know if you need anything\nelse.” He flashed his badge again. A confused expression clouded Bob’s face,\nbut he replaced it quickly with his award-winning smile and nodded.</p>\n<p>Ned grinned to himself. It was satisfying to see the cops put Bob is his\nplace. Bob was too used to having things under his control, to being the\nultimate decision maker. But the cops didn’t even give him a second glance as\nNed led them to the back of the store.</p>\n<p>As Ned had expected, Holly was standing outside in the back parking lot, a\nlit cigarette between her lips. She smiled as Ned and the cops joined her on\nthe sidewalk. Cobb lit another cigarette and smoked while Ames explained the\nsituation.</p>\n<p>Holly’s eyes teared upon inspection of the Polaroid. “Yeah, this is Darryl.\nHe’s really friendly. Such a great guy.” She cried harder, and Ned put his arm\naround her.</p>\n<p>“I’m sorry ma’am. Do you happen to know anyone who would have wanted to kill\nhim?”</p>\n<p>Holly nodded, still crying softly. “Oh no, not at all. I mean, every once in\nawhile somebody’d get huffy with him for cleaning their windshield, but Darryl\njust let it go. I can’t imagine him doing anything to anyone that’d make them\nwant to kill him.”</p>\n<p>Ames looked at Cobb, who signaled their departure by flicking his half-\nfinished cigarette to the ground. “Thank you, ma’am. And again, we’re sorry.”\nThe detectives made their way towards the back entrance to the store.</p>\n<p>“Wait!” Holly called softly. She ran up, tears still in her eyes. “Some of\nthe guys have been talking lately about something. Something that has them all\nscared. They were saying that sometimes, one guy disappears for a night, then\nshows up the next day all bruised and beat up. It happened to Darryl one time.\nI tried to talk to him about it, but he wouldn’t tell me what had happened.\nBut everybody seems nervous about it these days. Even the homeless guys try to\nstay in pairs now, just to be safer. Maybe it has something to do with that, I\ndon’t know.”</p>\n<p>Ames and Cobb thanked her again and continued on into the store. Holly was\nstill crying as Ned put his arm around her again.</p>\n<p>**Chapter 13: Beat Down **</p>\n<p>Mike’s vision focused slowly as he stormed into the room, yelling wildly.\nHis own voice was soon drowned out by Marie, shrieking maniacally at the top\nof her lungs, and by that of a man as he jumped free from his position on top\nof her and rolled off the side of the bed.</p>\n<p>Marie clutched the sheets around her naked body and continued to shriek on\nthe bed, a fearful look in her eyes. Mike’s hands were still tightly grasping\nthe bat, and he ignored her screaming as he scanned the room for the man. He\nmoved around to the left side of the bed, where the man was cowering next to\nthe night table, holding his hands in front of his nude, trembling body in an\nattempt to shield himself.</p>\n<p>Well, this was an interesting development. He glanced around the room in an\neffort to discredit the conclusion he already knew to be true. The room was in\nperfect condition, just like the rest of the house; no, Marie had <em>let</em> this\nbastard into the house.</p>\n<p>Marie regained her composure to some degree and shouted, both in fear and\nanger, “Mike, what the hell are you doing?”</p>\n<p>Mike’s mission now seemed clear. His job was gone, Angelo was going to kill\nhim, and Marie was cheating on him; with this pasty-faced bastard, no less. He\ncouldn’t do anything about the job or Angelo, but he’d be damned if he was\ngoing to let her get away with this. She was going to pay.</p>\n<p>The weakness he’d been feeling on his trip home was now fading, replaced by\nthe familiar rage that fueled all his best work. He was starting to feel\nnormal again — in control. But this time was going to be different. He wasn’t\ngoing to stomp around, screaming vulgarities and throwing things around the\nroom. This time he was going to do it fucking <em>right</em>.</p>\n<p>Mike glanced back at Marie, a strange stillness in his eyes. He replied\nicily, eyes staring blankly into the distance, “I’m fuckin’ killing your\nboyfriend, that’s what I’m doing.”</p>\n<p>He swung the bat down forcefully, striking the pale, sweating man on the\nleft side. His arm crumpled as he cried out in pain. He scrambled towards the\nbed, looking for shelter, but Mike bent down, grabbed his ankle, and pulled\nhim out one handed. With his other hand he swung the bat again, hitting his\ntarget just between the shoulder blades.</p>\n<p>The man gasped, then went limp, and Mike struck again, with both hands this\ntime. The man’s body was unresponsive, and in his subconscious Mike realized\nthat he was either dead or knocked out, but the beating continued.</p>\n<p>Marie jumped from the bed onto his back, screaming nonsensically at him and\npounding weakly at him with her fists. The man groaned unexpectedly and Mike\nsmiled inwardly at the realization that he wasn’t dead <em>yet</em>. The beating\ncould continue.</p>\n<p>He grabbed Marie’s arm and swung her off his shoulder, then clutched her\ntowards him and threw her hard towards the left closet door. She smashed\nawkwardly into the full-length mirror there, sending fireworks of sunlight\nfrom the early afternoon sun around the room, and landed in a heap of broken\nglass, broken skin, and tears.</p>\n<p>Mike smiled at her. “That’s right, bitch,” he spoke smoothly, resuming his\nswings with the bat. The man was now in a fetal position below him, moaning\nsoftly. Bruises had already started to form on his legs and back, and his\ndisfigured arm gushed blood where white bone jutted incongruently out of his\npasty skin.</p>\n<p>Mike pounded on him mercilessly with the bat, paying special attention to\nhis broken arm and now purple back, then abruptly dropped to his knees and\ncontinued with his own fists, focusing on the face and neck. His own blood\nmixed with the man’s as the cuts on his knuckles reopened. He raised his hand\nfor another blow, and without warning, stopped short, instead grabbing the bat\nagain and standing slowly up.</p>\n<p>The tip of the bat was smeared a dark crimson now, and flecks of a similar\ncolor dotted the sheets and bed surrounding the crumpled body of the man. Mike\nsmiled coldly, satisfied with his work. He looked over at Marie, where small\nrivulets of her own blood ran along the glass pathways on the clean hardwood\nfloor, fueled by constant drops from fresh cuts on her back, legs and\nbuttocks. She caught his cold stare from behind a shroud of matted, blood-\nflecked hair.</p>\n<p>Mike turned and threw the bat at her feet. Its noisy clatter was drowned out\nby her own surprised shriek, and she scrambled away quickly, leaving a broad\nswath of crimson in her path.</p>\n<p>Mike reached down and picked up the telephone on the night table, throwing\nit at her. “You’d better call 911, Marie. I think your boyfriend needs to see\na doctor.” With that, he turned and strode quickly out of the room, down the\nstairs, and into the kitchen.</p>\n<p>He stopped at the sink, running cold water over his own wounded hands. The\nwhite of his own knuckles shone through as the blood washed away. He saw\nMarie’s purse in it’s customary position on the kitchen counter, and he swung\nit over his shoulder as he walked to the garage.</p>\n<p>Marie wouldn’t be needed her SUV — he might as well take it. It was really\nhis anyway, he’d paid for it. The angry adrenaline surged pleasantly through\nhim as he pressed the garage door button. Sunlight streamed brightly into the\ndark garage as the door opened. <em>What a beautiful day</em>, he thought. He pulled\nout slowly onto the street, and continued on through the path of finely\nmanicured lawns, stone yard fountains, and hedge art. It was time to go see\nAngelo.</p>",
      "date_published": "2004-11-15T15:18:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-10th/",
      "url": "https://tylerbutler.com/november-10th/",
      "title": "November 10th",
      "content_html": "<p><strong>Chapter 11: Debt</strong></p>\n<p>Mike came to propped up against the side of the tower. His head hurt. It\ntook him a few moments to remember what he was doing there. He was vaguely\nconscious of a uniformed security guard standing just inside the tower door,\npeering out the window at him. As he looked back at the man, the security\nguard raised his walkie talkie to his mouth, uttered a few words, and turned\naway from Mike.</p>\n<p>The two security men who’d escorted Mike out of the tower hadn’t known what\nto do with his unmoving body. It wasn’t uncommon for them to drag a recently\nfired employee out of the office, but they had always stayed conscious.</p>\n<p>Mike collected his muddy thought, rubbed his head and slowly stood up. The\nadrenaline that had fueled his angry tirade earlier was now gone, and the\nrealization that he was in deep shit had fully sunk in, leaving his mouth dry,\nhis head aching, and his knees weak.</p>\n<p>He was dizzy. What was he going to do? He tried to ignore it, but the\nthought of what Angelo was going to do to him kept coming back. He had needed\nthat bonus! He willed himself to get angry again — to muster up the chemicals\nin his brain that would restore him to his normal self — but nothing would\ncome. He was too tired. He wanted to sleep for a very long time. In his\ndejection he found it strangely humorous that he would soon get his wish; when\nAngelo found out he didn’t have the money, he’d make sure that Mike would be\nsleeping for a <em>very</em> long time.</p>\n<p>He eventually became aware of the people staring at him. He must have looked\nvery awkward, staggering on his feet, blood on his shirt, hair mussy, a\ndistant look in his unfocused eyes. But why did they stare? Had they never\nseen a jobless guy downtown before?</p>\n<p>“Screw you!” he yelled at a passing woman who’d kept her eyes on him for a\nmoment too long. She jumped and scurried on along, looking back every so often\nas if she was worried he might follow her.</p>\n<p>Finally his head stopped swimming and he gingerly stepped off the tower\nstairs down towards the street. The security guard was there in the window\nagain, no doubt ordered to keep an eye on him. He spoke into his walkie talkie\nagain, and maintained his watchful gaze as Mike stepped along the street\nslowly.</p>\n<p>It occurred to Mike, as he staggered down the street, that he had no money\nfor a cab on his person. He normally kept his wallet on him, but on this\nparticular day he’d worn his nice Italian pants; the back pocket was far too\nsmall for his oversized wallet, stuffed with business cards, credit cards, and\npictures of his wife to show potential customers. It’s large bulge in the back\npocket of these particular pants was unsightly, not to mention uncomfortable,\nso he had placed it in the briefcase along with his files — the briefcase that\nwas by now being ransacked by Maureen and her team in search of his notes on\nhis new campaign.</p>\n<p>He reached in his pocket, feeling for his keys and cell phone — they were\nstill there, along with his train pass and a few cents in loose change. At\nleast he could call Marie. He fumbled with the phone a few minutes before he\nfinally got the number punched in. There was no answer? She hadn’t been there\nearlier either; where was she?</p>\n<p>Without consciously realizing it, he’d been walking towards the State Avenue\ntrain station. It was just as well. He could at least ride the train up\ntowards his house, then try calling Marie again and hope she would answer. She\ncould pick him up at the station.</p>\n<p>As he approached the platform, he reached in his pocket and quickly counted\nthe change he had. He was 50 cents short of what he needed to get back up\nnorth.</p>\n<p>He sighed, defeated, realizing the sick sense of humor the universe must\nhave. He began to ask passersby if they could help him out with a little\nchange, but they shrugged him off and hurried by. Why didn’t they believe his\nstory? He wasn’t a degenerate — he was an important man! And he only needed 50\ncents! It wasn’t a big deal! The irony was not entirely lost on him as he\nremembered the earlier events of the morning. referring back to beggar story\nwith Mike, need to addYes, the universe had a sick sense of humor.</p>\n<p>After several unsuccessful attempts at soliciting assistance, and a couple\nof close scrapes with a public transportation employee who seemed to enjoy\npointing ominously at the small signs posted around the station that read,\n“Solicitation Prohibited,” Mike tried a new approach. He checked around the\nvending machines at the station, poking his finger into the change return and\nfishing under the machine with his hands. His efforts yielded two dimes, three\nnickels, and a collection of pennies, which he exchanged with the public\ntransportation employee for additional nickels and dimes.</p>\n<p>Before long, he had the requisite 50 cents and found himself on a northbound\ntrain, heading home. He was emotionally drained. Hopelessness enveloped him,\nand he tried to sleep, but was constantly plagued by nightmares of Angelo’s\nresponse to Mike’s explanation of why he didn’t have the money.</p>\n<p>It had all started two months ago, when Mike was riding high on the success\nof another of his accounts. This account was much, much smaller than Richmond,\nbut the campaign he’d designed had worked considerably well, and he felt the\nneed to celebrate that fact in some way.</p>\n<p>He had overheard a conversation in the office regarding a horse that was “a\nsure thing.” Mike had never thought of himself as a gambler, though others\nwould no doubt have termed him that, but when thinking about just how to\ncelebrate his recent victory at Copeland, a sizable bet on a “sure thing”\nseemed to be just the thing. There were few things more exciting to Mike than\nwatching money turn into more money (this was an important thing in\nadvertising — it was his job to turn a client’s advertising budget into\nrevenues), and his cursory research into the horse, named Day Tripper,\nindicated that he had a good chance to do well with his bet. His own research\ncoupled with the overheard office discussion made his decision decisively\nsimple.</p>\n<p>He had called up Angelo, whose number had been collecting dust in his\nRolodex, and put a sizable bet on Day Tripper to win. Angelo had been more\nthan happy to take Mike’s bet, reminding him again of the debtor’s obligations\nto his creditor. Mike had brushed it off; Day Tripper was a sure thing — it\nwas money in the bank.</p>\n<p>That was when things started to go wrong. Day Tripper had lost miserably,\nand the following day at Copeland he was informed that his client had\nmisreported their revenue from the last campaign, and the ads weren’t doing as\nwell as they had initially thought. Mike had had his first and only out of\nbody experience at that point, and upon returning to normal, had proceeded to\nthrow random objects around the office and threaten to fire each and every\nperson on his team.</p>\n<p>Angelo, of course, was pleased with the outcome, and was sickeningly calm\nand collected when he phoned Mike to inquire about payment. Mike was in for a\nlot, and without the expected bonus from that recent campaign, he didn’t even\nhave the money he’d put up, let alone enough to cover the juice Angelo was\nalready running.</p>\n<p>Angelo had been more than happy to extend Mike’s repayment period; after\nall, the interest went straight to his pocket. He had, of course, informed\nMike in no simple terms the extreme regret he’d feel if he didn’t pay the\nmoney back when it was due.</p>\n<p>Mike had readily agreed — he figured he could get the money somehow — he\nwould have done anything to get Angelo off his back for the time being. And\nwhen the Richmond guys said they were looking at renewing their contract, Mike\nwas confident that the bonus would pay his debt and leave plenty left over for\na little celebration. As the bonus began to seem more and more a reality,\nAngelo and the debt were demoted to the back corners of Mike’s thoughts.</p>\n<p>But now, it was all he could think about. Mike didn’t know exactly what\nAngelo was capable of, but he knew enough to worry. Angelo wasn’t the kind of\nguy you could look up in the yellow pages. Mike had a need to be discreet\nabout his gambling; that’s why he went through Angelo in the first place. He\nhad never anticipated actually having Angelo hunt him down.</p>\n<p>He couldn’t decide whether he should call Angelo and let him know he\nwouldn’t have the money, or wait for Angelo to wonder where he was and send\nsomeone for him. Either way, the outcome would be the same. He shook his head,\ntrying to shake off the uneasiness and worry that plagued him. Well, no matter\nwhat, he was going home now. He was going to drink a large glass of scotch –\nperhaps the whole bottle — and accept Marie’s soft, tender arms around his\nneck to comfort him. And then, perhaps… well, he would have to wait.</p>\n<p>Then he would figure out what to do. The alcohol and Marie would help to\ncalm him down; it would clear his head, it would make everything better. Then,\nand only then, would he be able to make a rational decision, to do the right\nthing.</p>\n<p>As the train passed by the Allerton station, he looked out towards the\nhighway, hoping to catch a glimpse of his car. It wasn’t there. He sighed; it\nhad probably been towed to the city impound, which meant he’d have to pay to\nget it back. It was surprising how quickly something as small as an impound\nfee could become a financial burden.</p>\n<p>The train pulled up to the far north station — his station — and he stood\nup, head still swimming somewhat from his earlier bout with unconsciousness.\nHe phoned Marie as he stepped out of the nearly empty train; she still wasn’t\npicking up. Her lack of attentiveness to his needs, whether she knew they\nexisted or not, was starting to wear on him. She was his wife, dammit! What\nthe hell was she doing.</p>\n<p>The few cents in his pocket had not, unfortunately, transformed into more\nduring the trip, so he was still unable to afford a cab. He had no choice but\nto continue on foot. He called Marie at about every block, but she never\nanswered. Eventually he started getting busy signals; was she there, and\nsimply ignoring him? That bitch!</p>\n<p>The mile-long walk to his home went by quickly. He had too much on his mind\nto feel the growing blisters on his feet, cramped inside the Italian leather\nshoes; too much to feel the throbbing pain of the reopened wound on his hand,\nnow oozing blood again.</p>\n<p>The house was dark and quiet when he reached the front door. He grabbed his\nkey from his pocket, and inserted it into the deadbolt. As he pushed the key\nin, the door swung open silently; it was unlocked. Something was wrong — the\ndoor was never unlocked. Marie was obsessive about security — the only reason\nthe door would have been unlocked was…</p>\n<p>He bolted into the room, looking around frantically. Nothing seemed out of\nplace.</p>",
      "date_published": "2004-11-11T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-8th/",
      "url": "https://tylerbutler.com/november-8th/",
      "title": "November 8th",
      "content_html": "<p><strong>Chapter 9: Warning</strong></p>\n<p>Ernie felt weak. His stomach hurt, his heart was racing, and all he could\nthink of was getting out of there. He wasn’t prepared to see a dead body, let\nalone the body of someone he knew.</p>\n<p>He turned and ran back out of the alley, leaving Ken scrambling to pick\nhimself off of the pavement and follow. Ernie didn’t go far. He ducked behind\nthe building at the end of the alley and sat down, back against the side of a\ndumpster, and hugged his knees close to his chest.</p>\n<p>He didn’t cry, but he felt like it. He couldn’t get the image out of his\nhead — Darryl, with his grimy face and bloody hands, lying there motionless on\nthe gurney, a twisted expression of fear on his face. At least his eyes had\nbeen closed… Ernie shuddered again.</p>\n<p>Ken caught up with him, and assumed the same position as Ernie just to his\nleft.</p>\n<p>“Hey, Ern, what’s goin’ on, man? You know that guy or somethin’?” Ernie\ndidn’t reply audibly, but nodded slightly. Ken knew him well enough to realize\nthat if you wanted information from Ernie, you were better off to just ask a\nlot of questions.</p>\n<p>Ken hadn’t gotten a really good look at the man, since Ernie had dropped him\nbefore his eyes could fully focus, but he knew Ernie didn’t know a whole lot\nof people except the kids at the corner and the residents of St. Ives.</p>\n<p>“Was is one of the guys from St. Ives, Ernie?” Ernie nodded ever so slightly\nagain. “Man, that sucks.” Ken leaned his head up against the dumpster, hugging\nhis knees even closer to his body.</p>\n<p>A burst of inspiration struck Ken like a lightning bolt. This was a perfect\nopportunity to do some sleuthing! Like many children, Ken vacillated when it\ncame to “what he wanted to do when he grew up.” But lately, he’d been leaning\ntowards the glorious life of a private eye, due in no small part to the\nmystery novels that his friend Rex provided him.</p>\n<p>He could use this opportunity to get some valuable experience. By\ninvestigating the cause of the mystery man’s death, he could try out his\ngumshoes and maybe even help Ernie somehow. It was an opportunity that\nshouldn’t be missed.</p>\n<p>“Hey, Ern, I’m going to head back to the store and see if I can figure out\nwhat’s going on. Just stay here; I’ll be right back.”</p>\n<p>Ernie was more than happy to stay right there. He was still feeling quite\nsick. Sweat gathered quickly on his brow, and his breath became shallow. As\nKen scuttled back towards the flashing lights of the emergency vehicles,\nErnie’s mind cleared enough for him to think about what Darryl had told him a\nfew weeks previous.</p>\n<p>Darryl was a regular at St. Ives, though he wasn’t there nearly as often as\nErnie. He was known by many of the other St. Ives residents as “the squeegee\nman,” largely due to the fact that he spent his days down on State Avenue\ncleaning the windshields of commuters as they waited at the lights. It\ncouldn’t be called a living, since he still made moderate use of St. Ive’s\nfree food supply, but he did better than many of the others who begged at\nstreet corners or outside grocery stores.</p>\n<p>Part of Darryl’s success was due to his easy smile and the fact that he\nnever <em>ever</em> asked for any money in return for his services. He strove to\nmake it appear that he was simply helping people out; he didn’t want people to\nthink he needed their charity, even though he most definitely did.</p>\n<p>Darryl preferred instead to believe that people would pay for a service well\ndone, even though they didn’t necessarily know they needed the service. He\ntold Ernie on one occasion that most people didn’t realize how dirty their\nwindows really were until he’d cleaned them, and after that, they were more\nthan happy to throw a few cents his way in thanks. His attention to detail\ncertainly didn’t hurt his enterprise either; Darryl made sure your windows\nwere clean. This was not a cursory effort; this was professional service, even\nif it did come from a grimy, off-smelling homeless man.</p>\n<p>Ernie had accompanied Darryl one day, and initially he found it interesting,\nbut he didn’t excel at smalltalk and smiling the way Darryl did, and the\ncustomers’ looks of dismay upon their approach was more than enough to\nconvince Ernie that he was better off to stick to his jive.</p>\n<p>He’d learned a lot from Darryl, though, especially about keeping a positive\nattitude. Darryl had told Ernie stories of drivers that had gotten\nparticularly angry at him — so angry that they had stepped out of their cars\nand gotten physical with him. Every so often, Ernie would see Darryl with\nfresh bruises on his arms, or a cut above his eye. But he never let it get him\ndown. He had explained his philosophy to Ernie once.</p>\n<p>“Ya see, Ernie, da way I figger it, everybody’s got a lot goin’ on that we\ndon’t see. Take you and me, fer example. Most folks don’t realize you and me\nain’t gots no home, ain’t gots no food, but at the same time, we gots to\nunderstand that they’se maybe had a rough day. Maybe da wife left ‘em and took\nda kids. Maybe dey got fired an’ worry about endin’ up like you and me. I\ndunno. But da point is, we don’t know. We gots to give them the opportunity to\nbe mad, cuz we don’t know why dey are. Maybe it’s me, but I don’t think so. I\nthink it’s something else. It’s like my momma used to always say, ‘Dey’s more\nto it than just a broken leg.’”</p>\n<p>Ernie had never quite understood what Darryl’s mother had meant, but if\nDarryl’s account was at all truthful, she was the most intelligent and\ninsightful woman the earth had ever known, “a true angel,” as Darryl liked to\nsay.</p>\n<p>Ernie wasn’t sure if he and Darryl were friends or not, but he knew he\nenjoyed his company, and whenever Darryl was at St. Ive’s, Ernie sought him\nout.</p>\n<p>A few weeks ago, Darryl had come to dinner at St. Ives a changed man. He was\nbleeding from numerous cuts on his face, his clothes ripped and torn more than\nusual, and his hands were blistered so he could barely hold the now broken\nsqueegee.</p>\n<p>Rhonda had clucked over him for an hour, dressing his wounds and cleaning\nhim up as best she could. Darryl was strangely reticent during the whole\nprocedure and on into the evening, despite Rhonda’s attempts to get him to\nexplain what had happened.</p>\n<p>Ernie hadn’t had any luck either. He sat with Darryl at the dining room\ntable long after dinner, waiting for Darryl’s explanation, but it never came.\nHe just stared aimlessly into space, seemingly lost in his thoughts.</p>\n<p>Finally, Ernie grew restless and stood up to leave, but Darryl had grasped\nhis arm urgently.</p>\n<p>“Ernie, listen!” He spoke with an uncharacteristic urgency that immediately\ncaught Ernie’s attention. There was a bizarre fire in his eyes, but they\nstared aimlessly the way they had that entire evening.</p>\n<p>“If a man ever comes to you, sayin’ he’s got da answer, dat he can get you\nout, you just gots to do one thing, don’t listen to ‘im. Don’t let him take\n‘vantage o’ you. Tell him you’ll get out y’own way. Tell him you don’t need\n‘im. Hear me?” He clenched Ernie’s arm so hard he cried out in surprise.</p>\n<p>Ernie nodded a slow acknowledgment and drew his arm away quickly. Darryl had\nnever done anything that would hurt him before, but his eyes still stared off\naimlessly into space; he didn’t seem to even realize he’d done or said\nanything.</p>\n<p>Ernie had gone to bed that evening troubled, and he had wanted to ask Darryl\nwhat he was talking about, but Darryl was gone in the morning. It wasn’t\nunusual — Darryl often didn’t spend the whole night at the shelter. He\npreferred to find his own place to sleep. But Darryl hadn’t returned, and no\none Ernie had spoken to had seen him around his normal Stae Avenue workplace.</p>\n<p>Ernie hadn’t worried too much, though. Darryl was an old-timer; he’d been on\nthe street for a long time. He knew the ropes and could take care of himself.</p>\n<p>But now, seeing Darryl’s still body in the ambulance, the look of pain in\nhis eyes, Ernie wondered if perhaps there had been more to Darryl’s admonition\nthan he’d thought.</p>\n<p>**Chapter 10: Investigation **</p>\n<p>Ken was having considerable luck on his first foray into the investigative\narts. He had quickly found a perfect listening post from a fire escape just\nbeyond the row of police cars and ambulances. From his vantage point, he could\nget a relatively complete view of the mass of blue-suited officers with little\nrisk of being seen. And if he was quiet and listened carefully, he could make\nout the conversations of them men below without too much difficulty.</p>\n<p>Two men in trench coats and white dress shirts seemed to be running the\nshow. Ken had heard them be addressed as Detectives. Detective — that was a\ntitle he could get used to. Detective van Zandt — yes, it had a nice ring to\nit. This investigation stuff was going to be a blast!</p>\n<p>Despite the fun he was having, Ken tried to keep a serious attitude. A man\n<em>was</em> dead, and while that in and of itself wasn’t terribly stunning,\nespecially in McAllister Park , this was someone Ernie knew, and that made it\neven more important that Ken take things seriously. He desperately wanted to\nfind out something that would put Ernie at ease, or at least give them a clue\nas to what had happened. He’d never seen Ernie this way before, which meant\nthat he knew the dead man pretty well.</p>\n<p>One of the detectives approached the ambulance where Darryl’s body lay. Ken\ncraned his neck to hear the conversation.</p>\n<p>“Any idea who we’ve got here?”</p>\n<p>“No, sorry. No identification at all. But judging from his appearance and\nsmell, he was probably homeless. We had more luck with the other guy. We found\na few books and some plane tickets from Sumatra in his backpack, and I think\nsomebody mentioned that they had his wallet as well.”</p>\n<p>“OK, any idea on what happened?”</p>\n<p>“Not really. Both victims had gunshot wounds, but judging from the blood\nloss, I’d say John Doe over here got hit first. The kid probably stumbled on\nthe perps or tried to help the guy or something. A regular saint, I guess.”</p>\n<p>“Where’s the other victim?”</p>\n<p>“Well, they’ve got him on the train back up to Elston Memorial. Stomach\nwound, but it seemed to have missed all the important stuff, so maybe he’ll be\nall right. We’ll see.”</p>\n<p>“OK, thanks.” The detective turned and walked towards his partner.</p>\n<p>“What do we have, Cobb?”</p>\n<p>“Looks like a homeless guy,” the first detective said, removing the\ntoothpick he’d been chewing on nervously from his mouth.</p>\n<p>“Well, we’ve got the other guy’s wallet. His name is Joel Mendocino. Address\non his license is for an apartment just west of here. They’ve taken him to\nElston.”</p>\n<p>“Yeah, that’s what I hear. Is Foster gonna call us when he’s awake so we can\nget statement?”</p>\n<p>“Yeah, she said she would.”</p>\n<p>“All right, let’s head to the apartment and see what we can find there.”</p>\n<p>Ken watched as the two men headed on up the road towards their car, debating\nwhether the rest of the uniformed cops would have any useful information. None\nof them seemed to be talking — they were all simply looking around the scene\nand taking notes. He decided it was time to go let Ernie know what was going\non, and scrambled noiselessly off the fire escape and headed towards the\ndumpster behind the alley, where Ernie was still sitting, head on his knees.</p>\n<p>Ken pulled gently on his arm.</p>\n<p>“Ernie, I found out where they’re taking the other guy. There were two of\n‘em. Come on, lets go see if he can tell us anything.” He pulled more strongly\nagainst Ernie’s resistance.</p>\n<p>Ernie reluctantly stood up slowly and followed Ken to where his bike lay on\nthe asphalt. He didn’t much feel like “investigating,” but Ken seemed to think\nit was the right thing to do. He instinctively reached for the headphones\naround his neck, but stopped short of pulling them to his ears. No, he didn’t\nfeel much like jiving either, so he and Ken made their way up the street in\nsilence.</p>",
      "date_published": "2004-11-09T15:01:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-7th/",
      "url": "https://tylerbutler.com/november-7th/",
      "title": "November 7th",
      "content_html": "<p><strong>Chapter 8: The Weakest Link</strong></p>\n<p>The train didn’t seem to be moving as quickly as it had the last time he’d\nridden, mont hs ago. He was getting restless. The executives would be\nexpecting him momentarily. He glanced at his watch for the millionth time.\nTime seemed to be slogging along at an incredibly slow rate.</p>\n<p>The jagged cuts on his knuckles had stopped bleeding, and now pulsated a\ndull pain through his entire right hand. He’d inadvertently gotten blood on\nhis fresh white shirt and dark tie; he probably wouldn’t have the time to\nclean himself up before the meeting — if he even made it.</p>\n<p>Thee train creaked to a stop. Was this it? No, one more to go. He examined\nhis appearance in the low-contrast reflection of the train window. Wow, he was\na wreck; hair mussed up from the run, the gritty dull white powder of dried\nsweat on his forehead, blood on his shirt, collar and tie loose and wrinkled.\nHe certainly didn’t look like a poster child for one of the most powerful\nadvertising firms in the city.</p>\n<p>A wave of anger passed over him, largely directed at Marie. After all, it\nwas <em>her</em> fault that all of this was happening. If she’d made sure he was up\nthis morning, he could have gotten on the road earlier. Granted, it was he\nthat was out late last night, but <em>that</em> was her fault too. If she’d kept him\nsatisfied, he wouldn’t have had the need to stay out late cheating on her to\nsatisfy his sexual appetite. See, it was all her fault. He ought to leave her.\nWell, she’d be kissing the nice house in the Glade goodbye if he didn’t get\nhis bonus. At least this affected her as much as it affected him — she\nwouldn’t get away scot-free.</p>\n<p>After what seemed like an eternity, the train finally made it to State\nAvenue , and not a moment too soon. Mike grabbed his briefcase and hurried out\nthe door, pushing past the mob of people and ignoring their shouted protests\nas he continued along.</p>\n<p>The path along State Avenue to the tower was relatively clear; it was so\nlate in the morning, a majority of people had already made it to their jobs.\nHis previous physical activity had left his body reeling, and he was unable to\nmove faster than a brisk walk towards the tower. He pushed his way through the\nrevolving doors and ignored the pleasant greetings of the security guard as he\nheaded straight to the elevator.</p>\n<p>He pressed the up button urgently, somehow feeling that the faster he\npressed it, the faster the elevator would descend. The pristine ding of the\nelevator’s arrival could not come soon enough, and he boarded the car\nanxiously. He was followed by two other nicely dressed individuals who ogled\nhis appearance as they boarded. He forced himself to smile smoothly, despite\nhis strong desire to rip their heads off. Who the hell did they think they\nwere?</p>\n<p>“34, please.” He murmured at the two other passengers as the doors slid to a\nclose with a hiss. A brief downward force signaled their ascent, and Mike\nlooked at his watch again. Shit, it was going to be close. The other\npassengers departed at the 18 th floor, taking their time, much to Mike’s\nchagrin. He pressed the door close button even more urgently than he had the\nelevator call, and leaned back against the far elevator wall with an anxious\nsigh. Fortunately for his sanity, it appeared no one else had any need to use\nthe elevator at this late morning hour, and his trip to the 34 th floor\ncontinued uninterrupted.</p>\n<p>The doors opened and Mike flew out frantically, briskly heading towards his\noffice to grab the collection of charts and mock-ups for the new campaign.</p>\n<p>“Oh, Mr. Turner, I’m so glad you’re here! They’re waiting for you in the\nconference room! Oh my, are you all right? Do you need…”</p>\n<p>“No, Susan, just let them know I am on my way right now. I’ll be there in a\nminute.” He tightened his tie and buttoned the top button of his collar, then\nquickly glanced at himself in the glass reflection of his office window. Well,\nthis was as good as it was going to get. He pulled the rolled posters from his\ndesk and walked towards the conference room.</p>\n<p>He pushed the door to the conference room open with his back, and turned to\nnotice that a majority of the management staff was present. That was odd — he\nthought this was just between Bill, his direct supervisor, a few of the other\nexecutives, and himself. And what was Marlene doing here? She shouldn’t have\nanything do with this.</p>\n<p>“Ah, Mike, glad you made it… Oh, are you all right? Do you need a few\nminutes?” Bill stood in greeting.</p>\n<p>“No, no, I’m OK. I just cut my hand on my way over. No big deal.”</p>\n<p>“Well, all right then. Go ahead and have a seat.” There was something\nstrange in his demeanor. He was too professional, too friendly. He and Mike\nwere barely on speaking terms — why the charade? And what were all these\n<em>people</em> doing here?</p>\n<p>“Mike, as you know, we’re here to talk about the Richmond account…”</p>\n<p>“Yeah, yeah, I’ve got some mock-ups here for you to look at.” Mike\ninterrupted in excitement. He was especially proud of his ideas for the new\ncampaign. They were quite possibly his best, and equipped with the right team,\nhe could really deliver the goods on this one.</p>\n<p>He reached down for one of the rolled-up posters and began to unfold it. “As\nyou can see, I’ve totally rethought the logo and how it integrates with the\nrest of the campaign, and I’ve got some new…”</p>\n<p>“Well, Mike, let’s just wait on that. You see, we’ve had a lot of discussion\nabout the Richmond account, and as you know, they haven’t been pleased with\nthe latest campaign. We rely on their business, and we really need to pick up\nthe pace f we want to get them to sign a new con…”</p>\n<p>Mike was annoyed. He already knew all of this. He knew how important the\naccount was, both to the company and his own career. Why did Bill have to\nrehash all this stuff here?</p>\n<p>“Yeah, I know, Bill, which is why I’ve totally rethought our approach, and\nif you’d just give me a second to exp…”</p>\n<p>“Please Mike,” Bill said, holding up his hand and shaking his head. “Please\nlet me finish. We… all of us…” He motioned to the rest of those in the\nroom. “We’ve decided that we need some new leadership on the Richmond account.\nMarlene, as you know, has a working relationship with some of the Richmond\nguys from her days at Alliance , and we think that she might be able to\nleverage that relationship to produce some good results.”</p>\n<p>Well, that explained Marlene’s presence. “What the hell is going on, Bill?\nAre you letting me go?” Mike could feel himself getting hot.</p>\n<p>“In a word Mike… yes.” That son of a bitch. He looked around the room at\nthe rest of the observers. They all averted their gazes, looking at the floor\nor out the window. Was this really happening?</p>\n<p>He stood up suddenly, causing a gasp to ripple through the rest of those\npresent. Marlene pushed away from the table quickly. Bill stood up to meet\nhim, a nervous look on his face. He moved his hands slowly, obviously trying\nto calm the situation.</p>\n<p>“Now Mike, settle down…”</p>\n<p>Mike didn’t want to settle down. He didn’t want to calm the situation. He\n<em>wanted</em> to rip into someone.</p>\n<p>“This is why you called me down here, Bill? This is the meeting you told me\nabout <em>two weeks</em> ago? This is what I’ve been preparing for, spending late\nnights in this fucking office, cultivating and developing what is quite\npossibly the most brilliant idea this firm has ever had? You son of a bitch!”</p>\n<p>Mike advanced towards Bill. There was too much going through his head. He\ncouldn’t think everything through. His blood was boiling! Did they honestly\nthink that Marlene, that <em>bitch</em>, was going to be able to take over for him?\nHe was the heart of this company — Richmond was his account! What the hell\nwere they doing?</p>\n<p>Bill backed away slowly, still moving his arms in a vain attempt to calm\nMike down.</p>\n<p>“Come on Mike, you have to understand…”</p>\n<p>“What?” Mike shouted. He was pissed now. “What do I have to understand,\nBill? Do you really think this little cunt can take the Richmond account?”\nThere was no answer. “Fine. Let her try!” With a roar, Mike turned and slammed\nhis right fist into the wall. Pain shot like hot needles through his arm, but\nhe didn’t care.</p>\n<p>He turned back to where his briefcase and posters sat, leaving a streak of\nmaroon conspicuously on the cream conference room wall. Someone must have\ncalled the tower security; two hefty-looking gentlemen stood in the doorway\nstolidly.</p>\n<p>“Mike,” started Bill again, as Mike began to pick up his briefcase and mock-\nups. With mock-ups like these, he’d at least be able to get another job.</p>\n<p>“Leave the stuff here. You know you can’t take it with you.”</p>\n<p>Shit, he was right. Nothing Mike had done while working at the company was\nhis — it all belonged to Copeland. Those sons of bitches. He now understood\nwhy they’d waited to tell him they’d decided to fire him; they knew he’d put\nall of his energy into revamping the campaign if he thought he had an\nopportunity to really change it. Now they could take his work, give it to\nMarlene, and turn it into a money-making campaign. And all it cost them was\nhis severance pay.</p>\n<p>“You’re all sons of bitches, you know that?” He dropped the posters and\nbriefcase as the two stolid gentlemen grabbed his arms and led him towards the\nelevators. His rage continued to mount as the elevator descended. He\nconsidered his options. He could try to take out the two security men and go\non a rampage through the office, but sadly, he had no weapons. The men looked\npretty solid, anyway; he wouldn’t be able to take both of them out.</p>\n<p>This sucked. No amount of profanity murmured under his breath could fully\nexpress the sense of betrayal he felt. As the security men dragged him out of\nthe elevator on the ground floor, a sudden weight fell down on him. The\nadrenaline that his anger had brought forth unexpectedly dissipated, and he\nfelt light-headed. The last thing he saw before passing out was two delivery\nmen wheeling a large cake through the tower lobby. The icing read,\n“Congratulations Marlene!”</p>",
      "date_published": "2004-11-08T15:24:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-6th/",
      "url": "https://tylerbutler.com/november-6th/",
      "title": "November 6th",
      "content_html": "<p>**Chapter 7: Shopping **</p>\n<p>Angela ran up and down the aisles, shrieking gleefully at each brightly\ncolored box of food that she did not recall being there the week before.\nMelissa pushed the now overflowing cart behind her rambunctious daughter,\nignoring the disapproving stares of the store employees and other customers.\nShe’d grown accustomed to them over the years.</p>\n<p>“Can we get this, please?” Angela asked, throwing yet another box into the\ncart before turning around quickly and running back to grab more useless\nproducts, pony tail bobbing happily. Melissa sighed again. If she could get\npaid a nickel, or even just a <em>penny</em>, for every sigh she’d uttered since\nAngela’s birth…</p>\n<p>Melissa could hardly wait until Angela was old enough to start dating. That\nhellion would eat a boy for breakfast! Melissa nearly laughed out loud at the\nthought of some boy seeking Angela’s affections, standing at the door with\nflowers, nervous upon meeting his date’s father. Melissa chuckled again.\nSomeone frightened of Lawrence , ha! Whatever boy wanted to date Angela would\nbe in for a surprise, that was for sure. If he could handle <em>her</em>, then the\nrest of the family would be a piece of cake.</p>\n<p>Melissa shook her head sternly as Angela rounded the corner with a new box\nin her hand. A shadow fell across the five-year-old’s face. The fun and games\nwere over, it seemed. Melissa motioned with her finger, maintaining the stern\nexpression on her face.</p>\n<p>“Come on, Angie. I told you you had to settle down, and you haven’t. Come\non, up in the cart.” She motioned towards the toddler seat in the overloaded\ncart.</p>\n<p>“But Mommy, I’m not a baby anymore,” Angela replied, putting on her best\npouting face. She looked pitiful, but Melissa was not falling for the act.\nLawrence might, but she was tougher than he, especially when it came to their\ndaughter.</p>\n<p>“Well, you certainly seem to <em>act</em> like a baby, so I think you can ride\nlike a baby. Come on, up you go.” She lifted the girl and placed her in the\nseat. Angela crossed her arms across her chest and forced her frown to become\neven more pronounced. It was comical. The entire store seemed to erupt in\nsilent applause at the site of the annoying blonde trapped in the toddler\nchair.</p>\n<p>Melissa pushed the cart along each aisle, silently replacing each item that\nAngela had placed in the cart, ignoring the small whimpers escaping her mouth\nat the loss of each incredibly important item. The rest of the excursion would\ntranspire in silence, since Angela’s method of retribution when wronged was to\nkeep her mouth shut. Lawrence hated it. If he’d made her angry, he’d spend the\nnext hour trying to get her to talk to him, but Melissa simply ignored her.\nMaking her angry was often the only way to get her to shut up anyway.</p>\n<p>At last the final one of Angela’s contributions to the day’s purchases was\nreplaced on the shelf, and Melissa double checked her short list to ensure\nthat she had found everything she needed. The cart seemed sparse after\nremoving all the superfluous items, but she had everything she needed.\nSurveying the surrounding aisles quickly for any last-minute things she might\nhave forgotten, she turned the cart briskly and strode towards the checkout\nlines, which were overpopulated with customers.</p>\n<p>“OK, Angela, you can have one small thing — just one. What do you want?”</p>\n<p>The girl didn’t respond. Apparently she was still angry. Melissa shook her\nhead and sighed. It was her loss.</p>\n<p>She peered around the register lanes, looking for Ned, the nice man who\nalways helped her to the car and always said something kind to Angela. There\nhe was, ringing up a constant stream of customers, as usual. The wait in his\nline would be worth it. She could use a pick-me-up today.</p>\n<hr />\n<p>Ned was back in his groove. The brief break earlier had really rejuvenated\nhim, and he’d been visited by several of his regular customers already today,\nwhich kept him feeling good. The pain in his knee had grown duller, and while\nstill present, was bearable.</p>\n<p>He was scanning items more efficiently than he had in awhile, passing item\nafter item quickly over the glowing red bars of the UPC scanner. He had\nexplained once to some of the other cashiers how the scanning machine worked.\nThey all were amazed at his knowledge, and for a brief shining moment, he had\nfelt like he was himself again. A smart, respected engineer, whose knowledge\nof mechanical and electrical machines was belied by his soft eyes and quiet\ndemeanor.</p>\n<p>Of course, Bob had quickly disbanded the small group of listeners to Ned’s\nexplanation, somehow turning a UPC scanner into a major character in the\nlatest episode of his corporate kiss-ass saga. Holly had been kind enough to\nlisten to his further explanation during one of their mutual breaks. She had\nseemed genuinely interested, though Ned knew she had promptly forgotten\neverything he’d said. It didn’t matter. She’d given him the chance to feel\nsmart and useful again, and that was what he needed.</p>\n<p>Ned often spent his breaks chatting with Holly when he could. They often sat\nout on bench in the parking lot, while Holly smoked a cigarette. She never\nfailed to offer one to Ned, though he always declined. Truth be told, he found\nthe habit disgusting and repulsive, but Holly was interesting to be around,\nand her presence offset the acrid smell of the smoke. In fact, there were\nseveral things that Ned disapproved of about Holly, and if she had been his\ndaughter, they certainly would have a lot to discuss. But she wasn’t his\ndaughter, and as their work relationship turned into a true friendship, he\nfound that the eyebrow piercing and smoking habit defined their relationship\nless and less.</p>\n<p>He was constantly astounded by her generosity. She often invited the beggars\nstanding outside to join her for a snack, and always listened to their stories\nof heartache and longing. That was her real gift to them, whether they\nrealized it or not — the gift of a listening, interested ear. Anyone could\ngive them a piece of pizza or the loose change in their pocket, but Holly’s\ngenuine concern for them and inquiries about their well-being lasted longer\nthan both the food and the loose change.</p>\n<p>Ned knew that many of the homeless men and women that frequented the area\nsurrounding the store were residents, either permanent or otherwise, of the\nSt. Ives shelter. He had mentioned to Holly that she should consider\nvolunteering there or something, but she seemed reluctant. She always just\nsmiled and said, “Yeah, Ned, I know,” but to his knowledge, she never had even\nset foot in the shelter.</p>\n<p>He shot a glance to register 7, where Holly was now busy ringing up her own\nlong line of customers. She caught his glance and smiled. He smiled back. He\nmight hate his job, but at least he had to opportunity to become friends with\ngood people.</p>\n<p>“Thanks a lot, Ned. I’ll see you next week.”</p>\n<p>“You too, Mark. Be careful on the way out, it’s a bit slick by the door,” he\nreplied, referring to the small puddle of soda, remnants of an overactive\nbottle of Sprite.</p>\n<p>He looked up to identify his next customer, and groaned inwardly as he saw\nMelissa and Angela. Melissa was nice enough, but her daughter was a brat. Ned\nhad seen the way Melissa and Lawrence doted on her every whim, and it made him\nsick. If _she’d _ been his daughter — well, he was just glad she wasn’t. He’d\nhave picked Holly over her any day.</p>\n<p>“Hi, Ned! How’ve you been?” Melissa inquired cheerfully, her smile\ncontradicted by the obvious tension and exhaustion in her voice.</p>\n<p>“Oh, I’m fine, fine. And your husband?”</p>\n<p>“He had to work today. It’s just me and Angie.”</p>\n<p>“Ah, I see. And how are you, little miss?” He smiled, eyes peeking over the\nedge of his nose at the girl who looked very angry, arms crossed defiantly\nacross her chest.</p>\n<p>“Fine,” she replied, not looking up.</p>\n<p>He began to scan the items on the small conveyor belt. He knew that would\nget Angie’s attention. She was always intrigued by the speed at which he\nloaded the bags, so much faster than any other cashier.</p>\n<p>Today was no exception. As the <em>beep</em>, <em>beep</em>, <em>beep</em>, of the scanned\nitems reverberated in the echoic store, Angela became transfixed on Ned’s\nhands. They seemed to blur as he scanned and bagged each item with lightning\nspeed.</p>\n<p>Ned grinned at her, willing his arms to move even faster, mentally\nconfirming that every item had scanned by carefully listening for the\nconfirmation beep. He was going <em>fast</em> today.</p>\n<p>Unexpectedly, his hands faltered. The jar of peanut butter, fortunately\nplastic, flew from his fingers and clattered loudly on the tiled floor. The\nstore seemed to freeze; the all of the customers’ attention was focused on\nhim, and him alone.</p>\n<p>The silence was broken by Angela’s childish laughter. She clapped her hands\nwith glee, apparently deriving some sadistic pleasure from Ned’s mistake. Ned,\nspeechless at this unexpected development, knelt down silently and picked up\nthe jar. He scanned it again and continued, moving more slowly and del\niberately this time.</p>\n<p>The rest of the store reanimated itself, and Ned glanced up again to see\nHolly still looking his direction. Her eyes asked, “Are you OK?” He nodded\nback at her and painted his smile back on before looking back up at Melissa.</p>\n<p>“Well, will there be anything else for you this morning?”</p>\n<p>“No, Ned, that’ll be all. How much do I owe you?”</p>\n<p>“Well, you owe me a smile, but the store will want $87.13.” Ned joked back,\ntrying to shake off the embarrassment he felt at having dropped the peanut\nbutter. Melissa grinned.</p>\n<p>“Well, here’s your smile, and here’s the check for the store. Can I trust\nyou to make sure they get it?”</p>\n<p>“But of course,” he replied. “Would you like some help getting out to your\ncar?”</p>\n<p>“Well… Actually, yes, that’d be great.”</p>\n<p>Ned glanced around, looking for one of the young cart collectors to help\nMelissa, but there were none to be found. Oh well. “I’ll be right back,\neveryone.” He flipped the light on his register off and limped along behind\nMelissa to her car, ignoring the faces Angela made at him as they walked. He’d\nbe glad when they were gone, especially the little brat.</p>\n<p>Melissa opened the trunk and Ned quickly loaded the bags into it with his\nstrong arms, oblivious to the sound of sirens as they passed along the street\nin front of the store.</p>",
      "date_published": "2004-11-07T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-5th/",
      "url": "https://tylerbutler.com/november-5th/",
      "title": "November 5th",
      "content_html": "<p>**Chapter 6: Disembarkation **</p>\n<p>Joel didn’t notice when the man he’d held the train for stepped off. He was\nmore interested in sleeping at that point. The metal bar alongside the train\nseat wasn’t the most comfortable pillow he’d ever used, but it wasn’t the most\nuncomfortable either. The mounting fatigue of the trip had finally overwhelmed\nhim and he would have slept anywhere.</p>\n<p>Lucky for him, the McAllister Park stop was the last, and the train operator\nwoke him with a harsh clap on the shoulder and a shout, looking less than\npleased. Joel smiled sheepishly and rubbed his eyes as he was pushed out onto\nthe platform.</p>\n<p>The sun was looming higher in the sky now, and it was beginning to warm up.\nHis bare arms and legs felt quite comfortable as he twisted from side to side,\nstretching his stiff body. He drew in a deep breath, let it out slowly, and\nbegan walking towards the exit.</p>\n<p>He considered briefly walking straight home. His apartment wasn’t far, and\nhe <em>was</em> tired. But looking around him, he realized that days as beautiful as\nthis one were in short supply here at this time of year, and he should make\nthe best of it while he could. Besides, he could really use a bagel — he\nhadn’t had one while he’d been in Asia.</p>\n<p>He had sampled much of the local cuisine — a variety of curried rice,\ncountless vegetables, and fruits that few western mouths had tasted. But the\nsimplicity of a bagel slathered with cream cheese was something he had missed\ngreatly during his absence.</p>\n<p>It took him a moment to get his bearings. Things hadn’t changed that much\nsince his departure, but months of trekking through real jungle had left him\nunready to tackle the asphalt one.</p>\n<p>He set off east the opposite of his apartment, heading towards the\nDominick’s that serviced all of McAllister Park’s grocery needs. He’d suffered\na little culture shock during his return flight, largely due to the wide array\nof various items that were made available in even the smallest airport\nconvenience shop. Dominick’s was sure to shock him even more.</p>\n<p>The streets appeared to him much cleaner than when he last saw them. It was\ncertainly an observation colored by his experiences with much dirtier streets\nin Asia. Most any street would appear cleaner than those.</p>\n<p>He soon settled into a now familiar stride, born of countless hours spent\nhiking in secluded mountain jungles and vast grassy valleys. The distance to\nthe store was more than an average American would consider walkable, but then,\nJoel was no longer an average American, was he?</p>\n<p>A few children passed by on bikes, sending inquisitive glances his direction\nas they sped by. They probably didn’t see too many young men walking along the\nstreets of McAllister Park. It wasn’t known as the best neighborhood in the\ncity. Joel had ended up here just because it was cheap, and he’d never had any\nreal problems. Every once in awhile you’d hear of someone getting beat up, or\na bike getting stolen, or something, but Joel just did his best to be careful\nand didn’t let himself get too worked up about it.</p>\n<p>He had sublet his apartment to a young couple that were still in school\nrelative close by. They were strapped for cash, and he didn’t really want to\ngive up his lease because of the trip. They had agreed to be out of the\napartment by a month before Joel’s scheduled return, so by now the place would\nprobably require a thorough cleaning. The bed, though, would be clean enough\nfor a good night’s rest — no need to concern himself with that now.</p>\n<p>What he did need to concern himself with was getting food. His stomach’s\ncomplaints grew audible as he crossed the nearly abandoned parking lot of\nDominick’s. He entered through the automatic doors and thought idly how lazy\npeople had become.</p>\n<p>The scent of fresh-baked bread beckoned his nose frantically upon entry to\nthe store. It didn’t take him long to find the bakery section of the store,\ndespite his unfamiliarity with the new configuration of the store. It was much\ndifferent that when he last saw it, but he let his nose do the leading, and\nall was well.</p>\n<p>He pulled a large plain white bagel from an oversized bin and smiled as he\nimagined the joy he was about to experience while consuming it. He considered\nbriefly buying a few more items while he was there, but he he hadn’t had a\nchance to convert any of his larger foreign currency, and the change in his\npocket was barely enough to cover his bagel.</p>\n<p>The line at the register was much longer than he had anticipated given the\ndeserted parking lot. A man with graying hair and a Dominick’s smock motioned\nat him as he walked past the registers. The man seemed a little weak on his\nlegs, but he hobbled over and flipped the light on his register back on.</p>\n<p>“Good morning, sir,” he said, smiling slightly and quickly typing in the\ncode for bakery goods. “Will that be all for you?”</p>\n<p>“Yes, I’m just a little hungry,” Joel replied, smiling back. “Just got off a\nlong plane trip.”</p>\n<p>“Ahh, I see. Was it a good trip?”</p>\n<p>“Yes, I think so. I certainly learned a lot.”</p>\n<p>“Good to hear, good to hear. Well, enjoy your bagel, and have a nice day.”</p>\n<p>“You too…” Joel glanced at the man’s name tag. “…Ned. I’ll see you\nlater.” They both smiled at each other again. Joel was grateful for the\nconversation. The man sounded tired, but he had made a concerted effort to be\nfriendly and engage with Joel. It was a quality he hadn’t seen a lot of since\nhis return, and it was something he knew he’d miss from his trip.</p>\n<p><em>[Insert another Asia back story here.]</em></p>\n<p>He exited the store and began making his way back towards his apartment. The\nbagel was heavenly delicious, and for a time he became so lost in its flavor\nthat he didn’t pay attention to where he was going. When he finally realized\nhe’d missed a turn and was headed down the wrong street, it had turned eerily\nquiet and deserted. The sudden lack of sound struck him as strange, and he\npeered around in a vain attempt to get his bearings.</p>\n<p>It was not in Joel’s nature to get nervous, but something about the air made\nthe hairs on the back of his neck stand at full attention. He felt for a\nmoment like a lawman from the wild west, stepping out into the main street of\na seemingly deserted town, expecting ambush, but not knowing from where it\nwould come. A newspaper, floating lazily by on the breeze, so tumbleweed-like,\ndid nothing to erase the image from his mind.</p>\n<p>In the silence, the unexpected **bang! ** from the east was startlingly\nstentorian. His mind stumbled for a moment — was it a shot, a firecracker, or\nwhat? Then he just started running, not really knowing why. Instead of running\naway from the sound, he ran <em>towards</em> it. It didn’t make much sense, he knew,\nbut he felt that east was the only direction that made sense to run in. He\ncouldn’t explain it, and the question of why he ran towards it instead of away\nwould later plague him, but for now, he was running.</p>\n<p>As he drew closer to the source of the sound, voices became clearer.</p>\n<p>“Holy shit, man! Why’d you do that?”</p>\n<p>“I wasn’t tryin’ to hit him! He jumped out of the way… I don’t know…\nShit!”</p>\n<p>“We’d better get the hell out of here, man.”</p>\n<p>Joel emerged from an alley and saw what had transpired. Two men, the\napparent sources of the screaming, were standing in the opposite corner of the\nalley, facing a dumpster, hands waving animatedly. One held a gun. Well, that\nanswered his question about what caused the bang.</p>\n<p>Joel froze in his tracks almost immediately, but the men noticed him quickly\nand he soon found himself eying the barrel of the pistol.</p>\n<p>“Don’t move, man. Shit!”</p>\n<p>“Come on Charlie, let’s get out of here!”</p>\n<p>“No man, he’s seen us, he can ID us.”</p>\n<p>“Just forget it, Charlie. Come on, let’s go. We’re already in deep shit\nman.”</p>\n<p>“Yeah, and this’ll make it worse.”</p>\n<p>Both men approached Joel slowly; Joel stood frozen.</p>\n<p>“Don’t worry, guys… I won’t say a thing… I just took a wrong turn, you\nknow. I just want to get home… Either one of you know where Western is from\nhere?” He tried to steady the shaking in his voice. Who’d have thought having\na gun pointed at you could reduce you to jelly so quickly?</p>\n<p>“Yeah, I know where Western is,” replied the man with the gun. “But I think\nyou’ll be needin’ more than directions to get there.”</p>\n<p>Joel didn’t even hear the shot. He was suddenly on the ground, a sharp pain\nin his belly, nausea washing over him. He blinked and tried to focus as the\nmen turned and ran, feet pounding hard on the asphalt.</p>\n<p>“Shit! Charlie, you’re a fuckin’ idiot!”</p>\n<p>Joel groaned. His head was swimming. What had happened? He looked down at\nhis stomach and was surprised to see a hole that hadn’t been there before.\nWhere did that come from? He tried to stand, but found any attempt to use his\nabdominal muscles sent wave after wave of pain coursing through his body.</p>\n<p>He rolled over, and that’s when he noticed the crooked body beyond the\ndumpster. It wasn’t moving. Joel steeled himself against the pain and pushed\nupwards with one hand, using the other to hold his aching stomach. His mind\nstill wasn’t entirely clear, but he knew he had to help the other guy crumpled\nthere and get himself some help. He put his left arm under the man’s shoulder\nand lifted upward with all his might, keeping his right hand pressed against\nhis abdomen.</p>\n<p>The blood ran out over his fingers and dropped silently onto the asphalt as\nhe dragged himself and his new companion out of the alley. He didn’t know\nwhere he was headed — he hoped the right direction. He made it about a block\nbefore an unexpected wave of lightheadedness hit him. He was suddenly falling\ntowards a field of daffodils and butterflies, and then, nothing.</p>",
      "date_published": "2004-11-06T13:02:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-4th/",
      "url": "https://tylerbutler.com/november-4th/",
      "title": "November 4th",
      "content_html": "<p><strong>Chapter 4: Mike</strong></p>\n<p>_Come on, come on… Just start already! _Another wheeze and gasp from the\nengine, but it still wouldn’t fully turn over. “Dammit!” Mike shouted as he\nsmashed his right fist down against the front dashboard, cracking the brittle,\nsun-bleached plastic of the air vents.</p>\n<p>The day had not been going well. Come to think of it, the week, the month,\nthe <em>year</em> had not been going well. But today had been especially trying.\nMarie had given him crap again for coming in late last night, he’d overslept\nand got on the highway later than he’d hoped (no thanks to Marie, who hadn’t\nbeen persistent enough in making roll out of bed), and now the car was <em>not</em>\ncooperating.</p>\n<p>This was ridiculous. Any other day but this one! Today was important! Today\nwas the meeting about the Richmond account — his account. An account that he\nhad nursed from its infancy at Copeland. An account that he had brought to the\ncompany himself. Copeland didn’t even know Richmond <em>existed</em> until he’d\nbrought it in. And he’d turned the account into a cash cow. Mike Turner was\ntotally responsible for turning Copeland Advertising into a large, well-\nrespected firm, and he wasn’t getting any credit at all.</p>\n<p>Not enough, anyway. And these new executives — young enough to be his\nchildren — were coming in, acting like _they’d _ built the company, yanking\nhis talented staff away and putting them under other, less adept leaders. Then\nthey had the audacity to complain when the returns on the Richmond account\nweren’t as high as usual. How could he be expected to produce results when\nthey were giving crappy, unskilled kids to work with? Most of these kids\ndidn’t know Z-Form advertising from their ass. And he was expected not only to\ntrain them, but use them to produce high-quality advertising for the company’s\nbiggest account. Yeah, right, the logic made sense.</p>\n<p>And these kids — all they knew how to do was use a computer. If they\ncouldn’t do it digitally, they couldn’t do it. Not an ounce of artistic talent\nbetween them. They only knew how to click a few buttons, move a cursor around\na screen, and hit the print key. Mike had come in with a few physical mock-ups\nand these kids were amazed. “This must have taken you so long,” they\nexclaimed. Damn kids, with their skateboards, their body-art, their Japanese\nanime bullshit. They didn’t know jack about advertising. How the hell did they\nget degrees?</p>\n<p>Today was the day he was going to fix the problems. The bigwigs upstairs\nwanted to talk Richmond , and Mike was ready. He’d prepared several new ideas\nfor the account, and had outlined a plan to rejuvenate Copeland’s advertising\nefforts. He’d even formulated a sound argument to get some of the more\nseasoned staff back on his team. Surely they could listen to reason. After\nall, it was the least the company could do for him. And the Richmond guys were\nready to sign a contract renewal, provided Mike could produce some quality\nmock-ups for the new campaign. A renewed contract meant a bonus for Mike — a\nbonus he desperately needed.</p>\n<p>But now the damn car wouldn’t start. He’d asked Marie three weeks ago to\ntake it to the mechanic while he was at work, but apparently she hadn’t. She\nwasn’t good for much of anything these days. She was a decent cook, though,\nand he kept her around as a back-up if he couldn’t get any from the younger,\nmore lithe interns. A man had needs, right?</p>\n<p>Besides, in his occupation, he needed a wife — someone he could bring to\ncompany functions and provide his account-holders a sense of stability and\nconstancy. The latest in a string of vacuous office biddies wasn’t the best\nchoice for a dinner companion if clients were present; they needed to see him\nas reliable, honest, and consistent, even if none of those words had ever\naccurately described him.</p>\n<p>This was ridiculous. The anger of the surrounding drivers on the highway was\nmounting quickly, and they sped by him honking their horns and screaming\nobscenities in his general direction. What was he going to do? He could call a\ntow truck, but by the time they arrived and he made it downtown, he’d have\nmissed the meeting and his opportunity to get things back on track at Copeland\nwould be gone. He already felt he was on thin ice with many of the executives\n– he couldn’t afford to make a bad impression at this meeting.</p>\n<p>So what was he going to do? He slammed his fist on the dash again, sending\npieces of broken plastic flying, and dialed Marie on his cell. No answer.\nWhere the hell was she? There was absolutely no reason she wouldn’t be picking\nup this early in the morning. Dammit, <em>dammit</em>, <strong><em>dammit</em></strong>! He hit the\ndash three more times for emphasis, this time driving plastic splinters into\nhis knuckles. He didn’t care. He had to get downtown.</p>\n<p>There was more riding on this meeting than anyone realized. He <em>needed</em>\nthat bonus, and in order to get the bonus, had had to convince the execs to\ngive him his old team back. And to do that, he <em>had</em> to get to the meeting!\nIt was a chain of events, all connected and reliant on the other, and he\ncouldn’t afford to screw any one of them up at this point.</p>\n<p>In a moment of sudden clarity, Mike noticed the train track to his left,\nrunning parallel to the highway. How close was he to a station? He could see\nthe outline of the Whoorsley station in the distance ahead of him. Could he\nmake it on foot? He glanced back and saw the light of an approaching train\npulling to a stop at the faraway Allerton stop. He’d have to chance it.</p>\n<p>He threw the door of his black Mercedes open, grabbed his briefcase, and\ndodged oncoming traffic and verbal assaults over to the shoulder. He briefly\nlooked back at the car; he’d probably never see it again, but it was a small\nprice to pay.</p>\n<p>He loosened his tie and began to run towards Whoorsley as fast as he could.\nHe hadn’t run like this since college, and his body apparently took great\npleasure in reminding him of that fact with burning lungs, rubbery legs, and\nthe complexion of a pickled beet. And this was only the first hundred feet.</p>\n<p>The train passed him with about 1000 feet left. He felt as if his lungs were\ngoing to explode, but he kept going. He had to. Mike was not a religious man;\nhe hadn’t prayed since he was a small child kneeling at his bedside, hands\nfolded, but he prayed harder than he ever had that something, some <em>one</em>,\nwould make that train wait. If he could make it, he might be able to make it\nall the way downtown and still have a few minutes to take the elevator up to\nthe office.</p>\n<p>And the train waited. Time just seemed to stop. The rest of the world kept\nmoving, but that train was rooted, statue-like, at the Whoorsley station. Mike\nkept running, sweat pouring from his brow, legs numb, lungs pumping furiously,\nblood oozing from the dashboard-incurred injury he hadn’t even noticed yet. He\nmade it to the rear car and literally fell into it. The passengers looked at\nhim strangely, but he didn’t care. He’d made it, somehow. Perhaps this day\nwasn’t going to be so bad after all.</p>\n<p><strong>Chapter 5: The Corner</strong></p>\n<p>Ernie stepped his way back along Sullivan Street . The music was roaring in\nhis ears again. The walk would get him warmed up; he’d be more than prepared\nto take on the kids at 34 th and Broadway by the time he arrived.</p>\n<p>Some of the kids on “the corner,” as it was known to those in the elite\ncircle of participants, resented Ernie’s presence, but no one could deny that\nhe could move. Ken was sure to set straight anyone who argued about Ernie’s\nparticipation. Ken understood that despite appearances, Ernie wasn’t a grown-\nup, and the rest of the kids had nothing to fear from him.</p>\n<p>A rising rhythm in the music caused a requisite wave to ripple through\nErnie’s body. He loved that part of the song. In a sudden burst of\ninspiration, he jumped up, spun 180 degrees and landed on his back heels,\nstill moving the same direction. A new move! He didn’t discover that many\nanymore. He’d have to try that out at the corner today. It would drive the\nkids nuts — especially Karen.</p>\n<p>Ken teased Ernie all the time about his crush on Karen. He tried to deny it,\nbut he had to admit to himself that it was true. There was something about the\nway she shook her body while out on the floor, moved her hips back and forth,\nand seemed to look right through him when their eyes met… he grinned. She\nshould be there today, and armed with a new move, he was sure to impress her.</p>\n<p>He rounded the corner and made his way along the Dominick’s parking lot. He\nstole a glance in the storefront window, searching for the nice girl with the\nblonde hair and a metal bar in her eye. Ernie had always found the piercing\nstrange — why someone would do that to their body was beyond his comprehension\n– but she had been friendly to him, providing him with the occasional sandwich\nor soda on a warm day, so he eventually accepted the shiny metal accessory as\na part of her.</p>\n<p>She was kind to all the residents, past and present, of St. Ives, and many\nothers that had never set foot there. She always had some spare change, a kind\nword, or a candy bar, or <em>something</em>. She often brought a pizza out on her\nlunch brea k and dined with the less fortunate in the lot, or, during the\nwinner, brought small mugs of del iciously warm hot chocolate for all.</p>\n<p>Ernie could nev er remember her name, but he’d nev er forget her face. She\nalways took the time to talk to him when she could, and he appreciated it. She\nreminded him of Rho nda, but he could nev er remember her name. She’d told it\nto him many times, but it wouldn’t stick. She always giggled when he repeated\nit countless times in her presence to make sure he’d know it for next time.\nPerhaps he forgot it just so he could make her laugh again the next time they\nmet.</p>\n<p>There she was in the store, scanning items over the laser reader and smiling\nat the customers. She didn’t see him, but he didn’t have time to try and get\nher attention. Ken would be waiting at the corner.</p>\n<p>In fact, Ken came out to meet him a couple blocks before the corner.</p>\n<p>“Hey, Ern, didja hear?” Ernie nodded in confusion.</p>\n<p>“Somethin’s going on down by the store. Cops and everything! Come on, lets\ngo check it out!” Ken whizzed by on his bike, made a wide u-turn, and pedaled\nup beside Ernie.</p>\n<p>“Man, I hope we can see somethin’. Maybe there’ll be a body and everything!\nWouldn’t that be awesome?” Ernie wasn’t entirely sure he was ready to witness\na dead body. He certainly wasn’t as excited as Ken, but with something this\nexciting going on, it was doubtful anyone would be at the corner anyway.</p>\n<p>The fla shing red and blue of the emergency vehicles were visible a few\nblocks from the convenience store. Ken sped up and pedaled on ahead, leaving\nErnie alone with his thoughts for a few moments. All he really wanted to do\nwas jive down on the corner. Maybe he should just go back towards St. Ives and\njive by himself for the day. No, eventually the kids would get bored or\nrealize they weren’t going to see anything, and the corner would ramp back up\nto it’s usual buzz of activity. He’d just have to wait it out.</p>\n<p>As he approached Ken’s chosen vantage point, men in blue police uniforms\nwere wheeling a gurney into the back of an ambulance.</p>\n<p>“Well, they ain’t in no hurry. He must already be dead. Come on, let’s go\ntake a look!” Ernie groaned inwardly, but followed Ken as he clandestinely cut\nup the alley behind the store and emerged beside the nearly deserted far side\nof the ambulance.</p>\n<p>“Come on, Ern, lift me up,” Ken whispered, gesturing at the small side\nwindow of the ambulance. Ernie grasped Ken under his arms and heaved him\ntowards the window, holding him steady as he himself peeked in the window.</p>\n<p>Ernie dropped Ken hard on the pavement as his vision cleared and he\nrecognized who it was on the gurney.</p>\n<p>It was Darryl.</p>",
      "date_published": "2004-11-05T14:43:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-3rd/",
      "url": "https://tylerbutler.com/november-3rd/",
      "title": "November 3rd",
      "content_html": "<p><strong>Chapter 3: Joel</strong></p>\n<p>“…like to thank you for flying with American Airlines. We know you have a\nchoice when you fly and we’re glad you chose American. Enjoy your stay, and we\nhope to fly again with you soon.”</p>\n<p>Joel stirred from his light slumber and stretched his arms above him in a\nwide arc. Finally, the flight was over. It was about time, too. Fourteen hours\non the plane had left him stiff, tired, and certainly not the most pleasant to\nbe around. But the trip was over. He wasn’t in a particular hurry to get off\nthe plane, so he sat back and allowed the rest of the crowd to clamor for\ntheir bags.</p>\n<p>That was one of many things he’d learned this trip. Time was simply not as\nimportant as everyone seemed to think it was. Waiting patiently ten minutes\nfor a majority of the passengers to clear out would not negatively impact\none’s life beyond repair. But if the frenzied approach of the other passengers\nwas any indication, this particular philosophy was certainly not the most\npopular. At least it was different elsewhere.</p>\n<p>Joel closed his eyes and smiled, leaning his head back against the\nuncomfortable hard foam of the seat. It had been a good trip. He’s learned a\n<em>lot</em>, about <em>everything</em>. He didn’t know whether it was more incredible\nthat it had come to an end or that it had even started in the first place.</p>\n<p>When he’d graduated high school, he’d never imagined he’d take a trip like\nthis. Many of his friends traveled to Europe for that summer before college,\nbut Joel hadn’t been able to afford it. He’d attended St. Ignatius College\nPrep on a merit scholarship, and unlike most attendees, didn’t have a trust\nfund. His father owned a gas station, his mother was a seamstress, and pretty\nmuch everything about Joel’s life contrasted starkly with that of his\nclassmates at St. Ig’s.</p>\n<p>But Joel was a whiz with numbers. They just made sense to him. He couldn’t\ndraw, he couldn’t sing, and he spelled at about a third-grade level, but he\ncould do wonders with numbers. At St. Ig’s, he had been led through the\nmagical world of mathematics by Dr. Alan Sparrow, who had impressed upon Joel\nthe fact that math was everywhere.</p>\n<p>It was a fact that opened up an entire universe of opportunities to Joel.\nAfter he realized that there were few things in life that couldn’t be broken\ndown mathematically, his entire world began to make sense. He began to compose\nmusic mathematically, writing entire symphonies and handing them out to\nfriends to play on real instruments, because he didn’t play any himself. He\ncreated complex formulas that, when graphed, produced wonderful works of art.\nHe turned his entire world into numbers, and he excelled.</p>\n<p>During his senior year at St. Ig’s, Joel met his first girlfriend, Sara.\nThey hit it off immediately, and began dating exclusively after two weeks of\nknowing each other. For awhile, life was good. But eventually, as he did with\nall things, Joel began to analyze their relationship statistically, attempting\nto find the magic formula that would allow him to make sense of the complex\ninteractions between them.</p>\n<p>At first, Sara was amused and intrigued by Joel’s approach. His analytical\nmind had been a major contributor in her attraction him from the start, and\nhis fascination with her <em>mathematically</em> was, in her words, “cute.”\nIncreasingly, though, Sara began to resent her role as a mere variable in\nJoel’s increasingly complex formula. It became clear to her that Joel was\nsimply running an elaborate experiment, and she was the guinea pig. He didn’t\nseem to care about her at all except in the context of his attempt to quantify\nhuman interactions. So, in the middle of their final semester at St. Ig’s, she\nexplained to him that their relationship, such as it was, was over.</p>\n<p>Sara had not been totally correct about Joel’s feelings towards her. In\nreality, Joel cared very much for her. His “experiment,” as she termed it, was\nreally his attempt to figure the relationship out and put it into a context\nthat he could understand. He had a burning need to know exactly what action he\nshould perform in a given scenario in their relationship, and Sara simply\nwasn’t telling him.</p>\n<p>He was beside himself with depression after the breakup. His statistical\nmodel had never, <em>ever</em>, predicted this outcome. Sara should be enthralled by\nhim — he was doing <em>everything right</em>! Wasn’t he?</p>\n<p>The failure of his model to predict the breakup was a source of great\ndistress for Joel. It meant only one of two things; either he had made a\nmistake in his abstractions or calculations, or human interaction simply\ncouldn’t be analyzed in terms of mathematics. Both options made him shudder.\nHe was fairly certain he hadn’t made any mathematical mistakes, which left\nonly… Joel hadn’t been able to come to terms with the possibility that he\nwouldn’t be able to arithmetize human sociality.</p>\n<p>The emotional repercussions of the unexpected breakup did not contribute\npositively to his situation, so Joel had consoled himself by throwing himself\ninto college preparations. He’d already been accepted and was enrolled, so he\nfound out what classes he’d be taking, and spent most of his days that summer\nin the local library reading the text books and other material for his\nclasses. In retrospect, it probably wasn’t the best decision. During his first\nsemester at college, he became <em>very</em> bored, <em>very</em> quickly. His above-\naverage intelligence combined with the foreknowledge of most of the material\nforced him to look for other things — some of them good, most of them bad — to\nkeep himself occupied.</p>\n<p>It wasn’t long before Joel realized that more schooling simply wasn’t in the\ncards for him. The nagging suspicion that mathematics weren’t everything just\nwouldn’t go away, and he didn’t feel as though he were truly learning anything\nin his classes that he couldn’t learn in a library.</p>\n<p>He dropped out after his freshman year with no plans, no job, and\nrealistically, no real future. His uncle owned a lawn mowing business, and\nJoel eventually began working there. It wasn’t especially difficult work, but\nit kept Joel busy, and he had plenty of time to contemplate the questions that\nwere plaguing him about his approach to life.</p>\n<p>It didn’t take long for him to realize that he needed to get out and\nexperience the world if he wanted to try and understand it. That realization\ngave birth to the trip he was now returning from.</p>\n<p>He had saved pennies for two years to afford it. Two years of ramen,\nweekends spent reading instead of going to the movies, and shirking vacation\ntime in favor of overtime pay. Two years of blood, sweat, and tears for this –\nthe trip of a lifetime.</p>\n<p>Fortunately for Joel, the trip was all he had imagined it would be and more.\nHe had hiked through countless mountains, seen wonders he never thought\nexisted, and had met so many <em>good</em> people. The cultures of the places he had\nbeen were so much friendlier, so much more, he thought, evolved. His smile\ngrew broader as he leaned back on the airline seat again and remembered the\nsheer incredibility of it all. He had done it.</p>\n<p>His thoughts were brought back to the present by the sudden realization that\nall was quiet. He opened his eyes and glanced around. Nary a soul was present,\nsave a woman and her two uncooperative children in the section behind him. He\nfound his backpack, the sole possession he had with him and ambled towards the\nexit of the plane.</p>\n<p>The hustle and bustle of the airport terminal was another wake-up call. It\nwas now clear that he was far from the quiet jungles from which he had\nrecently departed. Everyone seemed in such a hurry. People brushed by him\nroughly, not even stopping to apologize. It was strange, the difference\nbetween the attitudes of those he’d met in his travels and the people that now\nsurrounded him.</p>\n<p>It was a transition that he had noticed on this return trip. He had had some\ntrouble with his tickets on the return flight. The airline in Thailand had\nsuggested that he confirm his reservations with the local agent at each stop\nalong his itinerary, so he did. At most stops, the agents were helpful,\nfriendly, and understanding. One even made several frantic phone calls and\nescorted him personally to his gate to make sure he made his flight.</p>\n<p>As if he’d crossed some invisible line, the agents on the American side of\nthe world turned snobbish, were far less than helpful, and seemed determined\nto make interaction with them a living hell. And that was only part of it. The\npassengers on the domestic flights were closed off as well — they seemed to\nactively avoid all contact with other passengers, content rather to cower\nunder their blankets and read the in-flight magazines. Joel had, on several\noccasions, attempted to start a friendly conversation during a flight or while\nwaiting at a gate, but he was always pushed away. He had a lot of adjusting to\ndo before he’d feel at home again in this place.</p>\n<p>He arrived at the terminal train station just as a shuttle was departing. Oh\nwell, no matter. He’d just get the next one. Stepping outside, he realized\nhe’d forgotten how cold the city could be at this time of year. It was in fact\nquite warm, relative to the usual temperature of the city, but the gentle wind\nagainst his bare legs and sandaled feet only accentuated the remaining chill\nhe had from the frosty airplane cabin. Yet another thing he’d have to readjust\nto.</p>\n<p>Looking around him, he noticed several other travelers standing on the\nplatform, donned in light autumn jackets, each one with a serious expression,\ntalking on a cell phone and smoking a cigarette. Everyone seemed so isolated –\nhe wondered for a moment if perhaps two of the people standing there were\nperhaps talking to each other, not realizing that they were in fact less then\ntwenty feet apart. It wouldn’t be that surprising. None of them looked at each\nother. They were too engrossed in their own private conversations to care bout\nor notice the rest of the world around them.</p>\n<p>Joel decided to take a short stroll around the platform while he waited. The\nconversations he overheard were topically different, but equally indicative of\nworried, frightened people.</p>\n<p>“I know I’m late, Gerald. You don’t have to keep telling me. If the damn\nplane had been on time, I would have made it. Well, you’ll just have to\nwithout me for the time being. Yes, I have the portfolio. I’ll bring…”</p>\n<p>“Did you get Mikey to school? Is he feeling better? What did the doctor say?\nWas he sure it was just a cold? I thought…”</p>\n<p>“…got me thinking, you know? I mean, it was just a little fender-bender,\nno big deal, right? But the insurance company is saying that they might not\ncover it, and the mechanic is charging me my left nut to get it realigned.\nYeah, I know…”</p>\n<p>Joel shook his head. So many things to worry about — so many things to push\nout of proportion. He silently wished he was back in Asia . Things seemed a\nlot simpler over there. He chuckled. He was “home” less than an hour and\nalready complaining. That made him a true America n, right?</p>\n<p>The train pulled up and Joel stepped on behind a tired-looking woman pulling\nthree large suitcases. She was trying to pull them, anyway.</p>\n<p>“Could I give you a hand, ma’am?” Joel asked, placing a hand on the largest\nof the three and preparing to pull it up into the train. Confused, the woman\ngave Joel a quick visual appraisal and apparently judged him unworthy of the\ntask.</p>\n<p>“No, no, I’m fine, I’m fine. Just leave me alone.”</p>\n<p>Joel shrugged as she moved as quickly as she could to the opposite side of\nthe train, sat down, and eyed him warily. Whatever.</p>\n<p>As the train began to move towards its downtown destination, Joel found an\nempty seat and sat down, peering out the window at the cars passing on the\nhighway alongside him. Every driver had the same serious expression as the\ncommuters at the station. Eyes gazing straight ahead, hands clenching the\nsteering wheel tightly, lead foot on the accelerator. Everyone had somewhere\nto be, apparently.</p>\n<p>Joel distracted himself by watching the autumn leaves perform complex\nacrobatics in the winds above the highway. The seasons were one thing that\nhe’d missed while he was away. He didn’t much care for winter, and spring was\nhis favorite, but autumn, with its falling leaves, grey skies and clear\nmoonlit nights, held a special allure for him as well.</p>\n<p>He smiled to himself as he realized he’d been absent-mindedly contemplating\nthe physics governing the leaves movements, and reflecting on the equations\nbehind them. He hadn’t changed <em>that</em> much on his trip, had he?</p>\n<p>_[Insert more Asia back story here.] _</p>\n<p>At Allerton, the traffic on the highway had come to a complete stop. Joel\nsoon discovered the reason. A car was abandoned in the center lane, driver\ndoor swung open. The drivers rolled down their windows and cursed, at who they\ndidn’t know, and abruptly cut off their rant when they noticed the car was\nempty. The combined symphony of multi-pitched car horns was deafening. Joel\nwanted to go out in the middle of it and yell at everyone to calm down.\nSeriously, it wasn’t the end of the world. <em>Geez</em>.</p>\n<p>As they approached the next stop, Whoorsley, Joel noticed a man running brea\nthlessly towards the train from the highway entrance. _He’ll never make it _,\nJoel thought as the train slowed down for the stop. As the passengers boarded\nand departed, Joel poked his head out looking for the man. There was no way he\ncould make it without a little help. He discreetly dropped his backpack to the\nfloor, making sure it obstructed the door closing mechanism just enough to\nprevent the train from departing.</p>\n<p>The passengers grew increasingly agitated as the annoying prerecorded voice\nsaid, “Doors closing,” over and over again, but no one noticed Joel’s\nsurreptitiously placed backpack.</p>\n<p>The man boarded a few seconds later, and there was a sigh of relief from all\nthe passengers when the final “Doors closing” warning was repeated. Joel\nleaned back against the train door, awash in the glow that came with doing\ngood deeds. His place in heaven was assured, no doubt about <em>that</em>. He\nsmiled.</p>",
      "date_published": "2004-11-04T14:21:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-2nd/",
      "url": "https://tylerbutler.com/november-2nd/",
      "title": "November 2nd",
      "content_html": "<p>This was his least favorite part of the meal, but he had to drink the\nremaining milk or Rhonda would not be pleased. “Waste not, want not,” was her\nmotto, and she made sure Ernie ate everything he was given.</p>\n<p>He grasped the bowl by the sides and brought the edge to his gaping mouth,\npouring as quickly and carefully as he could. He swallowed, barely, and set\nthe bowl on the table with a clatter as he shook his head back and forth\nviolently.</p>\n<p>Rhonda chuckled at the sight. She knew he hated the taste of milk, but she\ncouldn’t afford to have him wasting any, not with as many financial problems\nas St. Ives was having. She was already stretching it just to buy him his\nfavorite cereal every week. But really, how could she deny him?</p>\n<p>She couldn’t put her finger on the quality about Ernie that made him so\nendearing. Perhaps it was his quiet, unassuming eyes, always hidden behind\nthose thick glasses. Or it could be the fact that he danced — if you could\ncall his carefree movements that — his way everywhere, and didn’t care at all\nwhat others thought of him. Most likely, it was just his mind. He was a child\ntrapped inside a man’s body, destined never to understand the complexities of\nthe world. He perceived things so innocently — and struggled with even the\nsimplest task that involved remembering something — but he had such tenacity\nthat it was hard not to admire him. It was sad, in a way, that he’d never\nmature past his current mental capacity, but Rhonda was careful never to pity\nany of the many down-on-their-luck people she knew at St. Ives. She didn’t\nbelieve in pity — she believed in helping people.</p>\n<p>Rhonda thought back to 20 years ago, when she first came to St. Ives looking\nto help those less fortunate than herself. She’d always had a heart for the\nhomeless, and St. Ives needed someone skilled in the culinary arts to help out\nin the kitchen. It seemed to be a perfect fit, and for a long time it was.\nThat was a long time ago, when she was an attractive, idealistic\nwhippersnapper of a child who wanted to save the world. Much had changed since\nthen — now she was just struggling to keep food on the table for all the\nresidents, and every day seemed to drag on longer than the next. Her chance to\nmake a true difference was gone, and her options were dwindling even more\nquickly.</p>\n<p>Thankfully, though, there were people like Ernie that appreciated the work\nshe did. Even if he didn’t say it, she knew he’d be lost without her and the\nrest of the staff at St. Ives. And truth be told, they’d be lost without him\nand the other residents as well. Their lives were inexplicably intertwined,\nand Rhonda knew she could never leave St. Ives voluntarily, no matter how hard\nit got or how pointless it all seemed sometimes.</p>\n<p>The scraping of Ernie’s chair brought her back to the present.</p>\n<p>“Ernie,” she said. “We need to talk ‘bout last night.” He’d hoped he could\nescape without receiving the lecture, but he knew better.</p>\n<p>Rhonda pulled out the chair across from Ernie and sat down heavily. Her dark\nround face, framed by her bunned graying hair, was taut as she looked hard at\nErnie, but her eyes shone a compassionate gleam. He looked down at the floor,\navoiding her eyes.</p>\n<p>“Ernie, why didn’t you come back las’ night?” The questions was simple\nenough. Ernie thought hard, trying to remember exactly why he hadn’t made it\nback, but his mind drew a blank. “I don’t know,” he finally muttered.</p>\n<p>“Wal, you know da rules… You know I want ya ta be back before 8. You\nshouldn’t be runnin’ ‘round late at night by yerself. Besides, you have a nice\nwarm bed here. Why you wanna sleep anywhere else?”</p>\n<p>“I slept with Ike… he was warm,” Ernie replied, moving his head back and\nforth methodically, still staring at the floor.</p>\n<p>“Wal, jus’ be sure you make it back in tonight. You know I was worried ‘bout\nyou. I’m just glad you’re all right.” She stood up and patted him on the back.</p>\n<p>“Go on. I guess you’ll be going back up to the corner today?”</p>\n<p>Ernie nodded.</p>\n<p>“Well, come back later on. I’m baking cookies, and you might not get any if\nyou’re not careful.” Ernie nodded again and stood up quickly as Rhonda began\nbusying herself around the kitchen again.</p>\n<p>“Bye Rhonda,” Ernie mumbled as he walked out of the kitchen. Rhonda smiled\nagain. One could never stay angry at Ernie for very long. She knew he didn’t\nmean to stay out, and that he was sorry. He was safe, that was all that really\nmattered.</p>\n<p>As soon as he left the kitchen, Ernie grasped the headphones and put them\nover his ears. With a familiar flick of his index finger, he started the music\nagain, and jived his way on back towards 34 th and Broadway.</p>\n<hr />\n<p><strong>Chapter 2: Ned</strong></p>\n<p>Beep. <em>Eggs, they’d have to wait for a minute.</em> Beep. <em>Ahh, milk, that\ncould go with the orange juice –- better double-bag it just in case.</em> Beep.\n<em>Chips. Nothing special there.</em> Beep. Beep. Beep. <em>Load the bags in the cart\nand…</em></p>\n<p>“Would you like some help getting that out to your car, Mrs. Jensen?”</p>\n<p>“Oh no, dear, I’ll be fine. Thank you for your help. You have a nice day.”</p>\n<p>“You too, Mrs Jensen.” Looking towards the back of the store, he was Ned was\npleased to see an empty register line. He ran his hand through his graying\nhair and began to twirl his mustache. Finally a short break. His line had been\nnon-stop for the entire morning, and despite his affinity for hard work, Ned\nneeded a break. He nodded at Maria, turned off his cashier light, and walked\ntowards the men’s’ room.</p>\n<p>After relieving himself, he lowered himself slowly on the small bench in the\nlavatory. His knee was acting up again today. He’d need to take a few more\nAspirin if he was going to make it through the rest of the day.</p>\n<p>The door to the restroom blew open with a whoosh and in stepped Bob McCrane.</p>\n<p>“Hey, Ned. Taking a break?” His smile was far too plastic to be genuine. Bob\nwas about 25 years old, and most of the cashiers resented him, Ned included.\nNed was nearly twice his age, and probably twice as intelligent, but Bob was\nthe boss. He knew how to kiss corporate ass like no one Ned had ever met, and\nhe was rewarded for it. He was always smiling, always trying to joke with\neveryone, always oblivious to the fact that no one liked him.</p>\n<p>Ned smiled wryly back. “Yes, it’s been a busy day.”</p>\n<p>“Indeed it has. Everybody needs a break eventually, that’s the truth, mmm-\nhmm. Back when I was working for…”</p>\n<p>Ned took the cue and tuned out the rest of the inane story. All of Bob’s\nstories were the same. They all eventually ended with Bob saving the day\nsomehow with his ingenuity, his charisma, and his I-just-won-an-Oscar smile.\nNed didn’t need to hear another one of Bob’s supposedly inspirational stories\nin order to do his job better. And no story could improve his knee’s condition\n– certainly not one of Bob’s.</p>\n<p>He already took his job very seriously. In fact, he took everything in his\nlife seriously, but the job was especially important. Before immigrating to\nthe US , Ned had been a well-trained, well-respected mechanical engineer. He\nwas a wizard with mechanical structures, talented at design, and had a decent\njob designing small engines for lawn mowers, cement mixers, and the like.</p>\n<p>It was a decent life, but there were dangers too. He and Lavina just didn’t\nhave the kind of freedom that they truly wanted, and they wanted their\nchildren to have the best possible opportunities available to them. Life in\nthe US seemed the best way to provide all of that, so they emigrated.</p>\n<p>Things didn’t work out as they had planned, though. Lavina had become\npregnant early on in their new life in America , and their finances were\nalready strained from the journey itself. The pregnancy was long and\ndifficult, and hospital bills continued to pile on. Ned had been holding out\nfor a job related to his field of expertise, but at every interview they\nturned him away, citing “lack of reliable experience.” It seemed his years in\nEurope were not verifiable by the American companies, and despite his\nexcellent overseas references, most companies were not willing to give him a\nchance.</p>\n<p>He tried everything he knew to become more desirable to the American\nemployers. He immersed himself in American culture, became familiar with\nAmerican mechanic style and design, and created a portfolio of impressive\nideas to present at interviews. He even changed his name to Ned, since\nemployers seems to have such a hard time pronouncing his real one.</p>\n<p>Again and again, however, he was turned away. With mounting bills and a new\nbaby at home, Ned did the only he could — he took a manual labor job helping\nout at a construction site. Most of his co-workers were either in high school\nor immigrants like him. It wasn’t glamorous, but it helped pay the bills.</p>\n<p>Ned worked incredibly hard, but he hadn’t lasted long. The knee injury from\nhis childhood made it nearly impossible to carry heavy loads for long\ndistances, a major job requirement, and he spent each evening with an ice pack\non his swelling joint. Lavina finally convinced him to try and find another\njob, one that would require less physical strain. And with yet another baby on\nthe way, Ned knew he’d have to find something.</p>\n<p>When Ned spoke to Jon, his supervisor, about leaving, Jon had asked his\nwife, who worked as a manager at the local Dominick’s to hire him. It was a\ndock in pay, and certainly not the step upwards that Ned was hoping to make,\nbut he was grateful for the much needed opportunity.</p>\n<p>That was several years ago. Jon’s wife no longer worked at this particular\nstore, and most of the other people he’d worked with in the past had long\nsince moved on, but Ned had kept his job and continued to support his growing\nfamily.</p>\n<p>It was far from the dream he and Lavina had had when they came to America ,\nbut Ned worked hard and earned himself quite a reputation amongst those\ncustomers who frequented Dominick’s Store # 4534. His grocery bagging skills\nhad grown so legendary that new trainees were required to work with him a\nminimum of 10 hours before they could start bagging items themselves, just so\nthey could learn the ropes.</p>\n<p>Ned was ruthlessly committed to efficiency. He could scan, bag, and load a\ncustomer’s groceries into their cart faster than most customers could get\ntheir credit card out of their purse, all while holding a pleasant\nconversation. He never forgot a customer, he remembered everyone’s children or\nfamily and asked after them, and was always ready with a joke or short\nanecdote to lighten someone’s mood. Not to mention his uncanny ability to fit\nmore items in a plastic bag than one would think possible. He knew exactly\nwhen items required a double or even triple bag, always took extra care not to\nbreak eggs or crush bread, and ensured all scented items were kept separate\nfrom food items, to protect his customers from soapy tasting bread, meat and\ncheese.</p>\n<p>Ned did not go entirely unnoticed for his dedication and knack for the job.\nHe’d been employee of the month countless times, and many customers flocked\nspecifically to his line at the front of the store, just so they could tell\nhim how their new baby girl was doing, or hear his latest joke, or ask for\nprayer for an ailing relative. Many women in the local area brought cakes,\ncookies, and other food stuffs for Ned and his family; yes, Ned was not\nunnoticed for his hard work.</p>\n<p>But Ned was growing old. He could feel it in his bones every morning, and he\ncould especially feel it as he sat down idly listening to Bob ramble on about\nnothing in the men’s room.</p>\n<p>“So how about that, huh?” Bob beamed as his story drew to a close.</p>\n<p>“That’s pretty incredible, Bob,” Ned answered idly. He had no idea what Bob\nhad been talking about, but all the stories were the same, and the appropriate\nresponses sounded nearly as rehearsed as the stories themselves by now. Of\ncourse it was all lost on Bob. He was completely infatuated with no one but\nhimself, and Ned’s lack of interest didn’t faze him in the least.</p>\n<p>“Yeah, it’s a great story… Well, I’d better get going. Lots to get done,\nmmm-hmmm. Don’t dally too long, Ned. The candy around your line seems to be a\nlittle out of whack.” Bob flashed another prize-winning smile as he dried his\nhands and stepped back out of the men’s room with a whoosh.</p>\n<p>Ned stood up slowly and gingerly put some weight on his knee. He hoped the\nAspirin would kick in soon. It was going to be a long day.</p>",
      "date_published": "2004-11-03T12:10:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/november-1st/",
      "url": "https://tylerbutler.com/november-1st/",
      "title": "November 1st",
      "content_html": "<p><strong>Chapter 1: Ernie</strong></p>\n<p>“Are we there yet?”</p>\n<p>Melissa sighed again. “No, baby, not yet.” The five-year-old squirmed\nrestlessly in the backseat.</p>\n<p>“Mommy…”</p>\n<p>“Angela, I’ve told you already. We’ll get there when we get there. Sit down,\nbe still, and hush up!” Melissa felt the tension in her own voice. Could it\nreally only be 10 AM? It was guaranteed to be a long day. Offhand she realized\nthat it had been far too long since Angela had commented.</p>\n<p>At Lawrence ‘s insistence, she had taken Angela to an ear, throat and mouth\nspecialist, but of course he had found nothing wrong with Angela’s hearing. It\nwas with a certain sense of satisfaction that she had informed Lawrence of the\nresults. She had long since argued with him that Angela <em>could</em> listen; she\nsimply never <em>wanted</em> to. Lawrence, ever the idealist, desperately wanted to\nbelieve that there was something physically hindering her obedience, rather\nthan accept the fact that their daughter was obstinate and overly excitable.</p>\n<p>By now, Angela should have been bouncing off the walls, but all was quiet in\nthe back seat. A quick glance in the rear-view mirror revealed an enthralled\nfive-year-old, nose glued to the window of the beat up Chevy Astro, staring\noutside.</p>\n<p>“What are you looking at?” asked Melissa as she followed Angela’s eyes to\nthe sidewalk outside. Melissa smiled as she realized what had caught her\ndaughter’s attention. On the left side of the street was a man in a faded\nwind-breaker walking in their direction.</p>\n<p>Well, he wasn’t really <em>walking</em>, he was <em>gyrating</em>. His arms flew out at\nodd angles from his body, his head bobbed, Melissa assumed in time to the\nmusic that was coming out of a pair of ancient, oversized headphones he wore\non his ears, and every so often he spun in a full circle and started the whole\nprocess over again.</p>\n<p>“Why is he walking like that, Mommy?” Angela giggled.</p>\n<p>“I think he’s dancing,” Melissa replied, slowing down slightly. The quiet\nbrought on by Angela’s trance was something to be cherished, and Melissa\nwanted it to last as long as possible.</p>\n<p>“Well, he’s not very good at it,” Angela piped up, with a slight hint of\ndisdain in her voice. The ballet lessons to which Melissa and Lawrence had\nfinally given in were paying off in many ways; not all of them were positive.</p>\n<p>“Everyone could use practice, Angela. Not everyone is blessed with as much\ntalent as you are.” Melissa caught herself as soon as she said it — there was\nfar too much sarcasm in her voice. Thankfully, the condescension was lost on\nher daughter, who was now squirming restlessly once again, her interest in the\nstrange man now gone.</p>\n<p>Melissa sighed again as she pushed down gently on the accelerator. It was\ngoing to be a long day.</p>\n<hr />\n<p>Ernie was oblivious to the curious faces peering at him as he jived his way\ndown Sullivan Street . He wouldn’t have cared, even if he had noticed them,\nbut with his headphones on he was in another world — <em>his</em> world. A world\nwhere one couldn’t afford to be still. A world of vigorous, deliberate\nmovements, of spinning and twirling, of quick-stepping, of fishtailing,\nbouncing, and doing it all over again. A world of glorious <em>movement</em>; when\nsurrounded by such miraculous music as Ernie’s, what other choice did one\nhave?</p>\n<p>Ernie had been out since last night. He had tried to make it back to St.\nIves, but the kids at 34 th and Broadway had been jiving late, and by the time\nthe last of them went inside, it was too late for Ernie to make his return\ntrip safely. Ken snuck him into his garage later that night, after his parents\nhad gone to bed, and Ernie stayed warm playing quietly with Ike, Ken’s German\nShepherd.</p>\n<p>Ken was a good friend, probably Ernie’s best. He had invited Ernie over for\ndinner once, but Mr. and Mrs. van Zandt were less than thrilled having a\n“dirty, disturbed man” at their home. Ernie had heard them arguing about it\nfrom outside the house, and though he didn’t understand all the words, he knew\nthat he wasn’t going to be eating dinner at the van Zandt’s then or ever. Ken\nhad come to the door with a sad look on his face telling him that his parents\n“already had dinner plans.” Ernie didn’t argue; he knew Ken didn’t have a lot\nof choice in the matter. Ken’s parents had told him not to hang out with Ernie\nany more, but fortunately Ken took much pleasure in doing the exact opposite\nof what his parents told him.</p>\n<p>Ernie had woken up early to make sure he made it out of the garage before\nMr. van Zandt saw him. He had wanted to stick around to jive with kids some\nmore, but it was too early; they were all still sleeping. He milled about the\nneighborhood for awhile, but hunger eventually got the better of him, and he\nstarted making the long trek back towards St. Ives. Rhonda was probably\nworried about him anyway.</p>\n<p>The perspiration was beginning to gather on his brow. It was going to be a\nwarm day. Ernie preferred it that way. It made him feel as though he was\nworking hard, even though he wasn’t. After all, work couldn’t feel <em>this</em>\ngood. Rhonda made him do work around the shelter every once in awhile,\nlandscaping and such, and she never let him listen to his music while he did\nit. He hated being without his music; life was so empty, so boring without it.</p>\n<p>The first side of his cassette finished, and his trusty Walkman soon made\nthe familiar _click-pah, click-pah _ as it automatically switched to the\nsecond side. Ernie turned the Walkman over in his hand and admired it yet\nagain. His rough, calloused fingers traced over the worn buttons. The text\nidentifying their respective functions had long since faded, but it didn’t\nmatter. He knew the buttons by heart anyway. The casing was scratched and\ncracked, the battery cover was attached by a piece of duct tape, and the small\nmotor made a dull moaning sound as it spun, but the Walkman was <em>his</em>. It\nbelonged to him, and only him; it was his passport to an astounding world of\nsound and rhythm.</p>\n<p>The dull gray stone of St. Ives snuck up on him without warning. The smell\nof sweetbread and chicken soup wafted gently across the street towards him,\nand he salivated involuntarily. He jived his way across the way, pausing\nmomentarily while a taxi flew by, horn blaring. Glancing up at the flickering\nneon cross above the door, Ernie pushed the large oak door open with one hand\nand reluctantly pulled the large headphones from his ears. Rhonda would\nalready be a little annoyed that he hadn’t come in last night — there was no\nneed to annoy her more by keeping the headphones on.</p>\n<p>He took the small staircase from the vestibule to the dining room two at a\ntime, and glanced around the small tables looking for familiar faces. Lester\nwas there, apparently taking a break from his occupation begging down on the\nBoardwalk, and Michael too, accompanied by his ever-present collection of\nassorted aluminum scrap.</p>\n<p>Ernie briefly considered attempting to bypass the kitchen and head upstairs\nto his room, then retrace his steps back downstairs to trick Rhonda into\nthinking he’d been upstairs all along. Of course, it wouldn’t work. Rhonda was\nalready well aware that he’d been out all night, and he’d only incur more\nwrath by trying to avoid her now.</p>\n<p>So into the kitchen he went, head down in his customary ignore-the-world\nfashion. He was aware of Rhonda’s stare as he moved straight towards the\ncupboard and grabbed a bowl and spoon.</p>\n<p>“Just siddown, Ernie. I’ll git it for ya,” Rhonda said, moving towards him.\nErnie didn’t argue. He sat down with his bowl and waited patiently for Rhonda\nto fill it.</p>\n<p>Rhonda walked over to the cupboard, took a nondescript Tupperware container\nout, and filled Ernie’s bowl. Ernie was more than happy to do this himself,\nbut Rhonda knew it would take him an hour just to find the right container. No\nmatter how hard he tried, he could never remember which container held the\nmagical cereal known as Trix. On the rare occasions he did attempt to locate\nthe Trix himself, he was reduced to tasting each container of cereal to find\nthe correct one.</p>\n<p>Rhonda poured the cereal and milk, and Ernie dug in with great fervor. Ah,\nTrix… or an off-brand that tasted remarkably similar… what a brilliant\ncereal! An explosion of sugary, fruity flavor in every bite! He wished that\nRhonda would give him real Trix — he could tell the difference — but Rhonda\nsaid that Trix were for kids and Ernie, unfortunately, was no longer a kid.\nHow could such a wonderful dietary concoction be limited to only those under\nage 13? He didn’t argue with Rhonda, though, because he had a feeling there\nwere other issues, most likely financial — which he would not even attempt to\ndecipher — at play.</p>\n<p>“Wal, it look dat man done done it ageen,” Rhonda shook her head back and\nforth at the small television in the corner. Ernie peered up at the screen,\nwhere the President was prattling on, looking strangely determined and\nstriking his hands against the podium definitively. Ernie wondered briefly\nwhat music he was listening to that could make him move like that — if he ever\nmet the President, he’d have to ask to borrow the tape.</p>\n<p>Rhonda was still shaking her head and muttering under her breath as Ernie\nreturned to his breakfast. Politics made the same amount of sense to Ernie as\nfinances, so he just avoided getting into any discussions about it. Rhonda, on\nthe other hand, was quite vocal about the upcoming election.</p>\n<p>“How we gonna manage with dem cuttin’ this, cuttin’ dat, not thinkin’ about\ndose ‘round us ain’t got nothin’? How we gonna do dat, Ernie?” She didn’t\nexpect an answer — but the question had to be vocalized in order for it to\nmatter.</p>\n<p>Ernie took the last bite of his Trix and stared down at the remaining milk,\nnow the color of rainbow sherbet.</p>",
      "date_published": "2004-11-02T15:59:00.000Z",
      "tags": [
        "novel",
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/tyler-a-novelist/",
      "url": "https://tylerbutler.com/tyler-a-novelist/",
      "title": "Tyler, a Novelist?",
      "content_html": "<p>OK, I’m going to keep this short, because I will be writing a lot in the next\nmonth. I am participating in <a href=\"/link-not-available?url=http%3A%2F%2Fwww.nanowrimo.com\">National Novel Writing Month</a>, and will be\nwriting a 50,000-word fictional novel in the 30 days of November. The journey\nwill be difficult, but with your prayers I will be victorious. I am\nregistered at the <a href=\"/link-not-available?url=http%3A%2F%2Fwww.nanowrimo.com\">NaNoWriMo website</a> as dragonfly2004. Feel free to look\nme up. I will be posting my manuscript in its entirety <a href=\"/tags/nanowrimo\">on this site</a> as I\nwrite it. Hopefully I will also have time to post some stats on how I am\ndoing, but no guarantees. I’d love for people to read what I write and offer\nencouragement during the month, but I’d prefer if there were no comments\nregarding the characters, plot, themes, or anything of the sort, because I\nwant to be able to focus on my vision for the month and not second-guess my\ndecisions while I am trying to write. Wish me luck.</p>\n<p><strong>It’s going to be a long month.</strong></p>",
      "date_published": "2004-11-01T13:46:00.000Z",
      "tags": [
        "nanowrimo"
      ]
    },
    {
      "id": "https://tylerbutler.com/homeland-security/",
      "url": "https://tylerbutler.com/homeland-security/",
      "title": "Homeland Security?",
      "content_html": "<p>OK, this is ridiculous. The Department of Homeland Security can’t find\nanything better to do, apparently, than harass small business owners. Check\nout this <a href=\"/link-not-available?url=http%3A%2F%2Fstory.news.yahoo.com%2Fnews%3Ftmpl%3Dstory%26cid%3D816%26e%3D1%26u%3D%2Fap%2F20041028%2Fap_on_fe_st%2Ftoy_store_homeland_security\">Yahoo News story</a>:</p>\n<blockquote>\n<p>ST. HELENS, Ore. - So far as she knows, Pufferbelly Toys owner Stephanie Cox\nhasn’t been passing any state secrets to sinister foreign governments, or\nviolating obscure clauses in the Patriot Act.</p>\n</blockquote>\n<blockquote>\n<p>So she was taken aback by a mysterious phone call from the U.S. Department of\nHomeland Security to her small store in this quiet Columbia River town just\nnorth of Portland.</p>\n</blockquote>\n<blockquote>\n<p>“I was shaking in my shoes,” Cox said of the September phone call. “My first\nthought was the government can shut your business down on a whim, in my\nopinion. If I’m closed even for a day that would cause undue stress.”</p>\n</blockquote>\n<blockquote>\n<p>When the two agents arrived at the store, the lead agent asked Cox whether she\ncarried a toy called the Magic Cube, which he said was an illegal copy of the\nRubik’s Cube, one of the most popular toys of all time.</p>\n</blockquote>\n<blockquote>\n<p>He told her to remove the Magic Cube from her shelves, and he watched to make\nsure she complied.</p>\n</blockquote>\n<blockquote>\n<p>After the agents left, Cox called the manufacturer of the Magic Cube, the\nToysmith Group, which is based in Auburn, Wash. A representative told her that\nRubik’s Cube patent had expired, and the Magic Cube did not infringe on the\nrival toy’s trademark.</p>\n</blockquote>\n<blockquote>\n<p>Virginia Kice, a spokeswoman for <strong>Immigration and Customs Enforcement</strong>, said\nagents went to Pufferbelly based on a trademark infringement complaint filed\nin the agency’s intellectual property rights center in Washington, D.C.</p>\n</blockquote>\n<blockquote>\n<p><strong>“One of the things that our agency’s responsible for doing is protecting the integrity of the economy and our nation’s financial systems and obviously trademark infringement does have significant economic implications,”</strong> she said.\nSix weeks after her brush with Homeland Security, Cox told The Oregonian she\nis still bewildered by the experience.</p>\n</blockquote>\n<blockquote>\n<p>“Aren’t there any terrorists out there?” she said.</p>\n</blockquote>\n<p>I have several problems with this whole event. First of all, why is the\n“protection” of our nation’s economy the responsibility of the government at\nall, least of all the DHS? We’re supposed to be [relatively] free market,\nright? Second, why is someone from the <strong>Immigration and Customs Enforcement</strong>\noffice doing the commenting? This makes even less sense! Third, it’s a Rubik’s\nCube for crying out loud! And the patent’s expired! Finally, wasn’t the DHS\ncreated to safeguard our country from terrorists? Even if terrorists <strong>were</strong>\ninfringing on trademarks (which I seriously doubt they are), I’d still rather\nthe DHS leave them alone if they can’t actually tell a terrorist from a small\nbusiness owner.</p>\n<p>On the other hand, had this happened to me I probably would have asked for\nsome paperwork or something proving they had authority to do this, but then,\nwe live in a culture of fear here in the US, so I can’t say I blame Ms. Cox\nfor simply complying. She hadn’t done anything wrong, after all. What did she\nhave to fear? (The answer is <em>everything</em>. Government sucks. And yes, I am\n<a href=\"/2004/09/tolls-and-cameras/\">paranoid</a>.)</p>",
      "date_published": "2004-10-30T01:08:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/playing-with-ubuntu/",
      "url": "https://tylerbutler.com/playing-with-ubuntu/",
      "title": "Playing With Ubuntu",
      "content_html": "<p>I finally got fed up with XP on my laptop. I don’t use it much for games\nanymore, so I decided that it was time to try Linux again. I had previously\nloaded Suse 9.1 on it over the summer, but I could never get my Linksys WPC54G\nPCMCIA wireless card working, no matter what I tried, so I gave up. I didn’t\nwant to shell out cash for a new card, and a laptop without wireless is a\npitiful thing. Also, I used to like KDE, but it looked really bad on my\nlaptop, and I simply didn’t feel like going through all the hassle of trying\nto get Gnome up on a KDE-centric distro. Finally at that point I was still\nusing Outlook (gasp!), and I didn’t relish trying to convert everything into\nEvolution <em>again</em>. So I went back to XP for awhile.</p>\n<p>Then I made the switch to GMail, and based on some high praise that\n<a href=\"http://www.ubuntu-linux.org\">Ubuntu</a> was getting from Patrick and others, I thought I might as well\ngive it a try. I needed to reformat my laptop anyway, and I figured if I\ndidn’t like it or it didn’t work, I could always just put XP back on there.</p>\n<p>Well, I am proud to say that Ubuntu up and running on my laptop. I was able to\n<em>very</em> easily set up my wireless card using <a href=\"/link-not-available?url=http%3A%2F%2Fndiswrapper.sf.net\">NDiswrapper</a>, and there was\neven a helpful guide linked to on the Ubuntu website. It doesn’t allow me to\nmonitor link quality and everything, but at least it works.</p>\n<p>I have never used a Debian-based distro before, but I really like it so far.\nThe package management has been great, and using alien I’ve been able to load\nup some RPM’s as Deb packages as well. I’ve got <a href=\"/link-not-available?url=http%3A%2F%2Fbeatniksoftware.com%2Ftomboy%2F\">Tomboy</a> running, which is\ncool (I’m using it for notes about my upcoming novel), and I am installing\n<a href=\"/link-not-available?url=http%3A%2F%2Fwww.gnome.org%2Fprojects%2Fbeagle%2F\">Beagle</a> as we speak. I like the overall polish of Gnome, but the “spatial\nbrowsing” is driving me nuts. I want an address bar! I suppose I’ll get used\nto it - it’s my only major complaint right now. Well, that and the fact that\nthere’s no IE for Linux (haha). I need it for work - Firefox doesn’t render\nthe application we use for ticket management correctly. I have to use RDP and\nlog into my server to enter tickets. And I’m still having problems getting\nSamba and Web Folders shared between my Windows boxes and Ubuntu. But\nhopefully <a href=\"http://forge.novell.com/modules/xfmod/project/?ifolder\">iFolder</a> will help with that.</p>\n<p>Anyway, overall I am very pleased with my new setup so far, and have not yet\nfound any truly compelling reasons to switch back to XP. Here’s hoping I\ndon’t. I’m certainly learning a lot more with Linux.</p>",
      "date_published": "2004-10-29T03:04:00.000Z",
      "tags": [
        "ubuntu"
      ]
    },
    {
      "id": "https://tylerbutler.com/interview-with-microsoft/",
      "url": "https://tylerbutler.com/interview-with-microsoft/",
      "title": "Interview with Microsoft",
      "content_html": "<p>Microsoft is coming to campus on Thursday and Friday of this week, and I\nmanaged to get an interview. One of the guys who’s coming is an alumnus from\nIIT, and he used to be in <a href=\"/link-not-available?url=http%3A%2F%2Fwww.hawktour.net%2F\">my IPRO</a> (back before it became <strong><em>my</em></strong> IPRO),\nand he sent me an email asking if I knew of anyone from the IPRO that I would\nrecommend he interview. I gave him the only name I could in good conscience,\nand suggested he interview me as well. So he asked for my resume, and I got an\nemail this afternoon requesting my preference for an interview time. I’m not\nsure if any of it’s going to pan out, but it’s a good opportunity nonetheless.\nI’m also not too sure how I feel about working for MS, but I’ll cross that\nbridge if/when I come to it. Wish me luck!</p>\n<hr />\n<p><em>November 5, 2004</em></p>\n<p>Well, I made it past the first two hurdles. The on-campus interview went well,\nand I must have impressed Ondrej enough that he pushed my resume on through to\nan official recruiter. The recruiter emailed me today about setting up a phone\ninterview Wednesday next week. The way I understand it is that if the phone\ninterview goes well, then I’ll be heading out to Redmond for an on-site\ninterview. Then, if they’re <em>really</em> interested, I’ll get an offer.</p>\n<p>Anyway, I am excited, but would appreciate your thoughts and prayers. This is\na big deal for me. I’m keeping my fingers crossed.</p>\n<hr />\n<p><em>December 17, 2004</em></p>\n<p>Well, I finally heard back from them today, and they are moving me through to\nthe next stage of the interview. I still don’t know the logistics yet, and it\nkind of throws a wrench in the works with my current plans for next semester,\nbut I’m sure I can work something out if I get an offer. :-)</p>\n<hr />\n<p><em>January 21, 2005</em></p>\n<p>Looks like I am flying out to Seattle on February 7th, interviewing on the\n8th, then flying back on the 9th. I am excited, but a little nervous as well.\nHopefully I’ll impress them.</p>",
      "date_published": "2004-10-28T05:01:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/no-more-anonymous-comments/",
      "url": "https://tylerbutler.com/no-more-anonymous-comments/",
      "title": "No More Anonymous Comments",
      "content_html": "<p>I have, after much thought, decided to disable anonymous commenting on this\nsite. For one thing, there are actually blog spammers who hit me with a few\nlong non-sensical spam comments every once in awhile. But I could deal with\nthat — and if I had the time, I could even upgrade <a href=\"https://www.geeklog.net/\">Geeklog</a> so it would\nblock most of the spam. But that wasn’t the real problem — the real problem is\nthat people post comments and I have absolutely no idea who they are. Most of\nmy friends are nice — Patrick and Kim usually sign their comment posts, which\nis nice. There are, however, a few people who never do, and I am forced to go\nlooking through my access logs to figure out what IP accessed the site at the\napproximate time the comment was posted, then lookup the IP and see if I can\nthink of anyone I might know that uses ISP. While I certainly do enjoy being\n<a href=\"/2002/04/april-16-2002/\">Sherlock Holmes</a> on occasion, this is just too much. So Pat, Kim, Ricardo,\nand anyone else who indulges me by reading this, please just set yourself up an\naccount and post your comments — I really do like it when you post comments.\nIt makes me feel all warm and bubbly inside.</p>",
      "date_published": "2004-10-23T07:36:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/ode-to-the-nice-guys/",
      "url": "https://tylerbutler.com/ode-to-the-nice-guys/",
      "title": "Ode to the Nice Guys",
      "content_html": "<p>A friend gave this to me. It’s written by a girl somewhere, and is available\nonline at <a href=\"/link-not-available?url=http%3A%2F%2Fwww.stwing.upenn.edu%2F~jenf%2Fwriting%2Frant04.html\">http://www.stwing.upenn.edu/~jenf/writing/rant04.html</a>. I like\nit. It’s well-written and very on point. As a “nice guy,” or <a href=\"https://www.intellectualwhores.com/\">Intellectual\nWhore</a>, as some have called it, I identified very well with the topic. May\nmy vindication come quickly.</p>\n<blockquote>\n<p><strong>Ode to the Nice Guys</strong></p>\n</blockquote>\n<blockquote>\n<p><em>This rant was written for the Wharton Undergraduate Journal</em></p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>This is a tribute to the nice guys. The nice guys that finish last, that\nnever become more than friends, that endure hours of whining and bitching\nabout what assholes guys are, while disproving the very point. This is\ndedicated to those guys who always provide a shoulder to lean on but restrain\nthemselves to tentative hugs, those guys who hold open doors and give\nreassuring pats on the back and sit patiently outside the changing room at\ndepartment stores. This is in honor of the guys that obligingly reiterate how\ncute/beautiful/smart/funny/sexy their female friends are at the appropriate\nmoment, because they know most girls need that litany of support. This is in\nhonor of the guys with open minds, with laid-back attitudes, with honest\nconcern. This is in honor of the guys who respect a girl’s every facet, from\nher privacy to her theology to her clothing style.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>This is for the guys who escort their drunk, bewildered female friends back\nfrom parties and never take advantage once they’re at her door, for the guys\nwho accompany girls to bars as buffers against the rest of the creepy male\npopulation, for the guys who know a girl is fishing for compliments but give\nthem out anyway, for the guys who always play by the rules in a game where the\nrules favor cheaters, for the guys who are accredited as boyfriend material\nbut somehow don’t end up being boyfriends, for all the nice guys who are\noverlooked, underestimated, and unappreciated, for all the nice guys who are\nmanipulated, misled, and unjustly abandoned, this is for you.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>This is for that time she left 40 urgent messages on your cell phone, and\nwhen you called her back, she spent three hours painstakingly dissecting two\nsentences her boyfriend said to her over dinner. And even though you thought\nher boyfriend was a chump and a jerk, you assured her that it was all ok and\nshe shouldn’t worry about it. This is for that time she interrupted the best\nkilling spree you’d ever orchestrated in GTA3 to rant about a rumor that\nromantically linked her and the guy she thinks is the most repulsive person in\nthe world. And even though you thought it was immature and you had nothing\nagainst the guy, you paused the game for two hours and helped her concoct a\ncounter-rumor to spread around the floor. This is also for that time she\ndidn’t have a date, so after numerous vows that there was nothing “serious”\nbetween the two of you, she dragged you to a party where you knew nobody, the\nbeer was awful, and she flirted shamelessly with you, justifying each fit of\nreckless teasing by announcing to everyone: “oh, but we’re just friends!” And\neven though you were invited purely as a symbolic warm body for her ego, you\nwent anyways. Because you’re nice like that.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>The nice guys don’t often get credit where credit is due. And perhaps more\ndisturbing, the nice guys don’t seem to get laid as often as they should. And\nI wish I could logically explain this trend, but I can’t. From what I have\nobserved on campus and what I have learned from talking to friends at other\nschools and in the workplace, the only conclusion I can form is that many\ngirls are just illogical, manipulative bitches. Many of them claim they just\nwant to date a nice guy, but when presented with such a specimen, they say\nirrational, confusing things such as “oh, he’s too nice to date” or “he would\nbe a good boyfriend but he’s not for me” or “he already puts up with so much\nfrom me, I couldn’t possibly ask him out!” or the most frustrating of all:\n“no, it would ruin our friendship.” Yet, they continue to lament the lack of\ndatable men in the world, and they expect their too-nice-to-date male friends\nto sympathize and apologize for the men that are jerks. Sorry, guys, girls\nlike that are beyond my ability to fathom. I can’t figure out why the\nconnection breaks down between what they say (<em>I want a nice guy!</em>) and what\nthey do (<em>I’m going to sleep with this complete ass now!</em>). But one thing I\ncan do, is say that the nice-guy-finishes-last phenomenon doesn’t last\nforever. There are definitely many girls who grow out of that train of thought\nand realize they should be dating the nice guys, not taking them for granted.\nThe tricky part is finding those girls, and even trickier, finding the ones\nthat are single.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>So, until those girls are found, I propose a toast to all the nice guys. You\nknow who you are, and I know you’re sick of hearing yourself described as\nubiquitously nice. But the truth of the matter is, the world needs your\npatience in the department store, your holding open of doors, your party\nescorting services, your propensity to be a sucker for a pretty smile. For all\nthe crazy, inane, absurd things you tolerate, for all the situations where you\nare the faceless, nameless hero, my accolades, my acknowledgement, and my\ngratitude go out to you. You do have credibility in this society, and your\nwell deserved vindication is coming.</p>\n</blockquote>\n<blockquote>\n</blockquote>\n<blockquote>\n<p>Fu-zu Jen, SEAS/WH, 2003</p>\n</blockquote>",
      "date_published": "2004-10-20T08:55:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/fun-with-text-to-speech/",
      "url": "https://tylerbutler.com/fun-with-text-to-speech/",
      "title": "Fun With Text-to-Speech",
      "content_html": "<p>At work, we have a mindless task that has to be done manually every hour.\nBasically, we have to log into this website and click around a bit to make\nsure that the site is still up and running. It’s pretty ridiculous, I know,\nbut it has to be done nonetheless. No one in the office ever remembers to do\nit, so I decided it might be nice to have an alarm of sorts. So I remembered\nsome of my old Micrososft Agent tinkering back in High School, and looked\naround for some examples of using the <a href=\"/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Fspeech%2Fdownload%2Fsdk51%2F\">Windows speech API</a> in C#. It didn’t\ntake me long to figure it out, and the code for my simple text-to-speech\nprogram is deceptively simple. Instead of providing the code as a download,\nI’m just posting it here since it is so short.</p>\n<div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>using</span><span> </span><span>System</span><span>;</span></div></div><div><div><div>2</div></div><div><span>using</span><span> </span><span>SpeechLib</span><span>;</span></div></div><div><div><div>3</div></div><div><span>using</span><span> </span><span>System</span><span>.</span><span>Threading</span><span>;</span></div></div><div><div><div>4</div></div><div>\n</div></div><div><div><div>5</div></div><div><span>namespace</span><span> </span><span>Speak</span></div></div><div><div><div>6</div></div><div><span>{</span></div></div><div><div><div>7</div></div><div><span>    </span><span>class</span><span> </span><span>Speak</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>{</span></div></div><div><div><div>9</div></div><div><span><span>        </span></span><span>///</span></div></div><div><div><div>10</div></div><div><span><span>        </span></span><span>/// The main entry point for the application.</span></div></div><div><div><div>11</div></div><div><span><span>        </span></span><span>///  [STAThread]</span></div></div><div><div><div>12</div></div><div><span>        </span><span>static</span><span> </span><span>void</span><span> </span><span>Main</span><span>(</span><span>string</span><span>[] </span><span>args</span><span>)</span></div></div><div><div><div>13</div></div><div><span><span>        </span></span><span>{</span></div></div><div><div><div>14</div></div><div><span>            </span><span>SpeechVoiceSpeakFlags</span><span> </span><span>flags</span><span> </span><span>=</span><span> SpeechVoiceSpeakFlags</span><span>.</span><span>SVSFlagsAsync</span><span>;</span></div></div><div><div><div>15</div></div><div><span>            </span><span>SpVoice</span><span> </span><span>v</span><span> </span><span>=</span><span> </span><span>new</span><span> </span><span>SpVoice</span><span>()</span><span>;</span></div></div><div><div><div>16</div></div><div><span>            </span><span>if</span><span>( args</span><span>.</span><span>Length </span><span>&gt;</span><span> </span><span>0</span><span> )</span></div></div><div><div><div>17</div></div><div><span><span>            </span></span><span>{</span></div></div><div><div><div>18</div></div><div><span><span>                </span></span><span>v</span><span>.</span><span>Speak</span><span>(args[</span><span>0</span><span>]</span><span>,</span><span> flags)</span><span>;</span></div></div><div><div><div>19</div></div><div><span><span>            </span></span><span>}</span></div></div><div><div><div>20</div></div><div><span>            </span><span>else</span></div></div><div><div><div>21</div></div><div><span><span>            </span></span><span>{</span></div></div><div><div><div>22</div></div><div><span><span>                </span></span><span>v</span><span>.</span><span>Speak</span><span>(</span><span>\"Please specify what you would like me to say.\"</span><span>,</span><span> flags )</span><span>;</span></div></div><div><div><div>23</div></div><div><span><span>            </span></span><span>}</span></div></div><div><div><div>24</div></div><div><span><span>            </span></span><span>v</span><span>.</span><span>WaitUntilDone</span><span>(Timeout</span><span>.</span><span>Infinite)</span><span>;</span></div></div><div><div><div>25</div></div><div><span><span>        </span></span><span>}</span></div></div><div><div><div>26</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>27</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div>\n<p>Basically all you need is the code above and the Interop.SpeechLib.dll file,\nwhich provides access to the speech utilities. For completeness (and since I\nhad some trouble finding the DLL), I put a copy of the file up on here.\nThis program basically just echoes back whatever string you pass in at the\ncommand line, so to get the scheduling working, I just used Windows Task\nScheduler. I scheduled a task to run every hour ever day between 8am and 10pm\n(check the advanced settings of the Task Scheduler), then pointed the task to\nthe compiled program, passing it the string I want it to say as the argument.\nSimple. And it works. I still smile every time one of the office computers\nsays, “It is time to check Blackboard.”</p>",
      "date_published": "2004-10-16T05:25:00.000Z",
      "tags": [
        "CSharp"
      ]
    },
    {
      "id": "https://tylerbutler.com/getting-rich/",
      "url": "https://tylerbutler.com/getting-rich/",
      "title": "Getting Rich",
      "content_html": "<p>I came across a link to this story on Slashdot. I always enjoy reading Paul\nGraham, because he writes quite simply, but obviously has the technical\nknowledge and experience to write on the topics he does. This particular\narticle was a brief analysis of trends in the market during the DotCom Bubble\nand talks a little bit about the future based on some of the market trends and\ntechniques from that time period. A good read, and it gives me hope that maybe\nI can still get rich. After all:</p>\n<blockquote>\n<p>I have no illusions about why nerd culture is becoming more accepted. It’s\nnot because people are realizing that substance is more important than\nmarketing. It’s because the nerds are getting <a href=\"https://www.paulgraham.com/nerdad.html\">rich</a>. But that is not going\nto change.</p>\n</blockquote>\n<p>Now, I don’t think I’m overly hung-up on “getting rich,” but it sure would be\nnice not to have to worry about how much I’m paying for food and whether or\nnot I can afford rent this month. Opposed to that, rich sounds pretty nice. If\nnot rich, at least “comfortable.” I also liked the quote about dressing\ninformally:</p>\n<blockquote>\n<p>Dressing up is not so much bad in itself. The problem is the receptor it\nbinds to: dressing up is inevitably a substitute for good ideas. It is no\ncoincidence that technically inept business types are known as “suits.” Nerds\ndon’t just happen to dress informally. They do it too consistently.\nConsciously or not, they dress informally as a prophylactic measure against\nstupidity.</p>\n</blockquote>\n<p>So true, so true! While I fully understand the importance of appearance,\npeople seem to miss the seemingly obvious fact that even underdressed people\ncan be very talented and have good ideas. I have found in my IPRO that while\npeople need direction and leadership, they also need freedom and informality.\nThat way they can get their work done on their own terms. Frankly, as a\nleader, it shouldn’t matter how the work gets done (within reason, of course),\nas long as it gets done. Obviously there are limits to this (for example, I\nrequire that students follow a standard comment format when writing their\ncode), but the idea is that most <strong>smart</strong> people work better when they can\nwork on their own terms. I have had managers argue with me about this, and I\nhave decided that dumb people exist, and that if you require someone else to\ntell you how to get your work done, you must also be dumb. It is against my\npolicy to work with dumb people. FInally, I really like what Graham says\nabout young people:</p>\n<blockquote>\n<p>A 26 year old may not be very good at managing people or dealing with the\nSEC. Those require experience. But those are also commodities, which can be\nhanded off to some lieutenant. The most important quality in a CEO is his\nvision for the company’s future. What will they build next? And in that\ndepartment, there are 26 year olds who can compete with anyone.</p>\n</blockquote>\n<p>You better believe it. While I do my best to defer to my elders, I don’t think\nthe fact that they are 20 years older than I is a default reason for them to\nmake better decisions than I do. And frankly, I <strong>do</strong> know a lot more about\nsome topics than they do. Consustently, however, I get little or no respect\nfrom people just because I am young. On the other hand, I am lucky in that I\nhave several older people who I deeply respect that also seem to respect me\nand my abilities (Dr. Sun, my friend Patrick). For the rest of you who think\nI’m too young to be any good at anything, how about reading a little bit of\nthe Bible:</p>\n<blockquote>\n<p>Don’t let anyone look down on you because you are young, but set an example\nfor the believers in speech, in life, in love, in faith and in purity.</p>\n<p><a href=\"http://www.biblegateway.net/cgi-bin/bible?passage=1TIM+4:12&amp;language=english&amp;version=NIV&amp;showfn=on&amp;showxref=on\">1 Timothy 4:12</a></p>\n</blockquote>\n<p>Take <strong><em>that!</em></strong></p>",
      "date_published": "2004-09-30T03:24:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/firefox-extensions-updated/",
      "url": "https://tylerbutler.com/firefox-extensions-updated/",
      "title": "Firefox Extensions (Updated)",
      "content_html": "<p>I have quite a few Firefox extensions that I find extremely useful, so I\nthought I’d share them.</p>\n<ul>\n<li>Firesomething: <a href=\"http://www.cosmicat.com/extensions\">http://www.cosmicat.com/extensions</a></li>\n<li>Adblock: <a href=\"/link-not-available?url=http%3A%2F%2Fadblock.mozdev.org%2F\">http://adblock.mozdev.org/</a></li>\n<li>Tabbrowser: <a href=\"/link-not-available?url=http%3A%2F%2Fwhite.sakura.ne.jp%2F~piro%2Fxul%2F_tabextensions.html.en\">http://white.sakura.ne.jp/~piro/xul/_tabextensions.html.en</a></li>\n<li>GMail Notifier: <a href=\"http://www.nexgenmedia.net/extensions/\">http://www.nexgenmedia.net/extensions/</a></li>\n<li>Allow Right-Click: <a href=\"/link-not-available?url=http%3A%2F%2Fextensions.roachfiend.com%2Findex.php\">http://extensions.roachfiend.com/index.php</a></li>\n<li>User Agent Switcher: <a href=\"/link-not-available?url=http%3A%2F%2Fwww.chrispederick.com%2Fwork%2Ffirefox%2Fuseragentswitcher%2F\">http://www.chrispederick.com/work/firefox/useragentswitcher/</a></li>\n<li>WeatherFox: <a href=\"/link-not-available?url=http%3A%2F%2Fweatherfox.mozdev.org%2F\">http://weatherfox.mozdev.org/</a></li>\n<li>Dictionary Search: <a href=\"/link-not-available?url=http%3A%2F%2Fdictionarysearch.mozdev.org%2F\">http://dictionarysearch.mozdev.org/</a></li>\n<li>Target Alert: <a href=\"http://www.bolinfest.com/targetalert/\">http://www.bolinfest.com/targetalert/</a></li>\n<li>Mozilla Calendar: <a href=\"https://www.mozilla.org/projects/calendar/\">https://www.mozilla.org/projects/calendar/</a></li>\n<li>Foxy Tunes: <a href=\"https://www.iosart.com/foxytunes/firefox/\">https://www.iosart.com/foxytunes/firefox/</a></li>\n<li>Cute Menus: <a href=\"/link-not-available?url=http%3A%2F%2Fcute.mozdev.org%2F\">http://cute.mozdev.org/</a></li>\n<li>Disable Targets for Downloads: <a href=\"/link-not-available?url=http%3A%2F%2Fwww.cusser.net%2F\">http://www.cusser.net/</a></li>\n<li>Download Manager Tweak: <a href=\"/link-not-available?url=http%3A%2F%2Fdmextension.mozdev.org%2F\">http://dmextension.mozdev.org/</a></li>\n</ul>\n<hr />\n<p><strong>Update 09/22/2004</strong></p>\n<p>OK, so the new version of Firefox (1.0PR) just isn’t cooperating with\nTabBrowser Extensions and pop-ups. I want my pop-ups to appear in new tabs,\nbut I don’t want all of them blocked - especially in GMail. Despite adding the\nGMail domain to the Exceptions list in the Firefox pop-up blocker, things\nstill won’t work. I think the problem is with TabBrowser Extensions, since\ndisabling it made everything work again. Anyway, in the meantime, I have tried\nto find a few other smaller extensions that will emulate the TabBrowser\nExtensions functionality to get around this. Here’s what I’m using right now.</p>\n<ul>\n<li>Tabbrowser Preferences: <a href=\"/link-not-available?url=http%3A%2F%2Fwww.pryan.org%2Fmozilla%2Fsite%2FTheOneKEA%2Ftabprefs%2F\">http://www.pryan.org/mozilla/site/TheOneKEA/tabprefs/</a></li>\n<li>TabX: <a href=\"/link-not-available?url=http%3A%2F%2Fextensionroom.mozdev.org%2Fmore-info%2Ftabx\">http://extensionroom.mozdev.org/more-info/tabx</a></li>\n<li>Tab Duplicator: <a href=\"/link-not-available?url=http%3A%2F%2Fwww.twannos-extensions.tk%2F\">http://www.twannos-extensions.tk/</a></li>\n</ul>\n<p>One minor aesthetic problem is with TabX. It just puts simple X’s for close\nbuttons, unlike the nice looking red buttons that TBE puts there. Oh well,\nbeggars can’t be choosers, right? I just hope that TBE doesn’t cause these\nproblems when a new version is released.</p>",
      "date_published": "2004-09-13T23:06:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/tolls-and-cameras/",
      "url": "https://tylerbutler.com/tolls-and-cameras/",
      "title": "Tolls and Cameras",
      "content_html": "<p>Lots to talk about in this rant. I first heard of the Illinois Governor’s plan\nto increase tolls in Illinois one day when I was driving to work. And this\nisn’t a small increase, either — the <a href=\"https://www.google.com/search?q=cache:B6k2O8uaf5sJ:www.suntimes.com/output/news/cst-nws-toll26.html&amp;hl=en\">tolls are doubling</a>! Unless you get\nan IPASS, of course. The solution, obviously, is to get an IPASS.\nUnfortunately, that in and of itself presents a bit of a problem. You see,\nIPASS tracks you. That’s my biggest beef with it. I understand the argument\nthat it “makes things faster” and reduces congestion, but it also records\n<strong>where I go</strong>. Check the <a href=\"https://www.illinoistollway.com/portal/page?_pageid=53,34586,53_34725:53_34734&amp;_dad=portal&amp;_schema=PORTAL\">FAQ </a>at their website. One part reads:</p>\n<blockquote>\n<p>I-PASS users can log onto <a href=\"http://www.getipass.com\">www.getipass.com</a> or link to the online maintenance\nfunction through the general Illinois Tollway Web site at\n<a href=\"http://www.illinoistollway.com\">www.illinoistollway.com</a> to update credit card information, add a new vehicle\nto the account, or <strong>even check on recent I-PASS transactions.</strong></p>\n</blockquote>\n<p>This bugs me. I have no intention of ever getting arrested or anything, but if\nfor some reason I was, I’m fairly certain my IPASS records could be pulled and\nused against me. This makes me angry. And despite the fact that the Tollway\nAuthority says they don’t track users speeds to issue tickets, I don’t trust\nthem. Didn’t RealNetworks claim their player wasn’t spyware at one point?\nAnyway, you won’t see me buying an IPASS.</p>\n<p>The day after I learned about this I decided to finally go and get my Chicago\nCard, which can be used as a fare card on CTA busses and trains. Since I’m a\npart-time student now, I don’t get a U-PASS, and I ride the train enough to\nwarrant getting one. But that made me realize the similarities between the\nToll situation and the Chicago Card. You no longer get a 10% bonus in funds\nwhen you add 10 or more dollars to your regular CTA fare card — you only get\nthe bonus when you have a Chicago Card. But the Chicago Card is tied to your\nname, so tracking is possible. With the regular fare card, they can track the\nuse of the card, but they can’t tie it to any one person. That’s the way I\nlike it. I submitted a question to the CTA people asking about the privacy and\ninformation collection policies of the Chicago Card, and here’s the response I\ngot:</p>\n<blockquote>\n<p>Dear Mr. Butler:</p>\n</blockquote>\n<blockquote>\n<p>Thank you for your inquiry. The CTA does not track the use of these cards by\nany individual unless requested by that individual. The Chicago Card Plus does\nprovide its users with an online record of their usage, but each customer has\na password of his or her own selection to access the information. The regular\nChicago Card does not offer this online service.</p>\n</blockquote>\n<blockquote>\n<p>If a law enforcement agency wishes to review our records, it can do so with\nthe official, lawful use of a warrant, court order, etc.</p>\n</blockquote>\n<blockquote>\n<p>Thank you for your interest.</p>\n</blockquote>\n<blockquote>\n<p>Sincerely,</p>\n</blockquote>\n<blockquote>\n<p>Terry Levin<br />\nCTA Customer Service</p>\n</blockquote>\n<p>Unfortunately, this doesn’t really answer my question. So no tracking is done\n“unless requested?” But what if law enforcement has a warrant to pull their\nrecords? Is Mr. Levin saying the information doesn’t exist (i.e. users aren’t\ntracked), or that it exists and isn’t used for any other purpose other than\nfor posterity’s sake? I don’t know. But it looks like no Chicago Card, Plus or\nnot, for me.</p>\n<p>Finally, I came across <a href=\"https://yro.slashdot.org/article.pl?sid=04/09/09/2217232&amp;tid=158&amp;tid=103&amp;tid=1&amp;tid=17\">this story</a> on Slashdot. Apparently the city is\nconsidering rolling out a whole bunch of cameras in the city and tying them\ninto the 911 call center. All good, in theory, right? It’ll help deter crime,\nright? I don’t think so. Why not just put up more street lights? A bright\nlight is the biggest deterrant to random crime. But that would be too simple,\nI guess. And lights can’t track you.</p>\n<p>Do I sound paranoid? I am. I don’t trust the government. They’ve given me no\nreason to. And government is universally corrupt, be it a national government,\na local government, or even a school administration. So it looks like I’ll be\npaying a lot more than the rest of you for the same services. Yes, it’s my\nchoice, but the government shouldn’t be allowed to charge me for my freedom.</p>\n<p>For what it’s worth.</p>",
      "date_published": "2004-09-11T06:13:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-right-to-read/",
      "url": "https://tylerbutler.com/the-right-to-read/",
      "title": "The Right to Read",
      "content_html": "<p>The article is in the form of a sort of sci-fi story, and is only one of\nseveral articles (I think) that were published by the <a href=\"http://www.acm.org\">ACM</a>. I’m not the\nbiggest fan of Stallman (he’s far too big a hippie for my tastes), but I think\nthe article’s use of extremes illustrates some excellent points about the\ntendency of government to get all up in our electronic business. Anyway, I\nenjoyed it. At first glance, it seems very outlandish, but when you think\nabout it and read the author’s notes, it becomes clear that the sad future\nisn’t far away.</p>",
      "date_published": "2004-09-01T04:15:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/bear-beer-guzzler/",
      "url": "https://tylerbutler.com/bear-beer-guzzler/",
      "title": "Bear Beer Guzzler",
      "content_html": "<p><a href=\"http://patrick.wagstrom.net/\">Patrick</a> sent me this story. What a cool bear! Does anyone have his\naddress? I’d like to invite him to my apartment-warming party. Betcha he does\nan awesome keg-stand. He’s probably been arrested though — he’s well under the\nlegal drinking age. (Yuk yuk).</p>\n<p><a href=\"/link-not-available?url=http%3A%2F%2Fwww.cnn.com%2F2004%2FUS%2FWest%2F08%2F18%2Fbear.beer.reut%2Findex.html\">http://www.cnn.com/2004/US/West/08/18/bear.beer.reut/index.html</a></p>\n<blockquote>\n<p>A black bear was found passed out at a campground in Washington state\nrecently after guzzling down three dozen cans of a local beer, a campground\nworker said on Wednesday.</p>\n</blockquote>\n<blockquote>\n<p>“We noticed a bear sleeping on the common lawn and wondered what was going on\nuntil we discovered that there were a lot of beer cans lying around,” said\nLisa Broxson, a worker at the Baker Lake Resort, 80 miles (129 km) northeast\nof Seattle.</p>\n</blockquote>\n<blockquote>\n<p>The hard-drinking bear, estimated to be about two years old, broke into\ncampers’ coolers and, using his claws and teeth to open the cans, swilled down\nthe suds.</p>\n</blockquote>\n<blockquote>\n<p>It turns out the bear was a bit of a beer sophisticate. He tried a mass-market\nBusch beer, but switched to Rainier Beer, a local ale, and stuck with it for\nhis drinking binge.</p>\n</blockquote>\n<blockquote>\n<p>Wildlife agents chased the bear away, but it returned the next day, said\nBroxson.</p>\n</blockquote>\n<blockquote>\n<p>They set a trap using as bait some doughnuts, honey and two cans of Rainier\nBeer. It worked, and the bear was captured for relocation.</p>\n</blockquote>",
      "date_published": "2004-08-19T13:20:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-big-move-part-1/",
      "url": "https://tylerbutler.com/the-big-move-part-1/",
      "title": "The Big Move (Part 1)",
      "content_html": "<p>I have been looking for a new apartment for what seems like forever. I started\nout with 5 other roommates, but when they decided to go into a house that just\nwasn’t up to my standards, I struck out on my own and started looking for one-\nbedroom places. Unfortunately, the search was tough. Many places I looked at\nwere either in fairly bad shape or just too expensive for the size. I was\ngetting pretty discouraged, especially since my financial situation isn’t\nexactly great and time was running out.</p>\n<p>On Saturday of last week (August 7) I looked at a 2 1/2 room studio apartment\non Hamilton Avenue, close to the corner of 35th and Archer. I liked what I saw</p>\n<ul>\n<li>and I liked the price, too. It was a little further from campus than I had\nhoped (about a 15-minute drive, depending on the lights), but it had beautiful\nhardwood floors, a large walk-in closet, and was in pretty good shape. It also\nsmelled great, which, considering some of the other places I looked at, was a\ndefinite plus. The landlord was understanding of my financial situation, and I\nexplained to him that I wouldn’t be able to pay until later the following week\nbecause <a href=\"/2004/08/i-hate-banks/\">my bank is stupid</a>. That was fine with him, so I crossed my\nfingers and waited until Friday so my bank would finally ackowledge that I had\nthe necessary funds in my account (have I mentioned yet that <a href=\"/2004/08/i-hate-banks/\">I despise\nbanks?</a>).</li>\n</ul>\n<p>Thankfully (and miraculously), my bank cleared the funds just before I needed\nto make the withdrawal for the security deposit and first month’s rent. I\nheaded over to the landlord’s office, got everything in order, and had the\nkeys in my hand in less than an hour. It felt really good to have the keys in\nmy hand. I grabbed Alex’s camera and headed over to get some pictures before I\ndestroyed the place with my stuff. Some of the best ones are here. Others are\navailable in the download section. Click on the photos below to get an\neven bigger photo.</p>",
      "date_published": "2004-08-18T01:22:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/i-hate-banks/",
      "url": "https://tylerbutler.com/i-hate-banks/",
      "title": "I Hate Banks",
      "content_html": "<p>I hate banks. I despise them. I wish a plague of death and disease upon them.\nThe concept of a bank seems simple, and indeed, useful, at least at first.\nPeople have money that they want to secure somehow so their money doesn’t get\nstolen from under their mattress or out of their wallets. So they give their\nmoney to an <a href=\"http://www.fdic.gov/\">insured</a> “corporation” of sorts that holds their money and\nkeeps a record of how much they have. For large transactions, the account\nholder can write a check for the amount of money they want to transfer to\nanother party and sign it. The “corporation,” (aka the bank) honors the\nrequest to transfer and handles the details so that the account holder doesn’t\nhave to. This is simple, right? This is “protecting ourselves,” right?</p>\n<p>Maybe, maybe not. In my experience, banks are nothing but hassle, especially\nfor people like me that have very limited funds available and need to bleed\nour accounts dry about every week or so. <a href=\"http://www.iit.edu\">Illinois Tech</a> pays me every two\nweeks with a check that I deposit to my checking account at <a href=\"http://www.lakesidebank.com\">Lakeside\nBank</a>. These checks are <strong>not</strong> out of state (obviously); In fact, they’re\ndrawn from Lakeside Bank! <em>So why does it take a <strong>week</strong> for my deposit to\nshow up in my account?</em></p>\n<p>This was the question I set out to answer a couple of weeks ago. The problem\narose when I made an electronic bill payment after making a deposit that my\nonline account information reported had been deposited and was available. The\nbank charged me an overdraft fee, claiming that the deposited funds were on\nhold, even though the account screen online clearly said that the funds were\navailable. I called the bank and was given the basic run-around:</p>\n<p>“This person is who you need to talk to.”</p>\n<p><em>Phone transfer. Wait for a while.</em></p>\n<p>“No, it’s so and so.”</p>\n<p><em>Another transfer. Doesn’t go through. Back to operator.</em></p>\n<p>“I’m sorry, she’s out of town for… ummm… looks like forever.”</p>\n<p><em>“Is there anyone else I can speak with?”</em></p>\n<p>“Ummmm, no. You’re screwed.”</p>\n<p><em>Can you help me at all?</em></p>\n<p>“No. That’s not my job. I just transfer phone calls. I am here to make your\nlife miserable.”</p>\n<p><em>“Well, tell your supervisor I said you’re doing an excellent job.”</em></p>\n<p>“Ummm, OK.”</p>\n<p>After that entirely useless exchange, I headed over to see if I could have\nbetter luck in person. I did, sort of. I got thrown around a bit from person\nto person, but finally one of the bankers helped me. She explained that these\nchecks were not being deposited in my account immediately because I was a “new\ncustomer.” New customer?! I’ve been banking there for <strong>four years!</strong> And\nseriously, Illinois Tech, who’s writing me the checks, hasn’t bounced a check\nin who-knows-how-long, so what are they worried about? I don’t know. I hate to\nsay it, but I gave up. My thirty dollars is gone forever. It just wasn’t worth\nit. I guess I’ll try to set up direct deposit. But with my luck, they’ll mess\nit up and I’ll lose the money permanently, or have to wait even longer to have\naccess to it. I hate banks.</p>",
      "date_published": "2004-08-17T06:18:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/a-short-history-of-video-games/",
      "url": "https://tylerbutler.com/a-short-history-of-video-games/",
      "title": "A Short History of Video Games",
      "content_html": "<p><a href=\"http://www.1up.com\">1Up.com</a> is running a story called <a href=\"http://www.1up.com/do/feature?cId=3116290\">The Essential 50</a>, which lists what\nthey consider to be the 50 most essential video games. It’s an interesting\nhistory lesson, since every entry has a short history of the game, the\ninnovations it had, and the impact it had on the industry and video game\ndevelopment. Interestingly, several games’ major impact was not technology or\ninnovation, as I would have imagined, but rather political and/or social.\nInteresting stuff.</p>",
      "date_published": "2004-08-16T12:15:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/american-airlines-apologizes-for-your-flight-delay/",
      "url": "https://tylerbutler.com/american-airlines-apologizes-for-your-flight-delay/",
      "title": "American Airlines Apologizes For Your Flight Delay",
      "content_html": "<p>When I received an email with the subject “American Airlines Apologizes For\nYour Flight Delay,” I got a little excited. “Yes! They’ll probably offer me a\nfree flight or some frequent flyer miles or something! Then my hours of\nmeaningless waiting at the Seattle-Tacoma terminal won’t be for nought!” Alas,\nit was not to be. Here’s the email:</p>\n<blockquote>\n<p>Dear Tyler Butler,</p>\n<p>On two separate occasions during the past week, we experienced technical\ndifficulties with our computer systems, causing some flights to be delayed. We\nunderstand that you traveled during both periods and likely were doubly\ninconvenienced.</p>\n<p>Please accept our sincere apologies for any inconvenience you may have\nexperienced, and rest assured that we are working diligently to take\ncorrective actions. We greatly value your business, appreciate your\nunderstanding and look forward to delivering the service you deserve in the\nnear future.</p>\n<p>Sincerely,</p>\n<p>Dan Garton<br />\nExecutive Vice President Marketing<br />\nAmerican Airlines</p>\n</blockquote>\n<p>I suppose I was dumb to assume that there would be some sort of incentive for\nme to continue my association with their airline included in the email, but\nthere wasn’t. As I thought about it more, I realized that flight delays are\njust something you have to deal with when you fly, and the fact that I was\nexpecting to get something out of my suffering was a by-product of a\nsuffocating atmosphere of “customer-is-always-right” consumerism. So, though I\ninitially wanted to call them and give them a chance to offer me something, I\ndecided to keep my mouth shut.</p>\n<p>Maybe I did get something after all?</p>",
      "date_published": "2004-08-14T03:27:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/word-of-the-day-cruft/",
      "url": "https://tylerbutler.com/word-of-the-day-cruft/",
      "title": "Word of the Day: Cruft",
      "content_html": "<p>I came across several different articles regarding a wide variety of topics,\nbut they all center around Apple’s OS, user interface design, and the concept\nof cruft. I found them to be quite interesting, and I learned a lot. I think\nI’m going to force the IPRO 305 students to read a few of them before they\nstart redesigning the <a href=\"/link-not-available?url=http%3A%2F%2Fwww.hawktour.net\">HawkTour</a> interface.</p>\n<h2><a href=\"#when-good-interfaces-go-crufty\"></a><a href=\"http://mpt.mirror.theinfo.org/stories/storyReader$374\">When Good Interfaces Go Crufty</a></h2>\n<p>A good introduction to the basic concept of cruft, which, as the article\nstates, should be familiar to any programmer worth his salt, especially those\ninvolved in UI design. Unfortunately, few programmers, let alone computer\nusers, realize what sort of cruft they’ve become accustomed to through regular\ncomputer use.</p>\n<h2><a href=\"#the-art-of-the-parlay\"></a><a href=\"https://daringfireball.net/2004/08/parlay\">The Art of the Parlay</a></h2>\n<p>An interesting discussion of the common belief that Apple could be Microsoft\nif they’d made some different decisions in the 80’s. An interesting history\nlesson, and includes some comparisons of the Apple and Microsoft approach to\nproduct design.</p>\n<h2><a href=\"#in-the-beginning-was-the-command-line\"></a><a href=\"/link-not-available?url=http%3A%2F%2Fjoesacher.com%2Fdocuments%2Fcommandline.php%3FPage%3DETRE\">In the Beginning was the Command Line</a></h2>\n<p>A historical look at BeOS and how that OS was an attempt to attack cruft. Too\nbad it failed to become popular (for various reasons).</p>",
      "date_published": "2004-08-14T00:37:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/ebay-scams-are-funny/",
      "url": "https://tylerbutler.com/ebay-scams-are-funny/",
      "title": "eBay Scams Are Funny!",
      "content_html": "<p>eBay used to be safe, and for the most part, I suppose it still is. The honest\npeople in the world still outnumber the dishonest ones, and I hope it stays\nthat way forever. But anyone who has used eBay a fair amount has gotten\nscammed at least once or twice, or at the very least, received emails from\npeople fishing for a gullible seller/buyer to scam. I myself paid for a\nrelatively expensive item that was never sent to me. Luckily, in that case, I\nwas protected because I went through eBay and they refunded my money. Of\ncourse, I was out a few hundred bucks for about three months while I went\nthrough their fraud process. That pretty much sucks for someone on a\nshoestring budget like me (though one has to wonder just how shoestring my\nbudget is if I can spend hundreds of dollars on eBay… yup, I’m enigmatic\nlike that…).</p>\n<p>Anyway, I saw a story on Slashdot about an eBay scammer, and eventually found\nthis site, <a href=\"http://www.p-p-p-powerbook.com/\">P-P-P-Powerbook.com</a>, that chronicles a relatively recent\n(April/May 2004) scam story. It’s really really funny, and there are some\nawesome pictures to go with it. I have the PDF document shared on here, but\nI’d really recommend checking the site as well.</p>\n<p>It’s tough to explain quickly what exactly happened. I guess the really\nimportant thing is that the seller, who was trying to sell an Apple Powerbook,\nwas contacted by a scammer who wanted to buy the Powerbook through an Escrow\nsite. Eventually the seller decided to scam this scammer, and eventually sent\nhim a P-P-P-Powerbook, picturres of which are below. Anyway, the story is\nquite long and involved, but very humorous, so I’d recommend checking it out.\nSome of my favorite picutres are below (there are more in the PDF and at the\nsite). Oh, and there’s also a hilarious site that offers <a href=\"/link-not-available?url=http%3A%2F%2Fbu.dotsomething.net%2Fpowerbook%2Fppppstore.html\">P-P-P-Powerbooks for\nsale</a>. It looks pretty legitimate…</p>\n<p>Get the PDF story here.</p>\n",
      "date_published": "2004-07-23T05:16:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/dropboxxer/",
      "url": "https://tylerbutler.com/dropboxxer/",
      "title": "DropBoxxer",
      "content_html": "<p>I am a mobile guy. I use my laptop on the road a lot, and at home I have three\ndifferent computers (desktop, server, media box). On top of all that I use\n<a href=\"/link-not-available?url=http%3A%2F%2Fomega.cs.iit.edu%2F\">Omega</a> to host some files and such for easy mobile access. I have\neverything networked together using windows file sharing, and for most part,\neverything wors flawlessly. The problem is, I often need to copy or move files\nfrom one remote location to another. Simple, right? Just drag and drop!\nUnfortunately, often times the windows I need to drag to aren’t readily\nvisible, and it is relatively time consuming to drag down to the taskbar, wait\nfor the window to become active, then drag back up to the window to drop the\nfile.</p>\n<p>If Windows would let me drop items on the taskbar, it’d be all good, but since\nit won’t, I decided to make my own application that would allow me faster\naccess to common “drop” locations.</p>\n<p>I did this in C# using a copy of Visual Studio .NET that I got through\nIllinois Tech’s Academic Alliance program through Microsoft. I’d never used C#\nor .NET before, so I learned as I went.</p>\n<p>DropBoxxer sits in your system tray, and doesn’t take up any screen real\nestate at all until needed. When you select a file and drag it over the left\ncorner (right above the system time) DropBoxxer fade up and in from off\nscreen. There are different “drop boxes” for various locations, with three\ntypes of icons — one for local locations, one for remote locations, and one\nfor the Recycle Bin (note that the recycle bin icon doesn’t currently work in\nversion 0.1). Simply drop the file over one of these drop boxes, and the\nprogram copies or moves the file to the drop location. By default, everything\nis copied rather than moved, but simply hold down the Shift key as your drag\nthe file(s) onto the drop box, and the files will be moved rather than copied.\nAs you drag something over a drop box, the location bar will display where the\ncurrent drop box points, in case you forget or need to double check.</p>\n<p>After the job is complete, DropBoxxer fades back down off screen so you\ndon’t have to worry about it any more. Next time you need it, simply drag a\nfile back over and it’ll automatically reappear. To exit the program, simply\nright-click on its task bar icon and select “Exit DropBoxxer.”</p>\n<p><strong><em>Notes About Version 0.1</em></strong></p>\n<p>Everything is currently hardcoded, so it’s not a whole lot of use to anyone\nother than me unless you want to get into the source code (included in the\ndownload) to make modifications. I plan to add functionality that will allow\nyou to drag folders onto the drop area to add drop locations, or at the very\nleast provide a menu option to that effect when you right click in the system\ntray. I’d also like to provide some better progress indicators when copying\nlarge files. As it stands right now, you don’t have any indication of what’s\ngoing on or how long the process is going to take.</p>\n<p>Finally, I want to trim the file size down a bit. It’s almost an entire meg\nexecutable, which seems ridiculously large for something as simple as it is.\nProbably has something to do with the image files I store in there…</p>\n<p>You can snag a copy of DropBoxxer Version 0.1 here. The zip contains an\nexecutable and the source code files/resources. The source code is crappy\nright now, but I will clean it up when I add the other functionality. If you\nmake modifications to the code, please write me and let me know. DropBoxxer\nrequires Windows XP (because of the fading and transparency effects), and\nrequires the .NET framework (I know, I know, but seriously, there is no other\nway to do an application that operates in a snazzy way and integrates so\nclosely with Windows. Java? I think not…)</p>",
      "date_published": "2004-07-21T05:02:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/mailinator-to-the-rescue/",
      "url": "https://tylerbutler.com/mailinator-to-the-rescue/",
      "title": "Mailinator to the Rescue!",
      "content_html": "<p>Ricardo sent me this website, <a href=\"/link-not-available?url=http%3A%2F%2Fwww.mailinator.net\">Mailinator.net</a>. It’s a really cool concept\nfor people who need to sign up for websites once or need to enter an email\naddress on a form for some reason. You don’t need an account - you make up the\nname on the spot, then the account is created automatically when a message is\nreceived. Then you log in, get the message, and leave. The account is\nautomatically deleted later! What a cool concept! Check out their website for\nmore info.</p>",
      "date_published": "2004-07-20T05:58:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/gmail-a-review-updated/",
      "url": "https://tylerbutler.com/gmail-a-review-updated/",
      "title": "GMail: A Review (Updated)",
      "content_html": "<p>When <a href=\"https://www.google.com/\">Google</a> first announced their new GMail service, I was\nrelatively unimpressed. The big deal was the gigabyte of storage. Of course, a\ngig is a lot of storage space, especially when compared to most quotas for\nother web-based email services such as Yahoo and Hotmail (Yahoo has since\nupped its quota to 100 MB) , but I have been using Outlook (I know - many\ndon’t like this program, but I have never had any problems) as a\nmail/contacts/calendar manager for a long time, and I tend to POP my mail.\nThat means I have lots and lots of gigs for mail, because everything just goes\nto my hard drive.</p>\n<p>After doing a little more reading, though, I discovered that GMail actually\nhad a really spiffy interface, was fast, and introduced some really cool ways\nto categorize, sort, and store your email. It makes sense, really. If I am\nGoogle, and I want to introduce a new service, I first stop and think, “What\ndo we do really well as a company?” Obviously, in Google’s case, the answer is\nsearching. From there, I start thinking, “Email is the largest volume of\ninformation most every person in the world has to try and keep organized.” If\nI am Google, and I want to introduce an email service, I’d better be able to\nleverage my strength in the search department to make it exciting. To really\nleverage search capabilities, I need a large volume of email - hence the 1GB\nquota. You see, I think that Google only offers 1GB of space because that is\nwhat is necessary to really make GMail’s other features stand out. Other email\nproviders won’t be able to compete with GMail solely by increasing their\nquotas, because that large volume of information introduces an organizational\nproblem that Google is better suited to solve. I think Google started looking\nat ways they could leverage their search engine on email, and realized that\nthey needed a large email base to be able to provide that, not the other way\naround. All in all, I decided I definitely needed to check it out, so I asked\na guy at work to hook me up with an account.</p>\n<h2><a href=\"#the-interface\">The Interface</a></h2>\n<p>Well, they weren’t kidding. GMail is fast (though I have’t tried it on a non-\nbroadband connection yet). GMail is spiffy-looking (very minimalistic, but\ndone well). GMail is useable. GMail is just <strong>cool</strong>. As you can see from the\nscreenshot, there really isn’t a whole lot to the interface. Links on the left\nto get to various classifications of email, emails displayed in the middle\nwith the standard checkbox to select them and a star to set them apart from\nother emails (comparable to flags in Outlook), and some “action links” along\nthe top and bottom of the message display. Nothing terribly groundbreaking,\nbut this is email, not rocket science.</p>\n<p>Before I could really take a look at things, though, I needed some emails.\nThat become my first problem. I first set up my @iit.edu account to forward to\nboth my @tylerbutler.com and @gmail.com accounts. I thought this was working -\nbut it wasn’t. In fact, for an entire weekend, I got no emails forwarded from\nmy @iit.edu account, because the stupid webmail IIT uses didn’t properly parse\nthe delimiter between the two addresses (I’ll save that rant for another time,\nI guess). I was confused at not getting any email (save the spam that came in\ndirectly to my @tylerbutler.com account), but I just figured nobody loved me.\nStranger things have happened, after all.</p>\n<p>Anyway, I finally managed to get some email into GMail, and was happy to see\nthat things looked like I expected - sort of. The most exciting thing to me\nabout GMail was the concept of conversations. Each email is displayed in the\ncontext of other emails sent from you back to someone, or from them back to\nyou. For example, if Brad writes me an email, then I respond to him, our\nemails will be grouped and displayed together as a conversation. This makes\nsense, since many times emails follow a threaded conversational format. For\npersonal emails, conversations are great.</p>\n<p>One of the quirks with conversations that I’ve noticed is that they’re\ndisplayed as “Brad, me(2).” This means, of course, that this conversation is\nbetween Brad and me, and that there are two emails in the conversation. But\nwho is Brad? I would much prefer if the last names were listed. I know lots of\npeople, and to me, first names alone don’t help a whole lot for descriptive\npurposes. I have a conversation between myself and two other people, both\nnamed Kyle. GMail displays the conversation as “Kyle, Kyle, me.” It’s\nconfusing which Kyle each is referring to. I imagine this could get even more\nconfusing as I get more and more email into my inbox. Also, some of my\nprofessors use Dr. X as their outgoing name. Conversations with these people\nare displayed as “Dr., me(3).” This particular quirk consistently makes me\nlaugh, so it’s all good.</p>\n<p>Another problem I have with the GMail interfce is that it doesn’t display full\nemail addresses in the “from” field when a name isn’t specified. In the case\nof personal emails, this isn’t usually a problem, but I get a lot of automated\nemails from addresses like <a href=\"mailto:support@domain.com\">support@domain.com</a>. These emails simply display as\nfrom “support,” while in Outlook they always displayed as\n“<a href=\"mailto:support@domain.com\">support@domain.com</a>.” In this case, I think GMail should opt to display it the\nway Outlook does, and display the email address when a name field isn’t\nspecified.</p>\n<h2><a href=\"#contact-management\">Contact Management</a></h2>\n<p>GMail does a decent job with its contacts/address book functionality. It\ncontains fields for name, email, and notes, and it provides an import utility\nthat can read Comma-Separated files. I exported my Outlook contacts to a CSV\nfile and easily imported them all into GMail. Interestingly, all the\nextraneous fields were placed into the Notes field, so the data is still\nvisible. I definitely don’t want to lose that information (addresses, instant\nmessage names, even some birthdays), so I am glad that GMail tries to keep it\navailable in some format. Fortunately for me, <a href=\"/link-not-available?url=http%3A%2F%2Fwww.plaxo.com%2F\">Plaxo</a> handles my address\nbook now, so it’s all backed up and available online anyway.</p>\n<h2><a href=\"#a-monumental-decision-a-bit-of-a-segue\">A Monumental Decision (a bit of a segue)</a></h2>\n<p>Initially, I thought GMail would be a great supplement to my mobile\nlifestyle — I could keep mobile copies of all my email, plus test out this new\nconversational mode and see what it was like. So I downloaded <a href=\"http://jaybe.org/info.htm\">Pop Goes the\nGMail</a>, a utility that allows you to fetch your GMail from any POP email\nclient, including Outlook. Unfortunately, the version I downloaded just didn’t\nwork for me (known bug), and I couldn’t find an old version (links that said\nthey were for the older version actually linked to the new one), so I gave up.\nBut that got me thinking - is there really any reason I want to stick with\nOutlook, other than to have access to all my old emails? I thought about the\nother functionality Outlook provides that I use: Contact Management and\nCalendaring. Well, Plaxo takes care of my contact management, and GMail has\ncopies of all the email addresses already, since I uploaded the CSV file. I’ve\nbeen thinking for a long time about switching my calendaring to an online\nformat anyway, since I don’t use Exchange, but I would like to allow my\nparents and other interested people see my schedule. I really wish I could get\niCal for Windows, but since I can’t, I plan to use the calendar on this\nwebsite.</p>\n<p>Between GMail, Plaxo, and Geeklog, I have a total online replacement for\nOutlook! So having made the decision to switch over to GMail completely, I set\nabout making the transition.</p>\n<h2><a href=\"#the-transition-begins\">The Transition Begins</a></h2>\n<p>Initially, I thought I’d just use Outlook to access my old email. But then I\nstarted thinking that the conversation viewing would be much more useful if I\nha all my old email available. A quick visit to Google produced a link to\n<a href=\"http://www.marklyon.org/gmail/default.htm\">Mark Lyon’s GMail Loader</a>, an application that will forward email from an\nMBOX file to a GMail account. Perfect! Only one problem - it doesn’t support\nPST files, which is what Outlook uses. Mark provides some great links to\nutilities on his site, but the PST -&gt; MBOX converter doesn’t support Outlook\n2003’s PST format - in fact none of the ones I found did. So I was forced to\nimport things folder by folder into Outlook Express, then convert the OE DBX\nfiles into MBX files using the utility Mark linked to on his site,\n<a href=\"http://people.freenet.de/ukrebs/dbxconv.html\">DBXConv</a>. Then, just for good measure, I ran <a href=\"http://www.marklyon.org/gmail/cleanmbox.zip\">MBox Cleaner</a> on the MBX\nfiles. This process is time consuming - especially for my thousands and\nthousands of emails. In fact, I am still working on this part.</p>\n<p>I decided to go ahead and split things up a bit so that I could test the\nupload through GML and make sure things were working. GML uploaded everything\nI gave it fine, but it is kind of slow, and GMail is even slower at displaying\nthe messages after they’re sent. I am sure this has something to do with the\nsorting and scanning (for advertisement targeting, more info below), but it is\nkind of annoying. I am really paranoid, so I keep track of the number of\nemails I uploaded, and I don’t start uploading a new batch until I’ve\nconfirmed that all the mail from the pervious batch arrived. Thus far,\neverything seems to be working fine, albeit a bit slowly.</p>\n<p>As far as Mark’s GML is concerned - it is a nifty little program. Two things,\nthough. Most importantly, the emails that you upload to GMail will be\ntimestamped when they actually arrived at GMail, not when they were initally\nreceived. This is kind of annoying, since I would prefer everything to be in\norder, but I don’t think it’s Mark’s fault - I think it’s a limitation in the\nway he has to interface with GMail right now. Maybe once GMail goes live,\nthere will be a better way to import old email. I am keeping my imported mail\nunder a special label just in case I want to delete it and reimport it later.</p>\n<p>Second, GML is written in Python, which is <strong>really cool</strong>. Despite this,\nthough, it uses TK instead of wxPython - what is Mark thinking?!</p>\n<p>Well, let’s get back to the GMail specific stuff, before I lose those of you\ncame here for a GMail review completely.</p>\n<h2><a href=\"#organizing-your-mail\">Organizing Your Mail</a></h2>\n<p>GMail offers great search capabilities, yes, but you’ll probably want to be\nable to sort your mail in some way. Traditionally, this has been done with\nFolders, which mirror the file system setup by allowing you to place emails in\na heirarchical structure. GMail’s sorting method is done through Labels. Every\nmessage can be labelled multiple times, and then recalled easily by sorting\nbased on the labels. It’s very cool, since there are many times when emails\nfit into one or more categories. As an example of what labels are like, think\nabout this: A Ford Taurus is a car, but it is also a vehicle. If I search for\n“cars,” I want the Taurus to be found. But if I search for “vehicles,” I want\nto see the Cadillac Escalade and the Taurus. Just because the Taurus is a car\ndoesn’t mean it stopped being a vehicle. Labels allow this multiple\nclassification, while traditional folders do not.</p>\n<p>It is possible to delete mail from GMail, but it is discouraged. “Archiving”\nis the preferred way of getting emails out of your inbox. Archived mail\ndoesn’t display in the inbox, but can be labelled, and it always can be found\nby selecting the “All Mail” category. If you’d prefer to delete messages, you\ncan move them to the Trash (More Actions -&gt; Move to Trash), which is emptied\nautomatically every 30 days, or you can manually empty it if you’d prefer.</p>\n<hr />\n<p>As is to be expected, GMail’s search functionality is very good. It’s also\nfast, especially when compared to Outlook’s horribly slow search function.\nSearching email is pretty easy, though I wish the “Search the Web” wasn’t so\nclose to the Search Mail button. If you prefer to further customize and refine\nyour search, simply expand the search options box and customize away.</p>\n<h2><a href=\"#filters-and-spam\">Filters and Spam</a></h2>\n<p>If you want to filter incoming mail automatically, GMail can do it. It’s a\npretty standard filtering system that allows you to label email based on\ncontent, sender, or other information. Filters are especially useful for\nmailing list subscribers. You can choose to have email automatically archived\nafter it is filtered, or you can choose to have it kept in your inbox. Each\nLabel on the left shows how many unread emails are contained in it, so you can\nquickly tell if a new filtered email arrived even if you choose to have it\nautomatically archived. (A note on the “archive” term. I understand what\nGoogle is trying to imply, but I think the archive term is misleading. When I\nthink archive, I think, “Saved somewhere, but a pain to get to.” In GMail this\nsimply isn’t the case. Archived email is as fast to access and find as other\nmail, it simply doesn’t sit in your inbox any more.) One really nice thing\nabout the filter is that it lets you “run” it on the email already in your\naccount so that you can make sure the parameters you’ve set in the filter are\ngoing to work properly.</p>\n<p>GMail also includes an always-on automatic spam filter. It seems to do a\npretty good job, though it is certainly wrong every once in awhile. It has\nmade a lot more mistakes with the mail I have been importing from Outlook than\nwith my new mail. I am not sure why that is. It is easy to classify mail as\nspam and vice-versa by selecting messages and clicking the appropriate button\n(see the screenshot). I am not sure if these classification changes you make\nare stored somewhere or affect the spam filter in any way. I’d like to think\nthat it does, and if GMail’s using a Bayesian filter, it’s likely. I’m sure\nthey probably have a database of known spam senders and use that in\nconjunction with Bayesian filters. That’s all just speculation of course. The\nbottom line is, it works pretty well.</p>\n<h2><a href=\"#suggestions\">Suggestions</a></h2>\n<p>GMail is currently in beta, and considering that, it’s in pretty good shape.\nThere are several things I’d like to see in the “final release,” so to speak.\nSome of them I’ve already mentioned, but I’ll include them here just so this\nlist is more comprehensive.</p>\n<h3><a href=\"#spam-count-display-now-supported-in-gmail\">Spam Count Display (Now supported in GMail!)</a></h3>\n<p>Currently GMail doesn’t display the number of spam messages in the spam box\nlike it does for the Inbox and Labels, even if the Spam box contains new\nmessages. I like to filter through my spam manually just to be sure there’s\nnothing there that got misclassified, and I’d like to be able to tell if there\nare any new messages there without opening the spam section.</p>\n<h3><a href=\"#accurate-message-count\">Accurate Message Count</a></h3>\n<p>Currently GMail displays the total number of conversations in a box, not the\ntotal number of discreet messages. I’d like both, or at least a place where I\ncan toggle it on or off. Since I’ve been importing a lot of email, I’d like to\nknow how many messages I’ve got, not conversations. I think this would be\ntrivial to include, and would be very useful.</p>\n<h3><a href=\"#conversations-toggle\">Conversations Toggle</a></h3>\n<p>I’m not sure if this would be too difficult to do, but I would like\nconversation mode to be toggle-able. There are some types of email that it is\nsimply better to have messages as discreet items. It’d be nice if this could\nbe toggled based on labels, so some labels would have conversations and others\nwouldn’t, but I’d settle for a global toggle if I had to.</p>\n<h3><a href=\"#name-display\">Name Display</a></h3>\n<p>I mentioned this earlier, but I’d like conversations displayed with full\nnames, and I’d like emails without the name field filled in displayed as\n“<a href=\"mailto:address@domain.com\">address@domain.com</a>”, not just “address.” I’ve put an edited screenshot to the\nleft.</p>\n<h3><a href=\"#official-message-import-method\">Official Message Import Method</a></h3>\n<p>Mark’s GML is a great solution, but because it forwards mail using SMTP, the\ntimestamps are all messed up. I’d like to see an official import mechanism for\nGMail that solves this problem and might work a little faster. I think\nallowing people to get their old mail in GMail will convert a lot more people\nto using it full time as I plan to. It doesn’t have to support PST files (in\nfact, I’d rather it didn’t), but MBOX support would probably be the best place\nto start. I think that the server load might be pretty high when such a\nservice starts, as hundreds of people will be trying to upload hundreds of\ngigs of email. So it might be best to have a sign-up system of some sort,\nwhere you provide users with a window of time that they can upload email.\nBasically, users would need to set up an appointment, sort of like setting up\ntime on a server farm. I’d gladly do that, especially if it meant I would get\nfaster upload service.</p>\n<h3><a href=\"#simpler-label-removal-added-june-12-2004-now-supported-in-gmail\">Simpler Label Removal (Added June 12, 2004) (Now supported in GMail!)</a></h3>\n<p>As it is right now, you can only remove labels from conversations by opening\nup the label group and selecting messages within that context. I’d like there\nto be a box that is basically the same as the “Add Label…” box, but removes\nlabels instead. Whenever messages are selected, no matter what the context,\nthat box gets populated with the labels that currently apply to the selected\nmessages, and by selecting a label from that box, the label is removed. It\nmight make more sense to do a different GUI design for this functionality,\nrather than having two separate boxes, but there just has to be a simpler way\nto remove labels - especially since I often mislabel emails and need to fix my\nown mistakes.</p>\n<h3><a href=\"#mailing-list-delivery-options-added-september-22-2004\">Mailing List Delivery Options (Added September 22, 2004)</a></h3>\n<p>While I am very glad to see some of my earlier suggestions added (see above),\nthere is one absolutely horrendous “feature” of GMail that I just noticed\nrecently that is driving me bonkers. Luckily, I did find out that this is\nexpected GMail behavior, and I am not just being dumb. The problem is this:\nWhen I send a message to a mailing list, my mailing list processor (MailMan,\nfor the record), modifies the subject and then sends a copy of the email on.\nThis subject modification is very useful for automatic sorting of mailing list\nmail. Also, MailMan (and other mailing list managers, I’m sure) have an option\nfor every list subscriber that allows them to decide whether they want to\nreceive a copy of the emails they post to the list or not. I <strong>always</strong> leave\nthis option on, for several reasons. One, I want all mail from a list in one\nfolder (or in GMail’s case, under one label). Manually moving my emails that I\nsent into that folder/label is a pain. Second, I want to quickly search all\nemail with <strong>[ipro305]</strong> in the subject quickly - that’s a fast way to only\nsearch for IPRO mailing list mail. Yes, GMail offers superb searching\ncapabilities that would probably let me get around this, but frankly, I just\nwant to do it my way. The version of the emails that GMail saves (in my Sent\nMail label) do not have that subject modification. **Arggggghhhhh! **</p>\n<p>Finally, this breaks one of my major rules of email - never <em>ever</em> <strong>ever</strong>\ndeny a message without telling the user. MailMan is sending out the copies of\nmy email back to my account (I verified this) - GMail simply doesn’t put them\nin my box - anywhere. Apparently they’re gone, because it is assumed that the\ncopy saved in my Sent Mail label is enough. I don’t like server-side spam\nfilters for the same reason (if GMail automatically deleted mail it classified\nas spam I’d be incredibly annoyed - sorting it and then letting me make\nadjustments is OK though). If my account receives an email, it should be put\nin my account <strong>somewhere</strong>, no exceptions. Here’s hoping this gets changed or\ncan be disabled on a per-user basis at the very least.</p>\n<h2><a href=\"#one-caveat\">One Caveat</a></h2>\n<p>In case you haven’t heard, GMail is ad-supported. This isn’t all that\nsurprising, considering most free webmail services are ad-supported. GMail is\nmuch more discreet than other webmail providers, though. See the screenshot to\nthe right for an example of GMail ads. These ads are displayed just to the\nright of the email contents, and are in relatively small font, as you can see.\nGMail’s ads are also targeted based on the content of the email. This means,\nof course, that the contents of the email is scanned automatically and ads are\nchosen based on the content of them email. The example ads to the right were\ndisplayed next to an email regarding Biblical scripture to be read at a\nwedding.</p>\n<p>Some people have expressed concern about the privacy of their email,\nespecially since GMail scans it. I guess I sort of understand where they’re\ncoming from, but people need to realize that email is a very insecure medium\nanyway, and that sensitive or private matters shouldn’t be handled through\nemail. I believe Google when they say they’re not seeing this info and that\nit’s all automatically done by their system. I also trust them to keep their\nsystem secure so nothing is compromised. Google has some very talented,\nintelligent people working for them, and they’ve given me no reason to doubt\nthem thus far. If you’re interested in what the link “About these links” in\nthe screen shot says, go to\n<a href=\"http://gmail.google.com/support/bin/answer.py?answer=6603\">http://gmail.google.com/support/bin/answer.py?answer=6603</a> and see for\nyourself what Google says about the ads and their commitment to privacy and\ntaste.</p>\n<h2><a href=\"#final-thoughts\">Final Thoughts</a></h2>\n<p>GMail is an awesome webmail system, even though it is still in beta. Even\nwithout the features I requested above, it is still a very useable, very\ncomprehensive system. I am looking forward to continuing to use it for as long\nas I can, and I hope to be able to completely switch over to it in the near\nfuture.</p>",
      "date_published": "2004-07-08T00:44:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/etymology-dictionary/",
      "url": "https://tylerbutler.com/etymology-dictionary/",
      "title": "Etymology Dictionary",
      "content_html": "<p>Haha, just kidding. Seriously, though — Ricardo sent me this link to an online\netymology dictionary. I haven’t had a chance to look at it as in depth as I’d\nlike, but I hope to over the next week or so. Looks like it could be a really\nuseful resource. Gosh, I turn out more like my dad every day…</p>",
      "date_published": "2004-07-05T15:26:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/comfortable/",
      "url": "https://tylerbutler.com/comfortable/",
      "title": "Comfortable",
      "content_html": "<blockquote>\n<p>Money can’t buy happiness, but it can make you awfully comfortable while you’re being miserable.</p>\n</blockquote>\n<blockquote>\n<p><strong>Clare Boothe Luce</strong>, <em>Socialite</em></p>\n</blockquote>",
      "date_published": "2004-06-15T07:00:00.000Z",
      "tags": [
        "quote"
      ]
    },
    {
      "id": "https://tylerbutler.com/impressing-your-friends/",
      "url": "https://tylerbutler.com/impressing-your-friends/",
      "title": "Impressing Your Friends",
      "content_html": "<p>From <em>An Introduction to the Theory of Traveling Waves</em>, by Erwin Weber:</p>\n<blockquote>\n<p>Notice that there is a star in front of the numbers for the above equations. Equations thus identified in the remainder of the text are to be forgotten. The equations are unimportant and any student who commits them to memory deserves to spend his entire electrical engineering career grabbing the hot end of a soldering iron. These equations may be useful in impressing your friends — those that don’t know any better — but other than this, they serve no useful purpose.</p>\n</blockquote>",
      "date_published": "2004-06-15T07:00:00.000Z",
      "tags": [
        "quote"
      ]
    },
    {
      "id": "https://tylerbutler.com/site-transfer-almost-complete/",
      "url": "https://tylerbutler.com/site-transfer-almost-complete/",
      "title": "Site Transfer Almost Complete",
      "content_html": "<p>I am almost done transferring all of the content from the old tylerbutler.com\nsite to the new format. There are still some sections that I am working on,\nbut it should be done pretty soon. As you can see, the new stuff is now at the\nroot of the site. The old site is still visible at <a href=\"/link-not-available?url=http%3A%2F%2Fwww.tylerbutler.com%2Foldsite\">http://www.tylerbutler.com/oldsite</a>.</p>",
      "date_published": "2004-06-15T04:54:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/firemen/",
      "url": "https://tylerbutler.com/firemen/",
      "title": "Firemen",
      "content_html": "<p>As I was walking home for my lunch break today, I noticed a car that had\nbroken down in at a stop light, slowing traffic down and bringing out the\nworst in many Chicago drivers that happened to be stuck behind the car. As I\nwalked by, a fire truck passed through the intersection, pulled over, and\nthree firemen and a paramedic got out and helped the man push his car out of\nthe intersection.</p>\n<p>No one called the fire department — they were just on their way back to a\nstation, saw someone in need, and helped him. They didn’t have to. No one\nwould have thought anything of it if they had just driven on by, but they\ndidn’t. It’s nice to see that people still help each other out. Is it possible\nI’m just surrounded by the only self-centered, egotistical people in the\nentire world here at Illinois Tech? Nah, I’m sure they’re everywhere, but\nthankfully, so are fire fighters.</p>",
      "date_published": "2004-06-04T06:07:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/wait-matches-burn/",
      "url": "https://tylerbutler.com/wait-matches-burn/",
      "title": "Wait, Matches Burn?",
      "content_html": "<p>Apparently, K-Mart has recalled some Martha Stewart brand matches because they\n<strong>“may ignite upon impact.”</strong> Nope, I am not kidding. It is really\nunbelievable that a retail store has to be <strong>this</strong> frightened of lawsuits to\ndo this. Can we all just agree to stop being stupid so stuff like this can\nstop happening? Please? With sugar on top?</p>",
      "date_published": "2004-05-30T12:08:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/all-i-said-was-comiskey-park/",
      "url": "https://tylerbutler.com/all-i-said-was-comiskey-park/",
      "title": "All I Said Was Comiskey Park!",
      "content_html": "<p>I’ve been meaning to write for awhile about my outrage over Comiskey Park\n(where the White Sox play; it’s only a couple blocks from my house) becoming\nUS Cellular Field. When the change initially took effect, there were many\nradio personalities, especially sportscasters, who said they were going to\nkeep calling it Comiskey. That lasted until someone (no doubt US Cellular’s\nlawyers) got angry and started suing people. At one point, I think (this has\nnot been verified, so take it with a grain of salt), the FCC started levying\nfines when someone said “Comiskey Park” in reference to “US Cellular Field,”\njust like how they fine stations when they slip up and broadcast “illegal”\nwords over the air.</p>\n<p>Anyway, the outrage I feel at renaming a historic sports landmark to something\nas ridiculous as US Cellular field may seem unwarranted. But for all you\nbaseball fans out there, how would you feel if Wrigley Field became Wrigley\nJuicy Fruit Gum Arena, or even worse, Spider-Man 2 Movie Coliseum? The problem\nis the perversion of our social culture by advertising. There’s an article\nover at k5 that nearly made me cry (out of agreement with what the guy was\nsaying, not sadness or happiness). Finally, someone else who feels the way I\ndo. I mean, one of the main reasons I built my own web server was so that I\ndidn’t have to host my site somewhere where they advertise all the time. I use\nMozilla Firefox as my browser so the pop-ups don’t bug me. If slashdot and k5\nwouldn’t advertise, I think I’d like them even more. I absolutely hate static\nadvertising. Why does everything <strong>have</strong> to revolve around money?</p>\n<p>Interestingly, when I bring this up in conversation, most people I talk to\nseem opposed to the idea (though admittedly not as vehemently as I am). So why\naren’t we fighting this sort of thing? Does our apathy and laziness truly run\nthat deep? In the end, I am forced to ask the age-old question: Is nothing\nsacred?</p>\n<p><a href=\"http://www.kuro5hin.org/story/2004/5/5/165728/6687\">http://www.kuro5hin.org/story/2004/5/5/165728/6687</a></p>\n<p>Oh, and I am trying to buy the domain savecomiskey.org, and hope to develop a\nsite where people can speak out against the evils of advertising. Maybe we\ncould even buy out US Cellular’s share of Comiskey! Then we could call it\nwhatever we want, right? I mean, money talks… If you’re interested in\nhelping me out, drop me an email.</p>",
      "date_published": "2004-05-22T02:50:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/the-drugs-the-drugs/",
      "url": "https://tylerbutler.com/the-drugs-the-drugs/",
      "title": "The drugs, the drugs...",
      "content_html": "<p>“Wow,” was all I could say after reading this article. For those of you who\nare unaware, a MUD is an online multi-user game. (There is a MUD FAQ at\n<a href=\"http://www.mudconnect.com/mudfaq/\">http://www.mudconnect.com/mudfaq/</a>) Anyway, the game in question is\nAchaea, a text-based MUD. It seems that the creators of the game introduced a\nhighly addictive substance, called “gleam,” into the game environment, and\nplayers’ characters quickly became addicts. The benefit of using gleam is an\nincrease in the character’s dexterity, but players who are suffering from\nwithdrawals after becoming addicts and trying to quit are paying a high price:\nit can take up to 25 hours of in-game time to recover from gleam addiction.\nMaybe people will learn from this virtual experience? Nope, didn’t think so…</p>",
      "date_published": "2004-05-21T12:03:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/unproduced-screenplays/",
      "url": "https://tylerbutler.com/unproduced-screenplays/",
      "title": "Unproduced Screenplays",
      "content_html": "<p>Interesting stuff from some pretty big names. I haven’t read it all yet, but\nI’m hoping maybe some of it will provide some fuel to get my own creative\njuices flowing so I can write something of my own for <strong>Keygrips</strong>. Anyway,\nthe link is <a href=\"http://www.kuro5hin.org/story/2004/5/8/73755/86297\">http://www.kuro5hin.org/story/2004/5/8/73755/86297</a>. Enjoy!</p>",
      "date_published": "2004-05-21T08:10:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/from-diary-to-blog/",
      "url": "https://tylerbutler.com/from-diary-to-blog/",
      "title": "From Diary to Blog",
      "content_html": "<p>Well, as you can see because you’re here, my diary has been moved here to a\nblog. The word “blog,” for all of you not well-versed in Internet terminology,\nis short for Web Log. A Blog is basically an online journal or diary where\npeople (in this case, mainly me) can post their thoughts, links to cool\nthings, etc. I started a diary last summer, but I didn’t keep it very updated,\nand once school started up, I actually forgot all about it. Now summer is here\nagain, and I am bored out of my mind. I tend to read a lot more now, because I\nam so bored, and because of this, I have a lot more things that I want to\nrespond to. Also, because it is summer, many of my friends are gone, so I have\nless people to talk to. So this blog gives me something to do. Also, a blog is\nreally cool because it allows people to post comments. So if you’re a friend\nof mine, or even a complete stranger, and you have something you want to say,\npost a comment in response to one of my posts! Anyway, that’s about it.</p>",
      "date_published": "2004-05-21T06:32:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/never-a-dull-day/",
      "url": "https://tylerbutler.com/never-a-dull-day/",
      "title": "Never A Dull Day",
      "content_html": "<p>How often are you contentedly watching a movie in your comfortably air\nconditioned room, when a friend (Matt Cerney, for the record) throws your door\nopen and yells, “Dude, the projects are on fire!” Welcome to my life. Never\ndull, that’s for sure. By the time Ricardo and I got out there, it was mostly\njust billowing smoke. I still haven’t heard exactly what happened, or if there\nwere fatalities or injuries. Nevertheless, running outside was the most\nexercise I’d gotten in awhile, and Matt’s expression as he opened the door to\nmy room almost made the whole experience worth it in and of itself.</p>",
      "date_published": "2003-07-02T00:37:00.000Z"
    },
    {
      "id": "https://tylerbutler.com/april-16-2002/",
      "url": "https://tylerbutler.com/april-16-2002/",
      "title": "April 16, 2002",
      "content_html": "<p><em>What follows is the account of Tyler Butler’s amazing transformation from\nordinary university student to super-sleuth…</em></p>\n<h2><a href=\"#saturday-april-13-830pm\">Saturday, April 13, 8:30pm</a></h2>\n<p>While on the way to get food, Tyler’s beloved 1986 Nissan Maxima gives out at\nthe stoplight at 35th Street and Wallace Ave. in Chicago, IL. The engine emits\nloud squealing noises, sparks, and black, burning-rubber-smelling smoke.\nFearing the worst, Tyler calls his friend Tom Hennigan, a Chicago native, to\ncome pick him up and figure out what to do with the car. Tom arrives, and the\ntwo decide to push the car into a parking space and leave it — it is already\ntoo late to call a trustworthy mechanic and tower, and they won’t be available\nuntil Monday anyway. The safest and best course of action seems to be to push\nthe car into a parking space and wait until the weekend ends.</p>\n<h2><a href=\"#sunday-april-14\">Sunday, April 14</a></h2>\n<p>Tyler goes to church in the suburbs, as per usual. He can’t really do anything\nabout his car until Monday, anyway.</p>\n<h2><a href=\"#monday-april-15\">Monday, April 15</a></h2>\n<p>Tyler discovers that Tom Hennigan has broken his foot, and needs to go to the\nhospital, and that his parents are in Arizona until next weekend. He can’t\nremember the name or address of Tom’s family friend, the mechanic that worked\non the car last time. He finally reaches Tom about 5:30pm, and gets the name\nof the mechanic’s shop. Consultation of the Chicago-land Yellow pages reveals\nthe phone number of Southwest Auto; a quick phone call to them and\narrangements are made. A number to a towing company that is trustworthy and\nworks with Southwest is given to Tyler, and he promptly calls them to make\narrangements. Because it is 6:15 by now, the tow driver is on his way back\nhome from his final tow for the day. He is willing to come out, but would\nrather not. Tyler figures his car has already been there for two days, and\nit’s not going to matter if it’s there for another night.</p>\n<h2><a href=\"#tuesday-april-16\">Tuesday, April 16</a></h2>\n<h3><a href=\"#1045pm\">10:45pm</a></h3>\n<p>Tyler calls the tower, and arranges for the pickup that day at noon. He finds\na friend to drive him to the location to meet the tower with the key and\ninformation. They arrive where the car is supposed to be parked, and it’s\nGONE. Uh-oh. Dan drops Tyler at the corner to do some investigating, and goes\non to run some errands. Since the car was parked a block from the local police\nstation, and in a safe residential area (safe — relatively speaking…), Tyler\ndoubts very highly that it has been stolen, and has instead been towed by the\ncity. A visit to the police station confirms this. It seems that the seemingly\nlegal parking spot was not-so-legal, and that the car has indeed been towed by\nthe city. Tyler calls the Southwest tower and explains to him that he is no\nlonger needed at 35th and Wallace. The tower says to call him back when Tyler\nfinds the car, and that he’ll pick it up at the pound. Tyler thanks the man\nand calls the number for the pound that was given to him by the police.</p>\n<p>The pound tells Tyler that without a License plate number, which Tyler doesn’t\nhave memorized (but does now!) or the 17 digit Vehicle Identification Number\n(VIN), they can’t verify whether they have the car or not. Tyler thanks them\nand goes home.</p>\n<p>Internet research suggests that the Tennessee Department of Motor Vehicles\nwill probably have the License plate number on file, so Tyler calls them.\nUnfortunately, the woman who would be best suited to help him is out on lunch\nbreak. Tyler thinks for a moment, and then remembers that the University\nparking services should also have a record of his license plate number. A call\nto them confirms this, and Tyler gets the plate number.</p>\n<p>He calls the pound back, and they say they don’t have record of a car with\nthose plates being impounded. Great. More internet research indicates that\nwhile it is possible to get a VIN from a plate number, it is time consuming\n(10 days) and there is a fee involved ($10). Tyler’s roommate, Jacques,\noverhearing the situation from Tyler’s phone conversation, picks up the phone\nand calls his mother in Iowa. She works at a local Sheriff’s Office, and at\nJacques’ request, runs Tyler’s license plates and secures the VIN and Title\nnumber. <em>(Amazing — it took less than 30 seconds, but don’t ask me if it was\nlegal or not…)</em></p>\n<p>Armed with the VIN, Tyler calls the pound back. To his disgust, neither the\nVIN nor the plate number yields any results. Tyler takes a break and goes to\nlunch.</p>\n<h3><a href=\"#130pm\">1:30pm</a></h3>\n<p>Tyler tries to get a ride back to the 35th street police station, but everyone\nhas class. He finally text messages Tom Hennigan’s cell phone, since Tom is in\nclass, asking what police district IIT is in. Tom messages back, and Tyler\ndoes more internet research to find the correct phone number for the station.\nA call to that station verifies what Tyler suspects — he was given the wrong\npound and phone number.</p>\n<p>Tyler calls the new pound and gets the address and pound inventory number of\nhis car. He is told that he can pay the $180 tow and storage fee by either\ncredit card or cash. He calls the Southwest tower and asks him to meet him at\nthe pound at 3:00. The tower agrees, and Tyler asks his friend Aaron to drive\nhim to the pound.</p>\n<h3><a href=\"#245pm\">2:45pm</a></h3>\n<p>Tyler finally finds the pound — after walking five blocks in circles. He walks\nin and stands in line. The tower calls at 3:15 and says he has arrived. Tyler\nstill hasn’t gotten to the front of the line. He tells the tower he should be\ndone shortly. The tower says he’ll wait.</p>\n<h3><a href=\"#345pm\">3:45pm</a></h3>\n<p>Tyler finally gets served at the pound. However, because the car is titled\nunder his mother’s name, he is unable to pay using credit. He has only $70 on\nhim. The pound people direct him to an ATM, but Tyler is unsure whether he has\nenough in his account to pay for the car. He walks outside, meets the tower,\nand explains the situation again. The tower agrees, in infinite patience, to\nwait while Tyler gets the money.</p>\n<p>The instructions to the ATM yield no results, and Tyler is forced to walk two\nblocks to the Sheraton Hotel, where the Concierge directs him to an ATM.\nLuckily, the monthly rent check has not yet been deposited, and Tyler does\nindeed have enough money in his account to pay for the car. He makes the\nwithdrawal, and runs back to the pound. The tower is still waiting, and Tyler\ngoes, once again, to the end of the line.</p>\n<h3><a href=\"#415pm\">4:15pm</a></h3>\n<p>Tyler finally gets served at the pound again. The man signs his form, and\nexplains that he will have to go to the cashier now to pay. Gee. How nice.\nWhat a smooth operation. He is second in line to the cashier, but she is\n“busy” doing something else at the moment, and he is forced to wait for 15\nmore minutes.</p>\n<h3><a href=\"#430pm\">4:30pm</a></h3>\n<p>Tyler finally gets the necessary paperwork done, and meets the tower outside\nto go get the car. The security guard explains that he cannot admit a tower to\nget the car without an additional signature from someone inside. Tyler, not\nsurprised at all at this point, heads back inside, prepared for another 30\nminute wait. How the tower manages to maintain his patience is beyond Tyler.\nLuckily, one of the men who can sign the tow form is outside, and signs the\nform almost immediately, negating the need for Tyler to go back inside.</p>\n<h3><a href=\"#445pm\">4:45pm</a></h3>\n<p>The car is finally found in the lot, and the tower puts it on the truck. Tyler\ntests it before it is put on the truck, and surprisingly, it starts and\ndoesn’t seems to have any problems. However, he’s come this far, so he might\nas well get it checked out. He tells the tower to go ahead and put it on the\ntruck, and the tower goes on his way — finally.</p>\n<p>Aaron has returned home already, so Tyler decides to decline his offer to come\nback in and pick him up, and instead walk to an El station. Tyler doesn’t\nrealize he’s far away from an El station, and it takes him another 10 blocks\nto find one. Finally, though, he makes it home.</p>\n<p>And so, as you can see, with the proper amount of internet knowledge and\nSheriff’s Office Worker connections, anyone can be Sherlock Holmes. If only\nArthur Conan Doyle could see me now…</p>\n<p><strong><em>Tyler “Sherlock” Butler</em></strong></p>",
      "date_published": "2002-04-17T08:00:00.000Z"
    }
  ]
}