<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tyler Butler</title><description>Personal website and blog of Tyler Butler, featuring articles on technology, programming, and more.</description><link>https://tylerbutler.com/</link><language>en-us</language><item><title>Introducing CCL</title><link>https://tylerbutler.com/introducing-ccl/</link><guid isPermaLink="true">https://tylerbutler.com/introducing-ccl/</guid><description>Introducing CCL</description><pubDate>Fri, 27 Mar 2026 20:27:00 GMT</pubDate><content:encoded>&lt;p&gt;In &lt;a href=&quot;/packagejson-considered-harmful/&quot;&gt;package.json considered harmful&lt;/a&gt;, I made the case that JSON is a
poor config format and that JSONC and JSON5 don’t actually fix the problem — they just extend the lifespan of a bad bet.
If comments are a requirement (and I think they are), and if simplicity matters, then the JavaScript ecosystem’s default
config story is genuinely broken.&lt;/p&gt;
&lt;p&gt;But pointing out what’s wrong is the easy part. What should you use instead?&lt;/p&gt;
&lt;p&gt;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
gets it right — or at least, gets closer than anything else I’ve tried.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-second-criterion&quot;&gt;The second criterion&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I said in &lt;a href=&quot;/packagejson-considered-harmful/&quot;&gt;package.json considered harmful&lt;/a&gt; that comment support is the
minimum bar for a config language. But there’s a second criterion I didn’t spend much time on: &lt;strong&gt;simplicity&lt;/strong&gt;. It needs
to be simple to hand-author, simple to read, and simple to understand.&lt;/p&gt;
&lt;p&gt;This sounds obvious, but it’s surprisingly easy to fail. Which brings me to my first encounter on the road to finding
something better.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#discovering-pkl-and-rejecting-it&quot;&gt;Discovering PKL (and rejecting it)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’ve been using &lt;a href=&quot;https://mise.jdx.dev&quot;&gt;mise&lt;/a&gt; for managing dev tools — it’s excellent for polyglot environments where you’re juggling Rust
and Node.js toolchains simultaneously. The same author released a tool called HK, a Git hook manager. I tried it out,
and the way HK is configured is using a language called &lt;a href=&quot;https://pkl-lang.org&quot;&gt;PKL&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I’d never heard of it. So I started researching, and wow — PKL is &lt;em&gt;not&lt;/em&gt; a configuration language. PKL is a programming
language &lt;em&gt;disguised&lt;/em&gt; as a configuration language. It’s far too complicated. It has far too many features.&lt;/p&gt;
&lt;p&gt;PKL does support comments, so it clears the first bar. But it fails the second one badly. At the point where your config
language needs a runtime and an execution model, the honest question is: why aren’t you just writing code? The
complexity cost is real; the benefit over simply using a programming language is not.&lt;/p&gt;
&lt;p&gt;Machines are, in some ways, secondary to this conversation. We believe this about programming languages — nobody designs
a language to make it easier for the computer. We design syntax and semantics to help the programmer, then do extra work
in the compiler. We go to all that trouble because we believe people are more productive in languages that are easier to
read and write.&lt;/p&gt;
&lt;p&gt;Config languages carry the same obligation. They should be easy to read, easy to write by hand. PKL seems to have
forgotten this.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#finding-ccl&quot;&gt;Finding CCL&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While I was working through PKL’s documentation and finding new things to be frustrated by, I came across a &lt;a href=&quot;https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html&quot;&gt;blog
post&lt;/a&gt; by Dmitrii Kovanikov. I found myself nodding along, saying “yes, this all makes sense.” It was about a
configuration language Dmitrii called &lt;em&gt;Categorical Configuration Language&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#what-makes-ccl-elegant&quot;&gt;What makes CCL elegant&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consider how you’d jot down a list on paper. You’d probably write a heading, indent a bit underneath it, maybe use a
dash for items. If something belongs under another item, you’d indent further. Maybe it would look something like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Errands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- Groceries&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fruit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Apples - 2 lb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Bananas - 1 bunch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Crudite platter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Cereal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Milk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- Vet - Spot&apos;s surgery ($500 deposit, ask about &quot;recovery diet&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s what a basic CCL config looks like:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/= Errands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Groceries &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Fruit &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Apples &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 2 lb&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Bananas &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; 1 bunch&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Crudite platter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Cereal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Milk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Vet &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; Spot&apos;s surgery ($500 deposit, ask about &quot;recovery diet&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;That’s it. Keys and values separated by &lt;code&gt;=&lt;/code&gt;. Comments are just entries with &lt;code&gt;/&lt;/code&gt; as the key — not special syntax, just a
convention. Nested values are indented. Lists are created by empty keys — much like the human-made list might use a dash
to denote a list item. There’s nothing else to learn.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The key insight is this: every time a language uses a special character to delimit structure — &lt;code&gt;{&lt;/code&gt;, &lt;code&gt;}&lt;/code&gt;, &lt;code&gt;[&lt;/code&gt;, &lt;code&gt;]&lt;/code&gt;, &lt;code&gt;&quot;&lt;/code&gt;,
&lt;code&gt;|&lt;/code&gt; — it creates an escaping problem. What if your value &lt;em&gt;contains&lt;/em&gt; that character? Now you need escape sequences. And
if your value is a shell command that already contains escaping, you end up double-escaping, which is a special kind of
misery.&lt;/p&gt;
&lt;p&gt;Whitespace doesn’t have this problem. You rarely need to escape a space. Nobody writes a shell command and worries it
contains too many leading spaces. Dmitrii calls whitespace “silent ninjas” — they do structural work without being
visible characters anyone would ever need to include literally in a value. YAML uses indentation too, but pairs it with
a large surface area of other syntax. CCL uses indentation &lt;em&gt;instead&lt;/em&gt; of that other syntax. That’s a meaningful
distinction.&lt;/p&gt;
&lt;p&gt;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, &lt;a href=&quot;https://chshersh.com/blog/2025-01-06-the-most-elegant-configuration-language.html&quot;&gt;Dmitrii’s post&lt;/a&gt; goes much further down that road — it’s one of the more satisfying things I’ve read about config design.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#minimal-syntax-in-practice&quot;&gt;Minimal syntax in practice&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There’s something else really powerful about CCL. The only characters that are processed in a special way are a newline
and an equals sign. And the equals sign is only special when it’s the first one on a line — every other equals is not
special.&lt;/p&gt;
&lt;p&gt;This means you can use CCL to embed other languages quite easily. But it also happens to be really useful for apps that
need to store shell commands. Escaping is always a pain when you have a shell command that also needs to do escaping in
the shell — double escaping is hard.&lt;/p&gt;
&lt;p&gt;CCL solves that because there’s no escaping. You get a string that represents the exact string you need to run in the
shell. I make heavy use of this in my app &lt;a href=&quot;https://github.com/tylerbutler/santa&quot;&gt;Santa&lt;/a&gt;, where every package source is essentially a set of shell commands.
It’s very easy to configure in CCL with no weird escaping rules to explain.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#building-with-llms&quot;&gt;Building with LLMs&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The other reason I found CCL interesting is that it’s been a fun project to explore with LLMs and different programming
languages. I have an interest in lots of languages but I’m not fluent in all of them. I can read code and understand
what the code does, but I couldn’t necessarily write it from scratch without a lot of references.&lt;/p&gt;
&lt;p&gt;So I had fun creating a &lt;a href=&quot;https://github.com/CatConfLang/ccl-test-data&quot;&gt;library of test cases&lt;/a&gt;, then a test harness, then instructions for how to build a test
harness in any language. I used that harness to build CCL parser implementations in Rust, Gleam, Go, and TypeScript.
Each one was a chance to learn something about the language while also building something genuinely useful.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#ccl-isnt-competing-with-json&quot;&gt;CCL isn’t competing with JSON&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before I go further, I want to be direct about something: I’m not arguing that CCL should replace JSON. That’s not the
point, and it’s not a realistic claim.&lt;/p&gt;
&lt;p&gt;JSON’s ubiquity comes from being a data interchange format — something every language can produce and consume, with a
spec stable enough that parsers written a decade apart still agree. That’s genuinely valuable, and CCL doesn’t offer it.
CCL has no ambitions there, and it shouldn’t. The two formats are solving different problems.&lt;/p&gt;
&lt;p&gt;The argument I’m making is narrower: when you’re choosing a config language and you actually have a choice, CCL deserves
serious consideration. Most of the time when we reach for JSON as a config format, we’re not making a deliberate choice
— we’re just following the path of least resistance. npm did it, the tools around npm did it, and now the question feels
settled before it’s been asked.&lt;/p&gt;
&lt;p&gt;But there are plenty of contexts where the question isn’t settled. You’re building a new tool. You’re designing the
config format for an app you own. You’re starting a project that isn’t already embedded in the JSON ecosystem. In those
moments, you have a real choice, and the default answer isn’t necessarily the right one.&lt;/p&gt;
&lt;p&gt;CCL will likely never be as popular as JSON, and that’s fine. Popularity follows adoption, and adoption follows
ecosystem gravity — JSON has decades of that. What CCL has instead is a set of properties that make it genuinely
well-suited to the specific job of human-authored configuration: minimal syntax, no escaping problems, comments as a
first-class concept. Those properties don’t help you interchange data between microservices. They do help you write and
maintain config files that real people have to read and edit.&lt;/p&gt;
&lt;p&gt;That’s a smaller job than what JSON does. It’s also the job JSON has always been bad at.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After spending time with this, I wanted to do more than just build parsers for my own use. I’ve created a GitHub
organization — &lt;a href=&quot;https://github.com/CatConfLang&quot;&gt;CatConfLang&lt;/a&gt; — to collect CCL implementations across languages and
build out the ecosystem a bit. The reference implementation is &lt;a href=&quot;https://github.com/chshersh/ccl&quot;&gt;Dmitrii’s OCaml
version&lt;/a&gt;, but there are now parsers in Rust, Go, TypeScript, and Gleam, each developed
against a shared test suite so behavior stays consistent.&lt;/p&gt;
&lt;p&gt;I also built a &lt;a href=&quot;https://github.com/CatConfLang/ccl-test-data&quot;&gt;comprehensive test suite&lt;/a&gt; that I continue to improve and a
website, &lt;a href=&quot;https://ccl.tylerbutler.com&quot;&gt;ccl.tylerbutler.com&lt;/a&gt; including LLM prompts for folks who want to explore LLM
coding agents on a “real project.”&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</content:encoded></item><item><title>package.json considered harmful</title><link>https://tylerbutler.com/packagejson-considered-harmful/</link><guid isPermaLink="true">https://tylerbutler.com/packagejson-considered-harmful/</guid><description>package.json considered harmful</description><pubDate>Thu, 26 Mar 2026 22:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Any web developer over the last 15 years or so has encountered &lt;a href=&quot;https://www.json.org&quot;&gt;JSON&lt;/a&gt;. It stands for JavaScript Object Notation, and
it is one of the most ubiquitous data formats on the web today. It is, as they say, literally everywhere.&lt;/p&gt;
&lt;p&gt;You’d be forgiven for thinking its ubiquity is evidence of its quality. You would be wrong.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#what-json-is-actually-for&quot;&gt;What JSON is actually for&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before I make that case, let’s establish what JSON was designed to do, because value judgments need context.&lt;/p&gt;
&lt;p&gt;From Wikipedia:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;JSON grew out of a need for a real-time server-to-browser session communication protocol without using
browser plugins such as Flash or Java applets, the dominant methods used in the early 2000s.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;JSON is JavaScript’s serialization format. It’s how JavaScript takes in-memory data and represents it as text, then
converts 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.&lt;/p&gt;
&lt;p&gt;Lots of languages have something like this. Python has &lt;a href=&quot;https://docs.python.org/3/library/pickle.html&quot;&gt;pickle&lt;/a&gt; — a binary format, notably not portable, and not designed
for interchange between languages. Importantly, &lt;strong&gt;JSON was not designed for humans&lt;/strong&gt;. Or at least not &lt;em&gt;primarily&lt;/em&gt; for
humans. It’s a machine-to-machine format. It exists to transfer data between systems where that data is consumed and
created largely by machines.&lt;/p&gt;
&lt;p&gt;Sounds reasonable, no? The problem is that we don’t use it for that.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#to-be-fair-to-json&quot;&gt;To be fair to JSON&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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
about that before I make the case against its misuse.&lt;/p&gt;
&lt;p&gt;The security argument for JSON is real. Because JSON can only represent data — strings, numbers, booleans, arrays,
objects — there’s nothing to execute. You parse it, you get a data structure, and that’s the end of the story. Compare
that to executable config formats like vite.config.ts or &lt;a href=&quot;https://dhall-lang.org&quot;&gt;Dhall&lt;/a&gt;, where loading the config means running code. That’s
a meaningful attack surface, and JSON simply doesn’t have it.&lt;/p&gt;
&lt;p&gt;JSON is also genuinely universal. Every language has a JSON parser, and they all agree on the format. That
interoperability is not something you get for free — it’s the result of a simple, stable spec that hasn’t changed in
decades. When you need two systems written in different languages to exchange data reliably, JSON is still the
lowest-friction option most of the time.&lt;/p&gt;
&lt;p&gt;And the tooling is exceptional. JSON Schema, formatters, validators, editor support — the ecosystem around JSON is
mature in a way that most config formats can’t match. If you need to validate the structure of a file, or provide IDE
autocomplete for it, JSON has a well-worn path for that.&lt;/p&gt;
&lt;p&gt;So JSON is fast to parse, safe to load, universally supported, and well-tooled. The problem isn’t JSON. The problem is
that none of those strengths matter much when you’re hand-authoring a config file that you’ll be maintaining for years.
For that job, the things JSON is good at are largely irrelevant, and the thing it’s missing — comments — is not.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#original-sin&quot;&gt;Original Sin&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The most prevalent place you’ll find JSON files in the JavaScript ecosystem is &lt;code&gt;package.json&lt;/code&gt; — the formal location for
package metadata in &lt;a href=&quot;https://www.npmjs.com&quot;&gt;npm&lt;/a&gt;. And “package metadata” might &lt;em&gt;sound&lt;/em&gt; like machine-generated data, except almost nothing in
&lt;code&gt;package.json&lt;/code&gt; is machine-managed. The package name, the version, the keywords, the description, the scripts, the
dependencies — all hand-authored. All human-maintained. This is not machine-machine data exchange. And then there’s the
sprawl of tool configurations that have followed npm’s example, carrying this cursed seed to far-off lands.&lt;/p&gt;
&lt;p&gt;This is the original sin: npm chose a comment-less serialization format as the &lt;em&gt;de facto&lt;/em&gt; config format for an entire
ecosystem, before anyone realized what that would cost over time.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#comments-are-not-optional&quot;&gt;Comments are not optional&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here’s the core of my argument: &lt;strong&gt;a config format without comment support cannot be a good config format&lt;/strong&gt;. Full stop.&lt;/p&gt;
&lt;p&gt;This sounds like a simple complaint, but follow it through. Configuration is rarely self-explanatory. There are settings
that were made for very particular reasons — learned by some engineer long before your time, under constraints you no
longer remember. That context needs to live somewhere. It needs to be in the file, near the thing it explains, findable
years later when someone is wondering why this dependency is pinned to a version three years old.&lt;/p&gt;
&lt;p&gt;The same rules apply to config that apply to code. If a programming language didn’t support comments, we’d call it
untenable. We’d refuse to use it in production. So why do we accept that from a config format? The implicit assumption
is that config is somehow simpler or less important than code. It should be simpler — but it is absolutely not less
important.&lt;/p&gt;
&lt;p&gt;Let me give you a concrete example:&lt;/p&gt;
&lt;p&gt;You notice a dependency in &lt;code&gt;package.json&lt;/code&gt; that looks outdated. Not just outdated… &lt;em&gt;three years old and deprecated!&lt;/em&gt;
Should it be upgraded? You don’t know. There’s nothing there to tell you. Nothing in the release notes seems like it
applies 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
seems completely unrelated to your issue but nonetheless contains the info you need.&lt;/p&gt;
&lt;p&gt;A gracious fellow engineer has found the key: your setup is one of the rare ones in which upgrading the dependency is a
multi-day project. You weep in thanks. Who knew you would owe such a debt to &lt;em&gt;FroyoIsMyFirstLove37&lt;/em&gt;? Who can count the
number of engineers who came before you and learned this sad lesson — not to mention &lt;em&gt;FroyoIsMyFirstLove37&lt;/em&gt; themselves —
but had no &lt;em&gt;obviously correct&lt;/em&gt; place to record what they learned? You count yourself lucky that &lt;em&gt;FroyoIsMyFirstLove37&lt;/em&gt;
wasn’t, in that moment, lazy.&lt;/p&gt;
&lt;p&gt;Because software engineers, we’re ultimately a lazy bunch, and often the comment doesn’t get added because it’s too much
work to figure out where to put it. “Oh well!” is what many engineers will say. Don’t fool yourself into thinking that
this is just a cultural problem. When there aren’t &lt;em&gt;obvious&lt;/em&gt; places to put things, many engineers will stall out. Even
experienced ones. This scenario plays out every day, across repos and projects worldwide, involving countless engineers
who likely know better but, like me, are lazy.&lt;/p&gt;
&lt;p&gt;Imagine if instead you saw a comment above that dependency — &lt;em&gt;“pinned at 2.x, API incompatibility in 3.x, see issue
#1234”&lt;/em&gt; — it probably would have saved all of that effort. And even without the bug number, it’s still useful!&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#jsonc-and-json5-are-not-solutions&quot;&gt;JSONC and JSON5 are not solutions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You might be thinking: but what about &lt;a href=&quot;https://code.visualstudio.com/docs/languages/json#_json-with-comments&quot;&gt;JSONC&lt;/a&gt;? What about &lt;a href=&quot;https://json5.org&quot;&gt;JSON5&lt;/a&gt;? These formats add comment support to JSON —
doesn’t that address the problem?&lt;/p&gt;
&lt;p&gt;No. And I argue they make it worse.&lt;/p&gt;
&lt;p&gt;The challenge is that JSON is now so embedded in the ecosystem that there are countless tools — parsers, validators,
formatters, editors — that expect JSON to be JSON. When these tools add “support” for JSONC, they typically do it by
stripping the comments before parsing. They’re not actually treating your comments as meaningful data. They’re
discarding them and reading standard JSON underneath.&lt;/p&gt;
&lt;p&gt;This creates several downstream problems. Some tools support JSONC for reading but write back standard JSON, silently
deleting every comment you’ve written. Hope you committed those comments before running the tool! (I’m looking at you, &lt;a href=&quot;https://nx.dev&quot;&gt;NX&lt;/a&gt;.) Others support JSON but not JSONC, forcing you to
maintain comment-less files for compatibility. The fragmentation is real and ongoing.&lt;/p&gt;
&lt;p&gt;But the deeper issue is this: JSONC and JSON5 extend the lifespan of a bad bet. They let the ecosystem keep using an
unsuitable format rather than forcing a reckoning. They are patches on a design that was wrong from the start.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#other-ecosystems-learned-this&quot;&gt;Other ecosystems learned this&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The good news is that newer ecosystems largely got this right. Rust uses &lt;code&gt;Cargo.toml&lt;/code&gt;. Gleam uses &lt;code&gt;gleam.toml&lt;/code&gt;. Python
has &lt;code&gt;pyproject.toml&lt;/code&gt;. None of these chose a comment-less format for human-authored configuration.&lt;/p&gt;
&lt;p&gt;I’ll be honest: I have complicated feelings about &lt;a href=&quot;https://toml.io&quot;&gt;TOML&lt;/a&gt;. It has a reputation for being obvious to Tom, and I am not
Tom. I can never quite remember what double brackets mean without checking the docs. But at least it supports comments.
At least I can write a note in &lt;code&gt;Cargo.toml&lt;/code&gt; explaining why a particular version is pinned, and that note will still be
there the next time I open the file, after other tools have already read and modified the file.&lt;/p&gt;
&lt;p&gt;I’d hoped &lt;a href=&quot;https://deno.com&quot;&gt;Deno&lt;/a&gt; represented a clean break from this history. They built a new JavaScript runtime and had the
opportunity to make different choices. And then there are &lt;code&gt;deno.json&lt;/code&gt; files. Here we go again.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-false-comfort-of-executable-config&quot;&gt;The false comfort of executable config&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To be fair, the ecosystem has found one legitimate escape valve: executable config. Many modern tools allow
configuration via a JavaScript or TypeScript module — &lt;code&gt;vite.config.ts&lt;/code&gt;, &lt;code&gt;eslint.config.js&lt;/code&gt;, and so on. These formats
support comments, obviously, and offer additional benefits: strong typing, IDE intelligence, composability.&lt;/p&gt;
&lt;p&gt;I actually prefer these when they’re available, precisely because of those conveniences. But they come with a real
tradeoff that I think is underappreciated.&lt;/p&gt;
&lt;p&gt;Executable config is executable. That means it can only be loaded in an environment that can run JavaScript. I opened a
PR on a project once to add CommonJS config support, and it was rejected for two legitimate reasons: the tool ran in
environments where JavaScript might not be available, and as I mentioned, executing arbitrary code during config loading
is a real security concern, not just a theoretical one.&lt;/p&gt;
&lt;p&gt;This is also, incidentally, part of why I’m skeptical of &lt;a href=&quot;https://pkl-lang.org&quot;&gt;PKL&lt;/a&gt; and similar “programmable configuration languages.” At
the point where your config language is sophisticated enough to need a runtime and an execution model, the honest
question is: why aren’t you just using a programming language? The complexity cost is there, but the power isn’t
meaningfully greater than just writing code.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#a-simple-test&quot;&gt;A simple test&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here’s a heuristic I’ve found useful for thinking about your own JSON usage.&lt;/p&gt;
&lt;p&gt;Ask yourself: could all of your JSON data be replaced by &lt;a href=&quot;https://msgpack.org&quot;&gt;MessagePack&lt;/a&gt; tomorrow, and would your workflows notice a
significant difference?&lt;/p&gt;
&lt;p&gt;MessagePack is a binary format that’s largely a drop-in replacement for JSON over the wire — more compact, and without
the human readability overhead. (Whether it’s actually faster to parse in practice depends heavily on your runtime —
V8’s JSON handling is remarkably optimized — but the size savings are real.) If you could make that swap without much
disruption, your JSON usage is probably fine. You’re using it for what it was designed for: machine-readable data
exchange.&lt;/p&gt;
&lt;p&gt;But if that question fills you with dread — if you’re thinking “but we need to &lt;em&gt;read&lt;/em&gt; those files” — then you’re relying
on JSON as a human-readable format, and you should use a format fully designed for messy humans.&lt;/p&gt;
&lt;p&gt;There’s also a more obvious tell: if your JSON data contains comment fields. You know the pattern — &lt;code&gt;field_one_comment: &quot;this value is set because...&quot;&lt;/code&gt;. If you’ve ever done that, or inherited a system that does, that’s a distress signal.
That’s a human need (annotation) trying to escape through whatever cracks it can find in a format that didn’t plan for
it.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#what-to-do-instead&quot;&gt;What to do instead&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’re maintaining a JavaScript project and have any flexibility in your config choices, here’s my rough hierarchy:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use executable config&lt;/strong&gt; (TypeScript or ESM modules) when the tool supports it and you can guarantee a JavaScript
environment. The developer experience is genuinely excellent.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use TOML or YAML&lt;/strong&gt; for static config that needs to be portable or loaded outside a JavaScript context. Either one
supports comments. Neither one is JSON.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;If you’re stuck with JSON&lt;/strong&gt;, my honest advice is to accept the limitation and compensate elsewhere. Some teams work
around it with special comment fields — “_comment” or “field_name_comment” — but these suffer from the same
fundamental problem as JSONC: they’re fragile conventions, not first-class features. Any tool that rewrites the file may
drop them, reorder them away from the thing they’re annotating, or simply not recognize them. For configuration that
genuinely needs annotation, put that documentation in your README or a docs/ file and link to it. It’s not elegant, but
it’s more durable than workarounds that depend on every tool in your chain playing along.&lt;/p&gt;
&lt;p&gt;The honest bottom line is that &lt;code&gt;package.json&lt;/code&gt; is a blight on the Node ecosystem — not because JSON is a bad format, but
because it’s a format that was pressed into service it was never meant for. We made an early choice that calcified into
infrastructure, and now we’re all living with the consequences.&lt;/p&gt;
&lt;p&gt;Newer ecosystems know better. But even knowing better, the alternatives I’ve described are compromises: executable
config ties you to a runtime, TOML is fine but never quite obvious, YAML trades one set of problems for another. None of
them feel like the right answer — they feel like the least-wrong answer. That nagging dissatisfaction is what led me to
start looking harder, and eventually to a configuration language I’d never heard of that’s built on an idea so simple it
almost seems like it shouldn’t work — but it does. More on that next time.&lt;/p&gt;</content:encoded></item><item><title>Thanksgiving 2024</title><link>https://tylerbutler.com/thanksgiving/</link><guid isPermaLink="true">https://tylerbutler.com/thanksgiving/</guid><description>Thanksgiving 2024</description><pubDate>Thu, 28 Nov 2024 20:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Thanksgiving has been my favorite of the US holidays for some time. I’ve &lt;a href=&quot;/tags/thanksgiving/&quot;&gt;written about it several times over the years&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;When I am away for the holiday, I have used the following Rumi quote as my auto-reply message at work:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Wear gratitude like a cloak, and it will feed every corner of your life.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;p&gt;This year, though, has been extremely hard, following several other years that I swore were the hardest. The hits: they keep on coming.&lt;/p&gt;
&lt;p&gt;This year, a different Rumi poem rings true:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Who makes these changes?&lt;br /&gt;
I shoot an arrow right.&lt;br /&gt;
It lands left.&lt;br /&gt;
I ride after a deer and find myself&lt;br /&gt;
Chased by a hog.&lt;br /&gt;
I plot to get what I want&lt;br /&gt;
And end up in prison.&lt;br /&gt;
I dig pits to trap others&lt;br /&gt;
And fall in.&lt;/p&gt;
&lt;p&gt;I should be suspicious&lt;br /&gt;
Of what I want.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Coke Zero II: The Review</title><link>https://tylerbutler.com/coke-zero-ii-the-review/</link><guid isPermaLink="true">https://tylerbutler.com/coke-zero-ii-the-review/</guid><description>Coke Zero II: The Review</description><pubDate>Sat, 05 Aug 2017 20:32:00 GMT</pubDate><content:encoded>&lt;h2&gt;&lt;a href=&quot;#the-news&quot;&gt;The News&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last week, my wife shared with me some rather alarming news: Coke Zero &lt;a href=&quot;/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&quot;&gt;is being discontinued&lt;/a&gt;. As a man who has an arguably unhealthy attachment to his carbonated beverage of choice, this was panic-worthy.&lt;/p&gt;
&lt;p&gt;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&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; in 1985. Last I heard, that was still used as a cautionary tale in Marketing 101 classes.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Nope:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The new cans and bottles, which will incorporate more red like regular Coke, will start hitting shelves in August 2017.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;August 2017?&lt;/em&gt; Commence freak-out in three… two… one…&lt;/p&gt;

&lt;p&gt;Lo and behold, at a Fred Meyer in Issaquah yesterday, my wife couldn’t find Coke Zero at all, but Coca-Cola Zero Sugar&lt;sup&gt;&lt;a href=&quot;#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; 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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-packaging&quot;&gt;The Packaging&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; The packaging isn’t entirely new, though; it looks very similar to the Coke Zero packaging &lt;a href=&quot;http://www.underconsideration.com/brandnew/archives/new_packaging_for_coca-cola_in_spain.php&quot;&gt;introduced in Spain in 2015&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-taste&quot;&gt;The Taste&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-verdict&quot;&gt;The Verdict&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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:  &lt;strong&gt;¯\_(ツ)_/¯&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;also&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;Fortunately that won’t be my lot &lt;em&gt;this&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;¯\_(ツ)_/¯&lt;/strong&gt;&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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 &lt;em&gt;Coca-Cola Zero Sugar&lt;/em&gt; with a straight face. Same for ordering it in a restaurant. Oh, who am I kidding? This will never show up in restaurants. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It’s inexplicably cheaper per fluid ounce to buy 1.25 liter bottles than 2 liter bottles. I can’t explain it either. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Comiskey Park</title><link>https://tylerbutler.com/comiskey-park/</link><guid isPermaLink="true">https://tylerbutler.com/comiskey-park/</guid><description>Comiskey Park</description><pubDate>Fri, 26 Aug 2016 03:40:00 GMT</pubDate><content:encoded>&lt;p&gt;Well, it’s happened again. They’ve gone and &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwgntv.com%2F2016%2F08%2F24%2Fwhite-sox-announce-name-change-to-ballpark%2F&quot;&gt;renamed Comiskey Park&lt;/a&gt; to
something else. And I feel about the same way &lt;a href=&quot;/2004/05/all-i-said-was-comiskey-park/&quot;&gt;I did back in 2004&lt;/a&gt;, when
the last name change happened.&lt;/p&gt;
&lt;p&gt;I lived a few blocks from the park at that time, as opposed to the few thousand
I do now, but it still upsets me. Whatever happens, it’ll always be Comiskey
Park to me.&lt;/p&gt;</content:encoded></item><item><title>Thanksgiving Tradition: Alice&apos;s Restaurant Massacre</title><link>https://tylerbutler.com/thanksgiving-tradition-alice-s-restaurant-massacre/</link><guid isPermaLink="true">https://tylerbutler.com/thanksgiving-tradition-alice-s-restaurant-massacre/</guid><description>Thanksgiving Tradition: Alice&apos;s Restaurant Massacre</description><pubDate>Fri, 27 Nov 2015 20:01:00 GMT</pubDate><content:encoded>&lt;p&gt;I have a tradition on Thanksgiving: I listen to Arlo Guthrie’s classic &lt;em&gt;Alice’s Restaurant Massacre&lt;/em&gt;; all 18 minutes and 37 seconds of it. I don’t remember exactly where I picked up this tradition, but it feels distinctly &lt;em&gt;mine&lt;/em&gt; since it’s not something that my family did growing up.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
</content:encoded></item><item><title>Documentation, Versions, and Read the Docs</title><link>https://tylerbutler.com/documentation-versions-and-read-the-docs/</link><guid isPermaLink="true">https://tylerbutler.com/documentation-versions-and-read-the-docs/</guid><description>Documentation, Versions, and Read the Docs</description><pubDate>Wed, 11 Feb 2015 04:45:00 GMT</pubDate><content:encoded>&lt;p&gt;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 &lt;a href=&quot;http://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;git flow&lt;/a&gt;, so my main development branch is not &lt;em&gt;master&lt;/em&gt;, it’s &lt;em&gt;dev&lt;/em&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;master&lt;/em&gt;: The most recent released version of the code&lt;/li&gt;
&lt;li&gt;&lt;em&gt;dev&lt;/em&gt;: The in-development version of the code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Up until &lt;a href=&quot;/2014/05/engineer-v0-5-0-released/&quot;&gt;Engineer v0.5.0&lt;/a&gt;, when you went to GitHub, you saw &lt;em&gt;master&lt;/em&gt; by default.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;master&lt;/em&gt;, 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 &lt;em&gt;dev&lt;/em&gt; 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 &lt;em&gt;dev&lt;/em&gt; branch by default.&lt;/p&gt;
&lt;p&gt;There’s still a problem, though, related to the fact that I host &lt;a href=&quot;https://engineer.readthedocs.org/&quot;&gt;Engineer’s public documentation&lt;/a&gt; on &lt;a href=&quot;https://readthedocs.org/&quot;&gt;Read the Docs&lt;/a&gt; (RTD). Imagine someone finds my project on GitHub, likes what they see, and installs the release version using pip:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;pip install engineer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Now this is also relatively easy to do. RTD actually has some smarts around &lt;a href=&quot;https://docs.readthedocs.org/en/latest/versions.html&quot;&gt;multiple versions of documentation&lt;/a&gt;. RTD offers a few different settings that are relevant to my goals.&lt;/p&gt;
&lt;p&gt;First, there is a baked in ‘version’ identifier called &lt;em&gt;latest&lt;/em&gt; which is intended to point to the most recent version of your docs:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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 &lt;strong&gt;Default Branch&lt;/strong&gt; to that branch.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Of course, in my case, development is done on the &lt;em&gt;dev&lt;/em&gt; branch, so I want &lt;em&gt;latest&lt;/em&gt; to point to that branch. Fortunately that’s easy to change, as the second sentence above alludes to. In the &lt;em&gt;Advanced Settings&lt;/em&gt; section of the RTD dashboard, you’ll find a &lt;em&gt;Default branch&lt;/em&gt; setting, in which I entered &lt;em&gt;dev&lt;/em&gt;. Great; now &lt;em&gt;latest&lt;/em&gt; points to &lt;em&gt;dev&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The second setting of relevance in RTD is the &lt;em&gt;default version&lt;/em&gt;. This controls what version of your docs &lt;code&gt;/&lt;/code&gt; redirects to. By default this will be &lt;em&gt;latest&lt;/em&gt;, but since I want &lt;code&gt;/&lt;/code&gt; to always redirect to the most recent &lt;em&gt;released version&lt;/em&gt; of Engineer, I changed this to &lt;em&gt;master&lt;/em&gt;. Cool; now &lt;code&gt;/&lt;/code&gt; simply redirects to the version of my docs from the &lt;em&gt;master&lt;/em&gt; branch, which will always be the most recent released version.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;master&lt;/em&gt; branch to go to &lt;a href=&quot;https://engineer.readthedocs.org/en/master/&quot;&gt;https://engineer.readthedocs.org/en/master/&lt;/a&gt;, and the link in the &lt;em&gt;dev&lt;/em&gt; branch to go to &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/&quot;&gt;https://engineer.readthedocs.org/en/latest/&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;may&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;So bottom line, this is what I’ve wound up with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If you go directly to &lt;a href=&quot;https://engineer.readthedocs.org/&quot;&gt;https://engineer.readthedocs.org/&lt;/a&gt;, you’ll get the latest &lt;em&gt;released&lt;/em&gt; version of the docs, which will correspond to what most people will install using pip.&lt;/li&gt;
&lt;li&gt;If you visit the &lt;a href=&quot;https://github.com/tylerbutler/engineer&quot;&gt;GitHub repo&lt;/a&gt;, you’ll see the most recent in-development version of the code. The README links to &lt;a href=&quot;https://engineer.readthedocs.org/&quot;&gt;https://engineer.readthedocs.org/&lt;/a&gt;, which as I mentioned earlier will redirect to the &lt;em&gt;released&lt;/em&gt; version of the docs.&lt;/li&gt;
&lt;li&gt;The docs themselves contain notes redirecting people to &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/&quot;&gt;https://engineer.readthedocs.org/en/latest/&lt;/a&gt; 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.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Loot Tables</title><link>https://tylerbutler.com/loot-tables/</link><guid isPermaLink="true">https://tylerbutler.com/loot-tables/</guid><description>Loot Tables</description><pubDate>Fri, 09 Jan 2015 20:44:00 GMT</pubDate><content:encoded>&lt;p&gt;Daniel Cook tells you &lt;a href=&quot;https://lostgarden.com/2014/12/08/loot-drop-tables/&quot;&gt;more than you ever needed to know about loot tables&lt;/a&gt;. Unless you’re a game designer, of course…&lt;/p&gt;</content:encoded></item><item><title>Installing Binary Python Packages on Windows</title><link>https://tylerbutler.com/installing-binary-python-packages-on-windows/</link><guid isPermaLink="true">https://tylerbutler.com/installing-binary-python-packages-on-windows/</guid><description>Installing Binary Python Packages on Windows</description><pubDate>Wed, 31 Dec 2014 15:31:00 GMT</pubDate><content:encoded>&lt;p&gt;In my &lt;a href=&quot;/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/&quot;&gt;Python Windows installation guide&lt;/a&gt;, I concluded with the following paragraph:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.samba.org/~jelmer/dulwich/&quot;&gt;Dulwich&lt;/a&gt;, a Python implementation of Git. Fortunately for you, I decided to take this opportunity to actually write the guide.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#do-i-need-this-guide&quot;&gt;Do I Need This Guide?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You only &lt;em&gt;need&lt;/em&gt; this guide if you try to install a Python package on Windows and you get an error like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;building&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;Crypto.Random.OSRNG.winrandom&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;extension&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;warning:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GMP&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;MPIR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;library&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;found&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Not&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;building&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Crypto.PublicKey._fastmath.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;error:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Unable&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;to&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;find&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;vcvarsall.bat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Ahhh, the dreaded &lt;em&gt;Unable to find vcvarsall.bat&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://stackoverflow.com/questions/2817869/error-unable-to-find-vcvarsall-bat&quot;&gt;this question on Stack Overflow&lt;/a&gt; indicates, lots of people run into this problem, and there are lots of ways to ‘solve’ it.&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#installing-the-microsoft-c-compiler-for-python-27&quot;&gt;Installing the Microsoft C++ Compiler for Python 2.7&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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&lt;sup&gt;&lt;a href=&quot;#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; at Microsoft felt the collective pain and anguish of Python developers everywhere and made &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdetails.aspx%3Fid%3D44266&quot;&gt;a package available directly on microsoft.com&lt;/a&gt; that “contains the compiler and set of system headers necessary for producing binary wheels for Python 2.7 packages.” Hooray!&lt;sup&gt;&lt;a href=&quot;#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;If you &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fdownload%2Fdetails.aspx%3Fid%3D44266&quot;&gt;download that package&lt;/a&gt; and install it, you should be able to successfully install whatever package that was erroring out with &lt;em&gt;Unable to find vcvarsall.bat&lt;/em&gt; 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;~\AppData\Local\Programs\Common\Microsoft\Visual C&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; Python\&lt;/span&gt;&lt;span&gt;9.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you’re still having problems, chances are your version of setuptools is out of date.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#update-setuptools-and-pip&quot;&gt;Update setuptools and pip&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The installation instructions for the Microsoft C++ Compiler for Python 2.7 package says that it requires &lt;strong&gt;setuptools 6.0 or later.&lt;/strong&gt; 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 &lt;a href=&quot;https://engineer.readthedocs.org/en/master/upgrade.html&quot;&gt;separate guide for that&lt;/a&gt; as part of the Engineer 0.5.0 documentation.&lt;/p&gt;
&lt;p&gt;There are more details there, but it basically boils down to executing two commands: &lt;code&gt;python -m pip install -U pip&lt;/code&gt; followed by &lt;code&gt;pip install -U setuptools&lt;/code&gt;. When you do that, you should see some output like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\Tyler\Code&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; python &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;m pip install &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;U pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Downloading&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;unpacking pip &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;pypi.python.org&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;packages&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;py2.py3&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;p&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;pip&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;6.0&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;py2.py3&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;any.whl&lt;/span&gt;&lt;span&gt;#md5=26404d27a64a40d4c358a2405b16d043&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Installing collected packages: pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Found existing installation: pip &lt;/span&gt;&lt;span&gt;1.5&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Uninstalling pip:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Successfully uninstalled pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Successfully installed pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cleaning up...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\Tyler\Code&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip install &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;U setuptools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Collecting setuptools &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; https:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;pypi.python.org&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;packages&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;3.4&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;setuptools&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;setuptools&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;8.2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;py2.py3&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;any.whl&lt;/span&gt;&lt;span&gt;#md5=a0582adbe0c56b3945570049b8d7c953&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Downloading setuptools&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;8.2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;py2.py3&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;none&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;any.whl (&lt;/span&gt;&lt;span&gt;551&lt;/span&gt;&lt;span&gt;kB&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;################################| 552kB 975kB/s ta 0:00:01&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Installing collected packages: setuptools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Found existing installation: setuptools &lt;/span&gt;&lt;span&gt;2.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Uninstalling setuptools&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.2&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Successfully uninstalled setuptools&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Successfully installed setuptools&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;8.2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Congratulations, your pip and setuptools installations are now upgraded. As I note in the &lt;a href=&quot;https://engineer.readthedocs.org/en/master/upgrade.html&quot;&gt;Engineer 0.5.0 upgrade guide&lt;/a&gt;, “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 (&lt;code&gt;pip install -U virtualenv&lt;/code&gt; — 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.&lt;/p&gt;
&lt;p&gt;Once pip and setuptools are upgraded, try installing the previously failed package again. You should see a bunch of output like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\Tyler\AppData\Local\Programs\Common\Microsoft\Visual C&lt;/span&gt;&lt;span&gt;++&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; Python\&lt;/span&gt;&lt;span&gt;9.0&lt;/span&gt;&lt;span&gt;\VC\Bin\&lt;/span&gt;&lt;span&gt;link.exe&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;DLL &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;nologo &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;INCREMENTAL:NO &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;LIBPATH:C:\Python27\Libs &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;LIBPATH:C:\Users\Tyler\.virtualenvs\test\libs &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;LIBPATH:C:\Users\Tyler\.virtualenvs\test\PCbuild &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;EXPORT:init_diff_tree build\temp.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\Release\dulwich&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;_diff_tree.obj &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;OUT:build\lib.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\dulwich\_diff_tree.pyd &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;IMPLIB:build\temp.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\Release\dulwich\_diff_tree.lib &lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;MANIFESTFILE:build\temp.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\Release\dulwich\_diff_tree.pyd.manifest&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Creating library build\temp.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\Release\dulwich\_diff_tree.lib and object build\temp.win32&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;\Release\dulwich\_diff_tree.exp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Successfully installed dulwich&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;0.9&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Congratulations, you can now install source Python packages that include C extensions (like &lt;a href=&quot;https://www.samba.org/~jelmer/dulwich/&quot;&gt;Dulwich&lt;/a&gt;)!&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-future-binary-wheels&quot;&gt;The Future: Binary Wheels&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fpypa.io%2Fen%2Flatest%2Fpeps%2F%23pep427s&quot;&gt;Wheel&lt;/a&gt;, 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.&lt;sup&gt;&lt;a href=&quot;#fn:4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Wheels can be installed using pip version 1.4+.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fpython-packaging-user-guide.readthedocs.org%2Fen%2Flatest%2Fdistributing.html&quot;&gt;Python Packaging User Guide&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#addendum-dulwich-windows&quot;&gt;Addendum: dulwich-windows&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In the event you’re using Windows and need &lt;a href=&quot;https://www.samba.org/~jelmer/dulwich/&quot;&gt;Dulwich&lt;/a&gt;, 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 &lt;a href=&quot;https://pypi.python.org/pypi/dulwich-windows&quot;&gt;dulwich-windows&lt;/a&gt; on PyPI. The &lt;em&gt;only&lt;/em&gt; 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 (&lt;code&gt;pip install dulwich-windows&lt;/code&gt;). I may or may not keep it up to date, though, so I recommend using the official Dulwich releases if possible.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Well, since it’s Microsoft, it was likely a whole team of people! &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you happen to know who at Microsoft was responsible for this, please let me know, because I want to buy them something nice. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Updated Python Installation Guide</title><link>https://tylerbutler.com/updated-python-installation-guide/</link><guid isPermaLink="true">https://tylerbutler.com/updated-python-installation-guide/</guid><description>Updated Python Installation Guide</description><pubDate>Tue, 07 Oct 2014 18:45:00 GMT</pubDate><content:encoded>&lt;p&gt;I just made a major update to my &lt;a href=&quot;/2012/05/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/&quot;&gt;Python Windows installation guide&lt;/a&gt;, 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.&lt;/p&gt;</content:encoded></item><item><title>Stack Traces</title><link>https://tylerbutler.com/stack-traces/</link><guid isPermaLink="true">https://tylerbutler.com/stack-traces/</guid><description>Stack Traces</description><pubDate>Tue, 07 Oct 2014 18:04:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It astounds me that iOS debugging is so… &lt;em&gt;medieval…&lt;/em&gt; That said, JavaScript stack traces can be just as bad, depending on the browser. I think good stack traces are a &lt;em&gt;requirement&lt;/em&gt; for actually shipping software. Here’s hoping iOS, and browsers, catch up soon.&lt;/p&gt;</content:encoded></item><item><title>Node.js On Windows 8.1</title><link>https://tylerbutler.com/node-js-on-windows-8-1/</link><guid isPermaLink="true">https://tylerbutler.com/node-js-on-windows-8-1/</guid><description>Node.js On Windows 8.1</description><pubDate>Fri, 15 Aug 2014 20:33:00 GMT</pubDate><content:encoded>&lt;p&gt;This afternoon I installed Node.js version 0.10.30 (the most recent according to &lt;a href=&quot;https://nodejs.org/&quot;&gt;https://nodejs.org/&lt;/a&gt;) on a new Windows box. Unfortunately, after installing, using &lt;code&gt;npm&lt;/code&gt; was, uhhh, not good:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\tyler&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Error: ENOENT&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; stat &lt;/span&gt;&lt;span&gt;&apos;C:\Users\tyler\AppData\Roaming\npm&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Not exactly a great experience. And that error message? Useless. To me, anyway. I’m sure &lt;code&gt;ENOENT&lt;/code&gt; means something useful to someone.&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Fortunately, a quick search revealed &lt;a href=&quot;https://stackoverflow.com/questions/25103499/cant-start-npm-on-windows-8-error-enoent-stat-c-users-user-appdata-roaming&quot;&gt;this page on Stack Overflow&lt;/a&gt;, where the ‘fix’ is outlined: you just need to manually create the npm folder at the path in the error message:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\tylerbu&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; mkdir C:\Users\tylerbu\AppData\Roaming\npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Directory: C:\Users\tylerbu\AppData\Roaming&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Mode        LastWriteTime    Length    Name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;-------------&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;------&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;----&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;d&lt;/span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;15&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;2014&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;25&lt;/span&gt;&lt;span&gt; PM    npm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After that, things were golden:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;C:\Users\tylerbu&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; npm install grunt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;grunt@0.4.5 node_modules\grunt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── dateformat@1.0.2&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1.2&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── which@1.0.5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── eventemitter2@0.4.14&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── getobject@0.1.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── colors@0.6.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── rimraf@2.2.8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── async@0.1.22&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── hooker@0.2.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── grunt&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;legacy&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;util@0.2.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── &lt;/span&gt;&lt;span&gt;exit&lt;/span&gt;&lt;span&gt;@0.1.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── lodash@0.9.2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── nopt@1.0.10 (abbrev@1.0.5)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── coffee&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;script@1.3.3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── iconv&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;lite@0.2.11&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── underscore.string@2.2.1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── minimatch@0.2.14 (sigmund@1.0.0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; lru&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;cache@2.5.0)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── glob@3.1.21 (inherits@1.0.0&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; graceful&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;fs@1.2.3)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── findup&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;sync@0.1.3 (lodash@2.4.1&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; glob@3.2.11)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── grunt&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;legacy&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;log@0.1.1 (underscore.string@2.3.3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; lodash@2.4.1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── js&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;yaml@2.0.5 (esprima@1.0.4&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; argparse@0.1.15)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;On the plus side, the &lt;code&gt;ENOENT&lt;/code&gt; string &lt;em&gt;did&lt;/em&gt; help me find help on the web more quickly. So, maybe not so bad after all? &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Day One Free on the App Store</title><link>https://tylerbutler.com/day-one-free-on-the-app-store/</link><guid isPermaLink="true">https://tylerbutler.com/day-one-free-on-the-app-store/</guid><description>Day One Free on the App Store</description><pubDate>Tue, 08 Jul 2014 20:49:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using &lt;a href=&quot;https://dayoneapp.com/&quot;&gt;Day One&lt;/a&gt; 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 &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fday-one-journal-diary%2Fid421706526%3Fmt%3D8%26uo%3D4%2611l9Ct&quot;&gt;on the App Store&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you pick it up, you might also check out &lt;a href=&quot;https://brettterpstra.com/projects/slogger/&quot;&gt;Slogger&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Markdown Lazy Links in Python</title><link>https://tylerbutler.com/markdown-lazy-links-in-python/</link><guid isPermaLink="true">https://tylerbutler.com/markdown-lazy-links-in-python/</guid><description>Markdown Lazy Links in Python</description><pubDate>Wed, 28 May 2014 20:16:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the things I am most excited about in &lt;a href=&quot;/2014/05/engineer-v0-5-0-released/&quot;&gt;Engineer 0.5.0&lt;/a&gt; is the new support for &lt;a href=&quot;https://engineer.readthedocs.org/en/master/bundled_plugins.html#lazy-links-plugin&quot;&gt;Markdown Lazy Links&lt;/a&gt;. My implementation is actually a bit richer than &lt;a href=&quot;https://brettterpstra.com/2013/10/19/lazy-markdown-reference-links/&quot;&gt;Brett Terpstra’s original sample&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I chose to use the &lt;a href=&quot;https://docs.python.org/2/library/re.html#re.VERBOSE&quot;&gt;VERBOSE&lt;/a&gt; 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 &lt;a href=&quot;https://github.com/tylerbutler/engineer/blob/dev/engineer/plugins/bundled.py#L306&quot;&gt;GitHub repository&lt;/a&gt;, but I’m pasting the relevant class below as well. Note that this is an &lt;a href=&quot;https://engineer.readthedocs.org/en/master/dev/plugins.html#post-processor-plugins&quot;&gt;Engineer PostProcessor plugin&lt;/a&gt;, so some of the code is simply scaffolding for the plugin system. If you find a bug, please let me know, or even better, &lt;a href=&quot;https://github.com/tylerbutler/engineer/issues&quot;&gt;file an issue on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;LazyMarkdownLinksPlugin&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;PostProcessor&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# Inspired by Brett Terpstra:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;# https://brettterpstra.com/2013/10/19/lazy-markdown-reference-links/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;_link_regex &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(       &lt;/span&gt;&lt;span&gt;# Start group 1, which is the actual link text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\[      &lt;/span&gt;&lt;span&gt;# Match a literal [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;^&lt;/span&gt;&lt;span&gt;\]]&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Match anything except a literal ] - this will be the link text itself&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\]      &lt;/span&gt;&lt;span&gt;# Match a literal ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\s&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;# Any whitespace (including newlines)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\[      &lt;/span&gt;&lt;span&gt;# Match the opening bracket of the lazy link marker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)       &lt;/span&gt;&lt;span&gt;# End group 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\*      &lt;/span&gt;&lt;span&gt;# Literal * - this is the lazy link marker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;(       &lt;/span&gt;&lt;span&gt;# Start group 2, which is everything after the lazy link marker&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\]      &lt;/span&gt;&lt;span&gt;# Literal ]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;*?&lt;/span&gt;&lt;span&gt;^    &lt;/span&gt;&lt;span&gt;# Non-greedy match of anything up to a new line&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\[      &lt;/span&gt;&lt;span&gt;# Literal [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;)       &lt;/span&gt;&lt;span&gt;# End Group 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;\*\]:     &lt;/span&gt;&lt;span&gt;# Match a literal *]: - the lazy link URL definition follows this&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&apos;&apos;&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;MULTILINE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;DOTALL&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UNICODE&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;VERBOSE&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;_counter_regex &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;compile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt;&apos;\[(\d&lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt;)\]:&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; re&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;UNICODE&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;_counter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;_replace&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;match&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_counter &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sub_str &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;&lt;/span&gt;&lt;span&gt;%s%s%s%s&lt;/span&gt;&lt;span&gt;]:&apos;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; (match&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;group&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_counter&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; match&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;group&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_counter)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;28&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; sub_str&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;29&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;30&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;staticmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;31&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;get_max_link_number&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;32&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;all_values &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;set&lt;/span&gt;&lt;span&gt;([&lt;/span&gt;&lt;span&gt;int&lt;/span&gt;&lt;span&gt;(i) &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; i &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; LazyMarkdownLinksPlugin&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_counter_regex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;findall&lt;/span&gt;&lt;span&gt;(post)])&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;33&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;max&lt;/span&gt;&lt;span&gt;(all_values) &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; all_values &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;34&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;35&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;@&lt;/span&gt;&lt;span&gt;classmethod&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;36&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preprocess&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;metadata&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;37&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; engineer&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;conf &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; settings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;38&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;39&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;logger &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_logger&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;40&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content_preprocessed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;41&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_counter &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;get_max_link_number&lt;/span&gt;&lt;span&gt;(content)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;42&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;43&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# This while loop ensures we handle overlapping matches&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;44&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_link_regex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;search&lt;/span&gt;&lt;span&gt;(content)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;45&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_link_regex&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sub&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;_replace&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; content)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;46&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;post&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;content_preprocessed &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;47&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;getattr&lt;/span&gt;&lt;span&gt;(settings&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;LAZY_LINKS_PERSIST&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;False&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;48&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;set_finalized_content&lt;/span&gt;&lt;span&gt;(content&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;cls&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;49&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;logger&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;warning&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Failed to persist lazy links.&quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;50&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; post&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; metadata&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</content:encoded></item><item><title>Deploying Engineer Sites to Azure</title><link>https://tylerbutler.com/deploying-engineer-sites-to-azure/</link><guid isPermaLink="true">https://tylerbutler.com/deploying-engineer-sites-to-azure/</guid><description>Deploying Engineer Sites to Azure</description><pubDate>Tue, 06 May 2014 15:42:00 GMT</pubDate><content:encoded>&lt;p&gt;A &lt;a href=&quot;https://github.com/tylerbutler/engineer/issues/51&quot;&gt;longstanding issue&lt;/a&gt; in the Engineer issue tracker concerns documenting some of the free/low-cost hosting options one has to host an Engineer site. &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt; is a common request, and documenting that process is definitely on my to-do list, but I think there’s a better option: Azure.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;With some of the new features in &lt;a href=&quot;/2014/05/engineer-v0-5-0-released/&quot;&gt;Engineer version 0.5.0&lt;/a&gt;, I’ve got tylerbutler.com in a &lt;a href=&quot;https://github.com/tylerbutler/tylerbutler.com&quot;&gt;GitHub repository&lt;/a&gt; of its own, and every time I &lt;code&gt;git push&lt;/code&gt;, the site is updated automatically thanks to Azure. Even better, thanks to Engineer’s support for &lt;a href=&quot;https://engineer.readthedocs.org/en/master/settings.html#engineer.conf.EngineerConfiguration.POST_DIR&quot;&gt;multiple post directories&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;Once you have everything set up on Azure, the basic flow looks like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Edit and maintain your site in a Git or Mercurial repository&lt;/li&gt;
&lt;li&gt;Build your site, commit to Git/Mercurial&lt;/li&gt;
&lt;li&gt;Push the repository to GitHub/Bitbucket&lt;/li&gt;
&lt;li&gt;Azure site automatically updates itself in a few minutes&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#getting-started&quot;&gt;Getting started&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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):&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;engineer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;init&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;azure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you have an existing site, you can simply use it, of course, but you may need to add your own &lt;code&gt;.deployment&lt;/code&gt; file or configure the Azure deployment settings for your site yourself. There are more details below.&lt;/p&gt;
&lt;p&gt;You can lay out your files however you wish, but the typical layout will look something like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/my-engineer-site&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- .deployment&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- config.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/templates&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/output&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/azure&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Run the following command from the root of the folder to build your site for Azure:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;engineer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;./config.yaml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The output will be written to &lt;code&gt;./output/azure/&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Now every time you push a new commit to GitHub/Bitbucket, your Azure site will update automatically with the contents of the &lt;code&gt;./output/azure/&lt;/code&gt; folder. This magic works because of the &lt;code&gt;.deployment&lt;/code&gt; file in your repository, which is created automatically by Engineer when you initialize a new site using &lt;code&gt;engineer init -m azure&lt;/code&gt;. You can read more about this file &lt;a href=&quot;https://github.com/projectkudu/kudu/wiki/Customizing-deployments&quot;&gt;in the GitHub wiki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;code&gt;.deployment&lt;/code&gt; file. Just change the value of the ‘project’ setting within that file.&lt;/p&gt;
&lt;p&gt;If you prefer, you can remove the &lt;code&gt;.deployment&lt;/code&gt; file altogether and configure the site root in the Azure portal directly. This is basically the same as the &lt;code&gt;.deployment&lt;/code&gt; 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 &lt;a href=&quot;https://www.hanselman.com/blog/DeployingTWOWebsitesToWindowsAzureFromOneGitRepository.aspx&quot;&gt;Scott Hanselman&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;What’s nice about setting the “Project” setting via site configuration rather than via a &lt;code&gt;.deployment&lt;/code&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That is &lt;em&gt;very&lt;/em&gt; cool. Scott has more details in &lt;a href=&quot;https://www.hanselman.com/blog/DeployingTWOWebsitesToWindowsAzureFromOneGitRepository.aspx&quot;&gt;his post on the topic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
</content:encoded></item><item><title>Engineer v0.5.0 Released</title><link>https://tylerbutler.com/engineer-v0-5-0-released/</link><guid isPermaLink="true">https://tylerbutler.com/engineer-v0-5-0-released/</guid><description>Engineer v0.5.0 Released</description><pubDate>Mon, 05 May 2014 18:11:00 GMT</pubDate><content:encoded>&lt;p&gt;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 &lt;a href=&quot;https://engineer.readthedocs.org/en/master/changelog.html&quot;&gt;Read the Docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unfortunately, upgrade may or may not work for you the normal way due to setuptools changes. There are more details in the &lt;a href=&quot;https://engineer.readthedocs.org/en/master/upgrade.html&quot;&gt;upgrade docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of cool stuff in this release, and more planned, so if you’ve not tried Engineer yet, now might be a good time.&lt;/p&gt;</content:encoded></item><item><title>Count Files In A Directory</title><link>https://tylerbutler.com/count-files-in-a-directory/</link><guid isPermaLink="true">https://tylerbutler.com/count-files-in-a-directory/</guid><description>Count Files In A Directory</description><pubDate>Mon, 05 May 2014 16:04:00 GMT</pubDate><content:encoded>&lt;p&gt;Need to count files in a directory? Try this one line of PowerShell:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(dir &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;where&lt;/span&gt;&lt;span&gt; {$_.GetType() &lt;/span&gt;&lt;span&gt;-match&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;fileInfo&quot;&lt;/span&gt;&lt;span&gt;} &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;measure-object&lt;/span&gt;&lt;span&gt;).count&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can also add a &lt;code&gt;-r&lt;/code&gt; parameter (&lt;code&gt;-r&lt;/code&gt; means &lt;em&gt;recursive&lt;/em&gt;) to the first &lt;code&gt;dir&lt;/code&gt;&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; command and get a complete count of all files in all subdirectories under the current path.&lt;/p&gt;
&lt;p&gt;This comes in handy, though I &lt;em&gt;do&lt;/em&gt; wish it was a little more succinct.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;And of course you can substitute &lt;code&gt;ls&lt;/code&gt; for &lt;code&gt;dir&lt;/code&gt; if you prefer, or even &lt;code&gt;Get-ChildItem&lt;/code&gt; if you’re feeling particularly masochistic. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Carmack &amp; Romero</title><link>https://tylerbutler.com/carmack-romero/</link><guid isPermaLink="true">https://tylerbutler.com/carmack-romero/</guid><description>Carmack &amp; Romero</description><pubDate>Mon, 28 Apr 2014 02:22:00 GMT</pubDate><content:encoded>&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; this picture of John Romero and John Carmack:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Dayum! &lt;a href=&quot;https://twitter.com/romero&quot;&gt;@romero&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/ID_AA_Carmack&quot;&gt;@ID_AA_Carmack&lt;/a&gt; were metal as hell back in the day &lt;a href=&quot;https://t.co/tJHwuwrrGM&quot;&gt;pic.twitter.com/tJHwuwrrGM&lt;/a&gt;&lt;/p&gt;— Junkboy (@jnkboy) &lt;a href=&quot;https://twitter.com/jnkboy/statuses/460508315747749888&quot;&gt;April 27, 2014&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;It looks like a promotional shot for a new 1980’s-era fantasy-themed buddy cop TV show. I’d watch it.&lt;/p&gt;
&lt;p&gt;This reminds me that I really need to finally pick up a copy of &lt;a href=&quot;/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&quot;&gt;Masters of Doom&lt;/a&gt; and read it. It’s been on my wish list for years.&lt;/p&gt;</content:encoded></item><item><title>Aerobie</title><link>https://tylerbutler.com/aerobie/</link><guid isPermaLink="true">https://tylerbutler.com/aerobie/</guid><description>Aerobie</description><pubDate>Mon, 28 Apr 2014 02:05:00 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;a href=&quot;https://www.amazon.com/gp/product/B0000789T2/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0000789T2&amp;amp;linkCode=as2&amp;amp;tag=tylerbutlerco-20&quot;&gt;Aerobie&lt;/a&gt; is one of my favorite things ever. I had no idea that the same guy invented the &lt;a href=&quot;https://www.amazon.com/gp/product/B0047BIWSK/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0047BIWSK&amp;amp;linkCode=as2&amp;amp;tag=tylerbutlerco-20&quot;&gt;Aeropress&lt;/a&gt;. (Though the name is &lt;em&gt;kind of&lt;/em&gt; a giveaway…)&lt;/p&gt;</content:encoded></item><item><title>Super Stickman Golf 2</title><link>https://tylerbutler.com/super-stickman-golf-2/</link><guid isPermaLink="true">https://tylerbutler.com/super-stickman-golf-2/</guid><description>Super Stickman Golf 2</description><pubDate>Fri, 10 Jan 2014 19:50:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://itunes.apple.com/us/app/super-stickman-golf-2/id585259203?mt=8&amp;amp;ign-mpt=uo%3D2&quot;&gt;Super Stickman Golf 2&lt;/a&gt; is absolutely free right now on the Apple App Store. Act fast — it’s only free for 24 hours.&lt;/p&gt;</content:encoded></item><item><title>Retina iPad Mini Image Retention Test</title><link>https://tylerbutler.com/retina-ipad-mini-image-retention-test/</link><guid isPermaLink="true">https://tylerbutler.com/retina-ipad-mini-image-retention-test/</guid><description>Retina iPad Mini Image Retention Test</description><pubDate>Wed, 25 Dec 2013 00:38:00 GMT</pubDate><content:encoded>&lt;p&gt;Courtesy &lt;a href=&quot;https://www.marco.org/&quot;&gt;Marco Arment&lt;/a&gt;, a &lt;a href=&quot;https://www.marco.org/rmbp-irtest.html&quot;&gt;simple test for image retention problems&lt;/a&gt; in your Retina iPad Mini. I found no problem with mine, but it seems reasonable to test so you can exchange it if needed.&lt;/p&gt;</content:encoded></item><item><title>Made by Bees</title><link>https://tylerbutler.com/made-by-bees/</link><guid isPermaLink="true">https://tylerbutler.com/made-by-bees/</guid><description>Made by Bees</description><pubDate>Tue, 24 Dec 2013 22:18:00 GMT</pubDate><content:encoded>&lt;p&gt;I absolutely love this concept packaging for honey. The “Made by Bees” tag line is fantastic, and everything about the execution is great.&lt;/p&gt;</content:encoded></item><item><title>The Wolf Among Us</title><link>https://tylerbutler.com/the-wolf-among-us/</link><guid isPermaLink="true">https://tylerbutler.com/the-wolf-among-us/</guid><description>The Wolf Among Us</description><pubDate>Tue, 24 Dec 2013 20:38:00 GMT</pubDate><content:encoded>&lt;p&gt;If you like adventure games, or just a great story, you owe it to yourself to pick up Telltale Games’ &lt;em&gt;The Wolf Among Us&lt;/em&gt;. 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 &lt;a href=&quot;https://www.polygon.com/2013/10/10/4824252/fables-the-wolf-among-us&quot;&gt;Polygon has a good review&lt;/a&gt; or you can always &lt;a href=&quot;https://marketplace.xbox.com/en-CA/Product/The-Wolf-Among-Us/66acd000-77fe-1000-9115-d80258411216&quot;&gt;try out the demo&lt;/a&gt; on Xbox 360.&lt;/p&gt;
&lt;p&gt;You can also get &lt;em&gt;The Wolf Among Us&lt;/em&gt; for Windows and Mac on &lt;a href=&quot;https://store.steampowered.com/app/250320/?snr=1_5_9__205&quot;&gt;Steam&lt;/a&gt; (where the season pass happens to be on sale currently) and &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fitunes.apple.com%2Fus%2Fapp%2Fthe-wolf-among-us%2Fid716238885%3Fmt%3D8&quot;&gt;iOS&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>The Schedule Makers</title><link>https://tylerbutler.com/the-schedule-makers/</link><guid isPermaLink="true">https://tylerbutler.com/the-schedule-makers/</guid><description>The Schedule Makers</description><pubDate>Thu, 28 Nov 2013 22:27:00 GMT</pubDate><content:encoded>&lt;p&gt;I found ESPN’s short film about how the Major League Baseball schedule was made for many years fascinating.&lt;/p&gt;</content:encoded></item><item><title>PyCharm 3.0</title><link>https://tylerbutler.com/pycharm-3-0/</link><guid isPermaLink="true">https://tylerbutler.com/pycharm-3-0/</guid><description>PyCharm 3.0</description><pubDate>Wed, 02 Oct 2013 21:50:00 GMT</pubDate><content:encoded>&lt;p&gt;JetBrains released version 3.0 of their &lt;a href=&quot;https://www.jetbrains.com/pycharm/download/index.html&quot;&gt;excellent Python IDE&lt;/a&gt; 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 &lt;a href=&quot;https://www.jetbrains.com/pycharm/features/editions_comparison_matrix.html&quot;&gt;edition comparison chart&lt;/a&gt; so you can see the core differences.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fstore.xamarin.com%2F&quot;&gt;Xamarin&lt;/a&gt;, for example&lt;sup&gt;&lt;a href=&quot;#fn:pycharm1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;) and speaking from experience, the Django support, at least, is very good. I haven’t checked out the Flask support yet, but &lt;a href=&quot;http://www.xkcd2.com&quot;&gt;xkcd2&lt;/a&gt; would be a good testing ground.&lt;/p&gt;
&lt;p&gt;If you want to see what a &lt;em&gt;real project&lt;/em&gt; might look like in PyCharm, you can always clone &lt;a href=&quot;https://github.com/tylerbutler/engineer/&quot;&gt;Engineer&lt;/a&gt;. It’s been built using PyCharm since day one.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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… &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Axe Cop</title><link>https://tylerbutler.com/axe-cop/</link><guid isPermaLink="true">https://tylerbutler.com/axe-cop/</guid><description>Axe Cop</description><pubDate>Wed, 21 Aug 2013 15:54:00 GMT</pubDate><content:encoded>&lt;p&gt;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.&lt;/p&gt;</content:encoded></item><item><title>The Importance of Documentation</title><link>https://tylerbutler.com/the-importance-of-documentation/</link><guid isPermaLink="true">https://tylerbutler.com/the-importance-of-documentation/</guid><description>The Importance of Documentation</description><pubDate>Sun, 23 Jun 2013 09:26:00 GMT</pubDate><content:encoded>&lt;p&gt;Some free advice for anyone writing software:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Providing excellent documentation is the single most important thing you can do to improve your project.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I’ve used the Python flavor of &lt;a href=&quot;https://github.com/html5lib/html5lib-python&quot;&gt;html5lib&lt;/a&gt; in a couple of different projects now (&lt;a href=&quot;https://xkcd2.com&quot;&gt;xkcd2&lt;/a&gt; and &lt;a href=&quot;https://engineer.readthedocs.org&quot;&gt;Engineer&lt;/a&gt;) 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 &lt;em&gt;could&lt;/em&gt; be worse… It &lt;em&gt;could&lt;/em&gt; be voluminous yet misleading or poorly organized, but instead there just isn’t any.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;You’re happily informed that “More documentation is available at &lt;a href=&quot;https://html5lib.readthedocs.org/&quot;&gt;https://html5lib.readthedocs.org/&lt;/a&gt;” 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 &lt;em&gt;single page&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:docs1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It didn’t take long to narrow things down to my simple &lt;code&gt;html5lib.parseFragment()&lt;/code&gt; 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 &lt;a href=&quot;https://github.com/tylerbutler/engineer/issues/63&quot;&gt;cauterizing things&lt;/a&gt; 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?&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#documentation-is-incredibly-important&quot;&gt;Documentation is incredibly important&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;https://hyde.github.io/&quot;&gt;Hyde&lt;/a&gt; to actually work for my purposes, and the docs were either out of date or non-existent (and &lt;a href=&quot;https://github.com/hyde/hyde/issues/209&quot;&gt;still are&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://prog21.dadgum.com/177.html&quot;&gt;James Hague&lt;/a&gt;, in his recent post &lt;em&gt;Organizational Skills Beat Algorithmic Wizardry&lt;/em&gt;, writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;a href=&quot;https://en.wikipedia.org/wiki/Rubber_duck_debugging&quot;&gt;rubber ducking&lt;/a&gt; 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 &lt;em&gt;alongside&lt;/em&gt; the actual code as much as possible.&lt;sup&gt;&lt;a href=&quot;#fn:docs2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#comments-arent-documentation&quot;&gt;Comments aren’t documentation&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;em&gt;scope.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;the big picture.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fi.wearpants.org%2Fblog%2Ffrom-good-code-to-great%2F&quot;&gt;Peter Fein&lt;/a&gt; writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Great documentation tells a story. Narrative docs explain &lt;em&gt;why&lt;/em&gt; to a hypothetical reader who not only has never seen our code before, but has never seen anything &lt;em&gt;like&lt;/em&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;a href=&quot;https://en.wikipedia.org/wiki/Scheherazade&quot;&gt;Scheherazade&lt;/a&gt;? 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.&lt;/p&gt;
&lt;p&gt;That’s what I consider &lt;em&gt;real&lt;/em&gt; 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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.celeryproject.org/en/latest/index.html#&quot;&gt;Celery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://flask.palletsprojects.com/en/stable/&quot;&gt;Flask&lt;/a&gt; (frankly pretty much anything from Armin Ronacher is solid)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://engineer.readthedocs.org&quot;&gt;Engineer&lt;/a&gt; (yeah, I’m shameless)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Yeah, I suppose it serves me right for using &lt;code&gt;&amp;gt;=&lt;/code&gt; in my &lt;code&gt;requirements.txt&lt;/code&gt; file instead of &lt;code&gt;==&lt;/code&gt;. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I’ve heard some people argue that documentation should even be written &lt;em&gt;before&lt;/em&gt; any code, but I don’t think that’s necessary and frankly can wind up being detrimental. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Logbook</title><link>https://tylerbutler.com/logbook/</link><guid isPermaLink="true">https://tylerbutler.com/logbook/</guid><description>Logbook</description><pubDate>Sun, 23 Jun 2013 05:21:00 GMT</pubDate><content:encoded>&lt;p&gt;A Python logging framework by Armin Ronacher (Jinja2, Flask, Werkzeug) and Georg Brandl (Sphinx, Pygments)? Here… take my money! Wait, it’s BSD licensed? &lt;strong&gt;Sign me up!&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Speaking of the Mouse Wheel...</title><link>https://tylerbutler.com/speaking-of-the-mouse-wheel/</link><guid isPermaLink="true">https://tylerbutler.com/speaking-of-the-mouse-wheel/</guid><description>Speaking of the Mouse Wheel...</description><pubDate>Sun, 24 Feb 2013 20:46:00 GMT</pubDate><content:encoded>&lt;p&gt;A brief addendum to &lt;a href=&quot;/2013/02/zoom-zoom/&quot;&gt;my last post&lt;/a&gt; about zoomable interfaces… Did you know that the mouse wheel was &lt;a href=&quot;https://www.ericmic.com/history%20of%20the%20scroll%20wheel.htm&quot;&gt;originally intended&lt;/a&gt; to be used to zoom in and out of large Excel spreadsheets? Pretty cool.&lt;/p&gt;</content:encoded></item><item><title>Zoom Zoom</title><link>https://tylerbutler.com/zoom-zoom/</link><guid isPermaLink="true">https://tylerbutler.com/zoom-zoom/</guid><description>Zoom Zoom</description><pubDate>Sun, 24 Feb 2013 20:04:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://ignorethecode.net/blog/2013/01/29/zoomable_mod_tool/&quot;&gt;Lukas Mathis&lt;/a&gt; linked to &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fwww.kickstarter.com%2Fprojects%2Fgaspoweredgames%2Fwildman-an-evolutionary-action-rpg%2Fposts%2F394335&quot;&gt;this video of a mod tool&lt;/a&gt; Chris Taylor’s Gas Powered Games is working on for their (now canceled) Wildman Kickstarter campaign.&lt;/p&gt;
&lt;p&gt;Coincidentally, I installed &lt;a href=&quot;http://en.wikipedia.org/wiki/Supreme_Commander_%28game%29&quot;&gt;Supreme Commander&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;I’m not a huge fan of it, though, which may mark the first time I’ve disagreed with Mathis in a &lt;em&gt;very&lt;/em&gt; 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 &lt;em&gt;lot&lt;/em&gt;, 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.&lt;/p&gt;
&lt;p&gt;Anyway, back to the mod tool… There’s certainly a lot of interesting stuff there, but I remain skeptical of zoom being the &lt;em&gt;only&lt;/em&gt; 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 &lt;em&gt;sole&lt;/em&gt; 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&lt;sup&gt;&lt;a href=&quot;#fn:zoomzoom1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
&lt;p&gt;So I’m skeptical, but intrigued. Intrigued is good. Let’s see where it goes.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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 &lt;em&gt;all the time&lt;/em&gt;. Maybe I’m weird. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Small Dog Ambassadorship</title><link>https://tylerbutler.com/small-dog-ambassadorship/</link><guid isPermaLink="true">https://tylerbutler.com/small-dog-ambassadorship/</guid><description>Small Dog Ambassadorship</description><pubDate>Sat, 22 Dec 2012 23:08:00 GMT</pubDate><content:encoded>&lt;p&gt;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 &lt;em&gt;thought&lt;/em&gt; I admired in cats.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;dog person&lt;/em&gt;, and now I’ve taken to calling myself a small dog ambassador.&lt;/p&gt;
&lt;p&gt;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.”&lt;/p&gt;
&lt;p&gt;While all of these things &lt;em&gt;can&lt;/em&gt; 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 &lt;em&gt;not&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;not&lt;/em&gt; 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 &lt;em&gt;compelled&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://en.wikipedia.org/wiki/Australian_Shepherd&quot;&gt;Australian Shepherd&lt;/a&gt; (bred for herding sheep and other livestock) or the &lt;a href=&quot;https://en.wikipedia.org/wiki/Dachshund&quot;&gt;Dachshund&lt;/a&gt; (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.&lt;/p&gt;
&lt;p&gt;For example, do you know why &lt;a href=&quot;https://en.wikipedia.org/wiki/Dalmatian_%28dog%29&quot;&gt;Dalmatians&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;perfect&lt;/em&gt; companion dogs. Also, since Elizabeth suffers from chronic anxiety and some other mental health issues, the dogs are a &lt;em&gt;dramatic&lt;/em&gt; help to her.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;best&lt;/em&gt; 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!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;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 &lt;em&gt;that&lt;/em&gt; much of a curmudgeon?).&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Base64 Encoded SHA256 Hashes</title><link>https://tylerbutler.com/base64-encoded-sha256-hashes/</link><guid isPermaLink="true">https://tylerbutler.com/base64-encoded-sha256-hashes/</guid><description>Base64 Encoded SHA256 Hashes</description><pubDate>Mon, 17 Dec 2012 23:26:00 GMT</pubDate><content:encoded>&lt;p&gt;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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;POWERSHELL&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;param&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;Parameter&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Mandatory&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$True&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;ValueFromPipeline&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;$True&lt;/span&gt;&lt;span&gt;)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$filePath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$hasher &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.Security.Cryptography.SHA256&lt;/span&gt;&lt;span&gt;]::Create()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$content &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Get-Content&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Encoding byte $filePath&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;$hash &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;System.Convert&lt;/span&gt;&lt;span&gt;]::ToBase64String($hasher.ComputeHash($content))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Write-Output&lt;/span&gt;&lt;span&gt; ($filePath.ToString() &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; $hash)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can pipe every file in a directory to this script like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ls &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;File &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt;%&lt;/span&gt;&lt;span&gt; {.&lt;/span&gt;&lt;span&gt;\Get-FileHash.ps1&lt;/span&gt;&lt;span&gt; $_}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;h2&gt;&lt;a href=&quot;#c&quot;&gt;C# &lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Or, if you prefer, a C# example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;C#&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;IO&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Security&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Cryptography&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Base64SHA256&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;filePath&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hasher&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; SHA256&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Create&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;byte&lt;/span&gt;&lt;span&gt;[] &lt;/span&gt;&lt;span&gt;hashValue&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Stream&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; File&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;OpenRead&lt;/span&gt;&lt;span&gt;(filePath))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;hashValue &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; hasher&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ComputeHash&lt;/span&gt;&lt;span&gt;(s)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; Convert&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ToBase64String&lt;/span&gt;&lt;span&gt;(hashValue)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;&lt;a href=&quot;#python&quot;&gt;Python&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;code&gt;read&lt;/code&gt; attribute. Note that this function relies on the &lt;a href=&quot;https://pypi.python.org/pypi/path.py/2.4.1&quot;&gt;path.py&lt;/a&gt; module, though you can remove that dependency pretty easily.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;PYTHON&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; hashlib&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; base64&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; path &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; path&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;def&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;calc_sha&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;obj&lt;/span&gt;&lt;span&gt;):&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;&quot;&quot;&quot;Calculates the base64-encoded SHA hash of a file.&quot;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;try&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pathfile &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;except&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;UnicodeDecodeError&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pathfile &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sha &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; hashlib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;sha256&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; pathfile &lt;/span&gt;&lt;span&gt;and&lt;/span&gt;&lt;span&gt; pathfile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;exists&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; base64&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b64encode&lt;/span&gt;&lt;span&gt;(pathfile&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read_hash&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;SHA256&apos;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;isinstance&lt;/span&gt;&lt;span&gt;(obj&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; basestring)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sha&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(obj)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;elif&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;hasattr&lt;/span&gt;&lt;span&gt;(obj&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;read&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;while&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;True&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;d &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; obj&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;read&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;8192&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;not&lt;/span&gt;&lt;span&gt; d&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                &lt;/span&gt;&lt;span&gt;break&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;sha&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;update&lt;/span&gt;&lt;span&gt;(d)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;None&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;r &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; sha&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;digest&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;r &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; base64&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;b64encode&lt;/span&gt;&lt;span&gt;(r)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; r&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This particular implementation can also be found in my &lt;a href=&quot;https://pypi.python.org/pypi/propane/0.1.2&quot;&gt;propane&lt;/a&gt; utility library (in the &lt;code&gt;filetools&lt;/code&gt; module).&lt;/p&gt;</content:encoded></item><item><title>Principles and Taste</title><link>https://tylerbutler.com/principles-and-taste/</link><guid isPermaLink="true">https://tylerbutler.com/principles-and-taste/</guid><description>Principles and Taste</description><pubDate>Mon, 17 Dec 2012 21:03:00 GMT</pubDate><content:encoded>&lt;p&gt;Came across this solid advice from Thomas Jefferson recently:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In matters of principle, stand like a rock; in matters of taste, swim with the current.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>The First Few Milliseconds of an HTTPS Connection</title><link>https://tylerbutler.com/the-first-few-milliseconds-of-an-https-connection/</link><guid isPermaLink="true">https://tylerbutler.com/the-first-few-milliseconds-of-an-https-connection/</guid><description>The First Few Milliseconds of an HTTPS Connection</description><pubDate>Fri, 14 Dec 2012 21:49:00 GMT</pubDate><content:encoded>&lt;p&gt;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 &lt;em&gt;really&lt;/em&gt; have to understand this but if I do I will be glad I saved this’ folder.&lt;/p&gt;</content:encoded></item><item><title>Pushing Non-Default Branches in Git</title><link>https://tylerbutler.com/pushing-non-default-branches-in-git/</link><guid isPermaLink="true">https://tylerbutler.com/pushing-non-default-branches-in-git/</guid><description>Pushing Non-Default Branches in Git</description><pubDate>Mon, 03 Dec 2012 23:53:00 GMT</pubDate><content:encoded>&lt;p&gt;Learning new things every day… Mark Longair describes some &lt;a href=&quot;https://longair.net/blog/2011/02/27/an-asymmetry-between-git-pull-and-git-push/&quot;&gt;sitations in which &lt;code&gt;git push&lt;/code&gt; won’t do what you want or expect&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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 &lt;code&gt;add-menu&lt;/code&gt; branch would work:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;git push github add-menu&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push github&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git push github HEAD&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;However, with the default git setup, &lt;em&gt;none&lt;/em&gt; of these commands will result in &lt;code&gt;new-feature2&lt;/code&gt; being updated with your new commits on &lt;code&gt;add-menu&lt;/code&gt;.  What does happen instead?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;dev&lt;/code&gt; 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 &lt;code&gt;git rebase&lt;/code&gt; without breaking people). The way I manage this is with a local tracking branch tracking the remote &lt;code&gt;github/dev&lt;/code&gt; branch that I fast-forward when I am ready to share something more widely. That local tracking branch is unsurprisingly called &lt;code&gt;github_dev&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Anyway, I made an update to the &lt;code&gt;github_dev&lt;/code&gt; branch today and wanted to push the changes out, and of course &lt;code&gt;git push&lt;/code&gt; didn’t do what I expected. I ended up changing my &lt;code&gt;.gitconfig&lt;/code&gt;, adding the following lines:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[push]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; upstream&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;code&gt;simple&lt;/code&gt;, which is similarly &lt;em&gt;not&lt;/em&gt; 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.&lt;/p&gt;</content:encoded></item><item><title>The VW Group</title><link>https://tylerbutler.com/the-vw-group/</link><guid isPermaLink="true">https://tylerbutler.com/the-vw-group/</guid><description>The VW Group</description><pubDate>Sun, 02 Dec 2012 08:45:00 GMT</pubDate><content:encoded>&lt;p&gt;Peter M. De Lorenzo of &lt;a href=&quot;https://www.autoextremist.com/current/2012/11/26/the-autoextremist.html&quot;&gt;Autoextremist&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I had no idea that the VW Group includes Bentley, Lamborghini, and Porsche.&lt;/p&gt;</content:encoded></item><item><title>Arguing on the Internet</title><link>https://tylerbutler.com/arguing-on-the-internet/</link><guid isPermaLink="true">https://tylerbutler.com/arguing-on-the-internet/</guid><description>Arguing on the Internet</description><pubDate>Wed, 28 Nov 2012 19:11:00 GMT</pubDate><content:encoded>&lt;p&gt;Mark Twain:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t argue with an idiot. They will drag you down to their level and beat you with experience.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Games Sales 2012</title><link>https://tylerbutler.com/games-sales-2012/</link><guid isPermaLink="true">https://tylerbutler.com/games-sales-2012/</guid><description>Games Sales 2012</description><pubDate>Thu, 22 Nov 2012 05:06:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s that time of year again! Both &lt;a href=&quot;https://store.steampowered.com/&quot;&gt;Steam&lt;/a&gt; and &lt;a href=&quot;https://www.gog.com/pick_5_pay_10&quot;&gt;GOG&lt;/a&gt; have holiday sales going on right now, and it’s a great time to pick up some great entertainment at a solid discount.&lt;/p&gt;
&lt;p&gt;In particular, GOG’s “Pick 5 &amp;amp; Pay $10” is a total steal, &lt;em&gt;especially&lt;/em&gt; if you like adventure games, and the success of Double Fine’s &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.kickstarter.com%2Fprojects%2F66710809%2Fdouble-fine-adventure&quot;&gt;Kickstarter campaign&lt;/a&gt; says many of you do. &lt;a href=&quot;https://www.gog.com/gamecard/botanicula&quot;&gt;Botanicula&lt;/a&gt; on its own is worth $10 easily in my opinion, and if you haven’t yet played &lt;a href=&quot;https://www.gog.com/gamecard/machinarium_collectors_edition&quot;&gt;Machinarium&lt;/a&gt; you can score them both. There’s also &lt;a href=&quot;https://www.gog.com/gamecard/gemini_rue&quot;&gt;Gemini Rue&lt;/a&gt;, &lt;a href=&quot;https://www.gog.com/gamecard/to_the_moon&quot;&gt;To the Moon&lt;/a&gt;, the &lt;a href=&quot;https://www.gog.com/gamecard/blackwell_bundle&quot;&gt;Blackwell Bundle&lt;/a&gt;, and &lt;a href=&quot;https://www.gog.com/gamecard/resonance&quot;&gt;Resonance&lt;/a&gt;. I don’t know much about any of them except they’re all adventure games.&lt;/p&gt;
&lt;p&gt;If adventure games aren’t your bag, I can vouch for &lt;a href=&quot;https://www.gog.com/gamecard/spacechem&quot;&gt;Spacechem&lt;/a&gt; as a &lt;em&gt;very&lt;/em&gt; solid puzzle game. &lt;a href=&quot;https://www.gog.com/gamecard/defcon&quot;&gt;Defcon&lt;/a&gt; also looks interesting though I haven’t played it personally. &lt;a href=&quot;https://www.gog.com/gamecard/anomaly_warzone_earth&quot;&gt;Anomaly Warzone Earth&lt;/a&gt; is an engaging twist on tower defense, while &lt;a href=&quot;https://www.gog.com/gamecard/torchlight&quot;&gt;Torchlight&lt;/a&gt; will bring back many (hopefully good) memories of Diablo and Diablo II.&lt;/p&gt;
&lt;p&gt;Honestly, there’s not much on the list that wouldn’t be a solid choice as far as I know, except possibly &lt;a href=&quot;https://www.gog.com/gamecard/geneforge_15&quot;&gt;Geneforge&lt;/a&gt; — that one looks pretty bad. But hey, maybe I’m wrong! In the end, I wound up going with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gog.com/gamecard/botanicula&quot;&gt;Botanicula&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gog.com/gamecard/gemini_rue&quot;&gt;Gemini Rue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gog.com/gamecard/to_the_moon&quot;&gt;To the Moon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gog.com/gamecard/symphony&quot;&gt;Symphony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gog.com/gamecard/unmechanical&quot;&gt;Unmechanical&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;On the Steam side, there’s a ton to choose from, but in particular you can pick up &lt;a href=&quot;https://store.steampowered.com/app/48000/&quot;&gt;Limbo&lt;/a&gt; for less than $3! For the next two hours at least. If you haven’t played it, it’s required gaming. &lt;strong&gt;Required.&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Malaria Vaccine</title><link>https://tylerbutler.com/malaria-vaccine/</link><guid isPermaLink="true">https://tylerbutler.com/malaria-vaccine/</guid><description>Malaria Vaccine</description><pubDate>Thu, 22 Nov 2012 03:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Speaking of malaria, &lt;a href=&quot;/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&quot;&gt;Bill Gates&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We may even see a malaria vaccine in 2015.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Amazing.&lt;/p&gt;</content:encoded></item><item><title>Extracting Dates and Times from DateTime Cells in Excel</title><link>https://tylerbutler.com/extracting-dates-and-times-from-datetime-cells-in-excel/</link><guid isPermaLink="true">https://tylerbutler.com/extracting-dates-and-times-from-datetime-cells-in-excel/</guid><description>Extracting Dates and Times from DateTime Cells in Excel</description><pubDate>Mon, 19 Nov 2012 00:33:00 GMT</pubDate><content:encoded>&lt;p&gt;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 &lt;em&gt;only&lt;/em&gt; the date or &lt;em&gt;only&lt;/em&gt; the time. And should you find yourself in such a position, then this post might just save you a bunch of time.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-magic-formulae&quot;&gt;The Magic Formulae&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Assume our data looks like this:&lt;/p&gt;























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;A&lt;/th&gt;&lt;th&gt;B&lt;/th&gt;&lt;th&gt;C&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;8/15/2012 3:39:59 PM&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;2&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;code&gt;A1&lt;/code&gt; contains our date/time, and we want to put the date only in &lt;code&gt;B1&lt;/code&gt; and the time only in &lt;code&gt;C1&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#extracting-the-date&quot;&gt;Extracting the Date&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Put this formula in &lt;code&gt;B1&lt;/code&gt; to extract the date:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;=TRUNC(A1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then format &lt;code&gt;B1&lt;/code&gt; with whatever date format you want. Done!&lt;/p&gt;
&lt;p&gt;If you search the web for answers to this basic question, a lot of the suggestions are to use a combination of the &lt;code&gt;DATE&lt;/code&gt;, &lt;code&gt;MONTH&lt;/code&gt;, &lt;code&gt;YEAR&lt;/code&gt; and &lt;code&gt;DAY&lt;/code&gt; functions.&lt;sup&gt;&lt;a href=&quot;#fn:excel1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; That works, but it’s really silly in my opinion — &lt;code&gt;TRUNC&lt;/code&gt; is almost certainly faster, especially if you have a large quantity of data.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#extracting-the-time&quot;&gt;Extracting the Time&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Put this formula in &lt;code&gt;C1&lt;/code&gt; to extract the time:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;=MOD(A1, 1)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then format &lt;code&gt;C1&lt;/code&gt; with whatever time format you want. Done!&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#how-it-works&quot;&gt;How It Works&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The best explanation I’ve found comes from an article titled &lt;a href=&quot;https://office.microsoft.com/en-us/excel-help/redir/AM010288575.aspx?CTT=5&amp;amp;origin=HA010287495&quot;&gt;How Excel Handles Dates and Times&lt;/a&gt;. Unfortunately it’s inexplicably an MHTML file, so you might have trouble opening it.&lt;sup&gt;&lt;a href=&quot;#fn:excel2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; I made a &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fdl.dropbox.com%2Fu%2F12062432%2Ftylerbutler.com%2Fexcel_date_times_explanation.pdf&quot;&gt;PDF copy&lt;/a&gt; of the article that should work for most people.&lt;/p&gt;
&lt;p&gt;Anyway, from the article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;OK, that’s pretty straightforward. But what about times?&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;em&gt;converting&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;In the case of dates, we truncate the number using the &lt;a href=&quot;https://office.microsoft.com/en-us/excel-help/trunc-function-HP010342970.aspx&quot;&gt;TRUNC&lt;/a&gt; function, which simply lops off the decimal numbers. This is obviously fast — all Excel needs to do is forget about the decimal values.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;left.&lt;/em&gt; Thankfully, math saves us again. The &lt;a href=&quot;https://en.wikipedia.org/wiki/Modulo_operation&quot;&gt;modulo operation&lt;/a&gt; (available in Excel via the &lt;a href=&quot;https://office.microsoft.com/en-us/excel-help/mod-function-HP010342698.aspx&quot;&gt;MOD&lt;/a&gt; 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 &lt;em&gt;remainder&lt;/em&gt;, the result is the decimal portion of the original number.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I hope we can all agree there is sufficient compelling evidence that math is &lt;em&gt;awesome.&lt;/em&gt;&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I’ve chosen not to regurgitate this suboptimal solution so it doesn’t continue to set a bad example… &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It appears that Chrome does support MHTML, and I think Firefox does with an extension. Regardless, the PDF is likely easier. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Malarious</title><link>https://tylerbutler.com/malarious/</link><guid isPermaLink="true">https://tylerbutler.com/malarious/</guid><description>Malarious</description><pubDate>Fri, 07 Sep 2012 20:32:00 GMT</pubDate><content:encoded>&lt;p&gt;I have some experience with &lt;a href=&quot;https://en.wikipedia.org/wiki/malaria&quot;&gt;malaria&lt;/a&gt;. I grew up in &lt;a href=&quot;https://en.wikipedia.org/wiki/Papua_New_Guinea&quot;&gt;a country&lt;/a&gt; where it’s still a major concern,&lt;sup&gt;&lt;a href=&quot;#fn:malaria1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 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 &lt;a href=&quot;https://en.wikipedia.org/wiki/Chloroquine&quot;&gt;Chloroquine&lt;/a&gt; or &lt;a href=&quot;https://en.wikipedia.org/wiki/Quinine&quot;&gt;Quinine&lt;/a&gt;, 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 &lt;em&gt;provided you get treatment.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;a href=&quot;https://www.gatesfoundation.org/malaria/Pages/home.aspx&quot;&gt;focused on malaria&lt;/a&gt; is that by the numbers, it’s still one of the most widespread and impactful diseases worldwide.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Heartbreaking.&lt;sup&gt;&lt;a href=&quot;#fn:malaria2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Anyway, all of this is just prologue to my real point, which is that you should consider supporting &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.collegehumor.com%2Fmalarious&quot;&gt;Malarious&lt;/a&gt;. There are many causes to contribute to in the world, but malaria prevention and treatment is one of the most important in my book.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;In fact, it is the number one cause of illness and death in PNG, at least as of 2003. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sadly, as AIDS is rapidly becoming &lt;a href=&quot;https://en.wikipedia.org/wiki/HIV/AIDS_in_Papua_New_Guinea&quot;&gt;more of a problem in PNG&lt;/a&gt;, 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… &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Blog Portability</title><link>https://tylerbutler.com/blog-portability/</link><guid isPermaLink="true">https://tylerbutler.com/blog-portability/</guid><description>Blog Portability</description><pubDate>Sun, 19 Aug 2012 03:37:00 GMT</pubDate><content:encoded>&lt;p&gt;MacDrifter on blog portability:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;In my continuing efforts to migrate off of WordPress, I now understand some of my biggest mistakes and flaws.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m proud to point out that &lt;a href=&quot;/projects/engineer/&quot;&gt;Engineer&lt;/a&gt; helps avoid a number of these. Let’s examine them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Always save the original Markdown in text files.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Check. Engineer always keeps your raw post around — the formatting is done during build time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Avoid plugins that appear to make life easier by reformatting content for viewing.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Engineer doesn’t require you to use any such plugins, but it doesn’t prevent you either; it’s your choice.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Footnotes are hard to convert from HTML to MultiMarkdown.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This simply isn’t a problem in Engineer because the raw Markdown is stored, not just the HTML (see #1).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Use HTML character codes for non-ASCII characters.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Again, your call here. Engineer will happily handle unicode characters, but other systems might not, so the advice is sound.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Choose a good URL structure up front.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Engineer uses a date-based one (&lt;code&gt;.../2012/08/05/post_title.html&lt;/code&gt;) by default, but it’s not currently customizable. I’m considering adding that in a future version.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Relative links are better than absolute links.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Don’t go ape-shit with tags and categories.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. Code should go in code blocks.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://pygments.org/&quot;&gt;Pygments&lt;/a&gt; already did this. Unfortunately, I was wrong.&lt;/p&gt;
&lt;p&gt;It looks like Pygments’ &lt;a href=&quot;https://pygments.org/docs/formatters/&quot;&gt;default HTML formatter&lt;/a&gt; outputs &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt; tags with &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tags inside — not &lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;&lt;/code&gt; 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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fpackages.python.org%2FMarkdown%2Findex.html&quot;&gt;Python-Markdown&lt;/a&gt;, I should be able to add it. I’ve &lt;a href=&quot;https://trello.com/c/QeelOqyG&quot;&gt;put it on the (ever-growing) list&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;9. Don’t hard-code formatting into a post.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. Keep the comments in the comments.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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!&lt;/p&gt;</content:encoded></item><item><title>Engineer 0.3.1 Released</title><link>https://tylerbutler.com/engineer-0-3-1-released/</link><guid isPermaLink="true">https://tylerbutler.com/engineer-0-3-1-released/</guid><description>Engineer 0.3.1 Released</description><pubDate>Tue, 07 Aug 2012 09:59:00 GMT</pubDate><content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The full &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/changelog.html#version-0-3-0-july-22-2012&quot;&gt;release notes&lt;/a&gt; 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.&lt;/p&gt;

&lt;h2&gt;&lt;a href=&quot;#plugin-architecture&quot;&gt;Plugin Architecture&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I first tackled the plugin architecture in &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/changelog.html#version-0-2-4-may-27-2012&quot;&gt;version 0.2.4&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;Engineer needs to actually run the right plugin types at the right points in its execution.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The first problem, though, is somewhat more involved. Just &lt;em&gt;how&lt;/em&gt; 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 &lt;em&gt;find&lt;/em&gt; the plugin code?&lt;/p&gt;
&lt;p&gt;One option was to take a page from &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fdocs.djangoproject.com%2Fen%2F1.4%2Fref%2Fsettings%2F%23std%3Asetting-INSTALLED_APPS&quot;&gt;Django&lt;/a&gt; and require the modules or classes be provided in a settings file,&lt;sup&gt;&lt;a href=&quot;#fn:eng1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 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).&lt;/p&gt;
&lt;p&gt;After further research, I came across a very simple model from &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fmartyalchin.com%2F2008%2Fjan%2F10%2Fsimple-plugin-framework%2F&quot;&gt;Marty Allchin&lt;/a&gt; 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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fmartyalchin.com%2F2008%2Fjan%2F10%2Fsimple-plugin-framework%2F&quot;&gt;Marty’s post&lt;/a&gt; for more details about how it works specifically, or you can look at &lt;a href=&quot;https://github.com/tylerbutler/engineer/blob/master/engineer/plugins.py&quot;&gt;plugins.py&lt;/a&gt; to see my adapted implementation (I didn’t really change anything though).&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/settings.html#engineer.conf.EngineerConfiguration.PLUGINS&quot;&gt;PLUGINS setting&lt;/a&gt; to tell me which modules contained plugins so they could be loaded. Ultimately I &lt;em&gt;really&lt;/em&gt; want plugins to be capable of working with no user configuration unless it’s needed due to the nature of the plugin.&lt;/p&gt;
&lt;p&gt;Luckily, with some help from the Pygments source, I was able to find out about setuptools’ &lt;a href=&quot;http://peak.telecommunity.com/DevCenter/setuptools#extensible-applications-and-frameworks&quot;&gt;entry points&lt;/a&gt;, which work perfectly for this purpose. If you’re developing an Engineer plugin, you can notify Engineer about your plugin modules using the &lt;code&gt;engineer.plugins&lt;/code&gt; entrypoint.&lt;/p&gt;
&lt;p&gt;This is covered in more detail in the &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/dev/plugins.html#loading-plugins&quot;&gt;Engineer documentation&lt;/a&gt;, but basically you’d add something like this to your plugin’s &lt;code&gt;setup.py&lt;/code&gt; file:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;entry_points &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&apos;engineer.plugins&apos;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;post_processors=dotted.path.to.module&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span&gt;&apos;themes=another.module.path&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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!&lt;/p&gt;
&lt;p&gt;Like I said earlier, though, it’s still a work in progress. In particular, some of the limitations of the plugin system include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#jekylloctopress-compatibility&quot;&gt;Jekyll/Octopress Compatibility&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When I started developing Engineer, I was heavily inspired by &lt;a href=&quot;https://jekyllrb.com/&quot;&gt;Jekyll&lt;/a&gt; and &lt;a href=&quot;https://octopress.org/&quot;&gt;Octopress&lt;/a&gt; (as well as &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fhyde.github.com%2F&quot;&gt;Hyde&lt;/a&gt; and &lt;a href=&quot;https://github.com/marcoarment/secondcrack&quot;&gt;Second Crack&lt;/a&gt;). 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://markedapp.com&quot;&gt;Marked&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Anyway, there are other Markdown previewers/editors — notably &lt;a href=&quot;http://markdownpad.com/&quot;&gt;MarkdownPad&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Obviously this is not a required feature since Engineer metadata doesn’t &lt;em&gt;break&lt;/em&gt; 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;metadata goes here...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;post content goes here...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Engineer, on the other hand, required, (prior to version 0.3.0) that that first &lt;code&gt;---&lt;/code&gt; not be there. Fundamental incompatibility. When I originally made the decision to not require the first &lt;code&gt;---&lt;/code&gt; it was for simplicity. I didn’t need it for parsing, and it felt silly to &lt;em&gt;require&lt;/em&gt; users to always type it, so I just left it out. However, this meant two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;I couldn’t use Marked’s nice Jekyll-compatibility feature for Engineer posts.&lt;/li&gt;
&lt;li&gt;More importantly, users wouldn’t be able to easily migrate from Jekyll to Engineer.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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 &lt;code&gt;---&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;and&lt;/em&gt; tags), and I’m looking into handling things like that as an &lt;a href=&quot;https://trello.com/c/GIYzDoMz&quot;&gt;optional post-processor&lt;/a&gt; (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!&lt;/p&gt;
&lt;p&gt;And if you have a website, consider using Engineer!&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I actually ended up implementing this solution anyway since it seemed useful. See the &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/settings.html#engineer.conf.EngineerConfiguration.PLUGINS&quot;&gt;PLUGINS setting&lt;/a&gt;. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Ten Things Steve Bennett Hates About Git</title><link>https://tylerbutler.com/ten-things-steve-bennett-hates-about-git/</link><guid isPermaLink="true">https://tylerbutler.com/ten-things-steve-bennett-hates-about-git/</guid><description>Ten Things Steve Bennett Hates About Git</description><pubDate>Sun, 05 Aug 2012 22:08:00 GMT</pubDate><content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;First, the things I agree with:&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#yes-the-command-line-and-official-git-documentation-suck&quot;&gt;Yes, the command line and official Git documentation suck.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’ve &lt;a href=&quot;/2012/06/git-vs-mercurial-again/&quot;&gt;complained about this before&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It’s madness, and I think it’s safe to say that the command line isn’t &lt;em&gt;designed&lt;/em&gt;; it’s merely &lt;em&gt;implemented.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Similarly, the documentation sucks. I have found that a major challenge with documenting an application, even &lt;a href=&quot;/projects/engineer/&quot;&gt;one whose primary interface is a command line&lt;/a&gt;, is documenting things for both a &lt;em&gt;user&lt;/em&gt; and a &lt;em&gt;potential contributor&lt;/em&gt;. With &lt;a href=&quot;/projects/engineer/&quot;&gt;Engineer&lt;/a&gt;, 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&lt;sup&gt;&lt;a href=&quot;#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; — since the point of the software is two-fold: to be useful to users, and to attract additional developers to contribute.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#yes-the-git-conceptual-model-is-complicated&quot;&gt;Yes, the Git conceptual model is complicated.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And yeah, unfortunately eventually you’re exposed to all of it. And yeah, it sucks. As I’ve &lt;a href=&quot;/2012/06/git-vs-mercurial-again/&quot;&gt;said before&lt;/a&gt;, “I think part of the problem I have with Git, though, is that is often &lt;em&gt;does&lt;/em&gt; feel necessary to understand how it works.”&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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, &lt;code&gt;rebase&lt;/code&gt; branches, rewrite history with interactive &lt;code&gt;rebase&lt;/code&gt;, 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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That said, the sheer volume of things you can &lt;em&gt;do&lt;/em&gt; with Git make it extremely frightening to unfamiliar developers, and since no Git tool does &lt;em&gt;everything&lt;/em&gt; Git does, eventually you end up needing to use the command line for something, and you’re right back at square one.&lt;/p&gt;
&lt;p&gt;Now let’s talk about the places where I disagree with Bennett.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#git-is-not-unsafe-version-control&quot;&gt;Git is not “unsafe version control.”&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.”&lt;/p&gt;
&lt;p&gt;In his &lt;a href=&quot;https://www.youtube.com/watch?v=4XpnKHJAok8&quot;&gt;Google tech talk&lt;/a&gt;, 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 &lt;em&gt;not&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;However, Git has a &lt;em&gt;ton&lt;/em&gt; 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 &lt;code&gt;rebase&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#comparing-git-to-subversion-or-cvs-directly-is-dangerous&quot;&gt;Comparing Git to Subversion or CVS directly is dangerous.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It wasn’t until his tenth and final point that I really understood why Bennett is getting hung up on some things:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make some changes&lt;/li&gt;
&lt;li&gt;svn commit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If your changes involve creating new files, there’s a tricky extra step:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make some changes&lt;/li&gt;
&lt;li&gt;svn add&lt;/li&gt;
&lt;li&gt;svn commit&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For a GitHub-hosted project, the following is basically the bare minimum:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Make some changes&lt;/li&gt;
&lt;li&gt;git add (not to be confused with svn add)&lt;/li&gt;
&lt;li&gt;git commit&lt;/li&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ummm, OK… I’ll forgive the conflation of GitHub with Git — they are &lt;em&gt;not&lt;/em&gt; 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:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Writing/committing/adding/merging/blah blah blah code.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sharing&lt;/em&gt; that code with other people.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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. &lt;em&gt;Of course&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#lets-talk-about-defaults&quot;&gt;Let’s talk about defaults.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fmercurial.selenic.com%2Fwiki%2FMultipleCommitters&quot;&gt;an overview of some of the common models&lt;/a&gt; and how Mercurial can be used within them.&lt;/p&gt;
&lt;p&gt;So with this in mind, Git has an impossible problem, because the nature of development is that &lt;em&gt;there is no one way to do things.&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;“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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fb%2Foldnewthing%2Farchive%2F2003%2F07%2F28%2F54583.aspx&quot;&gt;I’m not sure it would work out that well&lt;/a&gt;. &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fpeople.gnome.org%2F~newren%2Feg%2F&quot;&gt;Easy GIT&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Having written all of this, I think Bennett has an excellent point when he writes — in &lt;a href=&quot;https://stevebennett.me/2012/02/24/10-things-i-hate-about-git/#comment-82&quot;&gt;his reponse to a comment&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#git-history-is-not-a-bunch-of-lies&quot;&gt;Git history is &lt;em&gt;not&lt;/em&gt; a bunch of lies.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First, let me disclose my bias here. I am &lt;strong&gt;sick and tired&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;Likewise, I don’t need to expose you to my mental process for development. I’ve said before:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I am &lt;em&gt;all over the place&lt;/em&gt; when I code. While I believe that source history should be the &lt;em&gt;‘truth,’&lt;/em&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;em&gt;just right&lt;/em&gt; and delaying saving my work.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;never&lt;/em&gt; save until everything was perfect, risking an awful lot of lost work.&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;love&lt;/em&gt; &lt;code&gt;rebase&lt;/code&gt;, 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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;share&lt;/em&gt; half-baked changes. And I know it’s a little crazy, but sharing and &lt;code&gt;git push&lt;/code&gt; are not the same thing.&lt;sup&gt;&lt;a href=&quot;#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.webfaction.com%2F%3Faffiliate%3Dtylerbutler&quot;&gt;WebFaction&lt;/a&gt;, 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 &lt;em&gt;share&lt;/em&gt; my changes — not push — then I &lt;code&gt;git push&lt;/code&gt; 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 &lt;em&gt;really&lt;/em&gt; not hold other developers to that same standard?&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;can&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#as-a-developer-you-must-learn-to-use-decentralized-version-control-systems&quot;&gt;As a developer you &lt;strong&gt;must&lt;/strong&gt; learn to use decentralized version control systems.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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. &lt;strong&gt;Learn something.&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;Joel Spolsy’s &lt;a href=&quot;https://hginit.github.io/&quot;&gt;Hg Init&lt;/a&gt; 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 &lt;a href=&quot;https://hginit.github.io//00.html&quot;&gt;a section&lt;/a&gt; for folks with a Subversion background:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The future is waiting. Go meet it.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Bennett uses this example, which is apt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To reset one file in your working directory to its committed state:
git checkout file.txt
To reset every file in your working directory to its committed state:
git reset —hard&lt;/p&gt;
&lt;/blockquote&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I &lt;em&gt;know&lt;/em&gt; 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 &lt;em&gt;somehow.&lt;/em&gt; However, in those cases, the problem is not publicly evident since we, the public, don’t see the ‘internal developer documentation,’ if it exists. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Max CSS</title><link>https://tylerbutler.com/max-css/</link><guid isPermaLink="true">https://tylerbutler.com/max-css/</guid><description>Max CSS</description><pubDate>Tue, 10 Jul 2012 18:28:00 GMT</pubDate><content:encoded>&lt;p&gt;Dan Eden pleads with web developers to provide uncompressed CSS in addition to minified versions:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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?”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://trello.com/c/rR6cRubk&quot;&gt;added this&lt;/a&gt; to the list of things to bake into Engineer.&lt;/p&gt;</content:encoded></item><item><title>The Right Woman</title><link>https://tylerbutler.com/the-right-woman/</link><guid isPermaLink="true">https://tylerbutler.com/the-right-woman/</guid><description>The Right Woman</description><pubDate>Sat, 07 Jul 2012 16:34:00 GMT</pubDate><content:encoded>&lt;p&gt;How you know you married the right woman:&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;“Wait!” she says. “I think I have &lt;em&gt;Dark Side of the Moon&lt;/em&gt; in my purse.”&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Yeah — &lt;em&gt;that happened.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Git vs. Mercurial (Again)</title><link>https://tylerbutler.com/git-vs-mercurial-again/</link><guid isPermaLink="true">https://tylerbutler.com/git-vs-mercurial-again/</guid><description>Git vs. Mercurial (Again)</description><pubDate>Mon, 11 Jun 2012 00:57:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Note: I’ve actually had this sitting in my drafts folder for awhile but with the recent release of &lt;a href=&quot;https://github.blog/news-insights/the-library/github-for-windows/&quot;&gt;GitHub for Windows&lt;/a&gt; it seemed like a good time to get my act together and post it.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-beginning&quot;&gt;The Beginning&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;really&lt;/em&gt; hope college courses include source code management tools these days.&lt;/p&gt;

&lt;p&gt;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 (“&lt;em&gt;This&lt;/em&gt; branch” and “&lt;em&gt;That&lt;/em&gt; 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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#git-attempt-1&quot;&gt;Git: Attempt 1&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Then in 2008 &lt;a href=&quot;https://github.com&quot;&gt;GitHub&lt;/a&gt; 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 &lt;em&gt;used it&lt;/em&gt;. And it was fun. And powerful. And very much better than CVS.&lt;/p&gt;
&lt;p&gt;Now, &lt;a href=&quot;https://www.youtube.com/watch?v=4XpnKHJAok8&quot;&gt;Linus might consider me an idiot&lt;/a&gt;, and I no doubt am by his standards, but look people, &lt;em&gt;Git is not easy.&lt;/em&gt; Say it with me again: &lt;em&gt;Git is not easy.&lt;/em&gt; And Git on Windows is even harder — this is still true today.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;drive somewhere&lt;/em&gt;.&lt;sup&gt;&lt;a href=&quot;#fn:git1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.sbf5.com/~cduan/technical/git/&quot;&gt;humorously titled guide by Charles Duan&lt;/a&gt;. Tommi Virtanen’s &lt;a href=&quot;https://eagain.net/articles/git-for-computer-scientists/&quot;&gt;Git for Computer Scientists&lt;/a&gt; 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 &lt;em&gt;use&lt;/em&gt; Git.&lt;/p&gt;
&lt;p&gt;I get why that stuff is important — and useful, potentially&lt;sup&gt;&lt;a href=&quot;#fn:git2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; — 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.&lt;/p&gt;
&lt;p&gt;I think part of the problem I have with Git, though, is that is often &lt;em&gt;does&lt;/em&gt; feel necessary to understand how it works. Remember this notion; I’ll come back to it later.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#mercurial-to-the-rescue-or-not&quot;&gt;Mercurial To the Rescue! (Or Not)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;https://tealsk12.org&quot;&gt;TEALS&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.fogcreek.com%2Fkiln%2F&quot;&gt;Kiln&lt;/a&gt; had just come out so I felt like I could rely on there being a solid GitHub alternative for remote repositories.&lt;/p&gt;
&lt;p&gt;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.)&lt;/p&gt;
&lt;p&gt;But something never quite ‘clicked’ for me about Mercurial — branches. Or, to be more exact in Mercurial terminology —  &lt;em&gt;named&lt;/em&gt; 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…&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/&quot;&gt;branching options in Mercurial&lt;/a&gt;, 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. &lt;em&gt;So sayeth the powers that be.&lt;/em&gt; In reality, you &lt;em&gt;can&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;all over the place&lt;/em&gt; when I code. While I believe that source history should be the &lt;em&gt;‘truth,’&lt;/em&gt; 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,&lt;sup&gt;&lt;a href=&quot;#fn:git3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; etc. Keeping your changes separated is critical in making this ‘clean up’ possible.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#anonymous-branches&quot;&gt;Anonymous Branches&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#patch-queues&quot;&gt;Patch Queues&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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 &lt;em&gt;really&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;So &lt;em&gt;then&lt;/em&gt; you start thinking that you just need &lt;em&gt;multiple patch queues&lt;/em&gt;, one for each feature. This is getting ridiculous, but whatever… I’ll try it. You know what? It &lt;em&gt;is&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;on the patch queue repository&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;That &lt;em&gt;‘for me’&lt;/em&gt; is very important. &lt;em&gt;You&lt;/em&gt; should definitely try Mercurial, especially if you’re struggling with Git. I definitely miss some things about it (MQ in particular, though &lt;code&gt;rebase&lt;/code&gt; 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 &lt;em&gt;please&lt;/em&gt; try Mercurial. You absolutely should be using source control.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#git-back&quot;&gt;Git Back&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fcode.google.com%2Fp%2Fmsysgit%2Fdownloads%2Flist%3Fcan%3D3%26q%3Dofficial%2BGit&quot;&gt;portable version&lt;/a&gt; that you can install on your USB key. And (yay!) Cygwin isn’t necessary.&lt;/p&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.zorched.net/2008/04/14/start-a-new-branch-on-your-remote-git-repository/&quot;&gt;this one&lt;/a&gt; that illustrate how even seasoned Git users forget commands for &lt;em&gt;basic tasks&lt;/em&gt;. 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.&lt;sup&gt;&lt;a href=&quot;#fn:git4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 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.&lt;/p&gt;
&lt;p&gt;A lot of the &lt;a href=&quot;https://github.com/ddollar/git-utils&quot;&gt;helpful scripts&lt;/a&gt; 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 &lt;em&gt;only&lt;/em&gt; 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 &lt;code&gt;/bin&lt;/code&gt; directory in your Git folder and they’ll be available at your Git prompts. You can also try &lt;a href=&quot;https://github.com/dahlbyk/posh-git&quot;&gt;posh-git&lt;/a&gt;, but again, those helpful bash scripts you downloaded won’t be useable.)&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#adjustments&quot;&gt;Adjustments&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So now, having switched from Git to Mercurial and back, here are some of the differences that affect me personally.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;I miss &lt;code&gt;hg incoming&lt;/code&gt; and &lt;code&gt;hg outgoing&lt;/code&gt;. Yes, there are corresponding Git scripts you can get but they aren’t as nice IMO.&lt;/li&gt;
&lt;li&gt;I miss being able to use a substring of the command I want. For example, in Mercurial I could type &lt;code&gt;hg inc&lt;/code&gt; instead of &lt;code&gt;hg incoming&lt;/code&gt;. This does not appear to work in Git, at least not on Windows. Yes, I can create aliases. No, they’re not as convenient.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git rebase&lt;/code&gt; 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 &lt;code&gt;rebase&lt;/code&gt; 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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fmercurial.selenic.com%2Fwiki%2FHisteditExtension&quot;&gt;histedit&lt;/a&gt;, 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 &lt;code&gt;rebase&lt;/code&gt; does.&lt;/li&gt;
&lt;li&gt;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 (&lt;a href=&quot;https://www.jetbrains.com/pycharm/&quot;&gt;PyCharm&lt;/a&gt; actually has this built-in, but other tools such as &lt;a href=&quot;https://code.google.com/p/gitextensions/&quot;&gt;Git Extensions&lt;/a&gt; or even &lt;code&gt;gitk&lt;/code&gt; have it as well) the branch names serve as little sign-posts about what I’m working on.&lt;/li&gt;
&lt;li&gt;Branches are awesome, but managing them is a bit of a pain just because the tools available can’t do &lt;em&gt;everything&lt;/em&gt;. Luckily, even when you think you’ve destroyed things beyond all repair and your work is gone &lt;em&gt;for good&lt;/em&gt;, 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 &lt;em&gt;how Git works&lt;/em&gt;, because if you &lt;em&gt;do&lt;/em&gt; 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.&lt;/li&gt;
&lt;li&gt;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, &lt;code&gt;rebase&lt;/code&gt; branches, rewrite history with interactive &lt;code&gt;rebase&lt;/code&gt;, 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.&lt;/li&gt;
&lt;li&gt;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 &lt;em&gt;eventually&lt;/em&gt; 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 &lt;code&gt;rebase&lt;/code&gt; 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.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post is already incredibly long, so I’ll save the rant about Git GUI tools for another time, but the &lt;code&gt;TL;DR&lt;/code&gt; version is that they still suck leave a lot to be desired, at least on Windows. I was incredibly excited when &lt;a href=&quot;https://github.blog/news-insights/the-library/github-for-windows/&quot;&gt;GitHub for Windows&lt;/a&gt; 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, &lt;em&gt;that&lt;/em&gt; 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 &lt;em&gt;too&lt;/em&gt; simple right now. But… like I said, that’s a whole other post. &lt;code&gt;/sigh&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;very&lt;/em&gt; powerful, and did I mention it’s a lot better than CVS?&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;This analogy is somewhat flawed since I drive a standard-transmission car and firmly believe it is a skill every driver should have. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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 &lt;em&gt;visible references&lt;/em&gt; to it were gone. I managed to save the situation by digging through the reflog and getting out the relevant commits. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Come on, you’ve all seen a commit from &lt;em&gt;that guy&lt;/em&gt; 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. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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: &lt;code&gt;git push origin :branch-to-delete&lt;/code&gt;. Oh, don’t feel bad; I’m sure you would have figured it out on your own. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Ruthless</title><link>https://tylerbutler.com/ruthless/</link><guid isPermaLink="true">https://tylerbutler.com/ruthless/</guid><description>Ruthless</description><pubDate>Fri, 01 Jun 2012 16:52:00 GMT</pubDate><content:encoded>&lt;p&gt;Lot’s of little gems in this piece by Chris Parker, but I especially like this one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Every time you throw in something that seems to work, &lt;em&gt;find out why it works.&lt;/em&gt; 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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.).&lt;/p&gt;</content:encoded></item><item><title>PSGet</title><link>https://tylerbutler.com/psget/</link><guid isPermaLink="true">https://tylerbutler.com/psget/</guid><description>PSGet</description><pubDate>Wed, 30 May 2012 19:51:00 GMT</pubDate><content:encoded>&lt;p&gt;I am no doubt very late to the party, but I just discovered &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fpsget.net%2F&quot;&gt;PSGet&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;In particular, get PSUrl — cURL for PowerShell. &lt;em&gt;&lt;strong&gt;Finally.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>How To Install Python, pip, and virtualenv on Windows with PowerShell</title><link>https://tylerbutler.com/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/</link><guid isPermaLink="true">https://tylerbutler.com/how-to-install-python-pip-and-virtualenv-on-windows-with-powershell/</guid><description>How To Install Python, pip, and virtualenv on Windows with PowerShell</description><pubDate>Tue, 29 May 2012 00:26:00 GMT</pubDate><content:encoded>&lt;p&gt;If you do any Python development, you’ll probably run into an awful lot of package installation instructions &lt;a href=&quot;https://engineer.readthedocs.org/en/latest/installation.html#installing-using-pip&quot;&gt;that read&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;To install, use pip:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install engineer&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, that’s all fine and dandy, but what is pip? And what is this virtualenv thing people keep telling me I should use?&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;a)&lt;/em&gt; you’re working on Linux or UNIX or &lt;em&gt;b)&lt;/em&gt; 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 &lt;em&gt;was!&lt;/em&gt; 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.&lt;/p&gt;
&lt;div&gt;&lt;/div&gt;

&lt;h2&gt;&lt;a href=&quot;#before-we-start&quot;&gt;Before We Start&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;code&gt;python setup.py install&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Finally, there’s a wrapper utility for virtualenv aptly called &lt;em&gt;virtualenvwrapper&lt;/em&gt;. 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.&lt;/p&gt;
&lt;p&gt;So with the definitions out of the way, let’s get started…&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#ensure-you-can-execute-powershell-scripts&quot;&gt;Ensure You Can Execute PowerShell Scripts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;code&gt;Set-ExecutionPolicy&lt;/code&gt; command. There’s &lt;a href=&quot;http://technet.microsoft.com/en-us/library/ee176949.aspx&quot;&gt;a great article on TechNet&lt;/a&gt; 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;...cannot be loaded because the execution of scripts is disabled on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;this system. Please see &lt;/span&gt;&lt;span&gt;&quot;get-help about_signing&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; more details.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;&lt;a href=&quot;#get-python&quot;&gt;Get Python&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.python.org/downloads/windows/&quot;&gt;https://www.python.org/downloads/windows/&lt;/a&gt;. 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.&lt;/p&gt;
&lt;p&gt;Recent Python installers include an explicit option to add &lt;code&gt;C:\Python27\&lt;/code&gt; 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 &lt;a href=&quot;https://docs.python.org/using/windows.html&quot;&gt;Using Python on Windows&lt;/a&gt; documentation includes more details.&lt;/p&gt;
&lt;p&gt;Unfortunately, the installer does &lt;em&gt;not&lt;/em&gt; add the &lt;code&gt;Scripts&lt;/code&gt; (i.e. &lt;code&gt;C:\Python27\Scripts&lt;/code&gt;) 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.&lt;/p&gt;
&lt;p&gt;Once you’ve installed Python, open up a PowerShell window and type &lt;code&gt;python&lt;/code&gt; and press enter. You should see something like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Python &lt;/span&gt;&lt;span&gt;2.7&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;8&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span&gt;default&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; Jun &lt;/span&gt;&lt;span&gt;30&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2014&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;16&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;03&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt;49&lt;/span&gt;&lt;span&gt;) [&lt;/span&gt;&lt;span&gt;MSC&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v.1500&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;32&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;bit&lt;/span&gt;&lt;span&gt; (Intel)] on win32&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Type &lt;/span&gt;&lt;span&gt;&quot;help&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;copyright&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;credits&quot;&lt;/span&gt;&lt;span&gt; or &lt;/span&gt;&lt;span&gt;&quot;license&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; more information.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Press &lt;code&gt;Ctrl-Z&lt;/code&gt; and hit return to exit the Python prompt. If you get an error when you type &lt;code&gt;python&lt;/code&gt; 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 &lt;code&gt;python&lt;/code&gt; again. You should be good to go!&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#get-pip&quot;&gt;Get Pip&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;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.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: Previous versions of this guide included a step to download and install Distribute. That is no longer needed; just get pip.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The easiest way to install pip is to download the &lt;a href=&quot;/link-not-available?url=https%3A%2F%2Fraw.github.com%2Fpypa%2Fpip%2Fmaster%2Fcontrib%2Fget-pip.py&quot;&gt;get-pip.py&lt;/a&gt; script, save it locally, then run it using Python.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; python &lt;/span&gt;&lt;span&gt;get-pip&lt;/span&gt;&lt;span&gt;.py&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Downloading&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;unpacking pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Downloading&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;unpacking setuptools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Installing collected packages: pip&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; setuptools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Successfully installed pip setuptools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cleaning up...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;There are other ways to get pip, but this is the easiest way I have found. There are more details on this at &lt;a href=&quot;http://www.pip-installer.org/en/latest/installing.html#using-the-installer&quot;&gt;the pip website&lt;/a&gt;. To check if everything is working, just type &lt;code&gt;pip&lt;/code&gt; at the command line:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Usage:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;pip &lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;command&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;options&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you get another “command is not recognized” error, check that &lt;code&gt;C:\Python27\Scripts\&lt;/code&gt; is on your path.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#install-virtualenv-and-virtualenvwrapper-powershell&quot;&gt;Install virtualenv and virtualenvwrapper-powershell&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pip should now be installed, so type the following commands to get virtualenv and the PowerShell virtualenvwrapper installed:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip install virtualenv&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip install virtualenvwrapper&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;powershell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now you need to import the wrapper module in PowerShell, so type &lt;code&gt;Import-Module virtualenvwrapper&lt;/code&gt;.
You will probably get one of two errors — or both. The first will be something like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Import-Module&lt;/span&gt;&lt;span&gt; virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Get-Content&lt;/span&gt;&lt;span&gt; : Cannot find path &lt;/span&gt;&lt;span&gt;&apos;Function:\TabExpansion&apos;&lt;/span&gt;&lt;span&gt; because it does not exist.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The other error you might see will say something like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Virtualenvwrapper: Virtual environments directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&apos;C:\Users\tyler/.virtualenvs&apos;&lt;/span&gt;&lt;span&gt; does not exist. Create it or&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;set $env:WORKON_HOME to an existing directory.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Well, at least you know you’re on the right track! Do exactly what the message says: create the missing directory.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;mkdir &lt;/span&gt;&lt;span&gt;&apos;~\.virtualenvs&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You might also want to change the location to store your virtual environments. To do that, set the &lt;code&gt;$env:WORKON_HOME&lt;/code&gt; variable to wherever you want to store them. I generally stick with the default of &lt;code&gt;~\.virtualenvs&lt;/code&gt; though. Whatever you do, remember this location; it will come in handy.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Get-Command&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt;virtualenv&lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CommandType     Name                                               ModuleName&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;-----------&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;                                               &lt;/span&gt;&lt;span&gt;----------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           cdvirtualenv &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; CDIntoVirtualEnvironment           virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           cpvirtualenv &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Copy-VirtualEnvironment&lt;/span&gt;&lt;span&gt;            virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           lsvirtualenv &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Get-VirtualEnvironment&lt;/span&gt;&lt;span&gt;             virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           mkvirtualenv &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;New-VirtualEnvironment&lt;/span&gt;&lt;span&gt;             virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           rmvirtualenv &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Remove-VirtualEnvironment&lt;/span&gt;&lt;span&gt;          virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Alias           setvirtualenvproject &lt;/span&gt;&lt;span&gt;-&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Set-VirtualEnvProject&lt;/span&gt;&lt;span&gt;      support&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;add2virtualenv&lt;/span&gt;&lt;span&gt;                                     virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        CDIntoVirtualEnvironment                           virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        Copy-VirtualEnvironment                            virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        Get-VirtualEnvironment                             virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        New-VirtualEnvironment                             virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        New-VirtualEnvProject                              support&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        Remove-VirtualEnvironment                          virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        Set-VirtualEnvironment                             virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        Set-VirtualEnvProject                              support&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        showvirtualenv                                     virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Function        VerifyVirtualEnv                                   support&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Application     virtualenv.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Application     virtualenv-2.7.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Application     virtualenv-clone.exe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll see that there are a bunch of nice PowerShell style cmdlets, like &lt;code&gt;New-VirtualEnvironment&lt;/code&gt;, but there are also aliases set up mapping those cmdlets to commands you might be more familiar with, like &lt;code&gt;mkvirtualenv&lt;/code&gt;. Of course you also get regular PowerShell tab completion for these cmdlets and aliases.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#managing-virtualenvs&quot;&gt;Managing virtualenvs&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that we have virtualenv installed, let’s make a new virtualenv:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;New-VirtualEnvironment&lt;/span&gt;&lt;span&gt; engineer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Replace &lt;code&gt;engineer&lt;/code&gt; 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.&lt;/p&gt;
&lt;p&gt;After the command completes, you should see a PowerShell prompt that looks like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(engineer)PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;(engineer)&lt;/code&gt; prepended to your prompt reminds you that you’re currently working within that virtualenv. If you type &lt;code&gt;workon&lt;/code&gt; now you should see the available virtualenvs, and if you type &lt;code&gt;workon name_of_another_virtualenv&lt;/code&gt; you’ll flip to that environment.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; workon&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PathInfo         Name          PathToScripts                 PathToSitePackages&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;--------&lt;/span&gt;&lt;span&gt;         &lt;/span&gt;&lt;span&gt;----&lt;/span&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;-------------&lt;/span&gt;&lt;span&gt;                 &lt;/span&gt;&lt;span&gt;------------------&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;engineer         engineer      C:\Users\tyler\.virtuale..&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;   C:\Users\tyler\.virtuale...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;&lt;a href=&quot;#install-packages-with-pip&quot;&gt;Install Packages with pip&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that your virtual environments are configured, you can install packages into them using pip. Open a PowerShell prompt, type &lt;code&gt;workon name_of_virtualenv&lt;/code&gt; and then type &lt;code&gt;pip install package_name&lt;/code&gt;. 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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.pip-installer.org%2Fen%2Flatest%2Frequirements.html&quot;&gt;requirements file&lt;/a&gt; (often called &lt;code&gt;requirements.txt&lt;/code&gt;). To have pip load all of the packages in that file, type:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip install &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;r path_to_requirements_file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Also, you might have downloaded a package’s source manually that has a &lt;code&gt;setup.py&lt;/code&gt; file in it. You can have pip install that for you by typing:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; pip install &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;e path_to_source&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;-e&lt;/code&gt; option can also check out source directly from a Mercurial, Git, Subversion, or Bazaar repository and install a package from there.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#automatically-importing-the-virtualenvwrapper-powershell-module&quot;&gt;Automatically Importing the virtualenvwrapper PowerShell Module&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You might notice at some point — probably once you open a new PowerShell prompt — that you can no longer use the &lt;code&gt;workon&lt;/code&gt; and &lt;code&gt;New-VirtualEnvironment&lt;/code&gt; commands. Well, silly, you forgot to import the &lt;code&gt;virtualenvwrapper&lt;/code&gt; 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; $profile &lt;/span&gt;&lt;span&gt;|&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Format-List&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;*&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Force&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;AllUsersAllHosts       : C:\Windows\System32\WindowsPowerShell\v1.&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;\profile.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;AllUsersCurrentHost    : C:\Windows\System32\WindowsPowerShell\v1.&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;\Microsoft.PowerShell_profile.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CurrentUserAllHosts    : C:\Users\tyler\Documents\WindowsPowerShell\profile.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CurrentUserCurrentHost : C:\Users\tyler\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Length                 : &lt;/span&gt;&lt;span&gt;77&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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 &lt;code&gt;CurrentUserAllHosts&lt;/code&gt; 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;New-Item&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Path $Profile.CurrentUserAllHosts &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Type file &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Force&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Or you could just create a file in your favorite text editor and save it in that location (with the correct name, of course).&lt;/p&gt;
&lt;p&gt;In that file, put the command you used to import the &lt;code&gt;virtualenvwrapper&lt;/code&gt; modules earlier&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Import-Module&lt;/span&gt;&lt;span&gt; virtualenvwrapper&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;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 &lt;code&gt;workon&lt;/code&gt; command and other virtualenv cmdlets should start functioning.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#configuring-your-ide&quot;&gt;Configuring Your IDE&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is one final step to getting everything really &lt;em&gt;ready&lt;/em&gt; for developing Python projects — setting up your IDE to use the appropriate &lt;code&gt;virtualenv&lt;/code&gt; for your project. There are several different IDEs out there or you could just rock &lt;a href=&quot;https://notepad-plus-plus.org/&quot;&gt;Notepad++&lt;/a&gt;. I personally like &lt;a href=&quot;https://www.jetbrains.com/pycharm/&quot;&gt;PyCharm&lt;/a&gt; a lot though; &lt;a href=&quot;/2013/10/pycharm-3-0/&quot;&gt;I use it&lt;/a&gt; almost exclusively for Python development.&lt;/p&gt;
&lt;p&gt;If you &lt;em&gt;are&lt;/em&gt; using PyCharm, version 2.5+ has built-in support for virtualenv. You can &lt;a href=&quot;https://www.jetbrains.com/pycharm/webhelp/creating-virtual-environment.html&quot;&gt;create virtual environments&lt;/a&gt; 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 &lt;code&gt;workon&lt;/code&gt; command, among another things).&lt;/p&gt;
&lt;p&gt;Anyway, if you want to use an existing virtualenv, you’ll need to tell PyCharm about it. The &lt;a href=&quot;https://www.jetbrains.com/pycharm/webhelp/configuring-local-python-interpreters.html&quot;&gt;PyCharm support site has details&lt;/a&gt;, but the key thing to know is that you need to point it to the &lt;code&gt;python.exe&lt;/code&gt; inside your &lt;code&gt;virtualenv&lt;/code&gt;’s &lt;code&gt;Scripts&lt;/code&gt; directory. In my case, the full path is &lt;code&gt;C:\Users\tyler\.virtualenvs\engineer\Scripts\python.exe&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;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).&lt;/p&gt;</content:encoded></item><item><title>xkcd 2</title><link>https://tylerbutler.com/xkcd-2/</link><guid isPermaLink="true">https://tylerbutler.com/xkcd-2/</guid><description>xkcd 2</description><pubDate>Thu, 17 May 2012 18:23:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve just put up a small side project I whipped together over the last day or so called &lt;a href=&quot;https://xkcd2.com/&quot;&gt;xkcd 2&lt;/a&gt;. It might not make much sense why I built this thing, so bear with me while I try to explain.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#why&quot;&gt;Why&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I’ve been reading &lt;a href=&quot;https://xkcd.com/&quot;&gt;xkcd&lt;/a&gt; for years, but it wasn’t until fairly recently that I discovered most of the comics actually have a caption.&lt;sup&gt;&lt;a href=&quot;#fn:xkcd1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It’s tucked away in the &lt;code&gt;title&lt;/code&gt; attribute on the &lt;code&gt;img&lt;/code&gt; tag, and in most browsers you really only see it if you hover your mouse over the image for a few seconds.&lt;/p&gt;
&lt;p&gt;Discovering this was a total accident. I read most xkcd comics via the RSS feed in &lt;a href=&quot;http://reederapp.com/&quot;&gt;Reeder&lt;/a&gt;. If you zoom-pinch on an image in Reeder, it opens up a view like this:&lt;/p&gt;
&lt;div&gt;
    &lt;a href=&quot;https://www.flickr.com/photos/76037594@N06/7206331966/&quot;&gt;
        &lt;img src=&quot;https://farm8.staticflickr.com/7241/7206331966_c6419e544e.jpg&quot; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;An xkcd.com comic in Reeder&quot; /&gt;
    &lt;/a&gt;
    &lt;p&gt;An xkcd.com comic in Reeder&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;That panel at the bottom displays the &lt;code&gt;title&lt;/code&gt; 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: &lt;a href=&quot;https://xkcd2.com/1049/&quot;&gt;comic 1049&lt;/a&gt;, 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.&lt;/p&gt;

&lt;p&gt;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:&lt;/p&gt;
&lt;div&gt;
    &lt;a href=&quot;https://www.flickr.com/photos/76037594@N06/7213096382/&quot;&gt;
        &lt;img src=&quot;https://farm9.staticflickr.com/8151/7213096382_db69df1d70.jpg&quot; width=&quot;500&quot; height=&quot;361&quot; alt=&quot;xkcd2&quot; /&gt;
    &lt;/a&gt;
    &lt;p&gt;An xkcd comic as shown on xkcd2.com&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;&lt;a href=&quot;#how&quot;&gt;How&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Now that you know the &lt;em&gt;why&lt;/em&gt; of xkcd2.com, let’s talk about the &lt;em&gt;how&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;xkcd 2 is an exceedingly simple &lt;a href=&quot;http://flask.pocoo.org/&quot;&gt;Flask&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Each time a comic is requested, I use the excellent &lt;a href=&quot;http://code.google.com/p/httplib2/&quot;&gt;httplib2&lt;/a&gt; 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.&lt;sup&gt;&lt;a href=&quot;#fn:xkcd2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;Once I get the response and page content from xkcd.com, I parse the page into a DOM object using &lt;a href=&quot;https://github.com/html5lib&quot;&gt;html5lib&lt;/a&gt;. 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…&lt;sup&gt;&lt;a href=&quot;#fn:xkcd3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;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 &lt;code&gt;response.fromcache&lt;/code&gt; property), I discard httplib2’s response entirely and simply load the comic metadata from the pickle file.&lt;/p&gt;
&lt;p&gt;Once I have the metadata, I just pass it to the page template and render the page.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#but-but&quot;&gt;But… but…&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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 &lt;em&gt;is&lt;/em&gt; 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.&lt;/p&gt;
&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:xkcd4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; 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.&lt;/p&gt;
&lt;p&gt;Anyway, hopefully some folks will find this useful and/or interesting. Code is up &lt;a href=&quot;https://github.com/tylerbutler/xkcd2&quot;&gt;on github&lt;/a&gt; and the site is live at &lt;a href=&quot;https://xkcd2.com/&quot;&gt;xkcd2.com&lt;/a&gt;.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Oh, you already knew that? Well good for you. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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 &lt;code&gt;HEAD&lt;/code&gt; 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. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This is probably actually possible using node.js, but it seemed like overkill for this project. &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;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 &lt;em&gt;always&lt;/em&gt; brittle no matter what precautions you take or how smart you try to be. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Convergence</title><link>https://tylerbutler.com/convergence/</link><guid isPermaLink="true">https://tylerbutler.com/convergence/</guid><description>Convergence</description><pubDate>Mon, 30 Apr 2012 21:56:00 GMT</pubDate><content:encoded>&lt;p&gt;Love this quote from &lt;a href=&quot;https://www.macstories.net/news/apple-q2-2012-results-39-2-billion-revenue-35-1-million-iphones-11-8-million-ipads-sold/&quot;&gt;Tim Cook&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Lukas Mathis</title><link>https://tylerbutler.com/lukas-mathis/</link><guid isPermaLink="true">https://tylerbutler.com/lukas-mathis/</guid><description>Lukas Mathis</description><pubDate>Mon, 23 Apr 2012 21:27:00 GMT</pubDate><content:encoded>&lt;p&gt;I just linked to a piece that I got via &lt;a href=&quot;https://ignorethecode.net&quot;&gt;Lukas Mathis&lt;/a&gt;, but I wanted to explicitly encourage you to read his stuff. In my opinion, &lt;a href=&quot;https://ignorethecode.net&quot;&gt;ignorethecode.net&lt;/a&gt; should be required reading for anyone doing user experience design today. Very smart, very insightful, very well-reasoned. Solid work.&lt;/p&gt;</content:encoded></item><item><title>The Monochrome Trend</title><link>https://tylerbutler.com/the-monochrome-trend/</link><guid isPermaLink="true">https://tylerbutler.com/the-monochrome-trend/</guid><description>The Monochrome Trend</description><pubDate>Mon, 23 Apr 2012 21:13:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.literatureandlatte.com/blog/?p=271&quot;&gt;Keith Blount on color&lt;/a&gt;, or lack thereof, in user interfaces:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;sup&gt;&lt;a href=&quot;#fn:color1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It’s nice to hear I’m not the only one that feels this way.&lt;/p&gt;
&lt;p&gt;In Mathis’ link to Blount, he pulls a quote from &lt;a href=&quot;https://pragprog.com/book/lmuse/designed-for-use&quot;&gt;his own book&lt;/a&gt;, which in turn quotes Colin Ware (I’m dangerously close to &lt;a href=&quot;https://www.inception-explained.com/&quot;&gt;Inception&lt;/a&gt;-level quote recursion at this point!):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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. &lt;a href=&quot;https://www.microsoft.com/typography/ctfonts/WordRecognition.aspx&quot;&gt;This paper from Microsoft typography&lt;/a&gt; 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.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Mies</title><link>https://tylerbutler.com/mies/</link><guid isPermaLink="true">https://tylerbutler.com/mies/</guid><description>Mies</description><pubDate>Wed, 28 Mar 2012 01:05:00 GMT</pubDate><content:encoded>&lt;p&gt;I rarely go to the Google homepage, but I wound up there today and was surprised to see a &lt;a href=&quot;https://www.google.com/doodles/mies-van-der-rohes-126th-birthday&quot;&gt;Doodle&lt;/a&gt; very reminiscent of &lt;a href=&quot;https://en.wikipedia.org/wiki/S.R._Crown_Hall&quot;&gt;Crown Hall&lt;/a&gt;. Sure enough, it’s an homage to &lt;a href=&quot;https://en.wikipedia.org/wiki/Ludwig_Mies_van_der_Rohe&quot;&gt;Ludwig Mies van der Rohe&lt;/a&gt; — or simply &lt;em&gt;Mies&lt;/em&gt; as he was always referred to on campus while I was there&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; — whose birthday was today in 1886. Very cool.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;If Wikipedia is to be trusted, referring to him simply as &lt;em&gt;Mies&lt;/em&gt; is widespread. I had always assumed this was an IIT-only thing given his importance to the campus and College of Architecture there. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Thoughts On the New iPad</title><link>https://tylerbutler.com/thoughts-on-the-new-ipad/</link><guid isPermaLink="true">https://tylerbutler.com/thoughts-on-the-new-ipad/</guid><description>Thoughts On the New iPad</description><pubDate>Sat, 24 Mar 2012 23:08:00 GMT</pubDate><content:encoded>&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;With that, here are some things to note about my iPad usage.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I use it almost exclusively in bed, lying on my back.&lt;/li&gt;
&lt;li&gt;I use it in landscape mode almost exclusively, at least when I’m in bed.&lt;/li&gt;
&lt;li&gt;Given that I use it largely at home, I go with the WiFi-only 16GB models.&lt;/li&gt;
&lt;li&gt;I generally use it to browse the web, read, watch movies, or play games.&lt;/li&gt;
&lt;li&gt;I have a &lt;a href=&quot;https://twelvesouth.com/products/compass/&quot;&gt;Compass&lt;/a&gt; stand that I use if I’m going to be typing on it for longer periods of time. (Obviously not in bed.)&lt;/li&gt;
&lt;li&gt;I do not take photos, be it with an iPad, iPhone, camera, or otherwise. Ever. I am just not into photos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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:&lt;/p&gt;

&lt;h2&gt;&lt;a href=&quot;#weight&quot;&gt;Weight&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#smart-cover&quot;&gt;Smart Cover&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, so clever. I’ve been in love with this since I first saw &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.apple.com%2Fipad%2Fsmart-cover%2F&quot;&gt;the ad&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;But the bigger problem is that it only clips on one side — the &lt;em&gt;wrong&lt;/em&gt; 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 &lt;em&gt;left&lt;/em&gt; instead of the &lt;em&gt;right&lt;/em&gt;&lt;sup&gt;&lt;a href=&quot;#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. 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 &lt;em&gt;feels&lt;/em&gt; wrong.&lt;/p&gt;
&lt;p&gt;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 &lt;em&gt;lot&lt;/em&gt;). 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;One other note: with the smart cover on, the iPad fits snugly into the &lt;a href=&quot;https://sfbags.com/products/ipad-cases/suedejacket-ipad.php&quot;&gt;Waterfield Suede Jacket&lt;/a&gt; I used (and &lt;em&gt;love&lt;/em&gt;) 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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#shape&quot;&gt;Shape&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#display&quot;&gt;Display&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Nothing. Else. Matters.&lt;/strong&gt; 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 &lt;em&gt;am&lt;/em&gt; a display nut — it is the single-most important thing about an electronic device to me. But Jeff Atwood &lt;a href=&quot;https://blog.codinghorror.com/welcome-to-the-post-pc-era/&quot;&gt;makes a really good point&lt;/a&gt; about the importance of the display, especially for something like an iPad:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;iPad 3 reviews that complain “all they did was improve the display” are clueless bordering on stupidity. Tablets are pretty much &lt;em&gt;by definition all display&lt;/em&gt;; nothing is more fundamental to the tablet experience than the quality of the display.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#speed-and-memory&quot;&gt;Speed and Memory&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Overall, I’m very pleased, despite the minor issues above. With any device, &lt;em&gt;real&lt;/em&gt; 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.&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;&lt;a href=&quot;#footnote-label&quot;&gt;Footnotes&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;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. &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;</content:encoded></item><item><title>Five People, One Guitar</title><link>https://tylerbutler.com/five-people-one-guitar/</link><guid isPermaLink="true">https://tylerbutler.com/five-people-one-guitar/</guid><description>Five People, One Guitar</description><pubDate>Fri, 23 Mar 2012 07:35:00 GMT</pubDate><content:encoded>&lt;p&gt;Absolutely love &lt;a href=&quot;https://www.youtube.com/watch?v=d9NF2edxy-M&quot;&gt;this cover&lt;/a&gt; of Gotye’s &lt;em&gt;Somebody That I Used to Know&lt;/em&gt;:&lt;/p&gt;
&lt;div&gt;
    
&lt;/div&gt;</content:encoded></item><item><title>New tylerbutler.com</title><link>https://tylerbutler.com/new-tylerbutler-com/</link><guid isPermaLink="true">https://tylerbutler.com/new-tylerbutler-com/</guid><description>New tylerbutler.com</description><pubDate>Sun, 18 Mar 2012 06:30:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve just pushed out a brand new version of &lt;a href=&quot;/&quot;&gt;tylerbutler.com&lt;/a&gt;. It’s a completely original redesign from the ground up, and is built using a static blog engine I wrote called &lt;a href=&quot;/projects/engineer/&quot;&gt;Engineer&lt;/a&gt;. I can now write posts in &lt;a href=&quot;https://daringfireball.net/projects/markdown/&quot;&gt;Markdown&lt;/a&gt;, save them to a folder that gets synced everywhere via &lt;a href=&quot;https://www.dropbox.com&quot;&gt;Dropbox&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;One of the major goals when rebuilding the site was to encourage me to &lt;em&gt;write&lt;/em&gt; again. My last post was in January of &lt;em&gt;last year&lt;/em&gt;, and the last substantial post was long before that. That’s just… embarrassing…&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Anyway, here’s hoping I’ll be writing more often soon. I have no excuses!&lt;/p&gt;</content:encoded></item><item><title>2010 Year in Review</title><link>https://tylerbutler.com/2010-year-in-review/</link><guid isPermaLink="true">https://tylerbutler.com/2010-year-in-review/</guid><description>2010 Year in Review</description><pubDate>Sun, 02 Jan 2011 03:06:00 GMT</pubDate><content:encoded>&lt;p&gt;Seems to be the trend these days to ‘review’ the year, and since I am nothing
if not a trend-follower (snicker)… Here goes.&lt;/p&gt;
&lt;p&gt;In 2010 I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Got married — well, we had our official wedding, anyway&lt;/li&gt;
&lt;li&gt;Shipped Office 2010 and joined a new team at work&lt;/li&gt;
&lt;li&gt;Started teaching Web Design at Issaquah High School&lt;/li&gt;
&lt;li&gt;Learned to write apps for Windows Phone 7&lt;/li&gt;
&lt;li&gt;Moved from Mercer Island to Lynnwood&lt;/li&gt;
&lt;li&gt;**Almost **downed the Lich King in Icecrown Citadel — hopefully I’ll get him during the guild run on Monday!&lt;/li&gt;
&lt;li&gt;I bought an iPad&lt;/li&gt;
&lt;li&gt;Gained weight&lt;/li&gt;
&lt;li&gt;Grew a beard&lt;/li&gt;
&lt;li&gt;Learned firsthand the challenges of living near the in-laws&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In 2011, I predict the following things will happen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I’ll stay married&lt;/li&gt;
&lt;li&gt;I’ll keep shipping software as part of Office&lt;/li&gt;
&lt;li&gt;I’ll prepare to teach another bunch of high school students the awesomeness of Web Design&lt;/li&gt;
&lt;li&gt;I’ll share what I’ve learned so far from my experience teaching here on tylerbutler.com&lt;/li&gt;
&lt;li&gt;I’ll re-theme/redesign tylerbutler.com&lt;/li&gt;
&lt;li&gt;I’ll lose weight, then gain much of it back&lt;/li&gt;
&lt;li&gt;I’ll shave my beard and vow never to grow it again&lt;/li&gt;
&lt;li&gt;I’ll ship the first of what I hope will be several apps for Windows Phone 7&lt;/li&gt;
&lt;li&gt;I’ll dig in and start hardcore learning HTML 5&lt;/li&gt;
&lt;li&gt;I’ll speak at some conference somewhere&lt;/li&gt;
&lt;li&gt;I’ll buy some new Apple gadget, but probably not a phone&lt;/li&gt;
&lt;li&gt;I’ll build a new computer so I can play WoW on Ultra&lt;/li&gt;
&lt;li&gt;Elizabeth will start graduate school&lt;/li&gt;
&lt;li&gt;We’ll get either a second car or a second dog&lt;/li&gt;
&lt;li&gt;I won’t take nearly enough vacation&lt;/li&gt;
&lt;li&gt;I won’t play nearly enough video games&lt;/li&gt;
&lt;li&gt;I won’t have nearly enough time to code&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>Brave New World</title><link>https://tylerbutler.com/brave-new-world/</link><guid isPermaLink="true">https://tylerbutler.com/brave-new-world/</guid><description>Brave New World</description><pubDate>Sat, 15 Aug 2009 05:09:00 GMT</pubDate><content:encoded>&lt;p&gt;I need to read Brave New World immediately.&lt;/p&gt;</content:encoded></item><item><title>Assumptions Make Life Simpler</title><link>https://tylerbutler.com/assumptions-make-life-simpler/</link><guid isPermaLink="true">https://tylerbutler.com/assumptions-make-life-simpler/</guid><description>Assumptions Make Life Simpler</description><pubDate>Fri, 14 Aug 2009 03:14:00 GMT</pubDate><content:encoded>&lt;p&gt;Chris Greening, the developer of iPhone Sudoku Grab, &lt;a href=&quot;https://sudokugrab.blogspot.com/2009/07/how-does-it-all-work.html&quot;&gt;explains how it
works&lt;/a&gt;. I find this section the most interesting:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the things that makes recognizing Sudoku puzzles an easier task than
most image processing/recognition problem is that it is a highly constrained
problem — a standard Sudoku puzzle is going to be a square grid and it will
only contain the printed numbers 1-9. These two points are very important. The
first point — it’s a square grid tells us what shape a puzzle is and what we
should be looking for in an image. The second point — it will only contain the
printed numbers 1-9 tells us that we aren’t going to need a sophisticated OCR
system. When we look at the problem there’s nothing that jumps out and says
“nobody has solved this before — it’s probably really hard”. We can also add
some additional assumptions -&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;In a photograph of a sudoku puzzle, the puzzle is going to be the
main/most important object on the page&lt;/strong&gt; A user is going to be photographing
the puzzle — they aren’t going to take a picture of a whole newspaper page,
they won’t be taking a photograph of a coffee shop and expecting us to find a
sudoku puzzle that someone is playing four tables away. Also, the user is
going to try and capture the whole puzzle, they won’t miss a corner or chop
off the top.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The puzzle will be orientated reasonably correctly.&lt;/strong&gt; No-one
(hopefully) is going to be taking a picture of an upside down puzzle, and
typically they will be trying to align it nicely in the camera viewfinder so
it is reasonably straight without too much distortion.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;A great example of how some simple assumptions made about your problem make it
far easier to solve. Of course, the key is making sure the assumptions are
valid, or being prepared to handle edge cases where these assumptions prove
false.&lt;/p&gt;</content:encoded></item><item><title>Software Hatred</title><link>https://tylerbutler.com/software-hatred/</link><guid isPermaLink="true">https://tylerbutler.com/software-hatred/</guid><description>Software Hatred</description><pubDate>Fri, 24 Jul 2009 03:22:00 GMT</pubDate><content:encoded>&lt;p&gt;Great insight from &lt;a href=&quot;https://blog.codinghorror.com/nobody-hates-software-more-than-software-developers/&quot;&gt;Jeff Atwood&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;One of the (many) unfortunate side effects of choosing a career in software
development is that, over time, you learn to hate software. I mean really hate
it. With a &lt;em&gt;passion&lt;/em&gt;. Take the angriest user you’ve ever met, multiply that by
a thousand, and you still haven’t come close to how we programmers feel about
software. &lt;strong&gt;Nobody hates software more than software developers.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is so true it hurts. An additional side effect of being a Program Manager
is that you become extremely critical of everything. Parking meters. Elevator
buttons. Anything that isn’t as usable as it should be. Not that I could do
any better at designing these things, necessarily, but they still anger me,
and much more than they used to now that design is a part of my daily work
life.&lt;/p&gt;
&lt;p&gt;Another great quote from the article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hardware companies don’t generally do software well&lt;/strong&gt;. Digital camera
companies excel at building digital camera hardware. Software, if it exists at
all, is an afterthought, a side effect, a checkbox on some marketing weasel’s
clipboard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is true not only for consumer electronics like digital cameras, but also
for other hardware that you might not think of as running “software.” Think of
your microwave. The ice dispenser on your fridge. Your washing machine. Your
car’s on-board computer. All of these are running software in some fashion
most likely, and they all kind of suck.&lt;/p&gt;</content:encoded></item><item><title>Dates in Posts Fixed</title><link>https://tylerbutler.com/dates-in-posts-fixed/</link><guid isPermaLink="true">https://tylerbutler.com/dates-in-posts-fixed/</guid><description>Dates in Posts Fixed</description><pubDate>Tue, 14 Jul 2009 11:01:00 GMT</pubDate><content:encoded>&lt;p&gt;Just made a minor fix to the site… I noticed that dates weren’t showing up for
some posts. Took me about 5 minutes to figure out that the Wordpress
&lt;a href=&quot;https://codex.wordpress.org/Template_Tags/the_date&quot;&gt;the_date()&lt;/a&gt; function had changed:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When there are multiple posts on a page published under the SAME DAY,
&lt;code&gt;the_date()&lt;/code&gt; only displays the date for the first post (that is, the first
instance of &lt;code&gt;the_date()&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quick and easy change…&lt;/p&gt;
&lt;p&gt;Before:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;php&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the_date&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;php&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the_time&lt;/span&gt;&lt;span&gt;() &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;After:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;?&lt;/span&gt;&lt;span&gt;php&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;the_time&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;F j, Y, g:i a&quot;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;?&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</content:encoded></item><item><title>Follow Up On Outlook HTML+CSS Post</title><link>https://tylerbutler.com/follow-up-on-outlook-htmlcss-post/</link><guid isPermaLink="true">https://tylerbutler.com/follow-up-on-outlook-htmlcss-post/</guid><description>Follow Up On Outlook HTML+CSS Post</description><pubDate>Tue, 14 Jul 2009 08:35:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Note: I work for Microsoft, in the Office division, but I don’t work in or
with the Outlook team. I don’t have any specific knowledge about their
decisions or plans, and this post is based only my own experience here at
Microsoft.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;My &lt;a href=&quot;/2009/06/outlook-email-and-css/&quot;&gt;post on Outlook’s HTML+CSS rendering&lt;/a&gt; generated a bit of buzz, due in
no small part, I’m sure, to &lt;a href=&quot;https://www.zeldman.com/2009/06/24/sour-outlook/#comment-43712&quot;&gt;Zeldman linking to it&lt;/a&gt; from his own post. I’m
finally getting some time to respond.&lt;/p&gt;
&lt;p&gt;First of all, thanks to everyone for the responses; I am glad that this
alternative viewpoint at least sparked some discussion. Despite what you may
think, there are plenty of people on the “front lines” at Microsoft that
really care a lot about this stuff, and we try very very hard to make sure The
Right Thing (tm) happens whenever possible.&lt;/p&gt;
&lt;p&gt;I have &lt;a href=&quot;/2009/06/outlook-email-and-css/comment-page-1/#comment-137&quot;&gt;responded&lt;/a&gt; to the comments directly in the post, but I wanted to
also mention that I filed two separate bugs in our internal bug database. The
first covers the fact that we’re apparently not obeying your browser
preference when you open an email in a browser, though this may have something
to do with the actual file type that the email message gets stored as
temporarily. Non-IE browsers might not register to open that file type.&lt;/p&gt;
&lt;p&gt;The second covers the actual piss-poor rendering Outlook does of the acid test
email. Thanks to Dave Greiner from the Email Standards project for providing
links and addressing the questions I had in the original post. Once I had a
copy of the acid test email I was able to get the bugs officially filed.&lt;/p&gt;
&lt;p&gt;I will not be posting any further details on the status of these or other
bugs, either now or after we ship, so please don’t ask. I am sorry, but it
isn’t standard practice at Microsoft to reveal publicly the status of bugs,
and I don’t plan on starting a trend in this particular area. It’s also
frankly not my place to comment on bugs on which I am not an expert,
especially those that are in areas completely separate from the ones I work
on. You’ll have to take my word for it as an honest, standards-loving software
developer that I filed them.&lt;/p&gt;
&lt;p&gt;Please continue to send feedback in any way you can to Microsoft, and
specifically the Outlook team. Here’s hoping for some quality HTML+CSS email
rendering in the future.&lt;/p&gt;</content:encoded></item><item><title>On Intelligent Interfaces</title><link>https://tylerbutler.com/on-intelligent-interfaces/</link><guid isPermaLink="true">https://tylerbutler.com/on-intelligent-interfaces/</guid><description>On Intelligent Interfaces</description><pubDate>Fri, 10 Jul 2009 11:50:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://unqualified-reservations.blogspot.com/2009/07/wolfram-alpha-and-hubristic-user.html&quot;&gt;Mencius Moldbug&lt;/a&gt; on why Wolfram Alpha shouldn’t have a natural language-based
interface:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;You&lt;/em&gt; know that when you type “two cups of flour and two eggs” (which now
&lt;a href=&quot;https://www82.wolframalpha.com/input/?i=two+cups+of+flour+and+two+eggs&quot;&gt;works&lt;/a&gt;) you are looking for a Nutrition Facts label. It is only Stephen
Wolfram’s giant electronic brain which has to run ten million lines of code to
figure this out. Inside your &lt;em&gt;own&lt;/em&gt; brain, it is written on glowing letters
across your forehead.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Love</title><link>https://tylerbutler.com/love/</link><guid isPermaLink="true">https://tylerbutler.com/love/</guid><description>Love</description><pubDate>Sat, 27 Jun 2009 02:47:00 GMT</pubDate><content:encoded>&lt;p&gt;Too incredibly brilliant not to share.&lt;/p&gt;</content:encoded></item><item><title>Teachers Are Important</title><link>https://tylerbutler.com/teachers-are-important/</link><guid isPermaLink="true">https://tylerbutler.com/teachers-are-important/</guid><description>Teachers Are Important</description><pubDate>Sat, 27 Jun 2009 02:02:00 GMT</pubDate><content:encoded>&lt;p&gt;Danah Boyd on teacher involvement outside the classroom. I benefited
tremendously from this.&lt;/p&gt;</content:encoded></item><item><title>Outlook, Email, and CSS</title><link>https://tylerbutler.com/outlook-email-and-css/</link><guid isPermaLink="true">https://tylerbutler.com/outlook-email-and-css/</guid><description>Outlook, Email, and CSS</description><pubDate>Sat, 27 Jun 2009 00:11:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update July 13, 2009:&lt;/strong&gt; Thanks to some comments, I’ve got new links and
minor updates in the post now.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: I work for Microsoft, in the Office division, but I don’t work in or
with the Outlook team. I don’t have any specific knowledge about their
decisions or plans, and this post is based only my own experience here at
Microsoft.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The web community has been up in arms the last day or so about a &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Ffixoutlook.org&quot;&gt;campaign via
Twitter&lt;/a&gt; pushing for Outlook 2010 to stop using the Word rendering engine
for HTML email. I engaged in a short friendly discussion with my buddy
&lt;a href=&quot;https://twitter.com/vandrijevik&quot;&gt;Vlad&lt;/a&gt; on Twitter about the issue, and that got me thinking about the issue
a bit more deeply. And the more I thought about it, and read everything that
was being written, the more I realized that people aren’t actually
communicating effectively, and that pisses me off…&lt;/p&gt;
&lt;p&gt;The fixoutlook.org website says this: “Microsoft has confirmed they plan on
using the &lt;strong&gt;Word rendering engine&lt;/strong&gt; to display HTML emails in Outlook 2010.”
(emphasis added) Based on that, and the rest of the text on the site, it seems
like the big beef they have is that Word’s &lt;strong&gt;rendering engine&lt;/strong&gt; for HTML is
not up to snuff. Fair point — it isn’t. But they contradict themselves in
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Fblog%2Fentry%2Fmicrosoft-respond-to-our-call-for-standards-support%2F&quot;&gt;their updated response&lt;/a&gt; to Microsoft’s response when they say, “We’re
asking that the &lt;strong&gt;HTML produced by the Word engine be standards compliant&lt;/strong&gt;.
This in turn will ensure that the engine will correctly &lt;em&gt;render&lt;/em&gt; standards-
based emails.” (emphasis added)&lt;/p&gt;
&lt;p&gt;Wait a second. Do they want an editor that produces HTML, or a rendering
engine that works properly? Doing the work to make sure the editor is
producing clean markup &lt;strong&gt;might&lt;/strong&gt; produce a rendering engine that renders
nicely, perhaps it even &lt;strong&gt;should&lt;/strong&gt; produce one, but that &lt;strong&gt;doesn’t mean it
will&lt;/strong&gt;. Those two pieces of work are &lt;strong&gt;not&lt;/strong&gt; the same thing.&lt;/p&gt;
&lt;p&gt;Lots of people have been pointing to &lt;a href=&quot;https://www.zeldman.com/2009/06/24/sour-outlook/&quot;&gt;a post from Zeldman&lt;/a&gt; about this.
Zeldman’s a brilliant guy, but he completely misses the point when he
perpetuates a rumor about why Outlook chose Word’s engine: “Rumor has it that
Microsoft chose the Word rendering engine because its Outlook division
“couldn’t afford” to pay its browser division for IE8. And by “couldn’t
afford” I don’t mean Microsoft has no money; I mean someone at this fabulously
wealthy corporation must have neglected to budget for an internal cost.”&lt;/p&gt;
&lt;p&gt;Ummmm… no. In my experience, the phrase “couldn’t afford” at Microsoft R&amp;amp;D has
nothing to do with monetary cost. It has to do with engineering cost. Features
don’t exist just because you want them to exist. (An aside: &lt;a href=&quot;https://blogs.msdn.com/oldnewthing/&quot;&gt;Raymond Chen&lt;/a&gt;
has a great quote about this that I can’t find. If you have a link, please let
me know.) So I imagine that the rationale in the Outlook team went something
more like this:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Well, we want Outlook to produce really rich emails, and we want it to have a
really familiar look and feel, so people already using our products will feel
at home. Hmmm, building an editor is extremely hard to get right, plus we,
being part of the Office suite, have several editing tools already. Emails
tend to be a lot like documents, so Word seems to be a reasonable choice. This
way we can leverage all the editor features Word already has, plus things
they’re building this release, and focus on the Outlook-specific work we have
to do. We don’t want to invest our engineering time in building an editor when
we already have one.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;From this standpoint, it’s easy to see why using Word for rendering as well is
the next logical step. You could argue that they should use IE (or Gecko, or
Webkit, as Zeldman does, but again, just because those engines are free
doesn’t mean using them is without cost) to render email, and Word to author
it. That’s a reasonable idea. In fact, the Outlook team seems to agree with
you, because if you get an HTML email that looks wrong, you see a link to open
it in a browser. In fact, even the &lt;a href=&quot;https://farm4.static.flickr.com/3322/3637814200_a2aa59bc89_o.jpg&quot;&gt;example image&lt;/a&gt; at fixoutlook.org has
the “info bar” at the top that does this.&lt;/p&gt;
&lt;p&gt;You can take issue with the implementation, certainly, because it sucks
mightily. The fact that I have to open the email in a browser separately
blows. I shouldn’t have to do that. But don’t kid yourself into thinking that
integrating an IE window into the message window is so stupidly simple that
Microsoft is maliciously avoiding doing it to somehow screw users. It might be
straightforward — I honestly don’t know. But do you? If you think you do,
please go read Steve Yegge’s post “&lt;a href=&quot;https://steve-yegge.blogspot.com/2009/04/have-you-ever-legalized-marijuana.html&quot;&gt;Have you ever legalized marijuana?&lt;/a&gt;”
and come back.&lt;/p&gt;
&lt;p&gt;What really bugs me about this whole thing is that people immediately jumped
on the fact that Outlook uses Word for rendering, instead of sticking to the
real problem that Outlook’s rendering of HTML sucks in some cases. The
rendering engine they’re using is immaterial, really, because if the team goes
and fixes the rendering inadequacies, then the issue goes away. They can
choose how to fix the issues, should they choose to fix them at all, but at
this point, even if all the rendering issues are fixed, many people will still
be pissed because Word is used to render the email. The argument has shifted
from being about the support proper email display to being about Word used for
rendering, so there doesn’t seem to be a path to redemption for Microsoft in
the court of public opinion that doesn’t involve ripping out Word completely.&lt;/p&gt;
&lt;p&gt;I completely agree, personally, that web standards serve as a reasonable basis
for email format standards even though there is no formal effort to
standardize email. But please argue about the right things. Spend your energy
trying to see those standards acknowledged rather than perpetuating this silly
argument about ripping out Word from Outlook. Hopefully this effort will have
the desired effect, and these rendering issues will get resolved prior to
Outlook 2010 RTM. But I can almost completely guarantee that if you want Word
completely ripped from Outlook, you’re not going to get what you want.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;By the way, does anyone have a screenshot of what the email used in the
example image looks like in Outlook 2007, which also used Word for rendering?
That struck me as a strange omission. I’m wondering if the issues displayed in
that screenshot are just bugs in the 2010 beta. I doubt it, but would still
like to see it.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update:&lt;/strong&gt; Turns out you can see this in the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Fclients%2Fmicrosoft-outlook-2007%2F&quot;&gt;Email Standards project’s
review of Outlook 2007&lt;/a&gt;. As I suspected, no real differences.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Also — is there any way to get a sample HTML email from the Email Standards
Project’s &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Facid-test%2F&quot;&gt;email acid test&lt;/a&gt;? Seems ridiculous there’s no “email me this
sample email” form on the acid test page. I can and will file a bug against
Outlook if I can get a copy mailed to me.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;**Update: **You can now mail yourself a copy of the email directly from the
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.email-standards.org%2Facid-test%2F&quot;&gt;acid test page&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;This didn’t really fit into the overall flow of the post above, but I still
think it’s reasonable info to consider, so I’m including it here anyway. I’m
about to throw out a bunch of numbers and statistics that are not backed up by
any data. They are based only on my own logic and occasionally rational mind.
I think they’re true and reasonable statements, but I welcome data that
contradicts them.&lt;/p&gt;
&lt;p&gt;I think it’s safe to say that a majority, say, 80%, of Outlook users use it
with Exchange. Also, a majority of Exchange users use Outlook, and Exchange is
primarily used in business settings. Since a large majority of email sent in a
business setting is sent to other people in your business, then they’re
probably also using Exchange, and also probably using Outlook. Based on this
not-so-scientific reasoning, I argue that the number of emails received in
Outlook that didn’t originate in Outlook is relatively small. That means,
practically speaking, that as long as Outlook can render email that started in
Outlook, you’re hitting the majority of your users’ needs.&lt;/p&gt;
&lt;p&gt;Now, the idealist in you (and me, for the record) is screaming bloody murder,
because you want to see the “right thing” happen for all cases, not just the
majority case. But unfortunately, software is more about practicality than
idealism, and at some point some smart, but possibly naive people in Outlook
made a tradeoff. I’d say with 99% certainty that at some point a developer or
two in Outlook estimated the cost of different approaches and implementations,
and this one wound up cheaper. They made a cut. They made a tradeoff. And we
disagree with the tradeoff.&lt;/p&gt;</content:encoded></item><item><title>Effing Hail</title><link>https://tylerbutler.com/effing-hail/</link><guid isPermaLink="true">https://tylerbutler.com/effing-hail/</guid><description>Effing Hail</description><pubDate>Fri, 19 Jun 2009 03:27:00 GMT</pubDate><content:encoded>&lt;p&gt;I love this game, and it’s great with a mouse. But it would make an even more
amazing iPhone game…&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jiggmin.com/play_game.php?title=Effing+Hail&quot;&gt;https://jiggmin.com/play_game.php?title=Effing+Hail&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>PowerShell for Fun and Profit</title><link>https://tylerbutler.com/powershell-for-fun-and-profit/</link><guid isPermaLink="true">https://tylerbutler.com/powershell-for-fun-and-profit/</guid><description>PowerShell for Fun and Profit</description><pubDate>Tue, 16 Jun 2009 02:20:00 GMT</pubDate><content:encoded>&lt;p&gt;Stefan Goßner has a great post on his blog covering &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblogs.technet.com%2Fstefan_gossner%2Fpages%2Fcontent-deployment-best-practices.aspx&quot;&gt;some common problems&lt;/a&gt;
that people have with Content Deployment in SharePoint. Problem 13 has to do
with the default timeout window for Content Deployment jobs. Stefan provides
some sample code that you can use to adjust the timeout value, since it’s not
exposed through the UI, but I find writing and running sample code on a server
a bit of a pain. Instead of writing code, you can actually use PowerShell to
do this directly from the PS prompt.&lt;/p&gt;
&lt;p&gt;The key to doing this is loading the SharePoint DLLs into your PowerShell
environment. You can do this using the System.Reflection.Assembly class. Take
a look at this sample script:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;#!powershell&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;param( $newTimeout = 600 )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;[System.Reflection.Assembly]::Load(&quot;Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$cdconfig.RemoteTimeout = $newTimeout&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$cdconfig.Update()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&quot;Updated RemoteTimeout to $newTimeout seconds.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In line 3, I load up the Microsoft.SharePoint.Publishing DLL, then I grab the
&lt;code&gt;ContentDeploymentConfiguration&lt;/code&gt; (line 5) using the &lt;code&gt;GetInstance()&lt;/code&gt; static method.
I update the &lt;code&gt;RemoteTimeout&lt;/code&gt; property, then call &lt;code&gt;Update()&lt;/code&gt;, and we’re done. No
code to write and compile.&lt;/p&gt;
&lt;p&gt;This example uses the param keyword, which means you can save it as
&lt;code&gt;ChangeRemoteTimeout.ps1&lt;/code&gt;, then run it like this:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; ChangeRemoteTimeout –newTimeout 1200&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This is completely optional, of course, but if you find yourself doing this a
lot, it might be worth saving it as a reusable script.&lt;/p&gt;
&lt;p&gt;You might also want to make changes to some of the options that are exposed
through the UI already. Here’s an example:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; [System.Reflection.Assembly]::Load(&quot;Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&quot;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; $cdconfig = [Microsoft.SharePoint.Publishing.Administration.ContentDeploymentConfiguration]::GetInstance()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; $cdconfig.AcceptIncomingJobs = $true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; $cdconfig.RequiresSecureConnection = $false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;PS C:\&amp;gt; $cdconfig.Update()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In this case, I’m configuring the farm to accept incoming deployment jobs and
not require secure connections. You can also make additional changes to other
properties, such as FileMaxSize and RemotePollingInterval using this method.
Stefan covers these properties in his &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblogs.technet.com%2Fstefan_gossner%2Farchive%2F2008%2F05%2F28%2Fpimp-my-content-deployment-job.aspx&quot;&gt;Pimp My Content Deployment Job&lt;/a&gt;
post.&lt;/p&gt;
&lt;p&gt;One other note… Using .NET DLLs in PowerShell is generally supported across
the board. It’s not limited to the SharePoint DLLs. There’s some pretty
exciting stuff you can do here once you start playing around.&lt;/p&gt;</content:encoded></item><item><title>Who Watches the Watchman?</title><link>https://tylerbutler.com/who-watches-the-watchman/</link><guid isPermaLink="true">https://tylerbutler.com/who-watches-the-watchman/</guid><description>Who Watches the Watchman?</description><pubDate>Fri, 22 May 2009 01:24:00 GMT</pubDate><content:encoded>&lt;p&gt;Fascinating piece of technology that I’d never heard of: the watchclock. For
fun, read the first part of the article, which describes the scenario and
use-case, then try to design a solution before you read further.&lt;/p&gt;</content:encoded></item><item><title>Science is Fun!</title><link>https://tylerbutler.com/science-is-fun/</link><guid isPermaLink="true">https://tylerbutler.com/science-is-fun/</guid><description>Science is Fun!</description><pubDate>Mon, 18 May 2009 20:50:00 GMT</pubDate><content:encoded>&lt;p&gt;Great xkcd today about what gets kids interested in science.&lt;/p&gt;</content:encoded></item><item><title>Wikipedia Walks</title><link>https://tylerbutler.com/wikipedia-walks/</link><guid isPermaLink="true">https://tylerbutler.com/wikipedia-walks/</guid><description>Wikipedia Walks</description><pubDate>Mon, 18 May 2009 20:35:00 GMT</pubDate><content:encoded>&lt;p&gt;A few years ago I realized that when I would start reading an interesting
article on Wikipedia, I would often end up reading 6-8 additional articles
that were linked from the original article, then branch out from there, etc.
etc. I’d end up in a completely different subject than the one I’d started in,
and I learned a lot, plus it was just a ton of fun.&lt;/p&gt;
&lt;p&gt;I started calling these &lt;em&gt;Wikipedia Walks&lt;/em&gt;. The concept is simple - start at
an article you find interesting, then just continue on to any articles linked
from the original. Finish when you get bored. To make it more interesting, you
should record both the starting article and the ending article, so you can see
just how far off the beaten path you’ve gotten.&lt;/p&gt;
&lt;p&gt;To start, I’d suggest the article on &lt;a href=&quot;https://en.wikipedia.org/wiki/Game_theory&quot;&gt;Game Theory&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Computer Security X-Ray Specs</title><link>https://tylerbutler.com/computer-security-x-ray-specs/</link><guid isPermaLink="true">https://tylerbutler.com/computer-security-x-ray-specs/</guid><description>Computer Security X-Ray Specs</description><pubDate>Mon, 18 May 2009 07:17:00 GMT</pubDate><content:encoded>&lt;p&gt;IT security consultant Rich Mogull gives some tips for seeing through the BS
in security press releases. It’s aimed at the Mac community, but it has some
insightful info that applies across the board. In particular, I like his even-
handed evaluation of the relative security of both Windows and OS X:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For many years Mac OS X did have an inherent security advantage over
Windows, but to those who understand the technologies within the operating
systems, those days are long past.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The latest version of Windows (Vista, not that most people use it) is
provably more secure in the lab than the latest version of Mac OS X 10.5
Leopard. Leopard lacks proper implementation of the new anti-exploitation
technologies included in Vista, and, based on the number of Apple security
patches, experiences about as many vulnerabilities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;When I see articles that defend Mac OS X based on the lack of Mac-specific
malicious software, and not on current technical capabilities, cybercrime
dynamics, or attack methods, I tend to be dubious.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Respect Religion</title><link>https://tylerbutler.com/respect-religion/</link><guid isPermaLink="true">https://tylerbutler.com/respect-religion/</guid><description>Respect Religion</description><pubDate>Sat, 16 May 2009 22:37:00 GMT</pubDate><content:encoded>&lt;p&gt;Marco Arment on Judaism:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There’s no sales pitch. No recruiting team. Nobody spamming me in the
subway, coming to my door, or yelling at me on the street. If I want to learn
anything about Judaism, I can just ask the many Jewish people I know.&lt;/p&gt;
&lt;p&gt;…&lt;/p&gt;
&lt;p&gt;They’re comfortable enough in their beliefs that they don’t need to nag or
argue with people who disagree or don’t care.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Office 2010: The Movie</title><link>https://tylerbutler.com/office-2010-the-movie/</link><guid isPermaLink="true">https://tylerbutler.com/office-2010-the-movie/</guid><description>Office 2010: The Movie</description><pubDate>Sat, 16 May 2009 08:47:00 GMT</pubDate><content:encoded>&lt;p&gt;A bit cheesy, but glad to see some news about the next version of Office
finally coming out. I wish there were some screenshots or videos in the little
movie clip, but it’s early — I’m sure we’ll be releasing that sort of stuff in
the future. It’ll be a busy next few months for those of us on the product
group, but it’s exciting to finally start telling people about all the cool
stuff we’ve built.&lt;/p&gt;</content:encoded></item><item><title>Mark Pilgrim on Web Fonts</title><link>https://tylerbutler.com/mark-pilgrim-on-web-fonts/</link><guid isPermaLink="true">https://tylerbutler.com/mark-pilgrim-on-web-fonts/</guid><description>Mark Pilgrim on Web Fonts</description><pubDate>Sat, 16 May 2009 04:40:00 GMT</pubDate><content:encoded>&lt;p&gt;I love Mark Pilgrim.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dynamic web fonts are coming. Actually they’re already here, but most of Our
People haven’t noticed yet. But they will, and that’s going to be a huge boon
to somebody. I see you’ve decided that it won’t be you. Well, have fun
shuffling your little bits of metal around. The rest of us will be over here,
using the only fonts we’re allowed to use: Everything But Yours.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Twitter @replies Changes</title><link>https://tylerbutler.com/twitter-replies-changes/</link><guid isPermaLink="true">https://tylerbutler.com/twitter-replies-changes/</guid><description>Twitter @replies Changes</description><pubDate>Thu, 14 May 2009 04:14:00 GMT</pubDate><content:encoded>&lt;p&gt;There’s been some hoopla on Twitter today after a &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblog.twitter.com%2F2009%2F05%2Fsmall-settings-update.html&quot;&gt;poorly handled
announcement&lt;/a&gt; that the option to control whether replies from people you
follow to people you don’t follow show up in your feed. This was an option in
the Notices section of the Twitter settings that was off by default. The
original post from &lt;a href=&quot;https://twitter.com/Biz&quot;&gt;@biz&lt;/a&gt; made it sound like they were trying to reduce
confusion and that it was no big deal. That’s a bit naive — they should have
seen the backlash coming a mile away… Dave Winer has &lt;a href=&quot;http://www.scripting.com/stories/2009/05/13/lessonsFromTheChangesInTwi.html&quot;&gt;a good summary&lt;/a&gt; of
problems with how they messaged things.&lt;/p&gt;
&lt;p&gt;@biz later posted that they had heard the feedback, claiming it was a
scalability problem with the implementation. I initially didn’t buy that
argument, but the &lt;a href=&quot;http://www.readwriteweb.com/archives/is_this_why_twitter_changed_its_replies_policy.php&quot;&gt;description over at ReadWriteWeb&lt;/a&gt; clarifies things
somewhat. &lt;a href=&quot;http://www.scripting.com/stories/2009/05/13/lessonsFromTheChangesInTwi.html#comment-9291130&quot;&gt;This comment&lt;/a&gt; over at Winer’s post clarifies it further. I think
I understand now, given their architecture, why this would be a beneficial
change for them to make.&lt;/p&gt;
&lt;p&gt;But that’s not what I’m ultimately writing about. Much of the complaining from
people opposed to the change has been that it makes it harder to meet new
people on Twitter. If you see a reply to someone else from a person you follow
then you might also be interested in following them. OK, fine, I buy that, but
for me, I simply want to see &lt;strong&gt;everything&lt;/strong&gt; people I follow say, regardless of
who they say it to. With clients like &lt;a href=&quot;http://www.atebits.com/tweetie-mac/&quot;&gt;Tweetie&lt;/a&gt; and &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fphobos.apple.com%2FWebObjects%2FMZStore.woa%2Fwa%2FviewSoftware%3Fid%3D284540316%26mt%3D8&quot;&gt;Twitterrific 2.0
(iTunes link)&lt;/a&gt; able to browse through conversations effortlessly, I can use
the tweets from my timeline as a jumping-off point to see the whole
conversation which someone I &lt;strong&gt;am&lt;/strong&gt; interested in is involved in. My goal is
not to find new people to follow (though that does happen occasionally), but
rather, just to see what interesting things people I follow are saying. I
don’t care who they’re talking to. It’s not like everything &lt;a href=&quot;https://twitter.com/Lincolnator&quot;&gt;@Lincolnator&lt;/a&gt;
says to &lt;a href=&quot;https://twitter.com/MajorLB&quot;&gt;@MajorLB&lt;/a&gt; is completely uninteresting to me just because I don’t
follow her.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblog.twitter.com%2F2009%2F05%2Fwe-learned-lot.html&quot;&gt;The proposed changes&lt;/a&gt; as they stand right now don’t solve my complaint.
But it’s early; the smart people at Twitter will figure something out, and
hopefully, it’ll solve my scenario and world hunger at the same time. One can
hope and dream.&lt;/p&gt;
&lt;p&gt;You can see the protests/commentary on Twitter itself by
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fsearch.twitter.com%2Fsearch%3Fq%3D%2523Fixreplies&quot;&gt;searching for #fixreplies&lt;/a&gt;. It’s still the top trending search term as of
this writing.&lt;/p&gt;</content:encoded></item><item><title>C&apos;mon iPhone, be serious...</title><link>https://tylerbutler.com/cmon-iphone-be-serious/</link><guid isPermaLink="true">https://tylerbutler.com/cmon-iphone-be-serious/</guid><description>C&apos;mon iPhone, be serious...</description><pubDate>Sat, 09 May 2009 00:33:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://junctionpoint.wordpress.com/2009/04/06/ive-joined-a-cult-the-iphone-cult/&quot;&gt;Warren Spector on the iPhone&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s like the iPhone is working so hard to be my friend it’s incapable of
being my co-worker. It’s all fun and games when, at times, I want it to be
serious.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Good points all around. If you want to use your phone for doc editing, or come
from a Palm/Windows Mobile background and are used to rich syncing with the
desktop, the iPhone is lacking.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Warren_spector&quot;&gt;More on who Spector is&lt;/a&gt;, for those that don’t know. &lt;a href=&quot;http://en.wikipedia.org/wiki/Deus_Ex&quot;&gt;Deus Ex&lt;/a&gt; remains
one of my favorite games of all time.&lt;/p&gt;</content:encoded></item><item><title>SharePoint Permissions &quot;Cheat Sheet&quot;</title><link>https://tylerbutler.com/sharepoint-permissions-cheat-sheet/</link><guid isPermaLink="true">https://tylerbutler.com/sharepoint-permissions-cheat-sheet/</guid><description>SharePoint Permissions &quot;Cheat Sheet&quot;</description><pubDate>Wed, 06 May 2009 04:28:00 GMT</pubDate><content:encoded>&lt;p&gt;Back when we were building SharePoint 2007, a member of our Program Management
team left Microsoft, and I inherited the permissions-related features for the
then Content Management Server team, which was responsible for all of the web
publishing features in SharePoint. Essentially, this meant that I has to
figure out what the correct set of permission levels were for our features,
and what lists/libraries should have unique (non-inherited) permissions.&lt;/p&gt;
&lt;p&gt;Now, if you’ve used SharePoint for any length of time, you’ve no doubt been
frustrated with permissions management. It’s definitely a sore point.
Unfortunately, I don’t have any magic bullets or golden hammers. When I
started trying to figure everything out so that I could make educated
decisions for our designs, I realized that I needed to write stuff down.
People always asked questions like, “What rights do Designers have by
default?” Sure, you can find out by going to the site itself and checking, but
the UI isn’t the easiest to navigate, and oftentimes what you really want to
do is compare multiple permissions levels. “What rights do Designers have that
Contributors don’t?”, for example. To help keep it all straight in my mind
(and so I could point people to the info rather than answer 100 emails a day
with the same question!), the SharePoint Permissions “Cheat Sheet” was born.&lt;/p&gt;
&lt;p&gt;It’s nothing fancy, and it’s certainly not anything that no one else could
have created. But still, it has proven useful over the past few years. I still
keep a copy of it pinned to my office wall. It’s pretty self-explanatory. The
first sheet has a table of the default publishing permission levels and what
fine-grain permissions each of them has. The second sheet is just the
descriptions of each of the fine-grain permissions so I didn’t have to go
hunting through the UI to find them whenever I was wondering what the
differences were. Finally, the third sheet is a list of “securable objects”
(which what I decided to call a list/library that had broken away permissions
inheritance and was independently secured) and what default groups had what
rights to those locations by default. This was particularly important since in
general, you want to avoid breaking permissions inheritance if you can, and we
wanted to be very deliberate about where we did, and also track them to ensure
they made sense over time.&lt;/p&gt;
&lt;p&gt;So how exactly do you use this? Well, it can be a
handy reference as-is, but chances are that you have your own permissions
level or have modified the existing ones to suit your needs, so you can modify
this sheet to reflect your own custom permissions and keep track of
everything. It really is helpful to have a centralized reference of all of the
various permissions levels. If you go through and put in your own levels, you
might realize that there’s a lot of needless duplication in the custom
permission level you might have created. When it comes to SharePoint
permissions, less is better, so this can be a helpful auditing tool as well as
a reference.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A couple of disclaimers…&lt;/strong&gt; This was created based on the RTM
version. As far as I know, nothing has been changed in SP1 or SP2 that would
impact it, but I haven’t been checking to keep it up to date. If you do notice
errors you can let me know and I’ll try to correct it. Also, this obviously
won’t take into account any customizations that you may do that would alter
the default permission levels. If you use this for any of the purposes listed
or for additional things, leave a comment! I’d love to hear how it’s working
for you and if it’s been helpful.&lt;/p&gt;
</content:encoded></item><item><title>Quick and Nimble? Not In the App Store...</title><link>https://tylerbutler.com/quick-and-nimble-not-in-the-app-store/</link><guid isPermaLink="true">https://tylerbutler.com/quick-and-nimble-not-in-the-app-store/</guid><description>Quick and Nimble? Not In the App Store...</description><pubDate>Thu, 23 Apr 2009 00:32:00 GMT</pubDate><content:encoded>&lt;p&gt;A great post by Garrett Murray about what it’s like to build an iPhone app
that relies on third-party data and subsequently gets broken by that third-
party data.&lt;/p&gt;
&lt;p&gt;App store sellers just cannot react to bugs quickly. The approval process
completely hobbles them.&lt;/p&gt;</content:encoded></item><item><title>Experimental Firefox Extensions No Longer Require Login</title><link>https://tylerbutler.com/experimental-firefox-extensions-no-longer-require-login/</link><guid isPermaLink="true">https://tylerbutler.com/experimental-firefox-extensions-no-longer-require-login/</guid><description>Experimental Firefox Extensions No Longer Require Login</description><pubDate>Sat, 18 Apr 2009 14:29:00 GMT</pubDate><content:encoded>&lt;p&gt;It’s about freakin’ time. I was so sick of having to use &lt;a href=&quot;http://www.bugmenot.com&quot;&gt;BugMeNot&lt;/a&gt; just to
download extensions…&lt;/p&gt;</content:encoded></item><item><title>Mountain Goats Are Amazing (and Grooveshark is pretty cool too...)</title><link>https://tylerbutler.com/mountain-goats-are-amazing-and-grooveshark-is-pretty-cool-too/</link><guid isPermaLink="true">https://tylerbutler.com/mountain-goats-are-amazing-and-grooveshark-is-pretty-cool-too/</guid><description>Mountain Goats Are Amazing (and Grooveshark is pretty cool too...)</description><pubDate>Sun, 12 Apr 2009 14:28:00 GMT</pubDate><content:encoded>&lt;p&gt;If you haven’t heard of the &lt;a href=&quot;http://www.mountain-goats.com&quot;&gt;Mountain Goats&lt;/a&gt;, then you are in for a real
treat. I’ve been a huge fan since 2005. I actually heard about them from a
girl I met during my interview with Microsoft while in Seattle. I picked up a
few tracks off of Tallahassee from iTunes, and I’ve been in love ever since.
&lt;a href=&quot;http://en.wikipedia.org/wiki/John_Darnielle&quot;&gt;John Darnielle&lt;/a&gt; is utterly stunning — the lyrics consistently blow me
away. I mean, it’s &lt;em&gt;poetry&lt;/em&gt;. The fact that it’s set to music is just icing on
an already orgasmic cake. If there is one musician who deserves comparison to
Dylan — it’s Darnielle. Anyway, my buddy &lt;a href=&quot;https://twitter.com/vandrijevik&quot;&gt;Vlad&lt;/a&gt; recently discovered them,
and so I thought it time to share the amazingness with the world at large.&lt;/p&gt;
&lt;p&gt;Oh, and if you haven’t tried &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.grooveshark.com&quot;&gt;Grooveshark&lt;/a&gt; yet, give it a whirl. The music
selection is surprisingly large, and being able to link friends directly to
songs and embed them on the web is &lt;em&gt;killer&lt;/em&gt;. The UI is a bit weird and awkward
— but I assume it’ll evolve over time.&lt;/p&gt;</content:encoded></item><item><title>Mobile Redirects</title><link>https://tylerbutler.com/mobile-redirects/</link><guid isPermaLink="true">https://tylerbutler.com/mobile-redirects/</guid><description>Mobile Redirects</description><pubDate>Sun, 12 Apr 2009 13:57:00 GMT</pubDate><content:encoded>&lt;p&gt;Listen up, site owners. I like it when I go to visit your site on my iPhone
and I get redirected to an iPhone version of your site. Really, I do. It’s
nifty. But if you’re not going to redirect me to the specific article I wanted
to read, or the specific page I asked for, then don’t freakin’ redirect me. I
didn’t go to foobar.com/specific-article.aspx to get
foobar.com/iphone/home.aspx. They are not the same thing. If you don’t have
the capability to serve the specific page I asked for in a mobile-friendly
format, then don’t do anything.&lt;/p&gt;
&lt;p&gt;Stop being idiots.&lt;/p&gt;</content:encoded></item><item><title>More Accessibility</title><link>https://tylerbutler.com/more-accessibility/</link><guid isPermaLink="true">https://tylerbutler.com/more-accessibility/</guid><description>More Accessibility</description><pubDate>Mon, 23 Mar 2009 08:46:00 GMT</pubDate><content:encoded>&lt;p&gt;Another great post on accessibility from Mark Pilgrim. Good follow-up to
&lt;a href=&quot;/2009/03/accessibility-insanity/&quot;&gt;my last rant post&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Accessibility Insanity</title><link>https://tylerbutler.com/accessibility-insanity/</link><guid isPermaLink="true">https://tylerbutler.com/accessibility-insanity/</guid><description>Accessibility Insanity</description><pubDate>Mon, 23 Mar 2009 08:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Part of my responsibilities for SharePoint these days involves markup
cleanliness and accessibility, so over the last couple of years I have
educated myself on the ins and outs of these issues, and have managed to learn
a lot about browser behavior, the history of markup, etc. I am far from an
expert, but I know a heck of a lot more than I did when I started.&lt;/p&gt;
&lt;p&gt;One school of thought I come across quite frequently is that web content whose
markup is not well-formed or is missing required attributes or something just
fail to render completely, in order to ensure that all content on the web is
gorgeous, standards-compliant markup. This ridiculously draconian viewpoint
loses sight of the fact that the ultimate goal of delivering content over the
web is just that — delivering content. It seems bad form for a browser to just
“give up” when markup is badly formed, because the end-goal of the person
building the page — and the person consuming it — is to deliver content. Much
of this debate has been chronicled by the IE team; they have a tough job –
bring the standards compliance of IE into this century without breaking their
customers/users pages. Hence compatibility mode, legacy rendering, etc. etc.&lt;/p&gt;
&lt;p&gt;In the past, I’ve always heard this argument from the standards-compliance
standpoint. For example, if a page claims to be XHTML but isn’t fully
compliant, it should fail to render in a browser. No “best-effort” rendering,
just fail. This of course ignores the fact that even the W3C &lt;a href=&quot;http://validator.w3.org/docs/help.html#validandconform&quot;&gt;can’t create a
parser&lt;/a&gt; that can completely validate a page against the spec, but that’s a
rant for another time… Assuming the browser can detect that a page is non-
compliant, it should just &lt;strong&gt;stop&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Anyway, this is a long and winding intro to &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdiveintomark.org%2Farchives%2F2009%2F03%2F18%2Fif-it-fails-for-some&quot;&gt;a post&lt;/a&gt; Mark Pilgrim wrote
talking about this viewpoint as it applies to accessibility. I had never heard
these arguments before, but apparently they’re out there. A choice quote from
Mark’s rebuttal (emphasis mine):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think it would be wise for people who truly care about accessibility to
take a closer look at the so-called “experts” who are participating on their
behalf, and to understand exactly what these people are proposing. &lt;strong&gt;It’s true
that some of their proposals have not been adopted, but it’s not because some
cartoonishly monocled villain enjoys being mean to them. It’s because the
proposals are insane.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Agreed.&lt;/p&gt;</content:encoded></item><item><title>Finding Meaning in UI</title><link>https://tylerbutler.com/finding-meaning-in-ui/</link><guid isPermaLink="true">https://tylerbutler.com/finding-meaning-in-ui/</guid><description>Finding Meaning in UI</description><pubDate>Fri, 20 Mar 2009 04:55:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://twitter.com/atebits&quot;&gt;Loren Brichter&lt;/a&gt;, the guy behind the fantastic &lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt; application
&lt;a href=&quot;http://www.atebits.com/software/tweetie/&quot;&gt;Tweetie&lt;/a&gt;, has a post over on his blog talking about how and why he chose
to put specific items on the bottom bar of Tweetie’s UI. &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblog.atebits.com%2F2009%2F02%2Fthere-is-method-to-my-madness%2F&quot;&gt;The post is a quick
read&lt;/a&gt;, so go take a look; I’ll wait.&lt;/p&gt;
&lt;p&gt;Welcome back. One of the things I found interesting about what he said was
that he chose the items for the bottom bar based not on what was most common,
or most popular, or most used, but rather another characteristic that they all
share: they’re all personalized features about the user.&lt;/p&gt;
&lt;p&gt;This isn’t really earth-shattering, but I found it interesting because in most
cases, UI designers try to make sure the most commonly used things in the UI
are surfaced. The problem with that approach, as Loren points out, is that you
can’t always do that. Sure, Copy and Paste are super-common, and should get
first-class treatment, but where do you go from there? At some point, you’re
splitting hairs, and if you try to rationalize why one function is surfaced in
a prime location and something else isn’t, how do you explain your choice?
“Well the data we collected said 51% of people used A and 49% of people used
B, so we went with A.” Unsatisfying, isn’t it? At least if you take Loren’s
approach, your answer has a bit more meat to it.&lt;/p&gt;
&lt;p&gt;Anyway, at the very least this should get us all thinking about our
rationalizations for putting stuff in specific places in our UI. Maybe there
are alternative methods for making these decisions that we haven’t considered
yet…&lt;/p&gt;</content:encoded></item><item><title>Syfy?</title><link>https://tylerbutler.com/syfy/</link><guid isPermaLink="true">https://tylerbutler.com/syfy/</guid><description>Syfy?</description><pubDate>Thu, 19 Mar 2009 05:45:00 GMT</pubDate><content:encoded>&lt;p&gt;The rename of the Sci Fi cannel to SyFy Syfy strikes me as completely stupid.
Gargantuan stupidity.
&lt;a href=&quot;http://www.underconsideration.com/brandnew/archives/weird_syence.php&quot;&gt;http://www.underconsideration.com/brandnew/archives/weird_syence.php&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Update: Turns out it’s Syfy; no capitalization of the “f”. This makes it
&lt;strong&gt;even&lt;/strong&gt; worse. Stunning.&lt;/p&gt;</content:encoded></item><item><title>All Grown Up</title><link>https://tylerbutler.com/all-grown-up/</link><guid isPermaLink="true">https://tylerbutler.com/all-grown-up/</guid><description>All Grown Up</description><pubDate>Sun, 15 Mar 2009 15:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Some fan art of Calvin and Hobbes with Calvin a little older. Very
interesting. I think it’s time to give my &lt;a href=&quot;/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&quot;&gt;Complete Calvin and Hobbes&lt;/a&gt;
another read-through.&lt;/p&gt;</content:encoded></item><item><title>LINQ Confusion</title><link>https://tylerbutler.com/linq-confusion/</link><guid isPermaLink="true">https://tylerbutler.com/linq-confusion/</guid><description>LINQ Confusion</description><pubDate>Sun, 15 Mar 2009 14:47:00 GMT</pubDate><content:encoded>&lt;p&gt;I find myself using LINQ a lot in my C# code these days. I use collections all
over the place, and there’s no doubt that LINQ makes sorting and slicing
collections a lot simpler code-wise.&lt;/p&gt;
&lt;p&gt;In my most recent weekend project, I need to randomly sort a list of cards,
which are represented by an &lt;strong&gt;Action&lt;/strong&gt; class. After some quick searching, I
found &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.dailycoding.com%2FPosts%2Frandom_sort_a_list_using_linq.aspx&quot;&gt;some articles&lt;/a&gt; that indicated the best way to do this would be to
sort the list by random GUID. This makes sense, though I certainly wouldn’t
have thought of it on my own.&lt;/p&gt;
&lt;p&gt;The examples given all worked, but not with my lists… With the following code,
the compiler spits out several errors:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;cards&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&amp;gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cards&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Add&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;OneCattle&lt;/span&gt;&lt;span&gt;() )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;cards&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Sort&lt;/span&gt;&lt;span&gt;( &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&amp;gt;&lt;/span&gt;&lt;span&gt; Guid&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewGuid&lt;/span&gt;&lt;span&gt;() )&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ToList&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&amp;gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Error    1    Delegate &apos;System.Comparison&amp;lt;agricola.Action&amp;gt;&apos; does not take &apos;1&apos; arguments&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Error    2    Cannot convert lambda expression to type &apos;System.Collections.Generic.IComparer&amp;lt;agricola.Action&amp;gt;&apos; because it is not a delegate type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Error    3    Cannot implicitly convert type &apos;System.Guid&apos; to &apos;int&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Error    4    Cannot convert lambda expression to delegate type &apos;System.Comparison&amp;lt;agricola.Action&amp;gt;&apos; because some of the return types in the block are not implicitly convertible to the delegate return type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;However, using a more explicit LINQ query without a lambda expression seems to
work fine:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;var&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;q&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;from&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;a&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; cards&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;orderby&lt;/span&gt;&lt;span&gt; Guid&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;NewGuid&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;select&lt;/span&gt;&lt;span&gt; a&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;List&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&amp;gt; &lt;/span&gt;&lt;span&gt;r&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; q&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;ToList&lt;/span&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;Action&lt;/span&gt;&lt;span&gt;&amp;gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Anybody know why this is? I haven’t wrapped my head around lambda expressions
and the theory behind LINQ to understand what the root cause is…&lt;/p&gt;</content:encoded></item><item><title>Commercials Suck</title><link>https://tylerbutler.com/commercials-suck/</link><guid isPermaLink="true">https://tylerbutler.com/commercials-suck/</guid><description>Commercials Suck</description><pubDate>Thu, 12 Mar 2009 05:54:00 GMT</pubDate><content:encoded>&lt;p&gt;This article, titled “&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.washingtonpost.com%2Fwp-dyn%2Fcontent%2Farticle%2F2009%2F03%2F05%2FAR2009030504104.html%3Fhpid%3Dtopnews&quot;&gt;Give Us a Commercial Break!&lt;/a&gt;” from the Wall Street
Journal is &lt;strong&gt;way&lt;/strong&gt; off the mark in my opinion. The article states that TV
shows are written with commercials in mind and that watching them without
commercials changes them. That in and of itself I can’t argue with. But I do
take issue with the implication that this is uniformly bad.&lt;/p&gt;
&lt;p&gt;There are two core arguments in the article:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;TV shows are written with commercials specifically in mind, and removing them completely interrupts the pacing of the show.&lt;/li&gt;
&lt;li&gt;Viewers actually like shows with ads better.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;For argument number one, it’s obvious that writers take commercial breaks into
consideration when writing TV shows. However, in their DVD counterparts, the
breaks are preserved as scene changes. These can seem rather abrupt, and I
think this points to an alternative solution: slightly longer breaks for scene
changes that are replacing commercial breaks. If we assume the normal scene
change is a second, then imagine that the commercial-break-replacement scene
change is three seconds. You can simulate this suggestion by hitting pause for
three seconds – I think you’ll be surprised at the results. I think you’ll
agree that this is uniformly better than ads.&lt;/p&gt;
&lt;p&gt;For argument number two, I can’t refute the research. But there is a quote
from the article that is completely asinine in my opinion:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;From an audience member’s perspective, they are what makes network
television social. We use the commercial breaks to talk amongst ourselves, to
take bets on the J.D./Elliot situation and to decide that no one ever really
dies on “Lost.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Say what? That we need commercial breaks to be social is ridiculous. In this
day and age, we have ready access to the Pause button, and it’s a far more
useful tool for fostering discussion while watching TV. Elizabeth and I
have been watching quite a few documentaries lately, and we pause quite often
to talk about whether or not we agree with what’s being said. I agree that
adding discussion and dialog while viewing a show is positive (there’s a
reason fans get together to watch episodes of their favorite shows), but I
think people use the commercial breaks because they’re there, not because they
&lt;strong&gt;need&lt;/strong&gt; them in order to have that conversation successfully.&lt;/p&gt;
&lt;p&gt;I hate ads in all forms (though I can appreciate particularly clever or well-
done ones), so I am definitely biased here. But seriously… there’s a reason
DVD copies of shows sell so well, and it isn’t because people are dying to own
season one of “Scrubs” for eternity…&lt;/p&gt;</content:encoded></item><item><title>Site Move and Redesign</title><link>https://tylerbutler.com/site-move-and-redesign/</link><guid isPermaLink="true">https://tylerbutler.com/site-move-and-redesign/</guid><description>Site Move and Redesign</description><pubDate>Thu, 19 Feb 2009 10:06:00 GMT</pubDate><content:encoded>&lt;p&gt;The server that is currently hosting the SharePoint version of tylerbutler.com
is being decommissioned. Unfortunately, I wasn’t given much notice about this
so I have not been able to secure an alternative SharePoint-ready location at
Microsoft to host the site. In the meantime I’ve used this opportunity to move
the site over to WordPress, and I’ve refreshed the look and feel. Hopefully
this will be temporary, since I intend to rebuild the site on the new version
of SharePoint once it’s publicly available. But in the meantime, WordPress is
serving my needs.&lt;/p&gt;
&lt;p&gt;The main www address should be redirecting to blog.tylerbutler.com as soon as
the DNS changes propogate. The main RSS feed should be switched over, but I
have not yet moved the others. Regardless, though, you shouldn’t notice any
differences since I’m using FeedBurner.&lt;/p&gt;</content:encoded></item><item><title>SharePoint Updates</title><link>https://tylerbutler.com/sharepoint-updates/</link><guid isPermaLink="true">https://tylerbutler.com/sharepoint-updates/</guid><description>SharePoint Updates</description><pubDate>Thu, 02 Oct 2008 00:10:00 GMT</pubDate><content:encoded>&lt;p&gt;We’ve changed the way we’re managing and releasing updates here in the
SharePoint team. This is all very good news. It makes things more manageable
internally for us, which translates into quicker, more effective turnaround on
issues, but it also means that updates and patches will be much more
predictable, so you can plan around those dates more effectively. There is
still recourse for you if you have an absolutely critical issue that needs to
be resolved ASAP.&lt;/p&gt;
&lt;p&gt;More details on this &lt;a href=&quot;/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&quot;&gt;SharePoint blog post&lt;/a&gt; and &lt;a href=&quot;https://support.microsoft.com/kb/953878&quot;&gt;KB article 953878&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>But Why? #0: But why, &quot;But Why?&quot;</title><link>https://tylerbutler.com/but-why-0-but-why-but-why/</link><guid isPermaLink="true">https://tylerbutler.com/but-why-0-but-why-but-why/</guid><description>But Why? #0: But why, &quot;But Why?&quot;</description><pubDate>Wed, 10 Sep 2008 01:49:00 GMT</pubDate><content:encoded>&lt;p&gt;I love hearing stories. When I was growing up I used to love when people would
visit and my Dad would tell some of his stories. Even though I had heard most
of them a thousand times, it was awesome to sit back and watch other people
experience them for the first time. I also read a lot of stories growing up,
and I developed a special love for short stories in particular (I especially
like O. Henry).&lt;/p&gt;
&lt;p&gt;While I was in college, I discovered a site that I have since lost many hours
of my life to — &lt;a href=&quot;http://www.folklore.org/&quot;&gt;folklore.org&lt;/a&gt;. It’s a site put together by &lt;a href=&quot;http://en.wikipedia.org/wiki/Andy_Hertzfeld&quot;&gt;Andy
Hertzfeld&lt;/a&gt; (not to be confused with &lt;a href=&quot;http://en.wikipedia.org/wiki/Don_Hertzfeldt&quot;&gt;Don Hertzfeldt&lt;/a&gt; of &lt;a href=&quot;http://en.wikipedia.org/wiki/Rejected&quot;&gt;Rejected&lt;/a&gt;
fame), and contains “anecdotes about the development of Apple’s original
Macintosh computer, and the people who created it.” It is incredible — it
combines my love of stories with a topic I find interesting — the early days
of personal computing. Best of all, the stories there are written by the
people who experienced it, and often contain a healthy dose of humor and
humanity. But behind that, there’s some cool technical details about the
challenges the engineers faced, and why some of the decisions got made the way
they did. I find that part of it utterly spellbinding.&lt;/p&gt;
&lt;p&gt;I’ve been on the lookout for other sites like this for other tech companies,
like Atari or even Microsoft. The closest I’ve found for Atari is
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.dadhacker.com%2F&quot;&gt;DadHacker.com&lt;/a&gt;, written by a guy who worked for Atari back in the day. His
blog is interesting in a variety of ways, but I particularly like his Atari
posts. In fact, his post titled &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.dadhacker.com%2Fblog%2F%3Fp%3D987&quot;&gt;Donkey Kong and Me&lt;/a&gt; was what got him into
my RSS reader permanently. It’s good — you should read it.&lt;/p&gt;
&lt;p&gt;I actually work with a developer who was also on the team that developed
&lt;a href=&quot;http://en.wikipedia.org/wiki/Clippy&quot;&gt;Clippy&lt;/a&gt;, and I’ve heard some interesting stories for him about what that
was like. Maybe I’ll try to convince him to write up some of his experiences…
I am sure there are some more great stories out there… If you know of some
sites, please do point me to them.&lt;/p&gt;
&lt;p&gt;Because I find this stuff so interesting, I thought it would be good to start
chronicling some of the stuff I know about because I’ve been working on
SharePoint. Thus, I plan to write a series titled “But Why?” about various
SharePoint features that I either worked on or have been exposed to, and why
they behave the way they do. These posts will be one part SharePoint history,
one part storytelling, and if I do it right, will pull back the curtain a bit
so you can see just why things wound up the way they did.&lt;/p&gt;
&lt;p&gt;But first, some disclaimers: These posts are my own thoughts and opinions, and
do not reflect those of Microsoft or of anyone else who works/worked on
SharePoint. Also, my memory may be fuzzy and blatantly incorrect about some
things, so everything should be viewed through that lens. Finally, you
shouldn’t expect these posts to be as interesting as anything you read on
folklore.org.&lt;/p&gt;</content:encoded></item><item><title>And We&apos;re Back! (With Comments!)</title><link>https://tylerbutler.com/and-were-back-with-comments/</link><guid isPermaLink="true">https://tylerbutler.com/and-were-back-with-comments/</guid><description>And We&apos;re Back! (With Comments!)</description><pubDate>Fri, 05 Sep 2008 01:19:00 GMT</pubDate><content:encoded>&lt;p&gt;Wow, it’s been awhile. Almost a year since my last post. It truly is hard to
believe. It’s been a busy year so far, but I’ve finally got some time to start
posting again. I’ve got some interesting SharePoint posts coming down the
pipe, plus a new site design I’m working on. It’s still in its early stages,
but hopefully it’ll shape up pretty soon so I can get a sample up.&lt;/p&gt;
&lt;p&gt;One thing you’ll notice if you’ve been here before is that I’ve managed to
move the site into the 21st century by adding comments. I toyed with a few
different comment management add-ins and ended up going with &lt;a href=&quot;http://disqus.com/&quot;&gt;Disqus&lt;/a&gt;. It
seems like it’ll suit my needs for now, and it was pretty straightforward to
get integrated. Just added some script and markup to my master page and post
page layout in SharePoint Designer. I’m not sure how I feel about the comments
being stored separately from the site content, but it’s what I’ve got for now.
It will make migration difficult if page URL’s change, which they almost
certainly are when I change the architecture of the site in the next redesign.
C’est la vie, I’ll cross that bridge when I get to it. Anyway, please go ahead
and engage with me through the comments if you see something interesting on
the site.&lt;/p&gt;
&lt;p&gt;I should also note, for completeness, that SharePoint includes a blog template
that supports comments. I, however, &lt;a href=&quot;/2006/11/building-tylerbutlercom-on-moss/&quot;&gt;rolled my own site&lt;/a&gt; and didn’t use the
blog template or features. There were lots of reasons for this that I won’t go
into right now, but there are certainly some features that SharePoint blogs
have that I also want, like comments and MetaWeblog support (which I added
myself). For now, I’m stuck with what I’ve got. But like I said, there are
some exciting new things coming with my site redesign.&lt;/p&gt;</content:encoded></item><item><title>The Wealthy Man (Communication)</title><link>https://tylerbutler.com/the-wealthy-man-communication/</link><guid isPermaLink="true">https://tylerbutler.com/the-wealthy-man-communication/</guid><description>The Wealthy Man (Communication)</description><pubDate>Wed, 17 Oct 2007 01:44:00 GMT</pubDate><content:encoded>&lt;p&gt;Once upon a time, there was a very wealthy man. The man had so much money that
he bought anything and everything he could buy, and still had more money than
he could count. As he grew older and wiser, he realized he was very unhappy.
So he gathered all of his friends and confidants and asked them for their
advice.&lt;/p&gt;
&lt;p&gt;During the course of the conversation, a friend mentioned that there was a
University close by filled with struggling students. The man decided he would
give money to any student that wanted some.&lt;/p&gt;
&lt;p&gt;The next day, the man walked to the main section of the University campus and
arranged to rent out a small room in the center of the main campus student
building, where all the students could come to get their money from him. He
then sat down on a chair in the small room and waited.&lt;/p&gt;
&lt;p&gt;And waited.&lt;/p&gt;
&lt;p&gt;And waited.&lt;/p&gt;
&lt;p&gt;And waited.&lt;/p&gt;
&lt;p&gt;For months, he would visit the campus every day and wait in the small room for
students to come and claim their money. But no one ever came. Eventually, he
became a fixture on campus. Students would smile and wave at him as they
passed by the small room; some would say hello and ask how he was. But no one
ever asked for money.&lt;/p&gt;
&lt;p&gt;One day, while he sat in the small room, the man was approached by a student
who had always been very friendly to the man. She stopped by every day and
said hello and told him about her classes. She was always bright and cheerful.
On this day, however, her eyes were puffy and red, and she walked as though
the weight of the world was on her shoulders.&lt;/p&gt;
&lt;p&gt;“Sir, I just wanted to come by and say goodbye…”&lt;/p&gt;
&lt;p&gt;“Oh? Why’s that?”&lt;/p&gt;
&lt;p&gt;“Well, my mom’s been really sick — and she’s better now, but my family has a
ton of hospital bills and I just can’t afford to stay here at school any
longer.”&lt;/p&gt;
&lt;p&gt;“Why didn’t you say something before? I’ve been sitting here every day for
months just waiting for someone to ask me for money, and no one ever has! Why
didn’t you ask me before?” the man asked.&lt;/p&gt;
&lt;p&gt;The girl looked up, her eyes glimmering with hope.&lt;/p&gt;
&lt;p&gt;“Why didn’t &lt;strong&gt;&lt;em&gt;you&lt;/em&gt;&lt;/strong&gt; say something? How was I to know you were giving money
away unless you said something? I would never have guess that’s why you sit
here every day. But… can I have some money?”&lt;/p&gt;
&lt;p&gt;The man smiled and pulled his checkbook from his pocket. “How much do you
need?”&lt;/p&gt;
&lt;p&gt;The next day, when the man arrived at the University, there was line of needy
students outside the small room. The line reached out the doors of the
building and wrapped all around campus.&lt;/p&gt;
&lt;p&gt;The man asked every student why they had never come to him before, even though
they needed money. “Because you didn’t tell me that’s why you were here,” they
said.&lt;/p&gt;</content:encoded></item><item><title>Correlation != Causation</title><link>https://tylerbutler.com/correlation-causation/</link><guid isPermaLink="true">https://tylerbutler.com/correlation-causation/</guid><description>Correlation != Causation</description><pubDate>Tue, 28 Aug 2007 06:55:00 GMT</pubDate><content:encoded>&lt;p&gt;Everyone repeat after me… &lt;strong&gt;Correlation does not &lt;em&gt;imply&lt;/em&gt; causation!&lt;/strong&gt; Just
because two things can be proven to correlate does not guarantee a cause and
effect relationship. Here’s a funny example from the &lt;a href=&quot;http://en.wikipedia.org/wiki/Correlation_does_not_imply_causation&quot;&gt;Wikipedia article&lt;/a&gt; on
the topic (courtesy &lt;a href=&quot;http://en.wikipedia.org/wiki/The_Simpsons:&quot;&gt;The Simpsons&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Homer&lt;/strong&gt;: Not a bear in sight. The “Bear Patrol” is working like a charm!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lisa&lt;/strong&gt;: That’s specious reasoning, Dad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Homer&lt;/strong&gt;: [&lt;em&gt;uncomprehendingly&lt;/em&gt;] Thanks, honey.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lisa&lt;/strong&gt;: By your logic, I could claim that this rock keeps tigers away.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Homer&lt;/strong&gt;: Hmm. How does it work?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lisa&lt;/strong&gt;: It doesn’t work. (&lt;em&gt;pause&lt;/em&gt;) It’s just a stupid rock!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Homer&lt;/strong&gt;: Uh-huh.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lisa&lt;/strong&gt;: But I don’t see any tigers around, do you?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Homer&lt;/strong&gt;: (&lt;em&gt;pause&lt;/em&gt;) Lisa, I want to buy your rock.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Please please please stop assuming that determining a cause and effect
relationship is as straightforward as observing a correlation. It’s not.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I know the &lt;code&gt;!=&lt;/code&gt; operator is not equivalent to “does not imply.” But I am
too lazy right now to see if there’s even a Unicode character for the right symbol.&lt;/p&gt;</content:encoded></item><item><title>Lessons from a Street Performer</title><link>https://tylerbutler.com/lessons-from-a-street-performer/</link><guid isPermaLink="true">https://tylerbutler.com/lessons-from-a-street-performer/</guid><description>Lessons from a Street Performer</description><pubDate>Tue, 21 Aug 2007 09:08:00 GMT</pubDate><content:encoded>&lt;p&gt;Should you ever find yourself watching a street performer’s act, and you end
up volunteering, either willingly or unwillingly, to be a part of said act,
here’s a piece of advice: don’t run away when the performer’s not looking. If
you do, you might find out later that you’re missing something that might be
important to you. This is what happened to Emily, a rather skittish young
German woman who happens to be visiting Brisbane this week, and is now missing
her watch.&lt;/p&gt;
&lt;p&gt;While I was walking back to the Kookaburra this afternoon, I passed through
the Queen Street Mall and stopped to view a street magician. Shortly after I
started watching, he approached a girl in the audience to act as his second
“assistant.” The girl didn’t look particularly happy to have been chosen, but
rather than protest she joined the performer in front of the audience. Soon
she was introduced s Emily from Germany, to much enthusiastic adulation from
the crowd.&lt;/p&gt;
&lt;p&gt;The performer continued on with his act, which primarily involved his first
assistant, another young woman named Charlie. While he turned to face Charlie
and continued on, Emily turned and left, running swiftly into the swelling
crowd at the mall. It took a few seconds for both the audience and the
performer to figure out what was happening. The crowd started laughing at her
departure, but the performer yelled after her, “Wait! You’re missing
something!” With that, he pulled a hand watch from his pocket and waved it
above his head. Alas, Emily ran on, and was soon lost in the crowd. The
performer looked a bit baffled, jokingly offered the watch to anyone who would
buy it, then continued on with his act (with a new second assistant).&lt;/p&gt;
&lt;p&gt;My first thought was that Emily was in on it, but after the act a few people
approached the performer and asked if it was scripted. He explained that it
wasn’t. He had removed her watch surreptitiously as part of his act and was
planning to reveal it to her later on. His intention was by no means to steal
her watch, but when she ran off so unexpectedly he didn’t know what to do.&lt;/p&gt;
&lt;p&gt;So people, if you wind up in a street performer’s act, please just be
good-natured about it and participate. It’s really not that hard.&lt;/p&gt;</content:encoded></item><item><title>In Portland? Get Breakfast!</title><link>https://tylerbutler.com/in-portland-get-breakfast/</link><guid isPermaLink="true">https://tylerbutler.com/in-portland-get-breakfast/</guid><description>In Portland? Get Breakfast!</description><pubDate>Mon, 13 Aug 2007 12:41:00 GMT</pubDate><content:encoded>&lt;p&gt;Seriously, the next time you’re in Portland, go to &lt;a href=&quot;http://www.sanbornsbreakfast.com/&quot;&gt;Sanborn’s&lt;/a&gt; and get some breakfast. Freaking &lt;strong&gt;&lt;em&gt;amazing&lt;/em&gt;&lt;/strong&gt;
food. Elizabeth and I went there last weekend during our trip down there.
Despite the fact that we got lost (I blame our crummy GPS technology — or
maybe it was the navigator?), once we found it it lived up to the hype.
Definitely get the biscuits — I am drooling right now just thinking about
them… The pancakes and omelette’s were also very very good. It was busy, but
service was decent. We also went to &lt;a href=&quot;https://www.lucystable.com/&quot;&gt;Lucy’s Table&lt;/a&gt; for dinner,
which I can also highly recommend. Excellent food and service, though it was a
bit pricey. I’d liken it to Café Juanita in Kirkland in terms of quality and
atmosphere. Unfortunately, not all of our dining experiences in the City of
Roses were good. Despite good reviews on CitySearch, the &lt;a href=&quot;https://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=2&amp;amp;url=http://portland.citysearch.com/profile/8470102/portland_or/j_m_cafe.html&amp;amp;ei=F-2_Rt7KOJTshQPp7PHtCw&amp;amp;usg=AFQjCNH9s9ncpZ9VZT_leK3fVMu9YQe7kA&amp;amp;sig2=gBiGHh4kr9purLuxpfy2ng&quot;&gt;J&amp;amp;M Café&lt;/a&gt; left a lot to be desired. Not outright &lt;strong&gt;&lt;em&gt;bad&lt;/em&gt;&lt;/strong&gt;, but definitely nothing to write home about. Meh. And also note that the only &lt;a href=&quot;http://www.sonicdrivein.com/&quot;&gt;Sonic&lt;/a&gt; within 200 miles of Seattle is in a Portland suburb. Mmmmmm, &lt;strong&gt;&lt;em&gt;so&lt;/em&gt;&lt;/strong&gt; worth the drive.&lt;/p&gt;</content:encoded></item><item><title>The Secret to Avoiding Telemarketers</title><link>https://tylerbutler.com/the-secret-to-avoiding-telemarketers/</link><guid isPermaLink="true">https://tylerbutler.com/the-secret-to-avoiding-telemarketers/</guid><description>The Secret to Avoiding Telemarketers</description><pubDate>Tue, 31 Jul 2007 05:32:00 GMT</pubDate><content:encoded>&lt;p&gt;For some reason I’ve been the target of telemarketers recently, and I think
I’ve found the secret to getting them to hang up and stop calling: &lt;strong&gt;just say no
three times.&lt;/strong&gt; Three seems to be the magic number. The first two times you say
you’re not interested, they continue to pester, but the third time, they thank
you for your time and say goodbye. I have had much more success with this
method than with simply hanging up on them. First, that makes me feel rude,
and a telemarketer is still a person who has a job and there’s no reason for
me to be rude to them just because I’m annoyed. But second, and more
importantly, simply hanging up seems to increase the likelihood that the same
people will call me back with the same offer. Saying no three times seems to
reduce that likelihood in my non-scientific experimentation.&lt;/p&gt;</content:encoded></item><item><title>Gettin&apos; Famous</title><link>https://tylerbutler.com/gettin-famous/</link><guid isPermaLink="true">https://tylerbutler.com/gettin-famous/</guid><description>Gettin&apos; Famous</description><pubDate>Sat, 02 Jun 2007 07:57:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fzorba.members.winisp.net%2F&quot;&gt;George&lt;/a&gt; found &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fsearchvb.techtarget.com%2ForiginalContent%2F0%2C289142%2Csid8_gci1256720%2C00.html&quot;&gt;this article&lt;/a&gt; over at SearchVB.com that mentions my &lt;a href=&quot;/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&quot;&gt;MIX
‘07 Session&lt;/a&gt;. While I am not quoted directly, my name is mentioned, and the
content of the session is referenced a bit:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At Microsoft’s MIX07 conference, Tyler Butler, a program manager for
Microsoft Office SharePoint Server, pointed out three Web applications built
on SharePoint — Hawaiian Airlines, mobile phone game firm Glu Mobile and
music and event firm Hed Kandi Radio.&lt;/p&gt;
&lt;p&gt;Butler also indicated that, since the SharePoint 2007 platform is built on
ASP.NET 2.0, developers can use ASP.NET AJAX and Silverlight to provide a rich
user interface.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’ll try not to let the fame go to my head.&lt;/p&gt;</content:encoded></item><item><title>Pidgin</title><link>https://tylerbutler.com/pidgin/</link><guid isPermaLink="true">https://tylerbutler.com/pidgin/</guid><description>Pidgin</description><pubDate>Fri, 04 May 2007 07:34:00 GMT</pubDate><content:encoded>&lt;p&gt;Imagine my surprise when I was browsing my feeds at Google Reader today to see
the word “Pidgin” in my feeds. And in a Lifehacker post, no less! To
understand why I would be surprised, you have to remember that I grew up in
Papua New Guinea, where a trade language called &lt;a href=&quot;http://en.wikipedia.org/wiki/Tok_Pisin&quot;&gt;Neo-Melanesian Pidgin&lt;/a&gt;
(Tok Pisin in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Vernacular&quot;&gt;vernacular&lt;/a&gt;) is spoken by roughly 4 million people
there. It is commonly referred to as just “pidgin” by people that live in PNG.&lt;/p&gt;
&lt;p&gt;In reality, pidgin is a generic linguistic term that refers to a language that
develops as a means to facilitate trade in areas where many different
languages are spoken by small people groups. Since ~850 languages are spoken
in PNG, it makes some sense that a pidgin would be born to facilitate trade
and communication. Neo-Melanesian pidgin is based on English and German. One
of the defining characteristics of pidgins is that they are typically just a
&lt;a href=&quot;http://en.wikipedia.org/wiki/Lingua_franca&quot;&gt;lingua franca&lt;/a&gt;, and not spoken as a first language by any people group.
Pidgins sometimes develop into creoles, which means that they then become more
full-fledged languages, because people learn to speak them as their first (and
sometimes only) language. This is the case with Haitian Creole (originally a
French Pidgin, now a French Creole).&lt;/p&gt;
&lt;p&gt;Anyhow, the Pidgin Lifehacker was talking about is an IM client, much like
Trillian. Not quite what I was expecting, but given what a pidgin is, the name
is fitting. :-)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://sourceforge.net/project/showfiles.php?group_id=235&amp;amp;package_id=230234&amp;amp;release_id=504761&quot;&gt;Pidgin 2.0 Beta 7&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title>Silverlight Coming to Linux Courtesy Mono</title><link>https://tylerbutler.com/silverlight-coming-to-linux-courtesy-mono/</link><guid isPermaLink="true">https://tylerbutler.com/silverlight-coming-to-linux-courtesy-mono/</guid><description>Silverlight Coming to Linux Courtesy Mono</description><pubDate>Fri, 04 May 2007 07:10:00 GMT</pubDate><content:encoded>&lt;p&gt;According to &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fnews.com.com%2F8301-10784_3-9714669-7.html&quot;&gt;an article over at news.com&lt;/a&gt;, the &lt;a href=&quot;http://www.mono-project.com/Main_Page&quot;&gt;Mono project&lt;/a&gt; founder
says they’ll be working on a Linux port of Silverlight in the future. Sweet! I
was personally annoyed to find out that “cross-platform” only meant Mac and
Windows when Silverlight was officially announced. But it’s nice to see Mono
committing to filling the Linux gap. Best of luck to them!&lt;/p&gt;</content:encoded></item><item><title>The Social Revolution</title><link>https://tylerbutler.com/the-social-revolution/</link><guid isPermaLink="true">https://tylerbutler.com/the-social-revolution/</guid><description>The Social Revolution</description><pubDate>Fri, 04 May 2007 01:38:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been avoiding services like Facebook, MySpace, Friendster and the like
for a long time despite their growing popularity. In the MySpace case, it’s a
philosophical choice — MySpace sites are often so bad! They look horrible,
music plays when you go to them, the formatting is terrible… This is a natural
outcome of pure freedom; when you allow people to customize things and make
them look exactly like they want, you give them the freedom to make horrible
looking stuff. But I’m getting a bit off topic… Anyway, I avoid MySpace sort
of on principal, but I avoid Facebook due to some other reasons that I think
finally crystallized in my mind while attending a roundtable discussion at MIX
that included folks from Six Apart, Twitter, and Facebook.&lt;/p&gt;
&lt;p&gt;The guy from Facebook was talking about how they view Facebook as being not an
&lt;em&gt;extension&lt;/em&gt; of your identity, but rather a &lt;em&gt;representation&lt;/em&gt; of it (my words,
not his; I’m trying to paraphrase the conversation). In other words, your
Facebook simply reflects the things that are happening to you, what’s going on
in your life, etc., and then shortens the gap between those events and
occurrences and the people that potentially care about you. Their philosophy
as I understand it is to reduce the amount of overhead that comes with keeping
track of what’s going on with people.&lt;/p&gt;
&lt;p&gt;That’s a noble goal, I suppose, and one I can certainly appreciate given that
I have friends strewn all over the world (ever since the great Diaspora that
was my high school graduation in PNG). It certainly would be nice to always
know what was happening with those folks without ever having to do anything
about it. But I think that’s the crux of my opposition to it.&lt;/p&gt;
&lt;p&gt;You see, I think there is a great deal of worth in getting an email after a
long time from someone who has taken the time to write you and give you a
brief update about them. It took time and energy for them to write you and
update you on their life — and I believe it shows they care. This type of rich
interaction with someone occurs more naturally after a time out of touch.&lt;/p&gt;
&lt;p&gt;Imagine a 30-year high-school reunion if everyone was on Facebook the entire
time after graduation? Would there be anything to talk about? I suppose the
conversation would revolve around politics, religion, and other matters of
&lt;em&gt;opinion&lt;/em&gt;, because life events would simply be old news. Everyone would
already know that Sam got married last summer and Mary got a new job. There’d
be no excitement in learning that Joe’s son spoke his first words last week or
that Sally was finally able to get that surgery she needed.&lt;/p&gt;
&lt;p&gt;If we’re always connected to one another all the time, it removes the
excitement and enjoyment that comes from the &lt;em&gt;re&lt;/em&gt;-connecting after a
disconnect. It’s cliché, to be sure, but absence makes the heart grow fonder,
and for that reason, Facebook’s just not for me.&lt;/p&gt;</content:encoded></item><item><title>Flittrbook</title><link>https://tylerbutler.com/flittrbook/</link><guid isPermaLink="true">https://tylerbutler.com/flittrbook/</guid><description>Flittrbook</description><pubDate>Wed, 02 May 2007 00:49:00 GMT</pubDate><content:encoded>&lt;p&gt;The screen saver that loads Twitter posts and Flickr photos that I mentioned
briefly in my first MIX post is available at
&lt;a href=&quot;https://blogs.msdn.com/karstenj/archive/2007/04/30/the-debut-of-flittrbook.aspx&quot;&gt;http://blogs.msdn.com/karstenj/archive/2007/04/30/the-debut-of-
flittrbook.aspx&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Presentation Problems</title><link>https://tylerbutler.com/presentation-problems/</link><guid isPermaLink="true">https://tylerbutler.com/presentation-problems/</guid><description>Presentation Problems</description><pubDate>Wed, 02 May 2007 00:04:00 GMT</pubDate><content:encoded>&lt;p&gt;My session went pretty well yesterday, but unfortunately I had quite a few
demo issues. The session before mine went late, which made me pressed for time
to get things plugged up and ready to go. The first problem was that they
didn’t have my presentation pre-loaded on the presentation computer. So I
spent a few minutes looking for it, and then finally gave up, plugged in my
USB key to the back of the machine and just loaded it. Problem 1 solved, but
it got my nerves in a bit of a tizzy so I didn’t quite start with the bang I
wanted to.&lt;/p&gt;
&lt;p&gt;The A/V guy thought I was ready to go as soon as the presentation was up and so
started everything, but I didn’t get a chance to double check that my demo
laptop was working properly and that the demos were going to be displayed
correctly. &lt;em&gt;Big mistake.&lt;/em&gt; When it came time to do my demos, I couldn’t get any
signal from the laptop to the displays. I fiddled with it for what seemed like
an eternity, but in the end made the executive decision to just continue on so
I could make it through the core content. One problem with doing demos from
Vista machines is that I can never freaking find the right place to look to
change settings. It’s &lt;em&gt;very&lt;/em&gt; frustrating, and when you’re nervous or anxious,
it just makes matters worse. For the demos I just did my best to explain the
points in the demos verbally, but of course that was a very poor substitute.&lt;/p&gt;
&lt;p&gt;To add insult to injury, I offered to show the demos on my laptop after the
talk for those that were interested. However, there were a number of
questions, and due to the wait and inactivity, Virtual PC stopped cooperating
and I couldn’t get anything to display on the demo box. &amp;lt;sigh&amp;gt;&lt;/p&gt;
&lt;p&gt;For those of you who were at my session, please accept my sincere apologies
for the lack of demos. I had a much better, more cohesive presentation
planned. Hopefully the extended Q&amp;amp;A was useful. Judging from the number of
great questions and business cards I got for follow up info, people still got
something out of the session.&lt;/p&gt;
&lt;p&gt;I will be at the Mix Chat and attending various sessions throughout the rest
of the conference. If you want to chat with me, catch up with me at the
conference, or send me an email to set up some time to talk while we’re here.&lt;/p&gt;
&lt;p&gt;I was very serious when I said that I’d like to start conversations with
everybody about their SharePoint experiences. We very much want to understand
where you perceive the problems to be so that we can address them. Believe it
or not, it’s not always as obvious to us as it is to you what we should do. So
we very much value your feedback!&lt;/p&gt;</content:encoded></item><item><title>Twitter</title><link>https://tylerbutler.com/twitter/</link><guid isPermaLink="true">https://tylerbutler.com/twitter/</guid><description>Twitter</description><pubDate>Tue, 01 May 2007 04:01:00 GMT</pubDate><content:encoded>&lt;p&gt;Despite my better judgment and my vehement opposition of most things “web
2.0,” I now have a &lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt; account.  See my tweets at
&lt;a href=&quot;https://twitter.com/tylerbutler&quot;&gt;https://twitter.com/tylerbutler&lt;/a&gt;. I feel dirty… At least I’m not on
myspace…&lt;/p&gt;</content:encoded></item><item><title>.Net Browser Integration Demos</title><link>https://tylerbutler.com/net-browser-integration-demos/</link><guid isPermaLink="true">https://tylerbutler.com/net-browser-integration-demos/</guid><description>.Net Browser Integration Demos</description><pubDate>Tue, 01 May 2007 03:38:00 GMT</pubDate><content:encoded>&lt;p&gt;To expand on my post from earlier about .Net in the browser, here’s some of
the more salient points from the demos that Scott Guthrie et. al. showed:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Debugging in both Windows and Mac&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yup, you can attach to a remote process running on the Mac, and step into
breakpoints in your managed code locally in VS. This must have been &lt;em&gt;really&lt;/em&gt;
hard to build. Nonetheless, this is super useful.&lt;/p&gt;
&lt;p&gt;**Code behind for Silverlight projects **&lt;/p&gt;
&lt;p&gt;This is basically how you get your .Net code in the browser. As far as I can
tell, your XAML has an associated code-behind page that contains all of your
code, as in pretty much all of ASP.Net&lt;/p&gt;
&lt;p&gt;**Integration between Expression and VS for inserting XAML into the Silverlight project from Expression **&lt;/p&gt;
&lt;p&gt;You can easily use the best app for the specific job. Designers can crack open
the XAML in Expression and munge it, then developers can live in VS and just
write the code. Everybody wins.&lt;/p&gt;
&lt;p&gt;**Add Silverlight projects to ASP.Net projects, get them built and deployed together **&lt;/p&gt;
&lt;p&gt;Silverlight controls can be just like regular .Net controls, and get built as
part of the same development workflow. Sweeeeeet…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fsilverlight.metaliq.com%2Ftopbanana%2F&quot;&gt;http://silverlight.metaliq.com/topbanana/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Really nifty light table app completely in the browser built in C# and XAML
and delivered via Silverlight. Apparently this will be a sample app that will
be part of the SDK or something, which is pretty sweet. I was hoping it’d be
live so everyone could play, but it’s not. Built in a month with alpha
Silverlight 1.1 code.&lt;/p&gt;</content:encoded></item><item><title>.Net in the Browser</title><link>https://tylerbutler.com/net-in-the-browser/</link><guid isPermaLink="true">https://tylerbutler.com/net-in-the-browser/</guid><description>.Net in the Browser</description><pubDate>Tue, 01 May 2007 00:52:00 GMT</pubDate><content:encoded>&lt;p&gt;Wahoo, .Net in the browser just announced with integration in Silverlight. The
crowd goes wild…&lt;/p&gt;</content:encoded></item><item><title>At MIX!</title><link>https://tylerbutler.com/at-mix/</link><guid isPermaLink="true">https://tylerbutler.com/at-mix/</guid><description>At MIX!</description><pubDate>Mon, 30 Apr 2007 23:35:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m at MIX! Got in late last night. Wow, Vegas is nuts. So gaudy — lights,
sounds, smells everywhere. It’s pretty overwhelming. The Venetian is
fantastically humongous. I have to walk a mile from my room to the part of the
hotel where MIX is actually taking place. First time in a 5-star hotel for me,
so I am pleased.&lt;/p&gt;
&lt;p&gt;Right now I am sitting in the keynote session waiting for it to get started at
9:30 PST. There’s a pretty cool “screen saver” thing that is loading live
&lt;a href=&quot;https://twitter.com/&quot;&gt;Twitter&lt;/a&gt; comments from MIX attendees and displaying them on the screen in
real-time. Pretty cool. Not a big Twitter fan myself, but it’s certainly being
used in interesting ways here at MIX.&lt;/p&gt;
&lt;p&gt;There’s a three piece band playing with an accordion, violin, upright bass,
and assorted other instruments. One attendee described it as a love child
between Tom Waits and Oingo Boingo. Did I just hear a glockenspiel? A freakin’
Theremin too? Fantastic…&lt;/p&gt;
&lt;p&gt;Well, keynote should start shortly… More coming up…&lt;/p&gt;</content:encoded></item><item><title>Speaking at MIX</title><link>https://tylerbutler.com/speaking-at-mix/</link><guid isPermaLink="true">https://tylerbutler.com/speaking-at-mix/</guid><description>Speaking at MIX</description><pubDate>Fri, 06 Apr 2007 01:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Exciting news! My session for &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.visitmix.com%2F&quot;&gt;MIX ‘07&lt;/a&gt; was approved, so it looks like I’ll
be in Vegas at the end of the month. Unfortunately, it’s sold out, so if
you’re not already registered, you’re unfortunately out of luck as far as I
can tell. However, I’m told all sessions will be recorded and available on the
web for everyone to see as early as the day after the session, so I’ll post a
link to it here for those who are interested.&lt;/p&gt;
&lt;p&gt;The title of the session is “Internet Sites with Microsoft Office SharePoint
Server 2007,” which is sufficiently broad that there should be plenty to talk
about. Do you have specific things you’re interested in learning about, or
that you think I should talk about in my session? Feel free to drop me a
line and let me know. I’ll also be at the MIX Chat on Wednesday afternoon,
so swing by and say hello.&lt;/p&gt;
&lt;p&gt;And if you want to see some particularly poor yet frenetic dancing, join me at
PURE on Tuesday night. Believe me, there’s nothing quite like a Microsoft
Program Manager out on the dance floor…&lt;/p&gt;</content:encoded></item><item><title>Corrections on Nav Samples in my ECM Blog Posts</title><link>https://tylerbutler.com/corrections-on-nav-samples-in-my-ecm-blog-posts/</link><guid isPermaLink="true">https://tylerbutler.com/corrections-on-nav-samples-in-my-ecm-blog-posts/</guid><description>Corrections on Nav Samples in my ECM Blog Posts</description><pubDate>Sat, 03 Feb 2007 08:38:00 GMT</pubDate><content:encoded>&lt;p&gt;Way back when I wrote &lt;a href=&quot;https://blogs.msdn.com/ecm/archive/2006/10/30/building-tylerbutler-com-part-1-planning-and-basic-branding.aspx&quot;&gt;part 1&lt;/a&gt; of my series on building tylerbutler.com, I
mentioned that I was using a custom sitemap provider to drive my “recent
pages” section on my site. I was doing this with navigation because navigation
controls inherently know where they are in a site’s structure, which meant I
only needed one control in my master page to drive the links in the right hand
section. I was using the &lt;code&gt;DynamicChildLimit&lt;/code&gt; property to make sure I only got 15
links to show up in that section.&lt;/p&gt;
&lt;p&gt;Unfortunately, I started having problems with the ordering of the links that
were showing up, so I started talking with Chris Richard, the nav maestro. It
turns out that the &lt;code&gt;DynamicChildLimit&lt;/code&gt; isn’t meant to be used for that purpose.
When you sort navigation, the sorting happens &lt;em&gt;after&lt;/em&gt; the nodes are returned
from the nav store. This means that if you have 50 navigation items sorted by
last modified time, and you set a &lt;code&gt;DynamicChildLimit=&quot;15&quot;&lt;/code&gt;, for example, you’ll
get back 15 pseudo-random items, then those resulting 15 items will be sorted
by last modified time. I say a &lt;em&gt;pseudo-random&lt;/em&gt; set of items is returned
because even though items returned aren’t really random — there &lt;em&gt;is&lt;/em&gt; a
deterministic way nodes get returned from the nav store — it’s complicated
enough that you won’t be able to tell what 15 items will be returned at any
given time.&lt;/p&gt;
&lt;p&gt;Anyway, this means that &lt;code&gt;DynamicChildLimit&lt;/code&gt; doesn’t really work the way I
thought and it makes navigation unusable for my needs in this instance.
However, a helpful guy named Bram Kleverlaan left &lt;a href=&quot;https://blogs.msdn.com/ecm/archive/2007/01/16/building-tylerbutler-com-part-6-what-was-tough-and-what-s-to-come.aspx#1512810&quot;&gt;a comment &lt;/a&gt;on my Part 6
post that he was able to use a SharePoint expression to make Content Query Web
Parts know where they are in the site hierarchy. The trick is to set
&lt;code&gt;WebUrl=&quot;&amp;lt;% $SPUrl:~Site/ %&amp;gt;&quot;&lt;/code&gt; in the web part’s properties. This expression
will get expanded by SharePoint at runtime, and your CQWP will suddenly change
based on the location of the page that’s loading it. I definitely had a “Why
didn’t I think of that?” moment when I read Bram’s comment.&lt;/p&gt;
&lt;p&gt;Anyway, I am using this now on my site, and I can verify that it works for web
parts that live &lt;em&gt;outside&lt;/em&gt; of web part zones. I have not yet tried it on a web
part inside a zone, but I’ve heard reports that the property gets reset every
time you change properties on the web part in the browser, which you can’t do
for parts that live outside zones.&lt;/p&gt;</content:encoded></item><item><title>Building MOSS Master Pages</title><link>https://tylerbutler.com/building-moss-master-pages/</link><guid isPermaLink="true">https://tylerbutler.com/building-moss-master-pages/</guid><description>Building MOSS Master Pages</description><pubDate>Sat, 03 Feb 2007 06:57:00 GMT</pubDate><content:encoded>&lt;p&gt;Now that MOSS is available to lots of people, and people are building lots of
sites that &lt;a href=&quot;https://www.fifteen.net&quot;&gt;don’t&lt;/a&gt; &lt;a href=&quot;https://www.shareview.co.uk/&quot;&gt;look&lt;/a&gt; &lt;a href=&quot;https://www.hedkandi.com/&quot;&gt;like&lt;/a&gt; SharePoint, a lot of you might be
wondering how you should get started in building your own custom master page
for your site. I talked a little bit about this in my first post on building
tylerbutler.com, but I think it might be valuable to post some info about the
minimal master page and its role in helping you build a custom master page for
your site. But first, some background…&lt;/p&gt;
&lt;p&gt;During the early betas, people heard that you could make SharePoint “not look
like SharePoint,” and so they set off to do just that. People started cracking
open default.master and trying to understand it. The problem many people
reported was that the markup in default.master was ridiculously complicated,
and it wasn’t clear what could be removed and what couldn’t. The complexity is
somewhat necessary for that master page because of all the delegate controls
we have to put in place to support a bunch of different back-end SharePoint
stuff (I do believe, however, that there’s plenty of things we could/can do in
that master page to make it clearer and easier to customize without removing
functionality, so this is not meant to be an excuse).&lt;/p&gt;
&lt;p&gt;Anyway, there were customers that were trying to build internet facing sites
on top of SharePoint, because &lt;strong&gt;a)&lt;/strong&gt; we told them that they could/should and
&lt;strong&gt;b)&lt;/strong&gt; we rolled up a lot of web content management functionality from Content
Management Server 2002, and customers that were using that product were
investigating how they would move to MOSS. These customers did not want their
site to look anything like SharePoint. These customers also often had a site
design template that was coming from their design team, either in HTML or as
image mock-ups. Trying to fit that design into default.master was exceedingly
difficult because of all the unclear markup in that master page.
Default.master is designed for a SharePoint site — one that looks and acts
like SharePoint. But people who wanted to build non-SharePoint looking sites
were getting tripped up by using it as a starting point.&lt;/p&gt;
&lt;p&gt;We do have several master pages that we built that are much simpler than
default.master. When you provision a Publishing Portal site collection, for
example, we default to BlueBand.master, which has customized CSS and MOSS
navigation out of the box. It’s a cleaner starting point, so we initially told
people to start there rather than with default.master. We still had problems,
though, because you never knew if a placeholder was absolutely necessary in
your master page. What would happen is you’d remove a seemingly innocuous
placeholder and your page would work fine until you browsed to some specific
page that was overriding that placeholder, then things would break.&lt;/p&gt;
&lt;p&gt;What we needed was a sample master page that included only the markup that was
&lt;em&gt;absolutely necessary to get your pages to render.&lt;/em&gt; Thus, the &lt;a href=&quot;https://msdn2.microsoft.com/en-us/library/aa660698.aspx&quot;&gt;minimal master
page&lt;/a&gt; was born. This master page is purposely bare. It’s just a bunch of
placeholders – those placeholders are necessary for things in your site to
work properly. With this master page, you can take your markup from your
designer, paste it into SharePoint Designer, and move markups into the
appropriate placeholders. If there’s some pieces you need/want from
default.master or another page, you can always open them up and copy/paste the
appropriate markup.&lt;/p&gt;
&lt;p&gt;So, should you start with &lt;code&gt;default.master&lt;/code&gt;, &lt;code&gt;blueband.master&lt;/code&gt;, or the minimal
master page example when building your own custom master page? Well, the
answer depends on what you’re trying to do. If you’re building out a site that
really should look and work like vanilla SharePoint, then maybe &lt;code&gt;default.master&lt;/code&gt;
makes sense. If you’re trying to do something more exotic, &lt;code&gt;blueband.master&lt;/code&gt; and
its siblings have examples of different navigational structures and color
schemes, so maybe it makes sense to start from one of those that is close to
the navigation/color you’re aiming for. But my personal recommendation is to
start with the minimal page and copy/paste the appropriate controls/markup
from other master pages as necessary. This ensures you get only what you need
and want in your page, rather than having to weed through a bunch of markup to
get rid of stuff that doesn’t &lt;em&gt;look&lt;/em&gt; like it’s needed. If you do want to go
the default.master route, then Heather Solomon has &lt;a href=&quot;http://heathersolomon.com/blog/archive/2007/01/26/6153.aspx&quot;&gt;a custom master page&lt;/a&gt;
that she’s tweaked from &lt;code&gt;default.master&lt;/code&gt; to make things cleaner and more
straightforward.&lt;/p&gt;
&lt;p&gt;I hope this helps you figure out how to get started building out your site
look and feel. There is a growing number of live custom sites on top of MOSS,
and it’s exciting to see what people are able to build with this product!&lt;/p&gt;</content:encoded></item><item><title>Hiding vs. Disabling</title><link>https://tylerbutler.com/hiding-vs-disabling/</link><guid isPermaLink="true">https://tylerbutler.com/hiding-vs-disabling/</guid><description>Hiding vs. Disabling</description><pubDate>Tue, 23 Jan 2007 15:49:00 GMT</pubDate><content:encoded>&lt;p&gt;Someone came by my office today and asked me if I could show him how to make a
column on a SharePoint list required. No problem! While this isn’t as simple
as it could be, it’s pretty straightforward. Go into the list you want to
change, select &lt;strong&gt;List Settings&lt;/strong&gt; from the &lt;strong&gt;Settings&lt;/strong&gt; drop down, then click
the column you want to change in the &lt;strong&gt;List Settings&lt;/strong&gt; page. You should see an
option called “Require that this column contains information.” By default,
this is off, but turning it on will make the column required.&lt;/p&gt;
&lt;p&gt;However, in this case, that option wasn’t showing in the UI. The reason was
that the column was a &lt;strong&gt;Yes/No (check box)&lt;/strong&gt; field. Now, if you think about
it, this makes sense. A checkbox &lt;em&gt;always&lt;/em&gt; has state, either checked or
unchecked, so it’s by nature required. A user always has to fill in a checkbox
with some data, either by checking it or unchecking it. It all comes down to
the default state, which &lt;em&gt;is&lt;/em&gt; settable in the SharePoint UI.&lt;/p&gt;
&lt;p&gt;The interesting thing here, though, is that the user didn’t stop to think
about this. And that makes sense. He just wanted to make a column required; he
didn’t think about what type of column it was. SharePoint totally removes the
required field setting from the UI for Yes/No fields because it doesn’t make
sense. However, the user got confused. He wasn’t sure if the UI was missing by
design or if he wasn’t looking in the right spot for the setting. If you have
a task to accomplish using relatively unfamiliar UI, you go to the place that
makes sense to you, but you’re never sure you’re in the right place. In this
case, the user poked around other parts of the UI before coming to me, because
he thought he was looking in the wrong place.&lt;/p&gt;
&lt;p&gt;This might be alleviated by disabling (i.e. graying out) the part of the UI
that is not applicable. This is somewhat clearer, because it says, “Yes, this
is where you would change this setting, but it doesn’t make sense here or is
not allowed.” This isn’t a hard rule. You can’t &lt;em&gt;always&lt;/em&gt; display &lt;em&gt;all&lt;/em&gt;
possible settings in one piece of UI because if there are a large number of
settings, things can get confusing and distracting. Some hiding does make
sense in many cases. But it is worth some dedicated thought about your UI and
what your users are trying to accomplish when deciding whether to hide a piece
of UI or simply gray it out.&lt;/p&gt;</content:encoded></item><item><title>Site Problems</title><link>https://tylerbutler.com/site-problems/</link><guid isPermaLink="true">https://tylerbutler.com/site-problems/</guid><description>Site Problems</description><pubDate>Tue, 23 Jan 2007 15:35:00 GMT</pubDate><content:encoded>&lt;p&gt;My site has been going up and down lately. It’s not a problem with MOSS or the
server. Both have stayed up and running without any problems. Unfortunately,
the environment that my server is in has been having problems with their
switch. Apparently it’s rebooting itself constantly, which is “a common issue
for this brand and model of router.” Anyway, no biggie, my site isn’t exactly
mission-critical. But weekends are the best time for me to work on
enhancements, and I have a few in mind that I was looking forward to getting
set up. Alas, ‘twas not to be. Everything seems to be working now, though, so
hopefully it’ll stay this way.&lt;/p&gt;</content:encoded></item><item><title>Acrobat Reader 8 Sucks Less</title><link>https://tylerbutler.com/acrobat-reader-8-sucks-less/</link><guid isPermaLink="true">https://tylerbutler.com/acrobat-reader-8-sucks-less/</guid><description>Acrobat Reader 8 Sucks Less</description><pubDate>Thu, 18 Jan 2007 04:15:00 GMT</pubDate><content:encoded>&lt;p&gt;I upgraded to Acrobat Reader 8 last night because frankly, I figured it
couldn’t get any crappier than 7. I was right. In fact, it got a bit better.
The Yahoo toolbar and advertising bar across the top seem to be gone. The
interface is simpler, too. It still has automatic updating on by default, of
course, which I immediately turned off just in case the update feature sucks
as much as it did in 7.&lt;/p&gt;
&lt;p&gt;So it’s getting better. But even without Photoshop Album Starter Edition,
which it tries to bundle with the download by default (freakin’ annoying, by
the way), it’s still &lt;strong&gt;20.8 MB&lt;/strong&gt;. My goodness, that’s bloated…&lt;/p&gt;</content:encoded></item><item><title>I Hate Security Questions</title><link>https://tylerbutler.com/i-hate-security-questions/</link><guid isPermaLink="true">https://tylerbutler.com/i-hate-security-questions/</guid><description>I Hate Security Questions</description><pubDate>Thu, 18 Jan 2007 03:56:00 GMT</pubDate><content:encoded>&lt;p&gt;Several of my banks have been “upgrading” their security since the beginning
of the year. I have pretty much accepted the fact that “upgrading” security
means my blood pressure will needlessly rise the next time I try to access my
account.&lt;/p&gt;
&lt;p&gt;The latest security craze seems to be these security questions. “Mother’s
maiden name” apparently doesn’t cut it anymore. Security questions drive me
insane, because there’s invariably a finite set of options I have to choose
from. &lt;em&gt;Favorite childhood superhero?&lt;/em&gt; &lt;em&gt;Name of firstborn child?&lt;/em&gt; What is this
crap? &lt;strong&gt;None&lt;/strong&gt; of it is easy for me to remember! Why don’t you let me pick my
&lt;strong&gt;own&lt;/strong&gt; question and my &lt;strong&gt;own&lt;/strong&gt; answer? Now I have to remember some “fact”
that I made up as an arbitrary answer to some stupid question that a bank
decided was an excellent way to distinguish me from some sorry thief.&lt;/p&gt;
&lt;p&gt;To add insult to injury, many times I have to select** two or more** security
questions. &lt;strong&gt;OMG. &lt;a href=&quot;/2004/08/i-hate-banks/&quot;&gt;I hate banks so much.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Rizzy on the Wii</title><link>https://tylerbutler.com/rizzy-on-the-wii/</link><guid isPermaLink="true">https://tylerbutler.com/rizzy-on-the-wii/</guid><description>Rizzy on the Wii</description><pubDate>Tue, 16 Jan 2007 08:52:00 GMT</pubDate><content:encoded>&lt;p&gt;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
post them. But before I do that, here’s what he has to say about getting
online with the thing:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;First, some bitching about Wii:&lt;/p&gt;
&lt;p&gt;Up until 10 minutes ago, all I’ve ever done with the Wii is played games.
Very easy, very fun. However, trying to use the internet connectivity and
adding friends made me want to punch a little Japanese person in the face. Do
they actually expect average people to be able to do this? I’m an embedded
systems designer, and I was frustrated with it. Other than letting our Mii’s
travel back and forth, is there even any benefit to doing it? Shame on you
Nintendo.&lt;/p&gt;
&lt;p&gt;Second, games only save to the internal Wii memory. If you want them on the
SD card, you have to copy it over manually. Of course, you’d have to do that
each time you play the game in order to keep the SD card up to date. It pretty
much makes the $50 1G memory card I bought completely useless.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I couldn’t have said it better myself. The Wii online setup is pretty bad. I’m
really surprised people are getting it to work without wanting to gouge their
own eyes out with a spoon. As for me, I am still using it on my neighbor’s
wireless because it won’t work on mine. And yes, I have changed to channels
1/11 on the router. Yes, I have followed all stupid suggestions in the forums
and on the support site. Nintendo could take a few pointers from Microsoft in
this particular part of the experience.&lt;/p&gt;
&lt;p&gt;The SD thing seems strange. I haven’t tried to use an SD card yet, but it does
seem odd that you can’t save games directly to it. This does seem like
something Nintendo could change with a firmware update though.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Wii Sports&lt;/strong&gt; — It’s ok. Fun little games to showcase the controller
abilities. I’ve found tennis to be pretty fun with multiple people, and you
can avoid the dreaded Wii tennis elbow once you learn that a skilled flick of
the wrist will do just as much as a full blown swing. I brought my Wii home
for Christmas, and since I have a zillion siblings we had continuously
rotating doubles matches which were a blast.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Super Monkey Ball&lt;/strong&gt; — I usually only play the mini games. Not as much fun
as the versions for GameCube. I think they tried too hard to incorporate the
motion control into the games, and many of them are just too touchy, or they
should have put more time into making it fun. I guess they were pressed for
time trying to get that one out for launch. There are a few that are pretty
entertaining though.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Zelda: Twilight Princess&lt;/strong&gt; — This game rocks. It’s hella fun to play. They
used the motion sensors in moderation, which is good. The game itself is
really fun - plenty of puzzles and tangent adventures to try out. I haven’t
played any Zelda games since the one for 8-bit Nintendo, but I can still
blindly say this is probably the best to date.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Excite Truck&lt;/strong&gt; — So much fun my head almost exploded. It’s a very fast
paced, physics defying game. There’s actually a lot of strategy needed for the
more advanced tracks, but at the same time you can just pick a level and have
fun doing 720’s at 1000 ft in the air and smashing through trees with power-
ups. Definitely one of the best games I own.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Red Steel&lt;/strong&gt; — I haven’t played this game very much. The reason? My damn
arm gets tired. Another example of how not to design a game interface. I think
it would be much better if I could play for more than 20 mins at a time, so my
review may be biased. Basically, you are required to use the Wii-mote pointer
continuously to aim and steer in the game. That’s not even too bad because you
could rest your arm on your knee; then they thought up the great idea of
requiring you to extend your arm towards the TV to zoom in/out. Combine all of
that movement and you have to hold your arm straight out for extended periods
of time during game play. Very annoying. Maybe I need to hit the gym.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Haven’t gotten into Twilight Princess yet myself. Elebits should be here from
&lt;a href=&quot;https://www.gamefly.com/&quot;&gt;Gamefly&lt;/a&gt; this week, though in retrospect maybe I should have put Excite
Truck at the top of my queue instead. Oh well, way too many awesome games
these days to get to. I still work occasionally, you know.&lt;/p&gt;</content:encoded></item><item><title>iTunes Tagging</title><link>https://tylerbutler.com/itunes-tagging/</link><guid isPermaLink="true">https://tylerbutler.com/itunes-tagging/</guid><description>iTunes Tagging</description><pubDate>Tue, 02 Jan 2007 11:30:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the things that really annoys me about iTunes is the lack of
categorical tagging. Actually, I shouldn’t blame iTunes. I think this is a
fundamental limitation in the ID3 tags. What I want is the ability to “tag”
music as I listen to it, with terms like “story-song” (songs that tell a
story) or “ricardo” (songs that my friend Ricardo has introduced me to).
Social music sites like &lt;a href=&quot;https://www.pandora.com/&quot;&gt;Pandora&lt;/a&gt; and &lt;a href=&quot;https://www.last.fm/&quot;&gt;Last.fm&lt;/a&gt; have this concept, as
does just about every “Web 2.0” site in the world. Why not my music player?&lt;/p&gt;
&lt;p&gt;Initially when I tried to implement this sort of thing I used the “keywords”
field. I would just add the tag to that field, then I created Smart Playlists
based on that field. &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.lifehacker.com%2Fsoftware%2Fitunes%2Ftag-your-songs-in-itunes-153970.php&quot;&gt;This post at Lifehacker&lt;/a&gt; suggests using the
“Grouping” field, but the premise is the same.&lt;/p&gt;
&lt;p&gt;This approach works fine until you want to edit a bunch of songs and **add **a
tag. When you do a bulk edit of the keywords field in iTunes it’ll overwrite
anything that was there previously. So suddenly tagging all that music with
“Sasquatch 2006” removed all the other cool tags you had applied. Major
suckage.&lt;/p&gt;
&lt;p&gt;Today I decided to try a new approach: I just use dumb, old-fashioned
playlists. When I want a new tag, I create a new playlist for it. For
organization purposes I keep all tag playlists in a folder called Tags. I can
then create additional nested folders for categories, and because of how
iTunes handles folders with playlists inside, the folders will become
aggregators of all the music in playlists underneath them, which is nifty.
This means I can see all of the music I have tagged just by clicking the Tag
folder&lt;/p&gt;
&lt;p&gt;This approach is pretty simple. Adding a tag is easy, and using the tags to
drive smart playlists is easy too. Just add an “If &amp;lt;&lt;strong&gt;Playlist&lt;/strong&gt;&amp;gt; &amp;lt;&lt;strong&gt;is/is
not&lt;/strong&gt;&amp;gt; &amp;lt;&lt;strong&gt;Tag playlist name&lt;/strong&gt;&amp;gt;” clause to the Smart Playlist. There is a
drawback, though… **Removing **tags is now a pain. From the frying pan into
the fire… I have to make sure the song doesn’t appear multiple times in a
playlist, and if it does, remove all occurrences. This is because playlists
are designed to support multiple occurrences of the same song. If I want to
start and end my playlist with &lt;em&gt;My Heart Will Go On&lt;/em&gt;, then dang it, I can do
it. But for my purposes, it’s not the ideal behavior.&lt;/p&gt;
&lt;p&gt;Anyway, none of this really helps my situation, because the iTunes app
&lt;strong&gt;doesn’t help me&lt;/strong&gt; manage my tags, build playlists based on them, or
anything, natively. All of this is a hack. There are a lot things that it
could do to make it easier to tag music. And with the iTunes music store, what
if I could check out how other users were tagging the track, and borrow their
tags? This is all stuff that is provided by Last.fm, of course, but Last.fm
doesn’t manage my entire music collection — iTunes does.&lt;/p&gt;
&lt;p&gt;And of course &lt;strong&gt;none&lt;/strong&gt; of this does anything on my iPod. Heck, &lt;strong&gt;it&lt;/strong&gt; can’t
even understand playlist folders, which is super &lt;em&gt;super &lt;strong&gt;super&lt;/strong&gt;&lt;/em&gt; dumb.
Actually, I have a lot of gripes about the iPod UI…&lt;/p&gt;</content:encoded></item><item><title>Web Site Intro Pages</title><link>https://tylerbutler.com/web-site-intro-pages/</link><guid isPermaLink="true">https://tylerbutler.com/web-site-intro-pages/</guid><description>Web Site Intro Pages</description><pubDate>Fri, 29 Dec 2006 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you browse around the internet these days, you’re bound to come across a
website that has an intro page. Usually this page allows you to choose whether
you have a high- or low-bandwidth connection. If you select the high-bandwidth
option, you invariably get taken to a Flash version of the site, while the
low-bandwidth version of the site is static HTML.&lt;/p&gt;
&lt;p&gt;When faced with these types of choices, I often forget that one should &lt;em&gt;always&lt;/em&gt;
pick the low-bandwidth option, even if one is using a high-bandwidth
connection. The main reason is that these Flash sites often have annoying
background music or annoying animations. From a site design perspective, Flash
is best used as a &lt;em&gt;supplementary&lt;/em&gt; web technology. A website shouldn’t be
designed entirely in Flash. Some core reasons for this are accessibility and
search-ability. Google and other spiders cannot crawl a Flash web site as
easily. Not to mention the fact that these types of sites always have some
crazy navigation scheme and flashy transitions between sections that make it
very difficult to navigate around, because it doesn’t fit the typical web
mold. Finally, Flash sites are typically absolutely scaled at a specific
resolution, which means they don’t look or work great if they’re not at a
specific window size. To combat this, they’ll pop open a separate browser
window at the specific size they want. Talk about annoying! There is very
rarely &lt;em&gt;any&lt;/em&gt; need at all to design your site in Flash completely. Many
Flash-only site have a stripped down HTML version of the site, hence the intro page
where you pick which version you want to see. Since you already have to create
an HTML version of the site, why not scrap the flash site and focus your
attention on making the HTML site much better?&lt;/p&gt;
&lt;p&gt;The trend of completely Flash-based web sites has declined dramatically in the
commercial web of late, which is a great development. Instead, sites are using
Flash as a way to add a bit of pizzazz to the site in strategic places, or to
add a slightly more interactive portion to their site. Judicious use of Flash
in this way is good.&lt;/p&gt;
&lt;p&gt;The next time someone tells you that you should design your entire web
presence in Flash, or have two versions of your site, shoot them.&lt;/p&gt;</content:encoded></item><item><title>Buying Toothpaste</title><link>https://tylerbutler.com/buying-toothpaste/</link><guid isPermaLink="true">https://tylerbutler.com/buying-toothpaste/</guid><description>Buying Toothpaste</description><pubDate>Mon, 25 Dec 2006 11:25:00 GMT</pubDate><content:encoded>&lt;p&gt;I had to buy a new tube of toothpaste the other day. This isn’t something I do
terribly often. I live alone, and even with my braces, which requires a more
stringent dental hygiene regiment, I don’t go through a tube that quickly.&lt;/p&gt;
&lt;p&gt;But as I browsed the seemingly endless toothpaste section at my local Fred
Meyer, looking for a tube, I realized that I have never bought the same type
of toothpaste twice. I get to the store and I realize that I don’t know what
type I bought last time, and all of the tubes look the same and have
frustratingly similar names. &lt;em&gt;Did I get Mint Zing last time? Or was it Fresh
Mint? Maybe it was Minty Fresh… Yeah, it was Minty Fresh.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Nope, it wasn’t Minty Fresh. It wasn’t even Fresh Mint or Mint Zing. It was
&lt;strong&gt;Mega Mint with Scope, Baking Soda and Peroxide Whitening ++&lt;/strong&gt;. &lt;em&gt;Sigh&lt;/em&gt;. Why
does it have to be so hard to buy freaking toothpaste?&lt;/p&gt;</content:encoded></item><item><title>Nintendo Wii</title><link>https://tylerbutler.com/nintendo-wii/</link><guid isPermaLink="true">https://tylerbutler.com/nintendo-wii/</guid><description>Nintendo Wii</description><pubDate>Mon, 25 Dec 2006 11:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I managed to snag a Wii this past weekend at Target. It was a bit of a chore.
I spent seven hours in 30 degree weather with 20 other brave souls who dared
tochallenge the elements. I brought my heavy coat, a couple of blankets, a
folding chair, and some reading material, and settled in with the other
friendly members of the line around 1 am on a Saturday night. I was 10th in
line, and at about 3am the night shift manager walked out and told us that
they’d “probably” have 21 Wii’s. The info was accurate, and at 8:30am, a very
tired, cold Tyler walked out of the store with a bundle of Japanese electronic
awesomeness.&lt;/p&gt;
&lt;p&gt;When I got home I plugged it in and got everything wired up. It was pretty
straightforward. I didn’t have component cables yet, so I had to use the
composite cable. My gosh, does 480i suck. Ever since I got my new 50” plasma
last month I haven’t been able to watch low quality signals for long. I had
initially planned to wait to get the component cable, but I ordered one from
Nintendo the very next day. They must have shipped from Redmond, too, because
I got it the following day, which was awesome. 480p makes the picture less
nauseatingly bad.&lt;/p&gt;
&lt;p&gt;Anyway, the Wiimote is surprisingly easy to set up and use. Just put the
sensor bar in the appropriate location, and you’re pretty much done. I
expected to have to do some sort of calibration like you do on a PDA touch
screen, but there wasn’t any. Mnoving it around to select things on the screen
is easy, and it has a very mouse-like feel. One of the coolest things is that
it can detect the orientation of your hand, so if you hold the Wiimote upside
down, the pointer icon on the screen goes upside down as well. This capability
is important in games too, most notably in Wii Sports Bowling. Pretty cool
stuff from a technological perspective.&lt;/p&gt;
&lt;p&gt;I had a ton of problems getting my Wii on the internet, though. I still
haven’t gotten it working with my own network. I’m mooching off a neighbor’s
until I get mine figured out. I keep getting random errors when testing the
connection. The Wii of course just gives you an error code, and then you have
to look it up on their support website to try and figure out what it is. And
then, you have to type in the error code and hit search, because they don’t
just have a flat list of the codes and what they mean. And to add insult to
injury, they have ranges of error codes that all have the same recommendation.
&lt;em&gt;Change the wireless channel to 1 or 11. Check your SSID, blah blah blah.&lt;/em&gt;
None of it has worked for me. This is one area where I think Microsoft really
has it down when you compare the 360 experience to the Wii.&lt;/p&gt;
&lt;p&gt;Once I got it online, updating it was painfully slow. It took about a half
hour to get all the updates downloaded and installed. Compare this to the 360,
which has taken less than 3 minutes for every update I’ve ever applied.&lt;/p&gt;
&lt;p&gt;The Wii UI is very minimalistic. There’s not a lot of color, just grey, black,
and white, and the occasional blue. And it has this annoying pinging sound
that it makes whenever you’re applying an update or testing a wireless
connection. It gets to you after awhile. And the Wii Store has this background
music that is fun at first, but you get sick of it real quickly.&lt;/p&gt;
&lt;p&gt;After all of the fooling around with getting it online and updated, I was
pretty frustrated. It took me the better part of the day to get it up and
running. So when I finally decided it was time to play Wii Sports, I was in a
kind of bad mood. But within 5 minutes of standing in front of my TV,
gesticulating wildly, my attitude had changed. Wii Sports is just freaking
fun! I majorly suck at baseball and tennis, but I bowl pretty well, and I find
boxing pretty fun. It took me awhile to figure out that I could use both hands
while boxing. Yeah, I’m an idiot.&lt;/p&gt;
&lt;p&gt;I also got Zelda, but I haven’t played it yet. I also have a ton of GameCube
games that I haven’t tried yet. That is one really cool thing — my Wavebirds
are still useable, as are my memory cards with all my save games. I could
fully retire my GameCube if it weren’t for the Gameboy Player, which I use to
play Gameboy games on the big screen.&lt;/p&gt;
&lt;p&gt;I still have a lot of stuff to check out. I added Patrick to my address book
(seriously, this is a painful experience compared to the Xbox Live accounts
and friends list. A 16 digit number? Come on! I can’t remember that to tell my
friends!), so hopefully we’ll be exchanging Mii’s soon. Not sure what that
means, but no doubt it will be a cultural experience.&lt;/p&gt;
&lt;p&gt;It’s clear that this console was designed by a Japanese company. The design
and focus are very different from something like the 360. And that is awesome!
Variety is good. I look forward to better online experiences as they roll out
new services and channels. There’s a lot of potential, and just like Xbox
Live, it’s going to take some time to really grow.&lt;/p&gt;
&lt;p&gt;Until then, anybody up for a round of Wii Bowling?&lt;/p&gt;</content:encoded></item><item><title>The Zune and Wireless</title><link>https://tylerbutler.com/the-zune-and-wireless/</link><guid isPermaLink="true">https://tylerbutler.com/the-zune-and-wireless/</guid><description>The Zune and Wireless</description><pubDate>Wed, 20 Dec 2006 10:20:00 GMT</pubDate><content:encoded>&lt;p&gt;A lot of people have made a big deal about the limitations of the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.zune.net%2F&quot;&gt;Zune&lt;/a&gt;
wireless functionality since it was released a few weeks ago. While I totally
agree that there is a lot of untapped potential with the device currently,
there is at least one “obvious” omission that people have pointed out that
simply isn’t a good idea, to be honest.&lt;/p&gt;
&lt;p&gt;I’m talking about syncing to the device using the wireless. Sounds cool,
right? You just walk into your apartment, turn on the Zune, and Boom! All of
your music is synchronized to it. But what people don’t seem to realize is how
slow this would be. The maximum bandwidth for USB 2.0 is &lt;a href=&quot;http://en.wikipedia.org/wiki/USB_2.0#Transfer_speed&quot;&gt;480 Mbit/s&lt;/a&gt;, or
60 MB/s. 802.11g, on the other hand, has a &lt;a href=&quot;https://en.wikipedia.org/wiki/802.11g#802.11g&quot;&gt;maximum raw data rate of 54
Mbit/s&lt;/a&gt;, or about 24.7 Mbit/s net throughput. Now, by applying some simple
mathematics:&lt;/p&gt;
&lt;p&gt;480 / 24.7 = 19.4332&lt;/p&gt;
&lt;p&gt;This means that syncing to your device using wireless would be roughly 20
times slower than using USB 2.0. Even if we assume the theoretical max data
rate for 802.11g, which isn’t realistic, to be clear, you’re still looking at
a transfer speed that’s ten times slower. And don’t even think about using
802.11b. Frankly, this doesn’t sound like a good idea.&lt;/p&gt;
&lt;p&gt;“So what?” you say. “I can leave the Zune syncing all night and it’ll be ready
to go in the morning. Speed isn’t a real issue.” OK, fine. You walk into your
apartment, you turn on your Zune, and it starts syncing. You go to bed. You
wake up the next morning, and your Zune is finished syncing, but it’s battery
has also been drained. Good luck using it on your commute.&lt;/p&gt;
&lt;p&gt;So what do you do next time? You plug it in so it can charge while it’s
syncing. But at this point, why not just plug it directly into your computer
to sync and charge at the same time, at a much faster rate? So to me, it’s
clear that isn’t really a desirable feature, and I’ll bet that some Program
Manager on the Zune team came to the same conclusion.&lt;/p&gt;
&lt;p&gt;One thing that I will point out, however, is that many times, when you sync,
you’re not syncing that much data. Your library hasn’t changed that much, and
the only thing that’s being synced is play counts or updated track info or
something. In that case, this feature might make sense. The amount of data
wouldn’t be large, so the process wouldn’t take long and the battery drain
would be minimal. There might be some scenarios where this feature would be
useful. However, I think that a lot of people had a knee-jerk reaction and
haven’t really thought through the ramifications and technical limitations of
that feature. But hey, that’s what we PM’s get paid for, right?&lt;/p&gt;</content:encoded></item><item><title>Patrick Has a Wii, or, Experimenting with Microformats</title><link>https://tylerbutler.com/patrick-has-a-wii-or-experimenting-with-microformats/</link><guid isPermaLink="true">https://tylerbutler.com/patrick-has-a-wii-or-experimenting-with-microformats/</guid><description>Patrick Has a Wii, or, Experimenting with Microformats</description><pubDate>Tue, 12 Dec 2006 08:45:00 GMT</pubDate><content:encoded>&lt;p&gt;My friend &lt;a href=&quot;http://patrick.wagstrom.net/&quot;&gt;Patrick&lt;/a&gt; managed to &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fpatrick.wagstrom.net%2Fweblog%2Fwii%2Fwiik-wiith-wii.xml&quot;&gt;get his hands on a Wii&lt;/a&gt;, and I am a bit
jealous, to say the least. My own weekend Wii hunt did not go well, but I plan
to persevere and head back out next weekend. Supposedly the Redmond
&lt;a href=&quot;https://www.target.com/&quot;&gt;Target&lt;/a&gt; is getting a bunch in on December 17th, so I’ll be standing in
line if you want to join me.&lt;/p&gt;
&lt;p&gt;However, this post is &lt;em&gt;really&lt;/em&gt; meant to be about &lt;a href=&quot;http://microformats.org/&quot;&gt;Microformats&lt;/a&gt;, an
interesting little technology that allows you to add a bit more metadata to
existing markup, ostensibly to provide a better way to work with that data and
leverage it in unique ways. I learned about it at the Gilbane Conference a
couple weeks ago, and I wanted to do some checking to make sure you could
leverage them on your MOSS site if you wanted. Seems like you can, as this
post suggests.&lt;/p&gt;
&lt;p&gt;If you view this post in Firefox you’ll see a little icon next to Patrick’s
picture above. This is done using CSS, but you won’t see it in IE because &lt;a href=&quot;https://www.quirksmode.org/css/beforeafter.html&quot;&gt;IE
doesn’t support &lt;code&gt;:before&lt;/code&gt; and &lt;code&gt;:after&lt;/code&gt;&lt;/a&gt;. But anyway, this isn’t all that
interesting, because I could already do that using CSS. What _is _interesting,
however, is if you go to &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Finside.glnetworks.de%2F2006%2F06%2F05%2Fmicroformats-have-arrived-in-firefox-15-greasemonkey-06%2F&quot;&gt;http://inside.glnetworks.de/2006/06/05/microformats-
have-arrived-in-firefox-15-greasemonkey-06/&lt;/a&gt; and download the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fgreasemonkey.mozdev.org%2F&quot;&gt;Greasemonkey
&lt;/a&gt;script there. Then return to this page, and you’ll see that miraculously
the following menu has been added above Patrick’s name:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;This image has been lost to the sands of time&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44&quot; srcset=&quot;/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69d91efc8474b1000843df44 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69d91efc8474b1000843df44 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69d91efc8474b1000843df44 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69d91efc8474b1000843df44 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69d91efc8474b1000843df44 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44 1536w&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Nifty, huh? If you’re using that same Greasemonkey script you’ll also notice
that the text above about standing in line to get a Wii at Target is an event
that you can add to your calendar:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;This image has been lost to the sands of time&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44&quot; srcset=&quot;/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69d91efc8474b1000843df44 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69d91efc8474b1000843df44 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69d91efc8474b1000843df44 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69d91efc8474b1000843df44 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69d91efc8474b1000843df44 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44 1536w&quot; /&gt;&lt;/p&gt;
&lt;p&gt;All of the data in the sentence I wrote is wrapped in some appropriate tags
that a compatible client reader (Firefox + Greasemonkey script in this case)
can parse out and act on. Plus, because it’s well-known markup, there’s a nice
backwards compatibility story for downlevel clients. For example, looking at
this page in IE is pretty boring, but stuff lights up when you use Firefox and
the script.&lt;/p&gt;
&lt;p&gt;Anyway, this all goes to show that there is a lot of opportunity for
Microformats to take off if there’s better client support. Just consider RSS -
now browsers inherently know how to read some markup in the header of the page
and automatically detect RSS feeds on a page. It’s not hard to image a time
when Firefox will include the functionality currently offered through the
Greasemonkey script natively. Plus there’s some great tools already out there
for dealing with this type of data. Just check out this link to Technorati,
which will &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Ftechnorati.com%2Fcontacts%2Fhttp%3A%2F%2Fwww.tylerbutler.com%2Fgeekdom%2FPages%2FPatrickHasaWii%2Cor%2CExperimentingwithMicroformats.aspx&quot;&gt;automatically parse out the hCards on this page&lt;/a&gt; and let you
download them as vCards.&lt;/p&gt;
&lt;p&gt;I could also write some code that runs on the server and outputs special
JavaScript and CSS when Microformats are encountered. Then no client side
support would be necesarry. I’ll be looking into this in the next few weeks.
Anyway, I think there’s a lot of potential to include Microformats in more
places on my site, so keep your eyes peeled.&lt;/p&gt;</content:encoded></item><item><title>Problem Finders vs. Problem Solvers</title><link>https://tylerbutler.com/problem-finders-vs-problem-solvers/</link><guid isPermaLink="true">https://tylerbutler.com/problem-finders-vs-problem-solvers/</guid><description>Problem Finders vs. Problem Solvers</description><pubDate>Thu, 07 Dec 2006 14:35:00 GMT</pubDate><content:encoded>&lt;p&gt;Many comedians begin their routine by stating the obvious differences between
two groups of people. Perhaps it’s men and women, or white and black, or
whatever. We humans &lt;em&gt;love&lt;/em&gt; to categorize other people into groups. Pessimists
and optimists, liberals and conservatives, the list goes on and on. Well, I’m
not going to buck tradition that much; I am convinced that there are two basic
types of people as well: problem &lt;em&gt;solvers&lt;/em&gt; and problem &lt;em&gt;finders.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The definition for these two groups is fairly self-evident. A problem finder
is someone who excels at finding problems. That’s a pretty large scope, to be
sure. These are the types of people that are never satisfied. They find
something to complain about in every situation. When you ask how they’re
doing, they say things like, “Well, I could be better.” They are experts in
identifying the nearly-invisible cracks in the glass, the slight imbalance in
the supposedly symmetrical piece of machinery.&lt;/p&gt;
&lt;p&gt;You may be saying to yourself that this type of person is a pessimist, but I
maintain that an important distinction between a problem finder and a
pessimist is that a problem finder can be very specific about exactly &lt;em&gt;what&lt;/em&gt;
in a given situation or event is bad, while a pessimist is less able to do
this in general. A pessimist can tell you how bad he thinks it is, but getting
down to specifics is difficult because it’s not about specific issues or
problems he sees, it’s about the way he perceives his environment and the
events surrounding him. Hope that distinction makes sense.&lt;/p&gt;
&lt;p&gt;Obviously a problem solver is someone who solves problems. These aren’t
particularly complex definitions, are they? This is the type of person
that is constantly trying to save the world. You have a problem? They have a
solution! Well, they believe they do. There is nothing they can’t help you
with. If they’re self-aware enough to realize they &lt;em&gt;don’t&lt;/em&gt; know the answer,
then they’ll happily redirect you to someone who does. After all, they have a
pathological need to solve your problem, whether that’s what you want or not.
Sometimes, you just want someone to listen to your story about your horrible
experience or situation, and simply agree with you. “Yeah, that &lt;em&gt;does&lt;/em&gt; suck!”
“Yeah, that pisses me off too!” You’re looking for a friendly acknowledgement
of the suckiness of your situation, and it can be frustrating when a problem
solver patronizes you by offering what they think is a simple solution for
your problem. “What are you complaining about? Take action!” they say.&lt;/p&gt;
&lt;p&gt;I think it’s clear that everyone has a bit of both of these quirks in their
personalities. We all are proactive about solving problems on some occasions,
and sometimes we’re very good about finding the problems, the holes, the
cracks. However, since I am an engineer, and I work with engineers, I have
concluded that engineers are predominately problem solvers.&lt;/p&gt;
&lt;p&gt;This makes sense. What is engineering? At its core, it’s finding elegant
solutions to complex problems while maintaining an awareness of the needs and
constraints of the solution (such as cost). It’s problem solving, pure and
simple, so it is not unusual that good engineers are good problem solvers.
However, I maintain that problem finders are equally, if not more important
than problem solvers, if only because good ones are harder to find.&lt;/p&gt;
&lt;p&gt;I know plenty of engineers who can solve problems in fantastic, elegant ways,
but can’t easily identify the problems in their solutions, or even potential
problems outside of the original problem description that was given to them.
They need someone who can do that for them. The best teams at Microsoft in my
opinion have a cynic, a guy who takes everything and tears it apart. It’s
&lt;em&gt;never&lt;/em&gt; good enough. And the best problem solvers I know are able to take that
information and make a better solution.&lt;/p&gt;
&lt;p&gt;So I guess my conclusion is that it’s OK if you’re not the best problem solver
or problem finder. Just &lt;em&gt;know&lt;/em&gt; that you aren’t. Self-awareness is the key, you
know. In my own case, I have realized that I am a much better problem
finder. I’m a natural cynic, and a bit of a perfectionist. And hey, I’m OK
with that.&lt;/p&gt;</content:encoded></item><item><title>Building tylerbutler.com on MOSS</title><link>https://tylerbutler.com/building-tylerbutlercom-on-moss/</link><guid isPermaLink="true">https://tylerbutler.com/building-tylerbutlercom-on-moss/</guid><description>Building tylerbutler.com on MOSS</description><pubDate>Sat, 04 Nov 2006 10:15:00 GMT</pubDate><content:encoded>&lt;p&gt;It was a bit of a toss-up whether to categorize this post under Geekdom,
Daily Dose of Tyler, or Work, since this project certainly has a bit
of all three. However, since I haven’t gotten around to implementing arbitrary
tagging on my site, I can only pick one, so I went with work. Anyway, as you
can see from visiting this site, I am in the process of transitioning things
from my old &lt;a href=&quot;https://www.geeklog.net/&quot;&gt;GeekLog&lt;/a&gt;-based system to MOSS 2007. (A quick note on GeekLog -
I love it. It’s been great for me, it has a lot of great features, it’s
customizable, highly recommended! The only reason I’m moving is because I
helped build MOSS, and I like it a lot.)&lt;/p&gt;
&lt;p&gt;Anyway, you can follow my progress by checking out &lt;a href=&quot;https://learn.microsoft.com/en-us/archive/blogs/ecm/building-tylerbutler-com-part-1-planning-and-basic-branding&quot;&gt;my first post&lt;/a&gt; on this
process at the &lt;a href=&quot;https://blogs.msdn.com/ecm&quot;&gt;Enterprise Content Management blog&lt;/a&gt;. There will be several
more posts over there, and I am working on an in-depth piece-by-piece feature
breakdown for the site that I’ll put up here at some point. Gotta get the site
finished first, though.&lt;/p&gt;
&lt;p&gt;This is a bit of a sandbox right now, as I am still actively working on the
implementation of the site. It might go up and down, and things will probably
look wrong. Feel free to send me bug reports if you find something that
looks wrong.&lt;/p&gt;</content:encoded></item><item><title>Content Deployment</title><link>https://tylerbutler.com/content-deployment/</link><guid isPermaLink="true">https://tylerbutler.com/content-deployment/</guid><description>Content Deployment</description><pubDate>Wed, 03 May 2006 08:38:00 GMT</pubDate><content:encoded>&lt;p&gt;Yesterday I posted an &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fsharepoint%2Farchive%2F2006%2F05%2F02%2F588140.aspx&quot;&gt;entry&lt;/a&gt;
on 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…&lt;/p&gt;</content:encoded></item><item><title>XBox 360 R0x0rs</title><link>https://tylerbutler.com/xbox-360-r0x0rs/</link><guid isPermaLink="true">https://tylerbutler.com/xbox-360-r0x0rs/</guid><description>XBox 360 R0x0rs</description><pubDate>Tue, 07 Feb 2006 12:31:00 GMT</pubDate><content:encoded>&lt;p&gt;Yes, I have entered the ranks of the 1337 gamers. I finally gave into the urge
and paid $75 premium to get an XBox 360 off of eBay. Yeah, I could have waited
even longer, but frankly, I was sick of the constant monitoring of the
&lt;a href=&quot;http://untitlednet.com/&quot;&gt;unt1tled XBox tracker&lt;/a&gt;, the random phone calls to friends to see if they
could pick me up one in their area, etc. Anyway, the unit arrived Saturday
morning, so I immediately plugged it in and wasted an entire day playing with
it.&lt;/p&gt;
&lt;p&gt;So what do I think of it? Well, in a word, it is &lt;strong&gt;awesome&lt;/strong&gt;. It outputs
beautifully on my 480p HDTV (alas, I don’t think my TV supports 720p — time to
buy a 73”) in glorious widescreen deliciousness, and it was brain-dead easy to
get logged on to XBox Live. Once there, I downloaded a bunch of Arcade game
demos, including the utterly fantastic &lt;a href=&quot;http://www.xbox.com/en-US/games/g/geometrywarsevolvedlivearcadexbox360/default.htm&quot;&gt;Geometry Wars&lt;/a&gt;, which I bought for
400 Microsoft Points ($5) within 20 minutes of playing. There is so much
awesomeness in this sexy little machine that it is tough to write it all down.
But there are a couple of areas that really stand out, so I thought I’d write
a little about them.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#achievements&quot;&gt;Achievements&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The concept is so simple — set mini goals within games and award players
points when they achieve these goals. Then centralize everything on a website
so players can compare their results to all players globally, or just amongst
their friends. This is what the XBox team has done with Achievements. An
example of an achievement in Geometry Wars is the Pacifism Achievement, which
is awarded for playing the first 60 seconds of the game without shooting
(pretty tough when you first start out). Another is awarded when you earn
100,000 points, and still another when you make it all the way to 100,000
points without dying once. You get the idea. Because achievements are super-
public — you can go &lt;a href=&quot;http://live.xbox.com/en-US/profile/profile.aspx&quot;&gt;visit my profile&lt;/a&gt; on xbox.com and see all the
achievements I’ve attained for a certain game — it adds a huge competitive
edge to the games. For example, because I can compare my achievements with my
friends, I am more apt to keep playing so that I can keep my edge over other
players. It also adds extra incentive to purchase full versions of games,
since you can’t earn achievements in demos.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#demos&quot;&gt;Demos&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;And speaking of demos — the online nature of XBox Live allows publishers to
put up downloadable game demos in the XBox Live Marketplace. So if you have
the hard drive, you can download demos of games such as Condemned, Fight
Night, Full Auto, etc. before you buy them. It’s great — but unfortunately the
demos are very large (nearly 600 MB for the Condemned demo), and there is no
way to &lt;strong&gt;a)&lt;/strong&gt; queue up multiple downloads and &lt;strong&gt;b)&lt;/strong&gt; download in the
background. This actually really sucks — it means that while you’re
downloading a demo, or any other type of content, you can’t do anything else
on your 360. The only silver lining is that downloads are resumable, so if you
get bored downloading something and want to get in another round of Geometry
Wars, you can cancel it and resume it later. You’d think with 3 cores on the
CPU, they could spawn a background thread to handle downloads in the
background, but whatever. Its still freakin’ cool.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#media-center&quot;&gt;Media Center&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The original XBox had a Media Center extender that you could use with your
Media Center 2005 PC (I’m ignoring the hacks you could use to get XBMC or
Linux on there). Unfortunately, there were two core faults — it required a
disc to be inserted into the XBox, and it was pretty low quality because all
the graphic processing had to be done on the Media Center PC and then
transmitted through the network. Plus the XBox couldn’t be turned on and of
remotely (the 360 does this &lt;strong&gt;beautifully&lt;/strong&gt;). In short, I bought it and did
not like it &lt;strong&gt;at all&lt;/strong&gt;. The 360 changes that. It runs the media center app
natively, and connects up to your Media Center just to start streaming the
video/music/pictures. I think all the graphics processing is done on the 360
itself, so it just looks better and is more responsive. Plus, it uses the same
remote as a typical media center remote, so you can move your large, loud
Media Center PC (which is what you wind up with when you build your own on a
budget as I did) into some dark corner of your apartment and use the 360 as
your sole media center. &lt;strong&gt;Trust me — words cannot describe how freakin’
awesome this is.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, there’s a ton more to say about this stunning piece of hardware/software
engineering, but I am already suffering Geometry Wars withdrawal, so I’d
better get back to it. I have achievements to earn, after all. Look me up
if you’re on XBox Live — my Gamertag is &lt;a href=&quot;http://live.xbox.com/en-US/profile/profile.aspx?pp=0&amp;amp;GamerTag=Diametrix&quot;&gt;Diametrix&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Giving Thanks</title><link>https://tylerbutler.com/giving-thanks/</link><guid isPermaLink="true">https://tylerbutler.com/giving-thanks/</guid><description>Giving Thanks</description><pubDate>Sun, 27 Nov 2005 07:27:00 GMT</pubDate><content:encoded>&lt;p&gt;Thanksgiving is a bit of a non-holiday to me. The problem is that it comes to
close to Christmas. Heck, I started hearing Christmas music in the grocery
store the week before Thanksgiving. What’s up with that? Anyway, this makes
the third year that I haven’t done anything for the holiday. I got invited a
few places this year, but frankly, I wasn’t in the mood. I felt like I needed
some serious alone time (which is weird, because I am alone most of the time
anyway), and I have definitely gotten it this weekend. But I realized that a
lot of the posts — heck, all of the posts — I’ve made today have been pretty
negative, so I guess it’s time to be positive and post some of the things I am
thankful for. This is a Thanksgiving tradition, I guess, but I was reminded to
do it after I read &lt;a href=&quot;https://marcoandkristin.blogspot.com/2005/11/my-favourite-things.html&quot;&gt;Kristin’s post about it&lt;/a&gt; on &lt;a href=&quot;https://marcoandkristin.blogspot.com/&quot;&gt;her and her husband’s
blog&lt;/a&gt;. Thanks for the reminder Kristin. (I also read about her &lt;a href=&quot;https://marcoandkristin.blogspot.com/2005/11/well-it-is-sunday-night-and-i-felt.html&quot;&gt;baking
peanut butter cookies&lt;/a&gt; for Marco. Lucky guy, that Marco.) Anyway, here
goes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Friends&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A good job&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My desire to continue learning and improving myself&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Music&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I guess it’s kind of short, but it’s my list.&lt;/p&gt;</content:encoded></item><item><title>Being Sick Sucks</title><link>https://tylerbutler.com/being-sick-sucks/</link><guid isPermaLink="true">https://tylerbutler.com/being-sick-sucks/</guid><description>Being Sick Sucks</description><pubDate>Sun, 27 Nov 2005 07:14:00 GMT</pubDate><content:encoded>&lt;p&gt;Guh. I hate being sick. And of course it has to hit me during my four-day
Thanksgiving weekend. To make matters worse, today is the &lt;strong&gt;only&lt;/strong&gt; day this
entire weekend that has been sunny. I’ll probably force myself to hobble
outside at some point to get some vitamin E, though. You can’t waste a day
like this, considering what the weather’s been like out here lately.&lt;/p&gt;
&lt;p&gt;Anyway, I feel like I’ve got malaria. I know it isn’t (if it was, I’d still be
in bed), but the nausea and fever/chills reminds me too much of it. Oh well,
even if it is, I’ve survived it before, so I can do it again. The only
thing that would make this suck less is if my mom was here. She would serve me
soup and Sprite until I felt better. Mmmm… Luckily mom and dad’ll be
back in the US this Christmas, so maybe I can get sick again while they’re
here. Gotta live it up while you can.&lt;/p&gt;</content:encoded></item><item><title>New Music</title><link>https://tylerbutler.com/new-music/</link><guid isPermaLink="true">https://tylerbutler.com/new-music/</guid><description>New Music</description><pubDate>Tue, 08 Nov 2005 14:12:00 GMT</pubDate><content:encoded>&lt;p&gt;Since I’ve moved out here to Seattle, I have discovered a ton of awesome new
music. There are a ton of good local bands (Modest Mouse, Death Cab for Cutie,
Presidents of the USA, and of course Pearl Jam…), and several more great
ones from Portland (The Decemberists, for example). Plus thre is a great
support for local bands and good music in general from the radio stations out
here, especially 107.7 The End. For all the complaining I do about Seattle,
the music scene is pretty good, and much more accessible than Chicago’s (I do
still terribly miss 97.1 The Drive, though. Thank God for internet radio
broadcasting!)&lt;/p&gt;
&lt;p&gt;Anyway, it would take me forever to write individual reviews about all the
great music I’ve found, so I’m just going to give brief synopsis of some of
the best new stuff I’ve been listening to.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#morningwood&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.MorningwoodRocks.com&quot;&gt;Morningwood&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The End has a new music show every weeknight, and I have heard some fantasic
stuff on it, including this band. You can stream a couple of their songs
online from their website, &lt;a href=&quot;https://www.morningwoodrocks.com/&quot;&gt;MorningwoodRocks.com&lt;/a&gt; (&lt;a href=&quot;https://www.morningwoodrocks.com/music.asp&quot;&gt;direct link to the
music page here&lt;/a&gt;). You have to listen to The Nth Degree - it’s so awesome.
Reminds me a bit of The New Pornographers for some reason. It’s very poppy,
but it works somehow without sounding too bubblegum. I was &lt;strong&gt;psyched&lt;/strong&gt; when I
found out you can buy some of their stuff in the iTunes Music Store! When I
played it for my friend Dan, he said, “I want more Morningwood!” I heartily
concur.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-books&quot;&gt;&lt;/a&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.rollingstone.com%2Fartist%2F_%2Fid%2F7292717&quot;&gt;The Books&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This summer at Microsoft, while our intern population was quite high, I
started a music-listening thing. We’d get together in a conference room and
everyone would play a song they thought no one else had heard. We only met a
few times, but I am definitely doing it again next year. This band was one
that a guy named Gilbert Bernstein brought in. Fantastic stuff. He played the
song “Tokyo” for us, and it remains my favorite. Unfortunately, I can’t find
any of their stuff on iTunes, but Rolling Stone has some more info on them,
and you can buy the discs from Amazon if you can’t find it anywhere else. If
you want to have a listen beforehand, try Tokyo for starters. Stylistically
it’s pretty indicative of what you can expect from them. Good stuff.&lt;/p&gt;</content:encoded></item><item><title>Harsh Reality</title><link>https://tylerbutler.com/harsh-reality/</link><guid isPermaLink="true">https://tylerbutler.com/harsh-reality/</guid><description>Harsh Reality</description><pubDate>Wed, 02 Nov 2005 15:34:00 GMT</pubDate><content:encoded>&lt;p&gt;When I told people I was moving out to Puget Sound earlier this year, a common
reaction was, “I hope you like rain.” When I got here in late March, though,
the weather was beautiful, and it remained so until the last couple of weeks.
I knew it was too good to be true. To get an idea of what I’ll be dealing with
for the rest of the winter, look at what my &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.konfabulator.com%2F&quot;&gt;Konfabulator&lt;/a&gt; weather widget
tells me…&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;This image has been lost to the sands of time&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44&quot; srcset=&quot;/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69d91efc8474b1000843df44 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69d91efc8474b1000843df44 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69d91efc8474b1000843df44 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69d91efc8474b1000843df44 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69d91efc8474b1000843df44 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44 1536w&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Depressing…&lt;/p&gt;</content:encoded></item><item><title>NaNoWriMo 2005?</title><link>https://tylerbutler.com/nanowrimo-2005/</link><guid isPermaLink="true">https://tylerbutler.com/nanowrimo-2005/</guid><description>NaNoWriMo 2005?</description><pubDate>Mon, 17 Oct 2005 10:39:00 GMT</pubDate><content:encoded>&lt;p&gt;November is nigh upon me, but I don’t think I’ll be able to fully participate
in &lt;a href=&quot;https://www.nanowrimo.org/&quot;&gt;NaNoWriMo&lt;/a&gt; this year like &lt;a href=&quot;/2004/11/tyler-a-novelist/&quot;&gt;I did last year&lt;/a&gt;. Between the job
and the working out, I’m simply not going to have the time for a 50,000
word novel this year. It really is a shame, since I had a couple of good
ideas. Oh well, store them up for the future.&lt;/p&gt;
&lt;p&gt;I am, however, considering trying to complete a short story during the month.
I have a few ideas… They’re listed below, along with some possible quotes
from the story and some pros and cons about doing one. After you’ve read the
descriptions, vote for your favorite on the left of the site…&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#sex-drugs-and-polka&quot;&gt;Sex, Drugs, and Polka&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; A semi-autobiographical story about a guy who goes to
college and deals with the overall college experience. He figures most of it
out, but the fairer sex leaves him utterly confused — that is, until he meets
&lt;em&gt;her&lt;/em&gt;. (This makes it sound really cheesy — I don’t think it will be once I
get it written.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible excerpts:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“Years later he would think back in awe of the
squander in which he now lived — but at this very moment, it was home, and a
good one at that.”&lt;/p&gt;
&lt;p&gt;“He had the fleeting thought that all men of his generation had. ‘Am I gay?’”&lt;/p&gt;
&lt;p&gt;“In his heart he knew that what he really wanted was a meaningful relationship
filled with trust, sacrifice, and love, culminating in marriage and a slow
ride into the proverbial sunset of his later years with his beautiful bride;
for now, though, he’d settle for a passionate make-out session in the corner
with some girl whose name he wouldn’t remember tomorrow.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Will give me a chance to get some of my college experiences out on
paper (with some fictional embellishments, of course) before middle-age sets
in and I forget it all. Plus, would be a lot of fun for my friends to read
since they’ll probably make appearances.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Far too much for a short story — I doubt I’ll ever finish it once
I start, because there’s too much material to work with.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-hill&quot;&gt;The Hill&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Description:&lt;/strong&gt; A children’s story about friendship. A boy grows up with a
hill in his back yard, and when he grows older, a construction company buys
the property and threatens to flatten the hill, so the boy has to find a way
to save it — or say goodbye.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible excerpts:&lt;/strong&gt; Hmmm, I can’t find them right now… I know they’re
somewhere…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; I like to experiment with different styles (Mike’s character in
&lt;a href=&quot;/tags/novel/&quot;&gt;Knot&lt;/a&gt; was an experiment with anger and rage), so it would be interesting
to try my hand at a children’s story, with some simpler language and richer
descriptions. The presence of a non-talking character (the Hill) would allow
me to forgo dialog and focus more on description (one of my weaker points, I
think).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Might be kind of boring, and difficult to prevent sounding cheesy
or overly didactic. The core concept isn’t very original either.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-childrens-democracy&quot;&gt;The Children’s Democracy&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;**Description: **A lonely suburban writer suffers writer’s block until he
starts to observe a group of kids around his housing complex. He writes about
his observations about the way the children deal with each other socially and
politically.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Possible excerpts:&lt;/strong&gt; Probably the same place &lt;strong&gt;The Hill&lt;/strong&gt; excerpts are…
I’ll put them in here when I locate them…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Interesting concept to me, and I’d get to alternate between
analytical essay-style writing, description, and dialog pretty easily with the
characters.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Very little subject matter to use, since I don’t have too much
interaction with kids. The idea is based on some run-ins I’ve had with some of
the kids around my apartment complex, but I don’t think I have nearly enough
material to keep this interesting.&lt;/p&gt;
&lt;p&gt;Have another plot idea you think I should write about? Let me know…&lt;/p&gt;</content:encoded></item><item><title>Java Memory Allocation</title><link>https://tylerbutler.com/java-memory-allocation/</link><guid isPermaLink="true">https://tylerbutler.com/java-memory-allocation/</guid><description>Java Memory Allocation</description><pubDate>Mon, 10 Oct 2005 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I saw this article linked over at Slashdot today and found it to be a very
interesting read. I’ve had many debates with people that think that byte-
compiled languages like Java and C# just have inherent performance problems.
Often they’ll spout off some nonsense about how garbage collection is
inefficient or something. Sure, &lt;em&gt;sometimes&lt;/em&gt; it’s better to have manual control
over your memory allocation/deallocation, but this article makes a
surprisingly good case for why the perceived performance hits in dynamic
management don’t even exist. A great read, especially if you don’t know much
about how memory management works in the first place.&lt;/p&gt;</content:encoded></item><item><title>Operation: Look Good, Feel Good</title><link>https://tylerbutler.com/operation-look-good-feel-good/</link><guid isPermaLink="true">https://tylerbutler.com/operation-look-good-feel-good/</guid><description>Operation: Look Good, Feel Good</description><pubDate>Thu, 06 Oct 2005 00:35:00 GMT</pubDate><content:encoded>&lt;p&gt;One of the many benefits of working at &lt;a href=&quot;http://www.microsoft.com&quot;&gt;Microsoft&lt;/a&gt; is the relatively
little-known weight management benefit. Essentially, the benefit pays for a
large majority of a diet/weight loss/exercise program administered by the &lt;a href=&quot;http://www.proclub.com/&quot;&gt;Pro
Club&lt;/a&gt;, the semi-official Microsoft sports club. I found out about it fairly
soon after I started, and I knew I wanted to get involved, but I didn’t have
the time. Finally, about a month ago, I took the plunge and got things going.&lt;/p&gt;
&lt;p&gt;I’ve been overweight for as long as I can remember, and though I’ve been
relatively static the past few years in terms of weight gain, I’ve known for
awhile that I need to do something about it. Since I’m making use of all the
other Microsoft benefits (getting my teeth fixed, medical check-ups, etc) I
figured I might as well do everything.&lt;/p&gt;
&lt;p&gt;Anyway, I officially started on the diet last Thursday and the exercise the
previous day. This week I’ve lost &lt;strong&gt;13.6 pounds.&lt;/strong&gt; That’s a lot, I know, but I
should put this in perspective. I work out 90 minutes 3 days a week with a
personal trainer, and 60 minutes 3 more days a week by myself. I bought a
heart rate monitor and with the help of Jeremiah, my trainer, am learning how
to do heart-rate-focused work-outs. But the big thing last week was the diet…&lt;/p&gt;
&lt;p&gt;Basically I ate nothing but chicken, protein shakes, and a little peanut
butter. The dietitian called it ‘detox’ and she was right. I had withdrawal
symptoms including severe headaches and numbness in my hands and feet for the
first 4-5 days. It seems like most of it has passed though, and fortunately
this week I get to add veggies back into my diet. I went out for a salad at
lunch and it was quite possibly the best thing I’ve ever had in my entire life
after 7 days of chicken and protein shakes. I also talked about my aversion to
the protein shakes (I had to drink 5 per day, so I was getting pretty sick of
them) with the dietician and she moved me to another diet without the shakes.&lt;/p&gt;
&lt;p&gt;I was having a lot of trouble keeping my calories up. I’m supposed to eat
between 1500 and 1600 a day, but last week I averaged ~1300. I was sluggish
and mentally challenged the whole week, so I am eager to get my count back up
so I can feel better while still losing the weight and eating better. I think
I’ll be a little happier now with the variety. Plus, with the veggies back and
yogurt coming back next week, I should be good to go.&lt;/p&gt;
&lt;p&gt;I am pleased with the progress so far, but I do miss the freedom I exercised
previously when it came to food. As things go on, I’ll be adding more food
groups back in, so I should be OK. The weirdest thing about the whole program
is the counseling stuff. The counselor is awesome, and I only meet with here
once a month or so, but she gave me a business card that just said Sara
S-----, Psychotherapy. That word just seems scary to me, especially since I
don’t consider myself psychotic or even ‘troubled’ but whatever.&lt;/p&gt;
&lt;p&gt;Anyway, 1 week down, 19 left to go.&lt;/p&gt;</content:encoded></item><item><title>Celebrating 30 Years of Papua New Guinean Independence</title><link>https://tylerbutler.com/celebrating-30-years-of-papua-new-guinean-independence/</link><guid isPermaLink="true">https://tylerbutler.com/celebrating-30-years-of-papua-new-guinean-independence/</guid><description>Celebrating 30 Years of Papua New Guinean Independence</description><pubDate>Mon, 19 Sep 2005 03:52:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Papua_New_Guinea&quot;&gt;PNG&lt;/a&gt; celebrated 30 years of independence on September 16, 2005. To
celebrate, I decorated my office at work, blew up some balloons, and served
&lt;a href=&quot;http://en.wikipedia.org/wiki/Timtam&quot;&gt;Tim Tams&lt;/a&gt;. Pictures are in the PNG Independence 2005 Gallery. A few
of my co-workers joined in the celebration by putting up balloons and
listening to PNG music in my office. Not a bad way to waste time on a slow
Friday afternoon.&lt;/p&gt;</content:encoded></item><item><title>Thunder, Thunder, Thunder, Thundercats - HO!!!</title><link>https://tylerbutler.com/thunder-thunder-thunder-thundercats-ho/</link><guid isPermaLink="true">https://tylerbutler.com/thunder-thunder-thunder-thundercats-ho/</guid><description>Thunder, Thunder, Thunder, Thundercats - HO!!!</description><pubDate>Mon, 22 Aug 2005 13:26:00 GMT</pubDate><content:encoded>&lt;p&gt;I have gotten into a pretty nostalgic mood the last few years. I’ve started
re-watching a lot of the old cartoons I used to watch on static-ridden PAL
tapes when I was a kid. One of my all-time favorite shows was Thundercats, and
it seems that you can &lt;strong&gt;finally&lt;/strong&gt; get &lt;a href=&quot;/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&quot;&gt;the first season on DVD&lt;/a&gt;. All I can
say is, “It’s about time!” And with my new job, I might even be able to afford
them!&lt;/p&gt;</content:encoded></item><item><title>Most Recent Songs in iTunes</title><link>https://tylerbutler.com/most-recent-songs-in-itunes/</link><guid isPermaLink="true">https://tylerbutler.com/most-recent-songs-in-itunes/</guid><description>Most Recent Songs in iTunes</description><pubDate>Mon, 22 Aug 2005 06:19:00 GMT</pubDate><content:encoded>&lt;p&gt;I decided this morning that I was going to try and learn XSLT today. I think I
succeeded somewhat. I decided that my tutorial application would be an iTunes
XML feed transformed into a page on my site with the most recent songs I’ve
listened to in iTunes. I created my own iTunes XML schema (a really really
simple one), though in retropect, I probably should have just tried to use the
built-in iTunes XML stuff (though I don’t know if this capability is exposed
in the SDK). Anyway, once I had the XML (created by my program in C# and the
iTunes COM SDK), I started fooling with the XSLT. It still needs a lot of
style work, but I managed to get it formatting the data the right way and
everything.&lt;/p&gt;
&lt;p&gt;The album art is actually taken directly from the metadata on the audio files
in my collection, not from another source like Amazon. I think this is a
better solution because I have some crazy stuff that Amazon simply doesn’t
know about. Besides, I spent a long time trying to clean up the album art in
my music collection, and though there are still a lot of gaps, I might as well
get some reward for all my hard work.&lt;/p&gt;
&lt;p&gt;As far as the XSLT is concerned, it’s pretty easy stuff, I guess, but there
are a lot of “gotchas.” For example, I couldn’t get things to render in
Firefox until I added the &quot;&quot; line. It was working fine in IE and I couldn’t
figure out what the heck was wrong. Plus, if you’re not careful about dividing
your templates for different elements up properly, things come out pretty
wierd. Also, my Apache web server isn’t configured right, I guess, because it
messes up the MIME types on *.xslt files, so for awhile, Firefox complained it
couldn’t attach the stylesheet. Rather than fool with Apache, I just changed
the extension of the stylesheet. How’s that for lazy?&lt;/p&gt;
&lt;p&gt;Anyway, here’s the xml file with attached stylesheet: &lt;a href=&quot;/SiteCollectionDocuments/Post%20Content/nowplaying.xml&quot;&gt;nowplaying.xml&lt;/a&gt;.
Obviously, you’ll need at least IE 6.0 or Firefox (or another XSLT-ready
browser)to see it right. And here’s the &lt;a href=&quot;/SiteCollectionDocuments/Post%20Content/fullview.xsl&quot;&gt;XSLT itself&lt;/a&gt;. Like I said, I want
to do a lot more styling, but I have been doing this stuff all day, so I’m
calling it quits for now.&lt;/p&gt;</content:encoded></item><item><title>I Have No Friends</title><link>https://tylerbutler.com/i-have-no-friends/</link><guid isPermaLink="true">https://tylerbutler.com/i-have-no-friends/</guid><description>I Have No Friends</description><pubDate>Sun, 14 Aug 2005 05:10:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.netflix.com/&quot;&gt;Netflix &lt;/a&gt;has this (relatively) new Friends feature. When I went there the
other day, it kindly reminded me, with a happy-looking purple box that I have
no friends yet. Totally brightened my day. It would have been worse, but at
least there was a link there where I could get a friend if I needed one. Too
bad life’s not that easy. Anyway, add me to your friends’ list if you have
Netflix.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Lest some of you get the wrong idea… All of the above is mostly sarcastic.
I have lots of friends. I just thought the fact that Netflix would blatantly
say “No friends yet” on their website was funny.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>Wikipedia in Tok Pisin</title><link>https://tylerbutler.com/wikipedia-in-tok-pisin/</link><guid isPermaLink="true">https://tylerbutler.com/wikipedia-in-tok-pisin/</guid><description>Wikipedia in Tok Pisin</description><pubDate>Tue, 05 Jul 2005 00:09:00 GMT</pubDate><content:encoded>&lt;p&gt;While visiting Wikipedia this morning, I saw a link to the &lt;a href=&quot;https://tpi.wikipedia.org/wiki/Main_Page&quot;&gt;Tok Pisin
version.&lt;/a&gt; There doesn’t seems to be a whole lot there, and the spelling and
grammer strikes me as being quite bad, but even so, I think it’s pretty cool.
I might need to start contributing some to keep my Pidgin skills up to par.
Also of interest: the &lt;a href=&quot;http://en.wikipedia.org/wiki/Tok_Pisin&quot;&gt;main Wikipedia article on Tok Pisin&lt;/a&gt; and &lt;a href=&quot;https://en.wikibooks.org/wiki/Tok_Pisin&quot;&gt;an entry
on Wikibooks&lt;/a&gt; with more about the grammatical structure. Of course, nothing
beats hearing it spoken for real, so give me a call and listen to the real
deal!&lt;/p&gt;</content:encoded></item><item><title>Bad Product Designs</title><link>https://tylerbutler.com/bad-product-designs/</link><guid isPermaLink="true">https://tylerbutler.com/bad-product-designs/</guid><description>Bad Product Designs</description><pubDate>Wed, 29 Jun 2005 01:21:00 GMT</pubDate><content:encoded>&lt;p&gt;As a software designer, I ask myself these questions everyday: “Will a user be
able to figure this out? Is this intuitive?” Someone at Microsoft shared this
link with me. It’s about bad designs of physical things, but the principles can be applied
to other design work. I don’t agree with everything there, but it’s a good
read nonetheless.&lt;/p&gt;</content:encoded></item><item><title>Irony of Ironies</title><link>https://tylerbutler.com/irony-of-ironies/</link><guid isPermaLink="true">https://tylerbutler.com/irony-of-ironies/</guid><description>Irony of Ironies</description><pubDate>Sat, 18 Jun 2005 02:24:00 GMT</pubDate><content:encoded>&lt;p&gt;One of my peeves is having to register for websites just to &lt;em&gt;view&lt;/em&gt; their
content. You’ll notice that while you do have to sign up for my site to post
comments (the reasoning is in &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.nytimes.com%2F2005%2F03%2F15%2Fnyregion%2F15annoyances.html&quot;&gt;this post&lt;/a&gt;), my content is always visible to
everyone.&lt;/p&gt;
&lt;p&gt;That’s one reason I love &lt;a href=&quot;http://www.bugmenot.com&quot;&gt;BugMeNot.com&lt;/a&gt;, a website that stores usernames
and passwords that can be used to access these types of sites without
registering yourself. There’s even a &lt;a href=&quot;https://roachfiend.com/archives/2005/02/07/bugmenot/&quot;&gt;nifty Firefox extension&lt;/a&gt; that will
automatically fill in forms with BugMeNot data for you. Do you need any more
reason to get Firefox?&lt;/p&gt;
&lt;p&gt;Anyway, there’s &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.nytimes.com%2F2005%2F03%2F15%2Fnyregion%2F15annoyances.html&quot;&gt;a story at the NYTimes site&lt;/a&gt; about “life’s little
annoyances,” and it mentions having to register for websites. But guess what,
in order to read New York Times articles online, you have to register. Gosh,
that’s dumb. Perfect time to try out BugMeNot.com! The article itself is
interesting, though, and has some good ideas about how to stick it to the junk
mail advertisers. I think I’m going to start doing some of the stuff in there,
like stuffing Business reply envelopes with heavy paper and sending it back
just to make the company pay for the postage. Take &lt;strong&gt;that&lt;/strong&gt; suckers!&lt;/p&gt;</content:encoded></item><item><title>Interview with a Search Engine</title><link>https://tylerbutler.com/interview-with-a-search-engine/</link><guid isPermaLink="true">https://tylerbutler.com/interview-with-a-search-engine/</guid><description>Interview with a Search Engine</description><pubDate>Thu, 16 Jun 2005 06:41:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.the-underdogs.org/game.php?id=330&quot;&gt;Dr. Sbaitso&lt;/a&gt; was a psychiatrist program that I first played with as part
of my Sound Blaster 16 (my first sound card!) Friends and I actually made some
prank phone calls using it. Hysterical! Anyway, here is a funny article
outlining a “conversation” with the Jeeves search engine of Ask.com. Prepare
to laugh.&lt;/p&gt;</content:encoded></item><item><title>What Have You Done for Your Country Lately?</title><link>https://tylerbutler.com/what-have-you-done-for-your-country-lately/</link><guid isPermaLink="true">https://tylerbutler.com/what-have-you-done-for-your-country-lately/</guid><description>What Have You Done for Your Country Lately?</description><pubDate>Tue, 10 May 2005 00:44:00 GMT</pubDate><content:encoded>&lt;p&gt;I hate a lot of things. There’s a lot of things that really bug me; that
really get under my skin. But the one thing I am absolutely &lt;strong&gt;&lt;em&gt;sick and
tired&lt;/em&gt;&lt;/strong&gt; of hearing about is Senators and Congressman tacking little
provisions onto other relatively benign bills in order to get them passed.
This &lt;strong&gt;&lt;em&gt;really&lt;/em&gt;&lt;/strong&gt; pisses me off, because it’s blatently dishonest!&lt;/p&gt;
&lt;p&gt;The latest example of this is the Real ID Act, written by one Congressman &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.house.gov%2Fsensenbrenner%2Findex.htm&quot;&gt;F.
James Sensenbrenner, Jr. &lt;/a&gt;(R), of Wisconsin. This act would mandate
national ID cards for all citizens that are machine readable, with a lot of
personal information going into some big government controlled database. It’s
being tacked onto a bill giving our troops in Iraq further governmental
financial support. Now, what does a national ID card system have to do with
passing funding requests for our troops in Iraq? &lt;strong&gt;&lt;em&gt;Nothing!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is being voted on &lt;strong&gt;tomorrow&lt;/strong&gt;. Here’s an email from my good friend
Patrick Wagstrom with a little more information about it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hey,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;So as part of the “emergency” funding bill for the troops, Sen Stensenbrenner
of Wisconsin got the Real ID bill attached, and it passed the house. The
senate votes on it this Tuesday (TOMORROW), and Bush will certainly sign the
bill if nothing happens.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Here’s a brief overview of what’s going on:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Real ID basically mandates a national ID card. It requires that all state
drivers licenses have a uniform set of data, including biometric data and that
it be readable by a smart card and 2d barcode reader. In addition, this
information will be forwarded to a federal government database of individuals.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;What’s so bad about all this? After all, we don’t have any privacy left
anyway. Well, the issue is that your information in this centralized database
becomes a requisite for all sorts of things, bank accounts, plane tickets,
social security, etc. Furthermore, it’s a centralized clearing house for the
the government to spy/black list it’s citizens. This could very realistically
turn into a massive new form of the no-fly list where individuals will not
know why they’ve been flagged. We could have thousands of second class
citizens who have no hopes of a better life because they fit a profile. What’s
worse, it could happen to you (nothing like fear mongering to make a point).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The bill has lots of other nasty provisions that do things like take away
habeus corpus for non-citizens and SUSPECTED terrorists (technically leeching
someone’s wifi access is terrorism as it’s unauthorized computer access which
is classified as computer terrorism). The fact that this was attached to a
spending authorization for the troops is horrible and it &lt;em&gt;MUST&lt;/em&gt; be stopped.
Call your senators and let them know that you don’t support this sort of
piggybacking and that the government needs to allow open and public debate on
this issue. It’s too important to be piggybacked and rammed through in this
method.&lt;/p&gt;
&lt;p&gt;—Patrick&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I want to reiterate that this is being voted on tomorrow! This means that if
you want to speakup you need to do so now. There’s a website that you can use
to contact your seantor(s). &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.unrealid.com&quot;&gt;http://www.UnRealID.com&lt;/a&gt;. &lt;strong&gt;[Note: The site
seems to be having problems right now. I tried to submit my fax but I got an
error. If it doesn’t come back up, you might have to call your Senator.]&lt;/strong&gt;
Please take the time to speak up about this if you’re even half as irate as I
am. At the very least, even if you would support the Real ID Act, at least
tell your Senator(s) that they should &lt;strong&gt;read&lt;/strong&gt; a bill before passing it, just
to make sure shenanigans like this don’t happen.&lt;/p&gt;
&lt;p&gt;Oh, and if you’re interested, here’s what I wrote to the Washington State
Senators.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Good morning Senators Murray and Cantwell,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I am writing to voice my opposition of the Real ID Act, which is being voted
on by the Senate on Tuesday, May 10. First of all, I feel that this Act is the
first step leading to a national ID card system, not unlike that of Soviet
Russia, communist China, and Vietnam. Frankly, if I wanted to live in China, I
would move there. I would like to think that here in the US we support our
citizens’ right to privacy.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Second of all, because these cards would be the same throughout all 50 states,
and be machine readable, there is nothing preventing companies and individuals
from the private sector from reading the data on these cards and selling
citizens’ personal information to the highest bidder.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Thirdly, there is no proof that ID documents help prevent or deter terrorism.
An ID document says nothing about evil intent. Forcing our citizens to
document themselves is NOT a deterrant to terrorism; rather, it is a VICTORY
for terrorists!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Finally, and most importantly, this Act has been tacked on to another bill,
and has not been discussed or debated on the Senate floor. I believe that as
Senators, it is your responsibility to read and understand all bills before
you, and make an informed decision. The fact that the Real ID Act is
piggybacking on another bill seems to imply that the author did not feel it
could pass on its own merits. Please read and understand the Real ID Act in
its entirety, and consider the ramifications of passing this bill.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Sincerely,&lt;br /&gt;
Tyler W. Butler&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>The History of the GUI</title><link>https://tylerbutler.com/the-history-of-the-gui/</link><guid isPermaLink="true">https://tylerbutler.com/the-history-of-the-gui/</guid><description>The History of the GUI</description><pubDate>Sun, 08 May 2005 11:52:00 GMT</pubDate><content:encoded>&lt;p&gt;I really enjoyed &lt;a href=&quot;https://arstechnica.com/articles/paedia/gui.ars&quot;&gt;this article&lt;/a&gt;, though it could have gone further in depth
about some of the advances made in the 90’s. The 80’s coverage was pretty
good, and the history of PARC and even before was excellent, but it abruptly
ended with Windows 95 and OSX, and left out a lot of the *nix GUI
“experiments” from the mid-90’s. It really made me want to learn more,
especially about NeXT and BeOS (which I have actually used, believe it or
not!) and their history. Thank God for &lt;a href=&quot;https://www.wikipedia.org&quot;&gt;Wikipedia&lt;/a&gt;! Oh, and there’s also a
decent screenshot archive at
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.aci.com.pl%2Fmwichary%2Fguidebook%2Finterfaces&quot;&gt;http://www.aci.com.pl/mwichary/guidebook/interfaces&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>How Lightsabers Work</title><link>https://tylerbutler.com/how-lightsabers-work/</link><guid isPermaLink="true">https://tylerbutler.com/how-lightsabers-work/</guid><description>How Lightsabers Work</description><pubDate>Fri, 06 May 2005 06:59:00 GMT</pubDate><content:encoded>&lt;p&gt;As if we needed any more proof that lightsabers are cool, HowStuffWorks.com
has a story explaining &lt;a href=&quot;https://www.howstuffworks.com/lightsaber.htm&quot;&gt;how lightsabers work&lt;/a&gt;. It is &lt;strong&gt;hilarious&lt;/strong&gt;, and
frighteningly informative, and made my entire day at the office bearable. Here
are some choice quotes from the article:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;…be sure to handle any active lightsaber with extreme care until you are
completely familiar with its feel and handling.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;By using the Force, the wielder can anticipate the path of the blaster bolt
and align the blade with that path prior to the bolt’s arrival. Using normal
visual tracking to accomplish the same effect can be far more difficult.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The risk of personal injury is much higher with a double-bladed lightsaber,
and their practical applications around the home are limited. Therefore, it is
probably best to save your money and stick with the single-blade version.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Although a lightsaber is typically used as a defensive weapon by Jedi
knights, the availability of lightsabers on consumer sites such as eBay is
growing. It is a sad fact of life, but if a Jedi knight falls on hard times,
his lightsaber is one source of quick cash. He can always build another one.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;…many new owners are pleasantly surprised by the many domestic uses of a
lightsaber around the home or office.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There are also some excellent pictures with captions.&lt;/p&gt;</content:encoded></item><item><title>Congratulations Hawktour!</title><link>https://tylerbutler.com/congratulations-hawktour/</link><guid isPermaLink="true">https://tylerbutler.com/congratulations-hawktour/</guid><description>Congratulations Hawktour!</description><pubDate>Sat, 30 Apr 2005 23:18:00 GMT</pubDate><content:encoded>&lt;p&gt;I’m pleased to say that the Hawktour project came away from IPRO Day with the
website award, and picked up second place in their track. I am really proud of
the team and how they managed to come together even though I abandoned them
half way through this semester. Santhosh did a great job pulling everything
together. Even though we didn’t win our category, for three semesters we have
been a top-ranked team, and it’s a source of great personal pride to know that
I was instrumental in getting us there.&lt;/p&gt;
&lt;p&gt;But the real boon this semester was to finally beat out our arch-nemesis in
the website category, &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.iit.edu%2F~ipro329s05%2F&quot;&gt;IPRO 329&lt;/a&gt;. They have consistently beat us in the
website category for the past two semesters, even though we have consistently
improved our site and they have done very little, if anything at all, to
theirs. At the beginning of the semester, Satish (the designer of the website
that rocketed us to website stardom three semesters ago) said that it was his
goal to win that category this semester. I am glad he made it happen. Topping
them was an even bigger deal than winning our category. I feel that IPRO Day
is a bit of a sham anyway. Of course, we’ll take the awards if they want
to give them to us.&lt;/p&gt;
&lt;p&gt;Check out the &lt;strong&gt;award-winning&lt;/strong&gt; &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.hawktour.net%2F&quot;&gt;Hawktour website&lt;/a&gt;, and see why all IPROs
should strive to be as good as we are.&lt;/p&gt;</content:encoded></item><item><title>Del.icio.us RSS Feed</title><link>https://tylerbutler.com/delicious-rss-feed/</link><guid isPermaLink="true">https://tylerbutler.com/delicious-rss-feed/</guid><description>Del.icio.us RSS Feed</description><pubDate>Sun, 24 Apr 2005 13:14:00 GMT</pubDate><content:encoded>&lt;p&gt;I removed the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdel.icio.us%2F&quot;&gt;Del.icio.us&lt;/a&gt; RSS feed from the right side of the site
because it was getting too long. If I had &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdel.icio.us%2Fpridkett&quot;&gt;as many&lt;/a&gt; as &lt;a href=&quot;http://patrick.wagstrom.net/&quot;&gt;Patrick&lt;/a&gt;, the
front page would render about a mile long. So I’m looking for a way to limit
the number of entries in the feed to something more manageable, like 10. I
really only want to share the most recent entries through a feed anyway —
that’s what a feed is for! If I want to share &lt;em&gt;everything&lt;/em&gt; I’ll point people
to the site! So if anyone knows how to cut down the number of entries in the
feed, let me know.&lt;/p&gt;</content:encoded></item><item><title>I&apos;m Baaaaaack!</title><link>https://tylerbutler.com/im-baaaaaack/</link><guid isPermaLink="true">https://tylerbutler.com/im-baaaaaack/</guid><description>I&apos;m Baaaaaack!</description><pubDate>Fri, 22 Apr 2005 13:20:00 GMT</pubDate><content:encoded>&lt;p&gt;I finally managed to get things set up here in Redmond. Hopefully The DNS
changes I made will take effect soon, so my domain will be redirecting
properly. I have lots to post after such a long abscence. Stay tuned!&lt;/p&gt;</content:encoded></item><item><title>Code Line Counter</title><link>https://tylerbutler.com/code-line-counter/</link><guid isPermaLink="true">https://tylerbutler.com/code-line-counter/</guid><description>Code Line Counter</description><pubDate>Wed, 09 Mar 2005 05:14:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been working on HawkTour now for over two years, and I started
wondering today exactly how much code we’ve generated since we started. I
thought maybe &lt;a href=&quot;https://www.eclipse.org&quot;&gt;Eclipse&lt;/a&gt; had a project-wide line counter somewhere, but I
couldn’t find it, so I just wrote a simple &lt;a href=&quot;https://www.python.org&quot;&gt;Python&lt;/a&gt; script to do it. The
code is below.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;linecounter.py&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;# Tyler Butler, 03/08/2005&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;total &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;extensions &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;span&gt;&apos;java&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;cpp&apos;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&apos;h&apos;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; root&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dir&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; files &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;walk&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;.&apos;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;for&lt;/span&gt;&lt;span&gt; file &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; files&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(file)&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;split&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&apos;.&apos;&lt;/span&gt;&lt;span&gt;)[&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt;] &lt;/span&gt;&lt;span&gt;in&lt;/span&gt;&lt;span&gt; extensions&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;filename &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; os&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;path&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;join&lt;/span&gt;&lt;span&gt;(root&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; file)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;open&lt;/span&gt;&lt;span&gt;( filename )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;total &lt;/span&gt;&lt;span&gt;+=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;len&lt;/span&gt;&lt;span&gt;(f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;readlines&lt;/span&gt;&lt;span&gt;())&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;f&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;print&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;TOTAL LINES IN PROJECT: &quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;+&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;str&lt;/span&gt;&lt;span&gt;(total)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Pretty simple, isn’t it? It just works in the current directory, but you can
change that pretty easily. Also, if you want to add more extensions to count
then just add them to the extensions list.&lt;/p&gt;</content:encoded></item><item><title>Print Copy</title><link>https://tylerbutler.com/print-copy/</link><guid isPermaLink="true">https://tylerbutler.com/print-copy/</guid><description>Print Copy</description><pubDate>Sat, 19 Feb 2005 04:56:00 GMT</pubDate><content:encoded>&lt;p&gt;I posted a new PDF copy of my novel on the site that is formatted for
printing. You can also read it on the screen, of course, but I wanted to print
out couple of copies with nice typesetting to give to a couple of my
professors. Anyway, enjoy. Also, I added a disclaimer, since there’s some
objectionable material in there and I think it’s fair to notify the reader
beforehand. Finally, I am working on a write-up of the entire NaNoWriMo
experience and will post it as soon as I get a chance. Bottom line, though: I
recommend it.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Program Manager Interview: The Breakdown</title><link>https://tylerbutler.com/microsoft-program-manager-interview-the-breakdown/</link><guid isPermaLink="true">https://tylerbutler.com/microsoft-program-manager-interview-the-breakdown/</guid><description>Microsoft Program Manager Interview: The Breakdown</description><pubDate>Tue, 15 Feb 2005 07:44:00 GMT</pubDate><content:encoded>&lt;p&gt;Early last week I went through a &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Fcollege%2Fft_pm.mspx&quot;&gt;Program Manager&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;Before I go into more details about the actual interviews themselves, here’s a brief overview of the entire day:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total number of interviews: &lt;strong&gt;7 + debrief&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Total number of teams with which I interviewed: &lt;strong&gt;3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Length of day: &lt;strong&gt;8:30am --- 5:30pm&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a href=&quot;#interview-breakdown&quot;&gt;Interview Breakdown:&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;#hr&quot;&gt;Human Resources (Ron Honcoop)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#pub1&quot;&gt;Publisher Team (Jeff Bell)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#pub2&quot;&gt;Publisher Team (Tara Kraft)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cms1&quot;&gt;Content Management Server --- Lunch (Dave Quick)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cms2&quot;&gt;Content Management Server (Dan Kogan)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#cms3&quot;&gt;Content Management Server (Jim Masson)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#project&quot;&gt;Project (Dieter --- didn’t catch last name)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#debrief&quot;&gt;Debrief (Ron Honcoop) &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#pre-interview-preparation&quot;&gt;Pre-interview Preparation&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;#blog-reading&quot;&gt;Blog reading&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.sellsbrothers.com%2Ffun%2Fmsiview%2F&quot;&gt;http://www.sellsbrothers.com/fun/msiview/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblog.mattgoyer.com%2Fstories%2Fftjobintinseattle.html&quot;&gt;http://blog.mattgoyer.com/stories/ftjobintinseattle.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blogs.msdn.com/adamu/archive/2004/06/18/159130.aspx&quot;&gt;https://blogs.msdn.com/adamu/archive/2004/06/18/159130.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fblogs.msdn.com%2Fjobsblog&quot;&gt;http://blogs.msdn.com/jobsblog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a href=&quot;#brain-teasers&quot;&gt;Brain teasers&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fhalcyon.usc.edu%2F~kiran%2Fmsqs.html&quot;&gt;http://halcyon.usc.edu/~kiran/msqs.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.cut-the-knot.org/algebra.shtml&quot;&gt;https://www.cut-the-knot.org/algebra.shtml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It should be noted that these brain-teasers provided me &lt;strong&gt;absolutely no useful information for my interview!&lt;/strong&gt; 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.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#phone-conversation&quot;&gt;Phone conversation&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#important-points&quot;&gt;Important points&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;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 &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.hawktour.net&quot;&gt;HawkTour&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Oh, one other thing --- I got four basic flavors of questions during the day:&lt;/p&gt;
&lt;p&gt;Background
:    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.&lt;/p&gt;
&lt;p&gt;Greenlight/Ideas
:    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.&lt;/p&gt;
&lt;p&gt;Design
:    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.&lt;/p&gt;
&lt;p&gt;Technical
:    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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#human-resources-----rondell-honcoop-----845-am-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;hr&quot;&gt;&lt;/a&gt;Human Resources --- Rondell Honcoop --- 8:45 am PST&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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 &lt;strong&gt;everything&lt;/strong&gt; 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 &lt;strong&gt;that&lt;/strong&gt; well.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;I arrived at the next building and checked in with the receptionist. Jeff came to get me just before 10am.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#publisher-team-----jeff-bell-----1000am-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;pub1&quot;&gt;&lt;/a&gt;Publisher Team --- Jeff Bell --- 10:00am PST&lt;/h2&gt;
&lt;p&gt;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?”&lt;/p&gt;
&lt;p&gt;He then posed my first greenlight question. He briefly talked about &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Foffice%2Fonenote%2Fprodinfo%2Fdefault.mspx&quot;&gt;OneNote&lt;/a&gt; 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.&lt;/p&gt;
&lt;p&gt;We then switched gears and got into a design problem. He basically framed it like this (not direct quotes):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 &lt;strong&gt;all&lt;/strong&gt; 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.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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)?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#-publisher-team-----tara-kraft-----1100-am-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;pub2&quot;&gt; &lt;/a&gt;Publisher Team --- Tara Kraft --- 11:00 am PST&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#content-management-server-team-----dave-quick-----1230-pm-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;cms1&quot;&gt;&lt;/a&gt;Content Management Server Team --- Dave Quick --- 12:30 pm PST&lt;/h2&gt;
&lt;p&gt;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 &lt;a href=&quot;https://www.rpi.edu/&quot;&gt;RPI&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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 (&lt;code&gt;O(n^2)&lt;/code&gt;). 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 &lt;strong&gt;not&lt;/strong&gt; 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.&lt;/p&gt;
&lt;p&gt;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: &lt;em&gt;“What does the UI look like?”&lt;/em&gt; I discovered that the PM does a lot of interface designing, even though they may not have any design training or experience.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#content-management-server-team-----dan-kogan-----200-pm-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;cms2&quot;&gt;&lt;/a&gt;Content Management Server Team --- Dan Kogan --- 2:00 pm PST&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;Then he asked several localization questions. Things like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#content-management-server-team-----jim-masson-----315-pm-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;cms3&quot;&gt;&lt;/a&gt;Content Management Server Team --- Jim Masson --- 3:15 pm PST&lt;/h2&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#project-team-----dieter-----400-pm-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;project&quot;&gt;&lt;/a&gt;Project Team --- Dieter --- 4:00 pm PST&lt;/h2&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I want to integrate a PC into a refrigerator. Brainstorm possible uses and/or features.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#debrief-----rondell-honcoop-----545-pm-pst&quot;&gt;&lt;/a&gt;&lt;a name=&quot;debrief&quot;&gt;&lt;/a&gt;Debrief --- Rondell Honcoop --- 5:45 pm PST&lt;/h2&gt;
&lt;p&gt;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).&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</content:encoded></item><item><title>IIT Student Sued</title><link>https://tylerbutler.com/iit-student-sued/</link><guid isPermaLink="true">https://tylerbutler.com/iit-student-sued/</guid><description>IIT Student Sued</description><pubDate>Sat, 12 Feb 2005 06:00:00 GMT</pubDate><content:encoded>&lt;p&gt;According to &lt;a href=&quot;https://games.slashdot.org/games/05/02/10/0347222.shtml?tid=211&amp;amp;tid=123&quot;&gt;this story&lt;/a&gt; on &lt;a href=&quot;https://www.slashdot.org&quot;&gt;Slashdot&lt;/a&gt;, the maintainers of
ninjahacker.net are currently being sued by Tecmo under the DMCA. This is
pretty ridiculous, in my opinion, but I am anxious to hear how it turns out.
Game hacking has been an interesting (sub)culture, and has provided us with
awesome games, not the least of which is &lt;a href=&quot;https://www.counter-strike.net/&quot;&gt;Counter-Strike&lt;/a&gt;. Obviously, there
is probably more to the supposed DMCA “violations,” but I daresay it’s a
misuse of the law nonetheless. Maybe the &lt;a href=&quot;https://www.eff.org/&quot;&gt;EFF&lt;/a&gt; should take a look? Oh, and
by the way… the guy that runs (or ran, since it’s now offline) the site
lives in State Street Village and attends IIT. Cool!&lt;/p&gt;</content:encoded></item><item><title>Interview Update(s)</title><link>https://tylerbutler.com/interview-updates/</link><guid isPermaLink="true">https://tylerbutler.com/interview-updates/</guid><description>Interview Update(s)</description><pubDate>Tue, 08 Feb 2005 07:12:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;1:15 pm PST, Feb. 7, 2005&lt;/strong&gt;
I am writing this from the Marriott Courtyard hotel here in Bellevue, WA. It’s
probably the nicest hotel I’ve ever stayed in, and it has decent high-speed
internet service. I left my apartment in Chicago at 4:15 CST, and the flights
(I was routed through Denver on Frontier) went pretty well. I only had 30
minutes between flights in Denver so I was a little worried that I wouldn’t
make it, but I ended up having plenty of time.&lt;/p&gt;
&lt;p&gt;Picking up the rental car and checking into the hotel was a breeze. It was
nice to hear, “Well, Microsoft has taken care of everything already, Mr.
Butler. Enjoy your stay,” as they handed me the paperwork. I could get used to
this. :-)&lt;/p&gt;
&lt;p&gt;I went out and grabbed some lunch, and I plan on driving out to Building 19,
where my interview is, later on this afternoon. I am trying to figure out if
it’s worth trying to go downtown and do something, but I might just take a
nap. We’ll see. I also have to go over my interview notes again. Anyway, more
later.&lt;/p&gt;
&lt;p&gt;** 12:06 am CST, Feb. 11, 2005**
Well, I intended to write more, and I still do, but I have been getting quite
a few questions about my status, especially since I promised to put stuff
here, so here goes. I &lt;strong&gt;did&lt;/strong&gt; receive an offer from Microsoft, which I am
currently considering. More info will be coming, especially about the
interview itself and how it went/what I did, but for now: I do have an offer.
:-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3:43 pm CST, Feb. 14, 2005&lt;/strong&gt;
I have officially accepted Microsoft’s offer, and am aiming for a start date
of March 28th. I suppose it seems kind of fast, but there are benefits to
getting out there soon. Dr. Sun has accepted the news more gracefully than I
had anticipated, so things are looking up. I will be posting my overview of
the interview day itself in a few minutes.&lt;/p&gt;</content:encoded></item><item><title>Yiddish Curses</title><link>https://tylerbutler.com/yiddish-curses/</link><guid isPermaLink="true">https://tylerbutler.com/yiddish-curses/</guid><description>Yiddish Curses</description><pubDate>Wed, 02 Feb 2005 01:45:00 GMT</pubDate><content:encoded>&lt;p&gt;My friend Dan is Jewish, and he was telling me the other day about Yiddish
curses. 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
actual Yiddish here. If you actually want the Yiddish, go to the sites listed
at the bottom of the page. Anyway, here are a few of my favorites.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All problems I have in my heart, should go to his head.&lt;/li&gt;
&lt;li&gt;He should marry the daughter of the Angel of Death.&lt;/li&gt;
&lt;li&gt;God should visit upon him the best of the Ten Plagues.&lt;/li&gt;
&lt;li&gt;Venereal disease should consume his body.&lt;/li&gt;
&lt;li&gt;I should outlive him long enough to bury him.&lt;/li&gt;
&lt;li&gt;God should bless him with three people: one should grab him, the second should
stab him and the third should hide him.&lt;/li&gt;
&lt;li&gt;He should have a large store, and whatever people ask for he shouldn’t have,
and what he does have shouldn’t be requested.&lt;/li&gt;
&lt;li&gt;God should bestow him with everything his heart desires, but he should be a
quadriplegic and not be able to use his tongue.&lt;/li&gt;
&lt;li&gt;He should be transformed into a chandelier, to hang by day and to burn by
night.&lt;/li&gt;
&lt;li&gt;May your bones be broken as often as the Ten Commandments.&lt;/li&gt;
&lt;li&gt;May you every day eat chopped liver with onions, herring, chicken soup with
matzo balls, carp with horseradish, roast beef with tsimmes (a sweet side
dish), pancakes, and tea with lemon – and may you choke on every bite.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html%5D%5B1&quot;&gt;http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html][1&lt;/a&gt;]
[&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.yiddishradioproject.org%2Fexhibits%2Fstutchkoff%2Fcurses.php3%3Fpg%3D3%255D%255B2&quot;&gt;http://www.yiddishradioproject.org/exhibits/stutchkoff/curses.php3?pg=3][2&lt;/a&gt;]
[1]: &lt;a href=&quot;http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html&quot;&gt;http://www.signonsandiego.com/uniontrib/20040401/news_1c1yiddish.html&lt;/a&gt; (A news story about Yiddish curses.)
[2]: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.yiddishradioproject.org%2Fexhibits%2Fstutchkoff%2Fcurses.php3%3Fpg%3D3&quot;&gt;http://www.yiddishradioproject.org/exhibits/stutchkoff/curses.php3?pg=3&lt;/a&gt; (A short list of curses… in Yiddish of course!)&lt;/p&gt;</content:encoded></item><item><title>Title Droppers</title><link>https://tylerbutler.com/title-droppers/</link><guid isPermaLink="true">https://tylerbutler.com/title-droppers/</guid><description>Title Droppers</description><pubDate>Wed, 02 Feb 2005 01:11:00 GMT</pubDate><content:encoded>&lt;p&gt;In my line of work, I deal with uppity people every day. When you’re in the
position to serve people, you will no doubt encounter countless people who
think their problem is more important than everyone else’s. This is to be
expected. But what really gets me is when some fool appends their official job
title to the end of their email communications, or in a phone conversation,
for the sole purpose of getting better service because they’re “important.” If
anything, it makes me do the exact &lt;em&gt;opposite&lt;/em&gt;. If they think they’re that
important, then screw them. I do not care if you’re the executive vice consul
presidential aid’s assistant. You will wait, just like everyone else. Screw
you and your self-important ego. We’ll see how you talk to me when I’m a
millionaire at 25.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS.&lt;/strong&gt; Something else that bugs me is people that feel it necessary to include &lt;em&gt;all&lt;/em&gt; 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:&lt;/p&gt;
&lt;p&gt;Tyler Butler&lt;br /&gt;
President, Delta Tau Delta, Gamma Beta Chapter&lt;br /&gt;
President, Keygrips Films&lt;br /&gt;
Technical Manager, OTS Support Desk&lt;br /&gt;
Team Lead, IPRO 305, HawkTour Project&lt;/p&gt;
&lt;p&gt;Now really… for any given email, only &lt;strong&gt;one&lt;/strong&gt; title makes sense. I don’t
need to notify the world that I am involved in lots of different things. If I
write an email where a title the pertains to me is relevant, then I’ll include
it. Otherwise, I’ll let my actions, not my titles, speak for me.&lt;/p&gt;</content:encoded></item><item><title>Parsing XFDF in PHP</title><link>https://tylerbutler.com/parsing-xfdf-in-php/</link><guid isPermaLink="true">https://tylerbutler.com/parsing-xfdf-in-php/</guid><description>Parsing XFDF in PHP</description><pubDate>Tue, 25 Jan 2005 06:56:00 GMT</pubDate><content:encoded>&lt;p&gt;This past week at work I have been working on using Adobe Acrobat to submit
form data. The value of this is that the form data can be reimported into the
PDF form then printed all purty-lookin’. Anyway, Acrobat allows you to submit
your form data in several different formats. One, FDF, is usable in PHP
provided you load this module thingy. Unfortunately, the server I want to run
the PHP script on uses Irix and the module is unavailable for Irix. Poo.&lt;/p&gt;
&lt;p&gt;I then turned to XFDF, which is essentially FDF data all XML-ified. PHP has an
XML parser built in, so I don’t have to load any crazy modules to parse the
data. Unfortunately, PHP’s parser is SAX-based rather than DOM-based, so it
took me a rather long time to figure out how to get it working right. Anyway,
here’s the PHP code that essentially takes XFDF data (declare &lt;code&gt;$file&lt;/code&gt; as a
string pointing to the location of your XFDF file) and parses it into an
associative array (&lt;code&gt;$values&lt;/code&gt;). The array is indexed by the XFDF field names.
The code below is not entirely complete since I snipped it out of a larger
file, but if you look at it, I think you’ll get the idea. It’s pretty simple
once you figure out the way PHP does XML processing.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/* BEGIN VARIABLE DECLARATIONS */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;//global variables for XML parsing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$values = array();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$field = &quot;&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$curTag = &quot;&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/* BEGIN XML PROCESSING */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// XML Parser element start function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function startElement($parser, $name, $attrs)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;global $curTag, $field;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;//track the tag we&apos;re currently in&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$curTag .= &quot;^$name&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if( $curTag == &quot;^XFDF^FIELDS^FIELD&quot; )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;//save the name of the field in a global var&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$field = $attrs[&apos;NAME&apos;];&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// XML Parser element end function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function endElement($parser, $name)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;global $curTag;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// remove the tag we&apos;re ending from the &quot;tag tracker&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$caret_pos = [strrpos][1]($curTag,&apos;^&apos;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$curTag = [substr][2]($curTag, 0, $caret_pos);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// XML Parser characterData function&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;function characterData( $parser, $data )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;global $curTag, $values, $field;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$valueTag = &quot;^XFDF^FIELDS^FIELD^VALUE&quot;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if( $curTag == $valueTag )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;// we&apos;re in the value tag, so put the value in the array&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;$values[$field] = $data;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;// Create the parser and parse the file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;$xml_parser = xml_parser_create();&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;xml_set_element_handler($xml_parser, &quot;startElement&quot;, &quot;endElement&quot;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;xml_set_character_data_handler($xml_parser, &quot;characterData&quot;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if (!($fp = fopen($file,&quot;r&quot;)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;die (&quot;could not open XML for input&quot;);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;while ($data = fread($fp, 4096))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;if (!xml_parse($xml_parser, $data, feof($fp)))&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;die(sprintf(&quot;XML error: %s at line %d&quot;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;xml_error_string(xml_get_error_code($xml_parser)),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;xml_get_current_line_number($xml_parser)));&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;xml_parser_free($xml_parser);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;flclose($fp);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;/* END XML PROCESSING */&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;</content:encoded></item><item><title>C# MessageBox Strangeness</title><link>https://tylerbutler.com/c-messagebox-strangeness/</link><guid isPermaLink="true">https://tylerbutler.com/c-messagebox-strangeness/</guid><description>C# MessageBox Strangeness</description><pubDate>Sat, 22 Jan 2005 04:33:00 GMT</pubDate><content:encoded>&lt;p&gt;I am working on a C# program and I want to pop up a message box when certain
fields aren’t filled out properly in the GUI. .Net’s MessageBox class makes it
simple to do. However, when I ran my code, my message box looked like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;This image has been lost to the sands of time&quot; loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44&quot; srcset=&quot;/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69d91efc8474b1000843df44 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69d91efc8474b1000843df44 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69d91efc8474b1000843df44 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69d91efc8474b1000843df44 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69d91efc8474b1000843df44 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44 1536w&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I fooled around with it for awhile, trying different combinations of arguments
to the &lt;code&gt;Show()&lt;/code&gt; method, but I wasn’t able to figure it out. Thankfully, my
Google search turned up &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.xtremevbtalk.com%2Fshowthread.php%3Ft%3D191026&quot;&gt;this forum post&lt;/a&gt; pretty quickly. Apparently
disabling McAfee’s Buffer Overflow Protection solves the problem. But this
makes me wonder whose fault this is. Is it something in C#/.Net? Is it
Windows’ fault? Is McAfee just really dumb? Who knows… I’m too lazy to try
and figure it out right now.&lt;/p&gt;</content:encoded></item><item><title>Ubuntu + LVM</title><link>https://tylerbutler.com/ubuntu-lvm/</link><guid isPermaLink="true">https://tylerbutler.com/ubuntu-lvm/</guid><description>Ubuntu + LVM</description><pubDate>Thu, 20 Jan 2005 13:42:00 GMT</pubDate><content:encoded>&lt;p&gt;I spent this past weekend hacking away at my Media Box, which serves as my
personal free PVR. I wanted to get &lt;a href=&quot;http://www.ubuntu-linux.org&quot;&gt;Ubuntu&lt;/a&gt; on it with LVM so I could use
all four of my hard drives as one for &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fmythtv.org&quot;&gt;MythTV&lt;/a&gt;. I borrowed one of Vlad’s
Ubuntu CD’s (mine haven’t arrived yet and I couldn’t find the one I burnt) and
got the installer running. During the partitioning section of the install, I
set everything up for an LVM volume group and thought I had everything
working. Apparently I didn’t. Silly me for not having a clue how LVM works
(always read the directions, kids).&lt;/p&gt;
&lt;p&gt;Anyway, my installation was b0rked so I figured I’d just reboot and start from
scratch. No. My LVM data was still present every time I tried to install
Ubuntu. I would try to remove the volume groups and it would fail, reporting
the drives were still in use. I was getting manifest errors up the wazoo. So I
thought, ‘OK, I just need to wipe the drives with something else and I’ll be
fine.’ So I tried booting off an XP CD into rescue mode and formatting the
drives there. No dice. I downloaded a few CD-based disk formatting tools that
&lt;strong&gt;said&lt;/strong&gt; they cleared things out but apparently they didn’t. &lt;a href=&quot;https://www.google.com&quot;&gt;Google&lt;/a&gt;
searches were returning a whole bunch of information about how to remove
volume groups, but &lt;strong&gt;nothing&lt;/strong&gt; about how to forcefully wipe LVM volumes.
Funny… most people that use LVM and software RAID are concerned about
keeping their data safe. Whatever.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Finally&lt;/strong&gt;, I came across &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Flists.suse.com%2Farchive%2Fsuse-linux-e%2F2001-Nov%2F1413.html&quot;&gt;this forum post&lt;/a&gt;, 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:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;dd if=/dev/zero of=/dev/sda bs=1k count=10&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then of course, I had to figure out how the Ubuntu installer was mounting all
my drives… but that’s another story. And by the way… after all of this,
MythTV just wasn’t liking my remote, and I was suffering PVR withdrawal pretty
bad, so I’m back to MCE2005. Looks like I’ll have to keep fast-forwarding
through the commercials manually. Such is life.&lt;/p&gt;</content:encoded></item><item><title>Merry Christmas!</title><link>https://tylerbutler.com/merry-christmas/</link><guid isPermaLink="true">https://tylerbutler.com/merry-christmas/</guid><description>Merry Christmas!</description><pubDate>Tue, 28 Dec 2004 03:51:00 GMT</pubDate><content:encoded>&lt;p&gt;Ahhh, Christmas, a time for food, family, and of course, gifts. Some of my
friends this year, however, are giving me gifts that &lt;strong&gt;cost&lt;/strong&gt; me money. These
gifts come in the form of mobile phone text messages, which are not included
in my cell phone plan. T-Mobile charges me 50 cents a pop for every one sent
&lt;strong&gt;and&lt;/strong&gt; received. Many of my friends have sent me Christmas greetings the past
few days via text message, and I can just see the ogres at T-Mobile jumping
with glee as my bill skyrockets. Oh well. At least I have friends.&lt;/p&gt;</content:encoded></item><item><title>The Internet is Down!</title><link>https://tylerbutler.com/the-internet-is-down/</link><guid isPermaLink="true">https://tylerbutler.com/the-internet-is-down/</guid><description>The Internet is Down!</description><pubDate>Tue, 14 Dec 2004 06:30:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’ve been at &lt;a href=&quot;http://www.iit.edu&quot;&gt;Illinois Tech&lt;/a&gt; this week, you’ve had the absolutely
wonderful opportunity to see what carnage a Denial of Service attack against a
core DNS server can create. Now, I honestly don’t know much about network
infrastructure or the mechanics behind a Denial of Service attack; frankly, my
passion is software, not hardware, so I’ve never sought out the knowledge.
(Unfortunately, &lt;a href=&quot;https://www.howstuffworks.com&quot;&gt;HowStuffWorks.com&lt;/a&gt; doesn’t have anything specific on DoS.
They do, however, have articles on &lt;a href=&quot;http://computer.howstuffworks.com/router.htm&quot;&gt;routers&lt;/a&gt;, &lt;a href=&quot;https://computer.howstuffworks.com/firewall.htm&quot;&gt;firewalls&lt;/a&gt;, and
“&lt;a href=&quot;https://computer.howstuffworks.com/internet-infrastructure.htm&quot;&gt;Internet Infrastructure,&lt;/a&gt;” for those that want to learn more about the
hardware that makes the Internet work.) But despite my lack of knowledge, this
past week has been an excellent chance to experience the effects a DoS can
cause.&lt;/p&gt;
&lt;p&gt;A DoS &lt;strong&gt;destroys&lt;/strong&gt; your ability to use the network — much moreso than I ever
thought possible. For my own sake, I am going to write a little bit about what
I’ve seen and make some conclusions about what went wrong, and even try to
suggest possible solutions that we can implement to solve things in the
future. But before we start, a little disclaimer. The network people here at
IIT are not the most apt people in the world, but they’re not the most inept
either. We do have some truly brilliant people around here, but frankly, they
don’t get recognized or listened to nearly enough. So before you start railing
on the fact that if &lt;strong&gt;you&lt;/strong&gt; were a network engineer here, this never would
have happened, let me say this: the main problem I have seen this past week is
not a lack of technical experience, knowledge, or anything like that; the
problem is a &lt;strong&gt;lack of communication.&lt;/strong&gt; I cannot stress that enough. So let’s
get started.&lt;/p&gt;
&lt;p&gt;On Sunday evening, Felix, one of our network engineers, noticed an inordinate
amount of traffic to random ports and stuff, and suspected a worm or virus had
made its way onto the network. In an effort to contain the attack, he blocked
the MAC addresses of 160 computers with the highest traffic on the network at
the time, effectively banning &lt;strong&gt;all&lt;/strong&gt; network traffic from those people. The
thought was that this would diagnose the problem — block the addresses, watch
things go back to normal, then go through the PC’s that were blocked and
figure out what worm or virus had caused the problem, fix it, and reopen the
network.&lt;/p&gt;
&lt;p&gt;Problem was — blocking the addresses didn’t fix the problem. In fact, it got
worse. The DNS server started going down, and then finally went kaput
altogether. This effectively knocked out internet access for all of campus.
The internal network still worked, and some cached DNS entries still resolved
all right, but most people were locked out. Here at the Support Desk we got
back up and running for awhile by switching to an external DNS, but we
couldn’t exactly tell the whole campus to do that, because it wouldn’t have
solved the root of the problem. Eventually, because of the bogus traffic that
was being spit out from our network and our DNS server, our own ISP blocked
our DNS server.&lt;/p&gt;
&lt;p&gt;This is where things started to go downhill — fast. Felix provided us with the
list of blocked MAC addresses initially, but by the time the DNS went down,
which was late Monday afternoon, that list was out of date. On top of that,
because of the rampant random network issues, we couldn’t tell a customer what
was wrong when they called. They might be blocked, they might not. It might
just be the random DNS problems, it might not. We had still not been provided
with a process through which people could get checked and unblocked if
necessary. Thus, problem number one:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1) We at the Support Desk were not provided with information, sketchy or
otherwise, to tell people when they called.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;So we started telling people whatever we knew — there were network issues,
there were some people with blocked MAC’s, we didn’t know when things would be
back up. It is useful to remember that at this point, OTS had no idea what the
problem was (the DNS server was the &lt;em&gt;problem&lt;/em&gt;, but it had been brought down by
the DoS attack, which hadn’t been identified yet), and no information had been
sent out to the IIT community. Hence, problem number two:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2) OTS was extremely slow at getting public information out to the IIT
community, and when they did, provided it via unreliable methods (email,
mainly).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Yup, most information went out in the form of emails, which is certainly a
valid form of communication, but it shouldn’t be the only one. But more on
suggestions later…&lt;/p&gt;
&lt;p&gt;As the week dragged on, and more and more customers became agitated from a
lack of information and a seeming lack of action on our part, things just got
worse. Apparently, there was much debate about the actual cause of the problem
was. Virus scans and other searches had revealed nothing on many of the
blocked PC’s, except a small VBS worm that remained under most virus scanner’s
radar. One camp held that there was just a problem with the DNS server -
something was wrong with it. The other camp held that we were under an attack.
One — it’s our fault, two — it’s not our fault (at least, not directly).&lt;/p&gt;
&lt;p&gt;It was suggested at this point that we remove the DNS server and replace it
with a fresh one, which would make the choice between the two theories simple.
But, for some unknown reason, this was resisted for quite some time.
Eventually, a new DNS server was put in. It lasted 30 minutes. It was clear we
were under attack. Thus, point number three:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3) When DNS went down, it should have been replaced immediately. That
would have made it clear from the beginning that we were under attack.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;During all of this hullabaloo, we at the Support Desk remained ignorant of any
information regarding the problem, its causes, and what OTS was doing to
resolve it. The calls we received were getting angrier and angrier as final’s
week loomed closer and they still couldn’t get to their course websites, or do
research, or browse the net to relax, or anything. In addition, we didn’t have
an updated MAC block list, which had been changed (at one point it got to 400
MAC’s) several times at this point. Points numbers four and five:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4) The Support Desk was not provided with up-to-date information (such as
updated MAC block lists) that would have assisted them in diagnosing the
problem(s), and cut down the workload on other OTS divisions, and maybe, just
maybe, would have left customers feeling a little happier about the state of
things.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5) When OTS Communications went out, they were overly vague and seemed to
take forever to write. Communications went out with information that seemed
out of date as a result.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Well, those are the main points. The core problem was a lack of communication
and information-sharing amongst departments. If the Support Desk is a voice
for OTS, then we have to know what to say, and we simply weren’t provided with
any information. Also, (and this really bugs me) the OTS communications just
told people to call the Support Desk if they had a problem, presumably to get
more information, but we didn’t have anything to tell them. So these were the
problems, now what about solutions? Here are my thoughts, for what they’re
worth.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Provide the Support Desk access to information such as MAC block lists.
The info has to be &lt;em&gt;up-to-date&lt;/em&gt;, otherwise it’s not really useful.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This seems to be a no-brainer to me. If we’re going to be sending out emails
that say, “Call the OTS Support Desk for assistance in troubleshooting your
network access,” then the Support Desk has to have up-to-date information
about it. If people are going to be calling with their MAC’s, we can’t be
looking at a list over a week old. In fact, it was just this morning that we
finally got the updated list, &lt;em&gt;after&lt;/em&gt; it had grown to over 400 people and
shrunk back down to about 25.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Make one person responsible for communicating with the students.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;By this, I don’t mean that one person should be taking calls with problems.
That’s the Support Desk’s job. What I mean is that one person should write the
communication emails, and should be responsible for getting accurate
information from the appropriate people to send out. The process would be as
follows: Network goes down… Communicator calls Networks, finds out problem X
is the cause, gets an ETA… Communicator sends out email information, and
makes arrangements to notify via other means. See below. The more I think
about this, someone at the Support Desk should have this responsibility. But
it should only be one person.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Communication should be done through a variety of means.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In this instance, email was, and usually is, the primary form of
communication. But we need to send out voice mail to faculty, put up flyers in
MSV and SSV, and, dare I say it, &lt;strong&gt;hold a press conference&lt;/strong&gt;. This isn’t
always necessary, but in this case, it would have been nice if students could
have gone to a public meeting one evening in the MTCC auditorium or something,
heard a brief statement about what the problem was and what action we were
taking, and had a chance to ask questions and get some straight answers.
People who aren’t in the dark are less likely to make up their own
explanations for why something went wrong. Ending speculation can help end
angry customer calls.&lt;/p&gt;
&lt;p&gt;I guess that’s really all I have. This week has been trying for all of us here
at OTS, but I hope that maybe the staff here will learn from this experience
and make it better the next time this happens. But of course, I am just a
lowly peon here, so what do I know?&lt;/p&gt;
&lt;p&gt;By the way, for anyone that cares: &lt;strong&gt;The problem was caused by some (like
8-10) PCs on campus getting hacked (externally, internally, who knows) and
participating in a DoS attack against the DNS server. The problem now seems to
have been contained, and about 25 people still remain blocked.&lt;/strong&gt; Yeah, DoS
sucks, but it is kinda cool to realize that 8-10 machines can destroy a
network connection serving a university of 3000 people. &lt;em&gt;Kinda&lt;/em&gt; cool.&lt;/p&gt;</content:encoded></item><item><title>&quot;Then&quot; Vs. &quot;Than&quot;</title><link>https://tylerbutler.com/then-vs-than/</link><guid isPermaLink="true">https://tylerbutler.com/then-vs-than/</guid><description>&quot;Then&quot; Vs. &quot;Than&quot;</description><pubDate>Sat, 11 Dec 2004 07:09:00 GMT</pubDate><content:encoded>&lt;p&gt;I started looking at some open-source software and came across Blender, a
cool-looking 3D modeling program. On &lt;a href=&quot;https://www.blender3d.org/&quot;&gt;their homepage&lt;/a&gt;, I noticed this image
(it may no longer be on their page):&lt;/p&gt;
&lt;p&gt;&lt;img loading=&quot;lazy&quot; width=&quot;1536&quot; height=&quot;1024&quot; src=&quot;/assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44&quot; srcset=&quot;/assets/lost.CVsYUaFq_1FUr7N.webp?dpl=69d91efc8474b1000843df44 640w, /assets/lost.CVsYUaFq_1N0dCU.webp?dpl=69d91efc8474b1000843df44 750w, /assets/lost.CVsYUaFq_2UVpy.webp?dpl=69d91efc8474b1000843df44 828w, /assets/lost.CVsYUaFq_2golDk.webp?dpl=69d91efc8474b1000843df44 1080w, /assets/lost.CVsYUaFq_1PjINn.webp?dpl=69d91efc8474b1000843df44 1280w, /assets/lost.CVsYUaFq_zpuRP.webp?dpl=69d91efc8474b1000843df44 1536w&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now what’s wrong with this picture? Well, the designer of the image was not
very careful when selecting the words to use. The words “than” and “then,”
while differing only by one letter, are vastly different in meaning. &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdictionary.reference.com%2Fsearch%3Fq%3Dthen&quot;&gt;Then&lt;/a&gt;
is most commonly an adverb, but can sometimes be a noun or adjective (time-
related). &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdictionary.reference.com%2Fsearch%3Fq%3Dthan&quot;&gt;Than&lt;/a&gt;, on the other hand, is a conjunction, used to compare
things. &lt;em&gt;I am better at English &lt;strong&gt;than&lt;/strong&gt; you are&lt;/em&gt;, for example. So when you
want to compare things, as the person making this advertisement image
apparently wanted to, you want to use than.&lt;/p&gt;
&lt;p&gt;I think the confusion regarding this stems from the use of “then” as a time-
related adjective or noun. For example, “I was there then,” or “the then
director of OTS” are valid uses of the word, which confuses people when they
want to compare things, especially in time-related constructs, such as “more
than before.” Then implies a previous state of being, so previously — then -
there were less than there are now. This, I think, is the root of the
confusion. If you really want to get your head spinning, try this: “There were
more employers there then than previously.” I &lt;em&gt;think&lt;/em&gt; that’s grammatically
correct, but many people seem to get this confused. It could also be that they
are often pronounced similarly if not exactly the same, so drill yourself on
it if you’re having problems remembering.&lt;/p&gt;
&lt;p&gt;Since I have noticed some common grammatical and language-related mistakes at
work, in the IPRO, and just on blogs and websites in general, I think I might
start a regular column on here with common problems people have with similar
sounding, yet different meaning words. After all, I am the master of all that
is English. And I &lt;a href=&quot;/tags/nanowrimo&quot;&gt;wrote a novel&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Official Comments</title><link>https://tylerbutler.com/official-comments/</link><guid isPermaLink="true">https://tylerbutler.com/official-comments/</guid><description>Official Comments</description><pubDate>Fri, 03 Dec 2004 03:27:00 GMT</pubDate><content:encoded>&lt;p&gt;In case you haven’t noticed, &lt;a href=&quot;/tags/novel/&quot;&gt;my novel is done&lt;/a&gt;. Well, at least the 50,000
words are done, so I am a &lt;a href=&quot;https://www.nanowrimo.org/&quot;&gt;NaNoWriMo&lt;/a&gt; winner. I still need to edit it, and
with some artistic help from Joe Parry, I will add some illustrations and lay
it out in InDesign or something to make a nice PDF booklet. I am also going to
write up an essay on the experience of NaNoWriMo and my influences for the
book. But that’s in the future. I know at least one or two people have been
following along throughout the month, so now is the time for you to let me
have it… I will be putting some polls up soon for people that have read the
novel, but if you want to compliment me or criticize me for anything in the
book, comment in this post or send me an email. I really want feedback…
seriously. It’s the only way to improve.&lt;/p&gt;</content:encoded></item><item><title>November 29th</title><link>https://tylerbutler.com/november-29th/</link><guid isPermaLink="true">https://tylerbutler.com/november-29th/</guid><description>November 29th</description><pubDate>Tue, 30 Nov 2004 13:16:00 GMT</pubDate><content:encoded>&lt;p&gt;Well, here’s the last of it. I added some new material to previous chapters,
so the additions are listed here along with the chapter in which they go. The
PDF has been updated with all the new material.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 29: Epilogue&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Angela was bobbing up and down in her chair almost uncontrollably as Melissa
came down the stairs into the kitchen. Lawrence , of course, sat reading a
paper next to her, ignoring her completely as she knocked plates, cups, and
other random items on the table to the floor with her movement.&lt;/p&gt;
&lt;p&gt;“Angela, settle down and eat your brea kfast!” Melissa knew it wouldn’t
happen. The five-year-old looked down in disgust at the strange mixture of
foodstuffs on her plate. The toast was now soggy from spilled apple juice, and
the remaining bits of egg swam in a pool of juice as well. Angela turned her
nose up at the plate primly and crossed her arms across her chest.&lt;/p&gt;
&lt;p&gt;She was pouting at the reprimand. Melissa rolled her eyes at her daughter’s
silliness and flipped on the small television in the room, pushing down two
slices of brea d in the toaster as the picture faded in.&lt;/p&gt;
&lt;p&gt;“Can we watch cartoons, mommy?”&lt;/p&gt;
&lt;p&gt;“No, we cannot,” Melissa responded fla tly. The question was asked each
morning, and the answer always remained the same. But Angela nev er gave up;
one day her mother would relent, and she would get to watch cartoons while she
ate breakfast… &lt;em&gt;But today is not that day&lt;/em&gt;, Melissa thought to herself.&lt;/p&gt;
&lt;p&gt;Lawrence had his morning paper and cup of coffee, Melissa had her morning
newscast and toast. It was their routine; the sole moment in the day that she
would not vary — it was her tether to the world and to her own sanity. No
matter what mischief Angela would cause throughout the day, it was all
bearable if she’d had her toast and caught up with the world.&lt;/p&gt;
&lt;p&gt;She sat down on the chair to Lawrence ‘s right, ignoring her daughter’s
continued pleas for cartoons. “Angela, I said no! Settle down and &lt;em&gt;be quiet&lt;/em&gt;!”
Angela resumed her sulking, but at least it got quiet.&lt;/p&gt;
&lt;p&gt;She had just missed the weather report, but she was in time for the morning
headlines. The newscaster droned on with little emotion through the long list
of headlines, and Melissa listened only passively until something caught her
attention.&lt;/p&gt;
&lt;p&gt;“ Twenty-three-year-old McAllister Park resident Joel Mendocino is dead this
morning, the victim of a car accident at the Franklin-Niles intersection late
last night. Mendocino, who had recently returned from an overseas trip, had
left the Elston Memorial hospital where he was being treated for a near-fatal
gunshot wound he received earlier in the day. His father was the vehicle’s
driver, and is listed in stable condition at Elston Memorial.”&lt;/p&gt;
&lt;p&gt;“ Lawrence , listen to this! This poor kid lived around here!” Lawrence
looked over his paper and murmured an acknowledgement, then resumed reading
his paper. Melissa focused intently on the television as the news anchor
continued.&lt;/p&gt;
&lt;p&gt;“In related news, police were able to discover an illegal “fight club” of
sorts that is believed to be the source of a rash of unexplained abductions
and beatings of homeless individuals that has been plaguing the city of late.&lt;/p&gt;
&lt;p&gt;“In a statement released early this morning, Detective Angus Cobb credited
Mr. Mendocino’s identification of his attackers as the crucial clue that led
the detectives to a supposedly abandoned warehouse in the ind ustrial area of
the city.&lt;/p&gt;
&lt;p&gt;“Several participants in the “fight club” were apprehended by city police
officers, and it is expected that the ringleader will soon be located.”&lt;/p&gt;
&lt;p&gt;The news anchor seemed to be enthralled by the story as it continued on.&lt;/p&gt;
&lt;p&gt;“But the story doesn’t end there, folks. Mike Turner, a former Copeland
Advertising executive, was shot and killed by detectives on the scene when he
refused to discontinue his beating of a mentally-challenged homeless man, and
instead charged towards police officers.&lt;/p&gt;
&lt;p&gt;“It is believed that Mr. Turner was also responsible for the brutal beating
and death of his wife’s lover, Brandon Lloyd, a story that we brought to you
yesterday on the 6 o’clock newscast.&lt;/p&gt;
&lt;p&gt;“Police are confident that the criminal’s behind these recent activities
will soon be rounded up, but remind all city residents to report any
suspicious activity immediately and exercise common sense when moving around
the city at night.”&lt;/p&gt;
&lt;p&gt;Melissa was almost sad to realize that the story had come to an end. It was
more interesting than the plot to one of the afternoon soap opera’s that
Lawrence berated her for watching. Who knew so much could happen one day in
their city?&lt;/p&gt;
&lt;p&gt;“Makes you wonder sometimes, doesn’t it honey?”&lt;/p&gt;
&lt;p&gt;“Hmmm?” Lawrence murmured, looking over his newspaper again.&lt;/p&gt;
&lt;p&gt;“Makes you wonder how many people you see and interact with each day will be
dead tomorrow. It’s kind of sad, really.”&lt;/p&gt;
&lt;p&gt;Lawrence looked back at his paper. “I suppose. But I don’t worry too much
about it. After all, what do they have to do with us?”&lt;/p&gt;
&lt;p&gt;Melissa stood and ran her dishes under the warm water at the kitchen sink.
She wouldn’t think about Joel much after that. Lawrence was right, after all;
what did it all have to with her?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 3&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Joel shrugged as she moved as quickly as she could to the opposite side of
the train, sat down, and eyed him warily. Whatever.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While he had traveled in Asia , he’d been amazed at the hospitality and
friendliness of nearly everyone he met, including the tourists with which he’d
had the opportunity to converse. All travelers there seemed to be inexplicably
linked; they al shared that undeniable experience that was Asia , and that
experience drew them together. That experience, combined with the basic human
need to communicate, at least occasionally, with people from similar
backgrounds and worldviews, produced a level of camaraderie with some of his
new acquaintances that Joel had seldom had with friends from home.&lt;/p&gt;
&lt;p&gt;Two, in particular, Sean and Pang, had become very close to him during the
three days he’d known them. They had met outside a market while he was staying
in Thailand for a week. Sean had been excited at spotting someone with the
same color skin as his own, and Pang, who’d spent a year studying at a
university in the States, was glad to have a Westerner with which she could
converse. Pang and Joel hit it off immediately; they both had an affinity for
analytical thought, much to Sean’s dismay, and spent many of their nights
chatting about philosophy, art, literature and even mathematics, late into the
night.&lt;/p&gt;
&lt;p&gt;Sean played the dumb oaf, but behind his goofy exterior was a curious, sharp
young man with a razor sharp wit. Together, the three of them had traveled the
city high and low, seeking out coffee shops, bars and pubs, and sampling every
piece of the Thai nightlife that Pang could think to show them. It was hard
for Joel to believe that they’d only been together for three days before
they’d split paths. He looked forward to calling them when he got the chance;
their ongoing relationship was an opportunity to relive their past experience
vicariously through each other, and it was an opportunity that Joel was
thankful for.&lt;/p&gt;
&lt;p&gt;But it didn’t stop there. The Asian people he’d met, from Sumatra to
Thailand , were friendly, eager to please, and very rarely had any desire for
profit, monetary or otherwise. On several occasions, while he’d carried his
bags to and from a taxi, a random man off the street would run up to assist
him, and many times, refused payment. Their payment was his smile and
gratitude, and in the wake of their unabashed kindness, Joel felt obligated to
at least attempt to repay them by spreading that kindness. It was just too bad
no one could believe he was just trying to be helpful.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As the train began to move towards its downtown destination, Joel found an
empty seat and sat down, peering out the window at the cars passing on the
highway alongside him.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 8&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The path along State Avenue to the tower was relatively clear; it was so
late in the morning, a majority of people had already made it to their jobs.&lt;/em&gt;
He eyed the homeless men on the corner warily. Why the hell didn’t they get
jobs? They were always standing there, begging for change, occasionally
offering a useless trinket or piece of shoddy journalism up in exchange.&lt;/p&gt;
&lt;p&gt;But even worse than the beggars were the ones with the squeegees. They
attacked his car every single time he drove to work, splashing his windshield
with their vile liquid and doing a piss-poor job of cleaning it off. They
always left his car in worse shape than when they started, and they expected
to get paid! Bull &lt;em&gt;shit&lt;/em&gt;! The mere thought of them soured his entire mood
considerably, if it were even possible for him to be more pissed off at this
point.&lt;/p&gt;
&lt;p&gt;His previous physical activity had left his body reeling, and he was unable
to move faster than a brisk walk towards the tower. He was interrupted several
times by beggars along the way, huddling against the looming stone buildings
for shelter from the wind. He ignored than each time, yelling whatever
obscenities surfaced to his mind first, until finally he slapped at the hands
of the last one, knocking the small collection of nickels and dimes from the
man’s hand. He smiled cruelly as the man cried out and dropped to his knees to
reclaim the coins that would serve as his dinner for the day. That would show
the bastard.&lt;/p&gt;
&lt;p&gt;He continued as fast as he could along State Avenue, ding his best to ignore
the legs’ increasing cries of anguish as they suffocated, until the doors of
the Tower stood before him, peering down at him with a foreboding gaze. &lt;em&gt;He
pushed his way through the revolving doors and ignored the pleasant greetings
of the security guard as he headed straight to the elevator.&lt;/em&gt;&lt;/p&gt;</content:encoded></item><item><title>November 28th</title><link>https://tylerbutler.com/november-28th/</link><guid isPermaLink="true">https://tylerbutler.com/november-28th/</guid><description>November 28th</description><pubDate>Mon, 29 Nov 2004 15:42:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 28: Goodbye&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Holly and Ned sat together in Ned’s dining room starling listlessly at the
broken Walkman sitting in the center of the table. The discovery of the
Walkman on the street had filled them with a sense of elation at having made
&lt;em&gt;some&lt;/em&gt; progress in their search, but it had been short-lived when they
realized that its discovery ind icated Ernie was ind eed missing.&lt;/p&gt;
&lt;p&gt;Holly ran her hand against the worn buttons and the faint scrawls in the
back that spelled out Ernie’s name. She hoped he was okay.&lt;/p&gt;
&lt;p&gt;Lavina bustled into the room with a fresh pot of coffee and a platter of
pastries. She had not been pleased initially with Ned bringing Holly back with
him, but he had taken her to the kitchen and shared with her the story Holly
had told him outside St. Ives.&lt;/p&gt;
&lt;p&gt;Even Lavina’s insecure jealousy was overcome by the sadness of the story,
and she had set about making them all comfortable in the best way she knew how
– by cooking for them. There had been no end to the del icious sweets produced
in the kitchen, and the coffee seemed to be in infinite supply as well.&lt;/p&gt;
&lt;p&gt;The silence was broken by the sudden stentorian ring of the telephone,
sending Holly bolting upright in her chair in surprise at the sound. Ned
picked up the call.&lt;/p&gt;
&lt;p&gt;“Hello? Oh, hi Rhonda.” Holly craned her neck anxiously. Did she have news
about Ernie?&lt;/p&gt;
&lt;p&gt;“Really? Is he OK? Hmmmm. OK, Elston you say? Yeah, we’ll be over in a few
minutes.” He slowly put down the phone. Holly asked impatiently, “Well, what
did she say?”&lt;/p&gt;
&lt;p&gt;“They found Ernie. He’s in pretty bad shape. They’ve got him up at Elston
Memorial. The doctors aren’t sure if he’s gonna pull through.”&lt;/p&gt;
&lt;p&gt;Holly’s eyes moistened again. “Well, we have to go see him.” She stood up
purposefully and grabbed her coat from the rack in the corner. Ned pushed the
front door open for her and smiled wryly at his wife as they stepped out into
the cold again.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ames and Cobb both brea thed a long sigh of relief as they sat down in their
car and started the engine, waiting for the heater to kick in. Once their
backup had arrived, the warehouse was a non-stop circus of detectives, beat-
cops, and forensics experts. It seemed like Foster had called in the entire
force to the scene.&lt;/p&gt;
&lt;p&gt;Ambulances had arrived at the scene shortly after Ames had called them in,
but were now all gone, hurtling towards hospitals as fast as they could go.
The man that was shot, identified as Mike Turner by the license in his wallet,
was declared dead on arrival by the paramedics, but the victim, whose name was
still unknown, was barely clinging to life and had been sped away in an
ambulance quickly.&lt;/p&gt;
&lt;p&gt;Turner’s death came as no surprise — few men could survive five bullets to
the chest from moderate range. The other man’s survival came as a surprise to
both Ames and Cobb. He had been beaten badly, and both detectives had their
doubts as to whether he’d make it through the night. Only time would tell.&lt;/p&gt;
&lt;p&gt;Cobb and Ames had answered hundreds of questions already, and there were
going to be plenty more tomorrow, especially about the shooting and their
abandonment of the car accident. Questions would have to wait for now, though;
both of them had agreed that they needed to go and check on the victims of the
car accident. It was the least they could do after abandoning the scene.&lt;/p&gt;
&lt;p&gt;“So did you hear about that guy, Turner?” Ames asked as he leaned back
wearily against the headrest.&lt;/p&gt;
&lt;p&gt;“No, what about him?” Cobb replied.&lt;/p&gt;
&lt;p&gt;“Apparently, he killed his wife’s boyfriend earlier today after he found
them in bed together. Beat him to a pulp with a baseball bat, and did a fair
number on his wife, too.”&lt;/p&gt;
&lt;p&gt;Cobb shook his head. “Well, I can’t say I’m sad to see him gone, then.
Especially after seeing what he did to that poor guy.”&lt;/p&gt;
&lt;p&gt;Ames nodded in agreement. “So where we heading? Were you able to find out
where they took the car wreck people?”&lt;/p&gt;
&lt;p&gt;Cobb replied as he looked over his shoulder to back out into the street,
“Yeah, they all got taken to Elston Memorial.”&lt;/p&gt;
&lt;p&gt;“Elston?” Ames exclaimed. “Wasn’t Schumann closer?”&lt;/p&gt;
&lt;p&gt;“Yeah, but apparently some nut took a shotgun into the mall on Franklin and
went crazy, so Schumann was full of gunshot victims.”&lt;/p&gt;
&lt;p&gt;Ames chuckled wryly. “Well, nev er a dull day around here, huh?”&lt;/p&gt;
&lt;p&gt;“No kidding. Well, they took the guy here to Elston as well, so we can check
up on both of them, and let that Mendocino kid know what’s going on, all at
the same time.&lt;/p&gt;
&lt;p&gt;“Nothing like killing three birds with one stone,” Ames commented as they
careened down the road.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Joel opened his eyes and noticed immediately that he was back in the strange
room of his dreams. Directly in front of him was the old man, roll of cloth
beside him, still looking intently at the mass of threads in his lap. He
continued to ignore Joel.&lt;/p&gt;
&lt;p&gt;Joel looked around slowly. The room was exactly as it had been the last time
he had been here. The candle flickering on a low table, the infinitely long
dark room stretching out behind him, light peeking in through a solitary
window in the distance. Yes, this was definitely the room in which he’d found
himself a few hours ago. What was he doing back here?&lt;/p&gt;
&lt;p&gt;“Joel.” He started at the sound and stepped back as the speaker strode out
from the shadows behind the old man.&lt;/p&gt;
&lt;p&gt;“Don’t worry,” the man smiled warmly. “I’m not here to hurt you.”&lt;/p&gt;
&lt;p&gt;Joel looked the man up and down. He was dressed in a long thin robe, a rich
dark brown in color. His features were nothing special — he appeared to be an
average middle-aged man in every respect. A thin black cord lined his neck,
and his robe hung loosel over his broad shoulders.&lt;/p&gt;
&lt;p&gt;His skin was dark, but seemed to shine strangely as well, and the air was
filled with a pleasant freshness as he strode towards Joel and extended his
hand towards him. Joel glanced in confusion at the old man, who sat,
unperturbed by the strange man.&lt;/p&gt;
&lt;p&gt;The man laughed. “Oh, don’t mind Qismah, he’s married to his work. He
doesn’t pay attention to anything except those threads. Come, I have plenty to
show you. I’m sure you have questions, and hopefully I can answer some of them
for you. I am Hospes.”&lt;/p&gt;
&lt;p&gt;Joel took his hand, marveling at the warmness exuded by it on his own
chilled limb. Hospes led him beyond Qismah, to the back of the impossibly long
room, talking as the went slowly.&lt;/p&gt;
&lt;p&gt;“Well, Joel, you were supposed to have been here some time ago, but Qismah
had to improvise a little when things didn’t go as planned with Mr. Turner.”&lt;/p&gt;
&lt;p&gt;What was he talking about?&lt;/p&gt;
&lt;p&gt;Hospes laughed again. “I suppose you’re a little confused, aren’t you? Well,
welcome to the afterlife, Joel — or the gateway to it, anyway.”&lt;/p&gt;
&lt;p&gt;Joel gaspe d in surprise. “You mean… I’m…”&lt;/p&gt;
&lt;p&gt;“Dead? Yes… Or truly alive, depending on how you look at it.”&lt;/p&gt;
&lt;p&gt;Joel was taken aback by his guide’s flippant attitude. If he really was
dead, he didn’t think Hospes should be laughing about it.&lt;/p&gt;
&lt;p&gt;“Oh, I’m sorry, Joel, but I think you’ll find that there are worse things
than dying.” Hospes continued along past Qismah’s position.&lt;/p&gt;
&lt;p&gt;“Like I said before, Joel, the last time you were here, I was supposed to
greet you and give you ‘the talk,’ as we call it, but Qismah ended up putting
you back out there, due to an unexpected development with Mr. Turner.” Hospes
motioned to his right, and Joel saw, to his amazement, another bewildered man
following another robed figure, just beyond a mysterious glass partition.&lt;/p&gt;
&lt;p&gt;“We do our best to keep track of things around here, and Qismah does a fine
job of keeping things running smoothly, but we’re far from fortune tellers, so
every once in awhile something slips through that has to be dealt with, like
what happened tonight. It makes things harder, for you especially, but I think
you can handle it.” He stopped abruptly and turned to face Joel.&lt;/p&gt;
&lt;p&gt;“Well here I am, prattling on… What about you? Do you have any questions?”&lt;/p&gt;
&lt;p&gt;Joel had plenty. He was still unclear about where he was and what was going
on. But where to begin?&lt;/p&gt;
&lt;p&gt;“Ummm, well, what exactly does — Qismah — do?”&lt;/p&gt;
&lt;p&gt;Hospes smiled. “Qismah is the weaver. You see, Joel, you interact with lots
of different people. Your choices and your actions affect a lot of different
things, even if you don’t see those effects first hand. Qismah is responsible
for keeping the system sane, for making sure the knots get tied properly…”
Hospes could tell he was losing Joel.&lt;/p&gt;
&lt;p&gt;“Here, it might make more sense if you could see some things.” He motioned
to the left wall, where Joel saw a window that he hadn’t noticed before. He
peered out, looking over the lush jungle, but then it faded, replaced by a
beaten man in a hospital bed.&lt;/p&gt;
&lt;p&gt;“Joel, meet Ernie. You saved his life, but you didn’t even know it until
now. In fact, that man you tried to save today when you were shot was a good
friend of Ernie’s. But that’s beside the point right now.&lt;/p&gt;
&lt;p&gt;“When Qismah retied your knot, you went and got in that car accident, but if
you hadn’t, a police car carrying two detectives would have been hit by the
speeding car instead, and Ernie would have died in the meantime. But now,
thanks to you, he has a chance.”&lt;/p&gt;
&lt;p&gt;“But will he be OK?”&lt;/p&gt;
&lt;p&gt;“I don’t know. Like I said, we’re not fortune-tellers. But I do know if you
hadn’t done what you did, he would have died. And here’s another interesting
fact,” Hospes continued as the hospital scene faded, replaced by a scene that
Joel recognized. He was standing on the train, holding the door for a man
running towards the train.&lt;/p&gt;
&lt;p&gt;“You held the train for Mike this morning, a man who would later kill his
wife’s boyfriend and would try to kill Ernie, the man you ended up saving.”&lt;/p&gt;
&lt;p&gt;“So I’m actually responsible for Ernie’s almost-death?” Joel asked.&lt;/p&gt;
&lt;p&gt;Hospes nodded. “Sort of, but not really… It’s complicated. That’s the
point. Your entire life s one big complicated knot of events and interactions.
Most people don’t realize that, but I think you do, to some extent at least.”&lt;/p&gt;
&lt;p&gt;Joel remembered some of the late-night conversations he’d had while in Asia
. What Hospes was saying made sense in a lot of ways.&lt;/p&gt;
&lt;p&gt;“So now I’m dead?”&lt;/p&gt;
&lt;p&gt;“Yes. But your time had come anyway. You were supposed to die from an
unexpected heart failure, which is what brought you here in the first place,
but then, like I said, Qismah retied your knot. But he tied it in such a way
that would bring you back here while fixing things. It’s not yet Ernie’s time
– at least, we don’t think it is. Like I said before, this isn’t fortune-
telling.”&lt;/p&gt;
&lt;p&gt;“What is going to happen to that guy, Mike?” Joel motioned beyond the
transparent partition to his right. Hospes shook his head.&lt;/p&gt;
&lt;p&gt;“I don’t know, really. That’s all up to the judge. My job is to answer your
questions. Do you have any more?”&lt;/p&gt;
&lt;p&gt;Joel remembered suddenly that he was &lt;em&gt;dead&lt;/em&gt;. What about his father? His
mother?&lt;/p&gt;
&lt;p&gt;“Can I see my parents?”&lt;/p&gt;
&lt;p&gt;In response, an image of his mother, huddled by his father’s side in a
hospital room, faded in the window.&lt;/p&gt;
&lt;p&gt;“Your dad’s going to be all right. And your parents will grieve, to be sure,
but they’ll move on eventually. And someday they’ll be having the exact same
conversation we’re having now.”&lt;/p&gt;
&lt;p&gt;Tears came to Joel’s eyes as he considered the finality of everything Hospes
had told him. He was so young! He had so many things he had wanted to do, but
now he wouldn’t get that chance!&lt;/p&gt;
&lt;p&gt;Hospes wrapped his arm around Joel’s shoulder and walked him towards the
door at the end of the room.&lt;/p&gt;
&lt;p&gt;“It’s not so bad, Joel. I think you’ll like the eternal afterlife.”&lt;/p&gt;
&lt;p&gt;“Am I going to heaven or hell?” Joel asked. It seemed the logical question.
If he was going to be spending eternity somewhere, he wanted to know whether
his tears were warranted.&lt;/p&gt;
&lt;p&gt;Hospes chuckled. “I was waiting for that one. It’s a good question, but I
don’t have the answer. It’s up to the judge. But if you want my opinion…” He
opened the door and motioned for Joel to walk toward the streaming light the
poured from the opening.&lt;/p&gt;
&lt;p&gt;“I think your chances are pretty good.”&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Three rooms from where Mr. and Mrs. Mendocino cried together over the loss
of their son, tears of a different kind were being shed. Both Rhonda and Holly
hugged Ernie close as he came to and uttered a few indecipherable words. He
was going to be okay.&lt;/p&gt;
&lt;p&gt;Out in the hall, Ames and Cobb listened incredulously as Heather explained
that Joel Mendocino had been killed in the accident. It was a lot for two
tired cops to take in, after all that had already occurred that day. Without
Joel’s help with the tattoo, they’d never have found out about the fight club,
and the poor other guy would probably be dead…&lt;/p&gt;
&lt;p&gt;Ames and Cobb stopped by the Mendocino’s hospital room to express their
condolences, then walked out to their cold car. It had been a long day.&lt;/p&gt;</content:encoded></item><item><title>November 24th-27th</title><link>https://tylerbutler.com/november-24th-27th/</link><guid isPermaLink="true">https://tylerbutler.com/november-24th-27th/</guid><description>November 24th-27th</description><pubDate>Mon, 29 Nov 2004 08:38:00 GMT</pubDate><content:encoded>&lt;p&gt;So my server went down this weekend, hence I wasn’t able to post updates.
Here’s what you’ve missed. I’ll update the PDF when I get a chance. I’ve
passed the 45,000 word mark… Almost there!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Chapter 23: The Knot&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Joel felt disoriented. Where was he? He glanced around the small, dimly-lit
room in which he found himself, trying to remember how he’d gotten there.
Light streamed in from a lone window to his left. Outside, the lush Sumatran
jungle glistened with morning dew. But he didn’t remember this place from his
travels. Where was he?&lt;/p&gt;
&lt;p&gt;Standing up unsteadily, he looked down the length of room, searching for the
exit. He found none. The room was of a short width, about 15 feet, but
immensely long; it stretched out infinitesimally both in front and behind him.
The only perceptible light was from the window beside him, and he suck his
head out, peering around the landscape for signs of civilization.&lt;/p&gt;
&lt;p&gt;The jungle stretched out for miles below him, and looking out either side of
the window revealed a plain exterior that stretched out at least as far as the
dark interior did. The building he was in was on a long plateau; looking down,
he realized that there would be no escaping through the window. The plateau
abruptly ended at the edge of the building and dropped straight down 30 or 40
meters. &lt;em&gt;So much for that plan&lt;/em&gt;, he thought.&lt;/p&gt;
&lt;p&gt;He stepped back into the dim inside of the building. Looking to his left, he
now noticed a dim flicker of light. “Hello? Is anyone there?” his voice echoed
eerily down the length of the room, but he received no response.&lt;/p&gt;
&lt;p&gt;The flicker of light seemed to grow stronger, so he began to walk towards
it. The light from the window faded behind him as he moved on, and he
struggled to see anything around him. The light ahead seemed to be much
steadier now, so he continued towards it, driven by burning curiosity and a
strong desire to determine how he was going to get out of the room. Surely the
source of the light would hold some answers for him.&lt;/p&gt;
&lt;p&gt;He blinked his eyes in the darkness, attempting to force them to adjust to
the near pitch-blackness of his surroundings, and when he opened them again,
he noticed a window, similar, if not identical, to the one he had passed some
time back. It hadn’t been there before… had it? How could he have missed it?
He ran up to it and looked out of it towards the jungle and to either side of
the building. The view was the same as before; the precipice below him, the
plain smooth sides of the building on either side, stretching out towards
infinity.&lt;/p&gt;
&lt;p&gt;The cool breeze was refreshing against his skin, moistened by perspiration
from his short hike through the stuffy interior of the building. He inhaled
deeply, letting the clear, humid air clear his lungs and his mind. How he
loved that feeling! The clear, warm air — such simple pleasures that you
simply couldn’t get back home in the city.&lt;/p&gt;
&lt;p&gt;He reluctantly remove his head from the window and continued his journey
through the long room. The window’s light faded behind him, but then,
unexpectedly, another appeared in front of him. The pattern continued as he
journeyed endlessly on.&lt;/p&gt;
&lt;p&gt;The flickering light grew more steady, but seemed to increase in size almost
imperceptibly. It occurred to Joel unexpectedly that perhaps he wasn’t moving
forward at all; the lack of substantial increase in the apparent size of the
light source ahead was less than encouraging. Somehow, though, he felt that
that light held the answer to his escape, so he pressed on towards it, despite
his doubts.&lt;/p&gt;
&lt;p&gt;He continued on for what seemed like miles. Window after window appeared and
disappeared as he journeyed, but he ignored them, intent on making it to the
light, to the answer.&lt;/p&gt;
&lt;p&gt;Then, without warning, as the windows had appeared, he blinked and he was
there. The light was coming from a solitary candle sitting on a low table.
Behind the table, deep in the shadows, sat an elderly man with a strange
looking cloth draped over his shoulder and in his lap. His features were
barely visible in the candlelight, and Joel stepped closer to examine him.&lt;/p&gt;
&lt;p&gt;His long grey hair was unkempt and hung in long strings around his head,
further sheltering his face from Joel’s prying eyes. The man gazed intently at
the cloth in his lap, and Joel noticed his fingers working with expert
precision and the utmost care on the loose thin strings that spidered out from
the cloth. To the man’s left, Joel saw a roll of finished cloth — the man was
weaving it himself.&lt;/p&gt;
&lt;p&gt;The pattern was intricate, and the thin strings the man handled shone with a
sparkle that Joel had never seen before. He was overcome with a desire to
touch the cloth, and he knelt down and placed his hand gently on the roll. It
was tremendously soft, and seemed to radiate a soft warmth as well as a gentle
shine. Joel longed to take the cloth and wrap himself in it’s comforting
warmth, but he was interrupted by the man’s quiet voice.&lt;/p&gt;
&lt;p&gt;“You’re not supposed to be here.” Joel started at the sound. He removed his
hand from the cloth quickly and looked at the man. He did not look up; his
gaze remained inextricably fastened to the work in front of him.&lt;/p&gt;
&lt;p&gt;Joel gazed, transfixed, as the man reached back to the roll of cloth that
Joel had though finished and pulled a loose thread from the center of the
roll. He pulled it slowly and surely towards his lap; the thread seemed to
grow longer and longer as necessary until it reached his lap, where, with
quick indecipherable flicks of the wrist, he tied it to the strands he had
been presently working on.&lt;/p&gt;
&lt;p&gt;A small smile crossed his face as he completed the knotting of the
collection of thin strings, and pushed the multicolored mass towards the
nearly completed line of cloth he held in his lap, guiding it slowly along the
black wire-like string to which they were all bound.&lt;/p&gt;
&lt;p&gt;“You’re not supposed to be here,” he spoke again, still not breaking his
steadfast gaze.&lt;/p&gt;
&lt;p&gt;“I’m sorry. I don’t know how I got here…” Joel responded unsteadily. The
man frowned as he grasped another two threads and tied a simple knot, binding
them together.&lt;/p&gt;
&lt;p&gt;“This isn’t right…”&lt;/p&gt;
&lt;p&gt;“Again, I don’t really know how I got here. If you could just…”&lt;/p&gt;
&lt;p&gt;The man interrupted before Joel could continue, “You’ll need to go…”&lt;/p&gt;
&lt;p&gt;Joel sighed, perplexed. Was the man not hearing him, or was he simply
ignoring him? “Well, if you’d just tell me how to get out, I’d gladly leave.
Could you tell me where the exit is?”&lt;/p&gt;
&lt;p&gt;The man continued staring at his lap, a look of utter vexation on his face.
He pulled one of the threads from the collection that laid in front of him. As
he pulled on it, the end broke unexpectedly off, and the man held in his hand
a single thread unattached to the others. He raised his eyebrows and furrowed
his brow. “This isn’t right.”&lt;/p&gt;
&lt;p&gt;Joel was confused. The man seemed o be totally ignoring everything he had to
say, totally engrossed in his own work. “What are you doing?” he asked.
Perhaps a direct approach would be more effective.&lt;/p&gt;
&lt;p&gt;“Knots,” the man mumbled under his breath. Was it a response, or the
verbalization of a random thought by a crazy old man? It was clear to Joel
that the man was tying knots — he didn’t need to be schooled in the obvious,
he needed to be told how to get out of this endless room.&lt;/p&gt;
&lt;p&gt;“Hmmm, yes, I’ll have to fix this…” the man continued mumbling under his
breath. “What to do… What to do?” Joel sympathized. He also wondered what he
should do.&lt;/p&gt;
&lt;p&gt;Unexpectedly, the man started smiling down at the mass of threads. He
grasped one of them by the end and pulled it up in front of his face, peering
into the swirling colors and light that seemed to emanate from it.&lt;/p&gt;
&lt;p&gt;Joel was enthralled by the string — what kind of cloth was it? As he peered
more closely at the thread, he noticed pictures reflecting on the man’s face
and the surrounding walls. The candlelight projected through the thread was
producing swirling images all around. Upon closer inspection, Joel noticed
himself in the pictures, which, he now noticed, were actually moving. They had
a home video quality to them; the colors were washed out, the overall picture
grainy, but his own image was unmistakable.&lt;/p&gt;
&lt;p&gt;There he was at his sixth birthday party, when Afton Matthews had hit him
after he called her a doodoo-head. In another, he was arguing with Sara over
their breakup, pleading with her to reconsider. Then he was at St. Ig’s
presenting his solution to the Math Club’s weekly mathematical brain twister,
soaking in the incredulous looks of the other students at his mental
faculties. And then, in another, he was lying in his hospital bed, doctors
swarming over him, his parents standing outside, peering in the window
frantically.&lt;/p&gt;
&lt;p&gt;What was going on? He glanced back down at the man, who now held a small
pair of scissors open, prepared to cut the thread at it’s base, severing it’s
connection to the rest of the cloth. “Wait, what are you doing?” Joel cried
out as the man deftly snipped the thread free.&lt;/p&gt;
&lt;p&gt;“I’m sorry… this has to be done,” the man spoke softly. Joel felt a sudden
emptiness overcome him, and he collapsed to his knees. Joel felt as if his
body was disintegrating; he was wasting away rapidly. The pictures faded as
the man moved the now solitary thread away from the candlelight.&lt;/p&gt;
&lt;p&gt;Joel fell prostrate on the floor and struggled to turn, facing the man. “Why
are you doing this?” he asked, aware that his own voice was
uncharacteristically low and raspy.&lt;/p&gt;
&lt;p&gt;The man picked up the thread he had previously examined, and, apparently
finding what he was looking for, took the newly cut thread and tied them
together in a complicated knot, then fastened them to another thin black
thread that protruded out of the cloth, using an even more intricate joint.&lt;/p&gt;
&lt;p&gt;Joel tried to cry out again, but no sound came. The man smiled broadly at
his work. “There, that should do it.” Joel continued his attempts to cry out
as everything disappeared from view.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;“What happened?” Doctor Ross said as he entered the room.&lt;/p&gt;
&lt;p&gt;“I don’t know,” Heather responded fearfully. “He just went into cardiac
arrest — there was no forewarning. He was awake and talking, then this!”&lt;/p&gt;
&lt;p&gt;“OK.” The doctor looked at the instruments along Joel’s bedside, then
examined his chart quickly. Nothing seemed to fit. Two orderly’s wheeled in a
portable defibrillator and heather ripped open the hospital gown covering
Joel’s chest.&lt;/p&gt;
&lt;p&gt;The doctor barked almost incomprehensible orders and the nurses and
orderlies scrambled to fulfill them. As the defibrillator’s cold metal leads
were placed on his chest, Joel shot up in his bed, shouting maniacally, “What
are you doing?”&lt;/p&gt;
&lt;p&gt;The hospital staff froze in confusion and amazement. Joel grabbed Heather’s
arm tightly and looked fiercely into her eyes. “I have to go.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 24: Search&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“Holly, I don’t see him anywhere. We’ve been up and down every street I can
think of and he’s just not here.”&lt;/p&gt;
&lt;p&gt;“Well, we have to find him, Ned. We have to.”&lt;/p&gt;
&lt;p&gt;Ned was frustrated. All Holly could say was “We have to find him,” but she
had no ideas as to how to go about doing just that. She just wanted to
continue driving around in circles until they stumbled upon him. At first, Ned
had humored her, but he was now convinced they weren’t going to find Ernie
this way. He wasn’t ready to give up — quite the opposite, in fact — but he
wanted to go back to St. Ives and talk to Rhonda, and see if she had any ideas
as to his whereabouts. Perhaps she knew some of the places Ernie went when he
didn’t stay at St. Ives.&lt;/p&gt;
&lt;p&gt;But Holly would hear none of it. She refused to go back to St. Ives with
him; she wanted to stay out on the street — the whole night if they had to –
to find Ernie. Ned was puzzled by her complete reluctance to go to St. Ives.
She was not entirely without reason or logic, even in her excited state of
mind, but she refused to even entertain the idea, no matter how many times he
mentioned it.&lt;/p&gt;
&lt;p&gt;But this was getting ridiculous. They weren’t getting anywhere, and
something had to be done. “Holly, I am going to St. Ives to talk to Rhonda.”&lt;/p&gt;
&lt;p&gt;“Ned,” Holly protested. “I don’t want to go to St. Ives. He’s probably just
around the next alley… Come on, let’s check.”&lt;/p&gt;
&lt;p&gt;She wasn’t going to get her way this time. “No. I am going to St. Ives, I’m
going to talk to Rhonda, and then we’ll decide what to do.” He spoke
definitively, and Holly turned her head and stared listlessly out the window
at the passing grayness of the outside.&lt;/p&gt;
&lt;p&gt;She remained quiet throughout the rest of the drive, and Ned wondered if he
had permanently damaged their friendship. Still, it had to be done. Their goal
had to be to &lt;em&gt;find&lt;/em&gt; Ernie, not to merely &lt;em&gt;look&lt;/em&gt; for him.&lt;/p&gt;
&lt;p&gt;As the looming stone structure of St. Ives came into view, Holly turned her
head away from the window and looked straight ahead. Her eyes closed as she
bent down at the waist, placing her hands under her thighs and whimpering
softly.&lt;/p&gt;
&lt;p&gt;It occurred to Ned, as he sat there observing her, how like his youngest
daughter she was acting. When his youngest didn’t get her way, she would often
sit down, wrap her arms around her body, and pout. Ned shook his head. The
difference between a three-year-old and a twenty-year-old weren’t that great
after all.&lt;/p&gt;
&lt;p&gt;He pulled the van to a stop along the side of the nearly empty street and
prepared to get out, but as he opened the door, he noticed Holly was crying
again softly. He closed thee driver side door again and touched her shoulder
gently.&lt;/p&gt;
&lt;p&gt;“What’s wrong, Holly?” Her body shook convulsively as her tears overwhelmed
her. Ned kept his hand on her shoulder, and she gradually became calmer and
stopped shaking so much.&lt;/p&gt;
&lt;p&gt;She pulled her head up from it’s position on her forearm and looked at Ned,
an expression of despair and immense pain on her face. “You know how I told
you I grew up in McAllister Park ?” she asked.&lt;/p&gt;
&lt;p&gt;Ned nodded. They had had this conversation. She had told him she was born
and raised right here in this neighborhood. “Well, that’s not exactly true,”
she continued. I did spend a lot of time here when I was younger, but I was
really raised in a nice house out in the northwest suburbs.&lt;/p&gt;
&lt;p&gt;“But when I was 8, my parents were in a car accident and both of them were
killed — I told you that; that is true. And I did get put in a foster home,
like I told you. Well, I actually got put in three or four different foster
homes. I didn’t adjust well to my parents’ death, and I was a real wild child.&lt;/p&gt;
&lt;p&gt;“When I was 16, I ran away fro my fourth foster family. I had planned to
move out west and build myself a new life out there, but I only made it as far
as McAllister Park .” She laughed hollowly. Ned looked intently at her and
listened.&lt;/p&gt;
&lt;p&gt;“Well, the neighborhood wasn’t too good, even back then, and things were
tough for me. I lived on the street, but being a woman, and a young one at
that, I dealt with a lot of shit. A kind old woman — Elsie was her name, I
think — brought me here, to St. Ives, one especially cold night, and I liked
it. It seemed to be perfect. Everyone was very friendly, they seemed to have
plenty of food, and there were warm beds.&lt;/p&gt;
&lt;p&gt;“I especially liked John, the director of the shelter. He would sit and tell
me great stories, and he always listened to me when I talked. I honestly
thought I was in heaven. I thought I could get back on my feet, then I could
finish my trip out to California . Things were going to work out.&lt;/p&gt;
&lt;p&gt;“I stayed there — or here, I guess — for a few days, and everything was
fine. But then I began to notice John touching my shoulder while I ate, or
rubbing his leg on mine while he sat next to me at mealtimes. He seemed to go
out of his way to find me, and he often asked me to come see him in his
office. Ordinarily, I wouldn’t have considered that a big deal, but the way he
was touching me was making me feel extremely uncomfortable, so I always found
an excuse, thankfully.” She paused, and Ned wondered if perhaps she wouldn’t
be able to or want to continue.&lt;/p&gt;
&lt;p&gt;“It’s all right if you don’t want to talk about it,” he said.&lt;/p&gt;
&lt;p&gt;“No… I need to tell &lt;em&gt;someone&lt;/em&gt;.” She took a deep breath, then continued.
“Usually we were in rooms with at least another woman, but one night, the
woman who I’d been staying with didn’t come back for the evening, so I was in
the little room alone. John came in late that night. I was asleep, and the
next thing I knew, I had a pillow over my head and somebody was groping at my
panties. I tried to scream, but the pillow covered it, and made it hard to
breathe…” She broke off, and Ned put his hand back on her shoulder. She
continued haltingly, tears welling up in her eyes again.&lt;/p&gt;
&lt;p&gt;“I don’t really know what happened — I think I tried to block it out. He was
on top of me… &lt;em&gt;raping&lt;/em&gt; me… and I couldn’t do &lt;em&gt;anything&lt;/em&gt;. He took off the
pillow because he ‘wanted to see my beautiful eyes,’ but even then I couldn’t
do anything. Mentally, I wanted to scream and shout and twist and turn and
scratch, but no matter what my brain said, my body just sat there. I can still
remember the smell of the soup in the room, the muffled sound of the washing
machines down the hall, the feeling as he…” She broke off again, and Ned
strengthened his grip on her shoulder, hugging her shuddering body to him.&lt;/p&gt;
&lt;p&gt;There they sat in silence for what seemed like hours, until Holly finally
pushed herself away from him. “I’m sorry… but even now I can’t bear the
thought of that place. I didn’t stay long after that night. John said if I
ever told anybody, no one would believe me. I guess he’s gone now, but the
memory’s still with me…”&lt;/p&gt;
&lt;p&gt;Ned nodded. It made so much more sense now. He hated himself for bringing
her here, when she had asked — begged, even! — him not to. He hated himself
for recommending on a daily basis that she volunteer here, reminding her each
day of that terrible experience. What an idiot he’d been!&lt;/p&gt;
&lt;p&gt;“I’m sorry,” he spoke quietly. “I shouldn’t have made you come here.”&lt;/p&gt;
&lt;p&gt;Holly smiled wistfully. “Honestly, it feels kind of nice to finally tell
someone — someone who believes me that it happened — someone that cares. So
don’t beat yourself up over it. You couldn’t have known.” She looked out the
window at the large stone building.&lt;/p&gt;
&lt;p&gt;“Well, since we’re here, you might as well go in and talk to Rhonda.”&lt;/p&gt;
&lt;p&gt;Ned nodded and opened the driver door, stepping into the bitter cold of the
night. When he entered St. Ives, he found Rhonda in the kitchen, on the
telephone.&lt;/p&gt;
&lt;p&gt;“Missin’ for 24 hours? Hell, he might be dead in 24 hours! There’s nothin’
can be done? OK. Thank you.” She hung up the phone angrily. “Can’t report
someone missin’ ‘til they’ve been missin’ 24 hours. Now that’s just stupid!”&lt;/p&gt;
&lt;p&gt;She looked up, noticing Ned in the kitchen doorway. “Oh, sorry ‘bout that…
what can I do for ye?” Ned walked in and explained the whole story of their
search to her as she prepared them both a cup of tea.&lt;/p&gt;
&lt;p&gt;“Wal, I’ve been feelin’ a little strange myself — this isn’t the firs’ time
Ernie hasn’t come back, but this time it seems different. I mean, he was out
last night, and I know that he wouldn’t let it happen two days in a row — he
knows I’d lay into him for dat.” She sighed and took another sip of her tea.
“But da police say dey can’t do anything yet. You say you’ve looked through
all the streets and alleys ‘round here?”&lt;/p&gt;
&lt;p&gt;Ned nodded. Holly had insisted that they leave no stone uncovered. “Wal, I
don’t know then. I hope he’s all right. Give me your number. If I hear
anything or he shows up, I’ll give you a call.”&lt;/p&gt;
&lt;p&gt;Ned wrote his number on the pad she handed him, thanked her for the tea, and
headed back out in the cold towards the van. Holly was staring anxiously out
of the window at the stone building as he approached.&lt;/p&gt;
&lt;p&gt;“Did she have any ideas?” she asked as Ned closed the door and started the
engine.&lt;/p&gt;
&lt;p&gt;“No, but she said she’d call us if she heard anything or he appeared there.”
Holly looked disappointed, and Ned couldn’t blame her. He had hoped Rhonda
would have some ideas as well.&lt;/p&gt;
&lt;p&gt;“Where are you going?” Holly asked, as Ned turned back towards their main
search area instead of going straight back towards his home.&lt;/p&gt;
&lt;p&gt;“Well, I figured we owed it to Ernie to check one more time. Maybe we missed
something.” Holly smiled.&lt;/p&gt;
&lt;p&gt;The roads were as empty as they’d been during their previous search, and
there was still no sign of Ernie along any of the streets or the narrow
alleyways. They were disappointed, but neither of them had really expected to
find anything. They were both tired — it was time to call it a night and hope
for new developments in the morning.&lt;/p&gt;
&lt;p&gt;“Ned, do you see that?” Holly asked, pointing up ahead at a shiny glint on
the street curb.&lt;/p&gt;
&lt;p&gt;“Yeah.”&lt;/p&gt;
&lt;p&gt;“What is it?”&lt;/p&gt;
&lt;p&gt;“I don’t know… Probably a plastic bag or a hubcap or something.”&lt;/p&gt;
&lt;p&gt;“Stop for a sec.”&lt;/p&gt;
&lt;p&gt;Ned obeyed and jumped as Holly threw the passenger door open and hopped out,
running towards the glint up ahead. She returned a few seconds later, excited.
“Look, Ned!” she exclaimed, thrusting the object in her hand at Ned’s face. It
was Ernie’s Walkman.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 25: Fight&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When Mike came to he was alone in a small maintenance closet. He was no
longer tied to the chair, but the appearance of freedom was short lived. The
door to the closet was closed, and a quick test revealed it was locked as
well.&lt;/p&gt;
&lt;p&gt;He sat down on the floor and waited, rubbing the back of his head gingerly.
He felt the telltale rough surface of the scab on the back of his skull where
the previous blows had broken the skin. His head was really taking a beating
today. Between the bouts of unconsciousness earlier in the day — had that just
been this morning? — and the more recent knocks given him by Angelo’s goons,
it was a wonder he was still standing.&lt;/p&gt;
&lt;p&gt;He was standing, though, unsteadily. He leaned against the door, balancing
himself, waiting for the lightheadedness to pass. The swirling of his brain
cells slowly stopped, and he began to feel like his old self again.&lt;/p&gt;
&lt;p&gt;The slightly muffled sound of cheering could be heard beyond the door. He
strained his hearing to focus on the sound, to pick up any specific sound that
might tell him something about what Angelo had in mind.&lt;/p&gt;
&lt;p&gt;A man was speaking, his voice Angelo didn’t recognize.&lt;/p&gt;
&lt;p&gt;“Well, folks, we have a very special event tonight. You know, normally we
try to encourage audience participation during the “battle,” as we like to
call it…” The crowd cheered again, louder than before.&lt;/p&gt;
&lt;p&gt;The man continued, speaking loudly over the din of the crowd. “But… BUT
tonight, we have something special planned. I’d like to tell you about Mike –
he’s a guy just like you. He had a job downtown, he had a nice house, a nice
wife — things were great. But this morning, Mike got fired from his job…”
The crowd booed.&lt;/p&gt;
&lt;p&gt;“When he got home, he found his wife in bed with another man.” The crowd
booed even more loudly, and Mike discerned several insults flying from their
mouths. “That bitch!” “Whore!” “Cunt!”&lt;/p&gt;
&lt;p&gt;“But Mike didn’t sit back and take that shit, no! He fought back! He picked
up a baseball bat and beat the fucking shit out of that adulterous bastard,
and did a nasty number on his wife, too!” The crowd cheered maniacally and
some even clapped. Mike felt pretty good. He &lt;em&gt;had&lt;/em&gt; done the right thing,
after all. What else could he have done? Finally he was getting some
recognition for the hard work he’d put in, for the talent that he had nurtured
and developed over countless years.&lt;/p&gt;
&lt;p&gt;The door to the closet opened unexpectedly, and Angelo stood there, backed
by two large sullen-looking men. He looked Mike up and down, and smiled
cryptically.&lt;/p&gt;
&lt;p&gt;“Looking good, Mike. Have you heard what they’re saying about you? Mike, I’m
telling you, this is the place for you. The guys here &lt;em&gt;love&lt;/em&gt; you! Listen to
‘em!” He motioned down the hall where the sound of the crowd grew louder
again. “Now let’s go and show ‘em why you’re king shit of fuck mountain.”&lt;/p&gt;
&lt;p&gt;Mike hated Angelo, but the sound of that crowd was incredibly enticing. They
were now shouting his name. “Mike… Mike… Mike…”&lt;/p&gt;
&lt;p&gt;“You really want to see him? You want to see him fight some degenerate
bastard?” The crowd cheered even more, and the chant of his name grew more
powerful. Mike felt good. They wanted him. They needed him. The rage from the
day’s events came rushing back, and he smashed his fist against the closet
door impulsively.&lt;/p&gt;
&lt;p&gt;“That’s right,” Angelo smirked. “Tap into that anger. You have a right to,
after what those bastards have done to you. Go show ‘em all why you’re a bad-
ass motherfucker.” Angelo stepped aside and motioned down the hall. Mike
hadn’t heard him. He was focused on the chanting from the crowd.&lt;/p&gt;
&lt;p&gt;He followed the noise into the large room. There must have been hundreds of
men there, all shouting for him. The announcer glanced over his shoulder, and
seeing Mike behind him, turned back to the raucous crowd and announced his
arrival.&lt;/p&gt;
&lt;p&gt;“Here he is, Mike Turner!” The crowd shouted in frenzied excitement, and
Mike stepped forward confidently. He didn’t feel like himself — he felt more
powerful. He felt like a hulking menace, a “bad-ass motherfucker,” as Angelo
had termed it, and he was going to give these fans a show.&lt;/p&gt;
&lt;p&gt;He stepped out in the center clearing and the announcer stepped back,
allowing the circle of excited faces to close around him. Mike looked around
at the faces. The men were mostly dressed in suits, and all looked to be about
30 or 40 years old. Their faces were tired, but a maniacal frenzy shone in
their eyes, and they cheered, clapped and shouted as Mike raised his right
hand above his head, fist closed defiantly. They were not unlike him — they
were his peers. And he commanded their respect. Every man in that room wanted
to be him at that moment, and the ceaseless applause confirmed it.&lt;/p&gt;
&lt;p&gt;He turned around 360 degrees, hand still in the air, letting each and every
member of the crowd survey their new god. Their look of awe was magnificently
boosting his ego, and any qualms he had about participating in something
Angelo had suggested and sanctioned were now only distant considerations. He
had killed a man, and tonight, he’d kill another.&lt;/p&gt;
&lt;p&gt;Much more than at any other point in his life, Mike knew that this was his
destiny. This was his purpose, his reason for existence. Everything up until
this night was preparation — the shaping of his temper, his nightly boxing
workout to funnel away the constant anger he felt, the events of the past day
– they had all prepared him to find himself. And when all was revealed, there
was no sign of Mike Turner, the man. There was only Mike Turner, the _animal
_.&lt;/p&gt;
&lt;p&gt;He was primal, he was brutal, he was everything that Angelo had said he was.
And this was his arena — his home. This battleground was the place where he
would complete the transformation. But to do that, he would need an opponent.
Where was the man these joker’s had found to fight him?&lt;/p&gt;
&lt;p&gt;He wheeled around, searching for the man he would soon kill. The crowd
parted, and a man was pushed roughly into the right side of the circle. He
stood there unsteadily, peering out from behind thick glasses.&lt;/p&gt;
&lt;p&gt;This was the man they had selected for Mike to fight? &lt;em&gt;This&lt;/em&gt; was him, this
scared, shaking man with geeky glasses? For a moment, Mike felt slighted. As
psychotically driven as he was, he probably could kill a man twice his size,
maybe even ten men, and they had found this little bastard.&lt;/p&gt;
&lt;p&gt;The crowd’s shouting and cheering would not let him object, however; he’d
have to fight the man, no matter how small or insignificant he was. This fight
would be easy. He’d win their favor, then they’d send him someone greater,
someone more powerful to fight the next time. But this man would need to be
killed, of that Mike was certain.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ernie was confused. He had been unconscious until his abductors had pulled
him out of the car trunk and waved some strange-smelling stuff in front of his
nose. They had pulled him roughly into some building and held him firmly in a
small hallway. He could hear loud shouting ahead.&lt;/p&gt;
&lt;p&gt;Then, without warning, the two men holding him pushed through a mass of
bodies and threw him out into a large circle, facing another man who paced in
a frenzy around the outside of the circle, his fist raised above his head.&lt;/p&gt;
&lt;p&gt;His glasses were foggy from the warm humidity in the building, but he dared
not remove them to wipe them off. He was frightened beyond reason, and he
didn’t want to risk the blindness that would come with the removal of his
glasses. He had to be able to see everything.&lt;/p&gt;
&lt;p&gt;The man across from him lowered his arm when he noticed Ernie. His eyes were
crazed and bloodthirsty, and Ernie got the distinct impression from his look
that he was not in the mood to make friends.&lt;/p&gt;
&lt;p&gt;The man sidestepped towards him slowly. Ernie was unsure what to do, but he
didn’t want to get in the man’s way. All he wanted to do was get away. He
turned and tried to get out through mass of bodies that now blocked the path
through which he had entered the circle, but the men there laughed and grabbed
him pushing him back into the center.&lt;/p&gt;
&lt;p&gt;As he turned his head, his jaw met with the man’s fist, sending him
sprawling to the floor. His glasses clattered on the concrete alongside him.
The man towered over him menacingly, silently daring him to get up. Ernie
didn’t want to, but the man’s fists were less damaging weapons than his feet,
so against his will, he forced himself to stand again.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Mike had been right about his opponent. There was very little resistance. He
had initially tried to turn and run, but the circle of fans had sportingly
prevented &lt;em&gt;that&lt;/em&gt;. Mike had taken the opportunity to run up behind him
quickly, and planted his first punch squarely on the man’s jaw. It had been a
clean punch, a powerful one, and the man had crumpled to the floor under his
strength.&lt;/p&gt;
&lt;p&gt;Mike grinned and stepped towards the man, raising his hand at the crowd
again, proclaiming his strength. The man looked up fearfully, bleary-eyed
without his glasses, tears streaming from his eyes.&lt;/p&gt;
&lt;p&gt;Mike ignored him completely, and as the man struggled to stand again, on all
fours, Mike planted a swift kick to his stomach, eliciting a gasp and low moan
as the man went down again.&lt;/p&gt;
&lt;p&gt;Mike diabolically repeated the cycle, following the man as he crawled around
the circle, trying to find means of escape. Sometimes he’d let the man stand,
then punch him down to the floor again, other times he’d kick viciously while
the man stood moaning on the ground. Blood was now everywhere, and the sight
of the maroon flow only increased the crowd’s agitation and Mike’s frenzy.&lt;/p&gt;
&lt;p&gt;He was no longer himself. His sole purpose was to beat the pure existence
out of this man. The crowd pulsated at every punch, every kick, and he drew
power from their yells and shouted encouragement.&lt;/p&gt;
&lt;p&gt;At one crowd member’s shouted suggestion, he kicked the man’s head, hard,
while he lay on the ground. The neck whipped back with a satisfying crack, and
the man’s body curled up, motionless. He made no attempt to rise this time.
The crowd crooned approvingly.&lt;/p&gt;
&lt;p&gt;Mike stood over the man’s limp, crumpled body, his bare muscled back
glistening magnificently under the fluorescent lights of the warehouse. The
circle of men chanted methodically. “Finish him… Finish him…” Mike looked
up the faces around him. They were crying for finality, for annihilation, for
blood, and he would give it to them. This was it. He had finally found it.
This was his shining moment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 26: Crash&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“ Just where are we going, son?” Joel’s father seemed puzzled by his son’s
strange request to leave the hospital and drive off somewhere, but he knew his
son well enough to not ask too many questions; Joel wouldn’t flip out like he
had about anything that wasn’t important.&lt;/p&gt;
&lt;p&gt;Joel wished he could answer his dad, but he honestly didn’t know where they
were going. He had woken up in the hospital with an uncontrollable urge to get
up, leave the hospital, and drive somewhere, &lt;em&gt;anywhere&lt;/em&gt;. His mother, not to
mention the doctors, had all protested valiantly, but in the end his father,
sensing the urgency that Joel was attempting to communicate, had volunteered
to take his son where he felt he needed to go, and had successfully silenced
the doctors.&lt;/p&gt;
&lt;p&gt;But his faith in his son was thinning as they drove on aimlessly. Joel was
unable to give any concrete information about their destination, instead
giving last-second directions, forcing him to make hairpin turns and nearly
flipping their old station wagon over several times. But the urgency on Joel’s
face never wavered.&lt;/p&gt;
&lt;p&gt;Joel looked intently out the window, waiting for the next spur of intuition
that would prompt another turn. He thought back on the fading memory of the
dream — is that what it was? — and of the man with the threads, weaving the
cloth. What had it all meant? His father had told him that his heart had
stopped suddenly in the hospital, for no apparent reason, but Joel felt fine
now. In fact, the pain in his side was almost non-existent, though the bloody
piece of gauze taped tightly to his side served as a reminder of his injury.&lt;/p&gt;
&lt;p&gt;He had a suspicion that there was more to his dream than normal. Something
about it felt final, like he was supposed to learn something from it. And the
feeling of complete emptiness when the man had cut the thread… He glanced
down as the memory of that feeling returned; no, there was no hole in his
stomach, thank God.&lt;/p&gt;
&lt;p&gt;He finally answered his father, “I don’t know, Dad.”&lt;/p&gt;
&lt;p&gt;“What?”&lt;/p&gt;
&lt;p&gt;“I don’t know where we’re going.”&lt;/p&gt;
&lt;p&gt;“Ummm, OK… Well, just try to give me a little more warning with the turns,
all right?”&lt;/p&gt;
&lt;p&gt;Joel smiled. His dad hated driving anything more than the speed limit; their
breakneck speed and last minute turns could not be good for his nerves.
“Thanks for doing this, Dad.”&lt;/p&gt;
&lt;p&gt;His father smiled wryly. “Well, it’s not like you gave me much…”&lt;/p&gt;
&lt;p&gt;“Right! Turn right!” Joel shouted suddenly, bracing himself against his seat
as his father complied. The tires screeched angrily, and the drivers behind
them honked as they screamed by, seemingly balanced on two wheels.&lt;/p&gt;
&lt;p&gt;“…choice. It’s not like you gave me much choice,” his father continued
haltingly as they bounced along the narrow side street Joel had directed them
onto.&lt;/p&gt;
&lt;p&gt;“Sorry,” Joel said sheepishly. He didn’t even really know why he had yelled
to turn — it just sort of came out. Well, hopefully it would all make sense
once they arrived at their destination, where ever it was.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Cobb and Ames were on their way to Delome when the call came in over the
radio. “Unit 402… Cobb, Ames , you there?”&lt;/p&gt;
&lt;p&gt;It was Foster. Ames picked up the radio transmitter and responded. “Yeah,
Foster, we’re here. What’s up?”&lt;/p&gt;
&lt;p&gt;“There’s some trouble over on Delome… You guys are headed there, right?”&lt;/p&gt;
&lt;p&gt;“Yeah, we’re on our way right now.”&lt;/p&gt;
&lt;p&gt;“Well pick it up. There’s somethin’ wrong over there. OC called and said
they can’t raise either of the blue and whites on the radio, and Mrs. Riley,
the old woman that had been calling to complain, called in and said that the
noise was louder than it had ever been before. He said it sounded like a war
was goin’ on over there. You’re the closest unit we’ve got, so step on it.
We’re sending backup — be careful.”&lt;/p&gt;
&lt;p&gt;“You’ve got it, Lieutenant.” Ames hung up the radio receiver and looked at
Cobb. “Well, you heard her partner. Let’s go.” Cobb flipped on the siren and
lights, and, as instructed, floored the accelerator.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Neither Joel nor his father even saw the other car zooming into the
intersection. They had heard the siren approaching behind them, and had pulled
as far as possible to the right as the cop car passed them, speeding into the
intersection.&lt;/p&gt;
&lt;p&gt;Joel’s father, monitoring the fla shing lights in his left-side mirror, had
not noticed the red light in the Franklin — Niles intersection until it was
too late. Suddenly the left side of station wagon crumpled with a magnificent
screeching sound, and the world was spinning around them.&lt;/p&gt;
&lt;p&gt;Joel felt weightless for a moment, then felt searing pain in his legs as
they were crushed in a mass of metal. His head bounced viciously against the
top of the station wagon as the huge vehicle spun out of control, and finally
came to a scrapping stop, upside down on the far side of the intersection.
Joel looked over at his father, whose head was slumped back against the
headrest, cuts and scrapes on his face and neck. He wasn’t moving.&lt;/p&gt;
&lt;p&gt;Cold air rushed in from the windows, now free of glass. Joel tried to speak,
but everything was silent. His ears were ringing; he couldn’t hear anything;
the entire world seemed to move in silent slow motion, like a Charlie Chaplin
film at half speed.&lt;/p&gt;
&lt;p&gt;He became aware of movement outside the car. Strange upside-down people came
running towards the car. Faces peered in both windows, shouting something at
him, but he couldn’t hear them above the ringing in his ears.&lt;/p&gt;
&lt;p&gt;His unexplainable sense of purpose, which had driven him to rise from the
hospital bed and brought his father out here along with him, was now gone. He
just wanted to sleep. Couldn’t these people see he just wanted to rest? With a
wave of his hand, he dismissed the faces and closed his eyes, beckoning sleep
to come as his door opened and strong hands pulled him out of the car.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Cobb sat dazed in the driver seat of the car as it came to a stop, having
completed a full 360 degree spin, facing the direction it had initially been
headed. “Holy shit!” he said under his brea th. He looked over at Ames , who
was clutching the dashboard with white-knuckled hands, a breathing hard and
looking straight ahead, wide-eyed.&lt;/p&gt;
&lt;p&gt;“Holy shit is right…” Ames responded, peeling his hands from the dashboard
and looking back over his shoulder at the wreckage behind them. The blue fla
shing lights cast at eerie glow over the whole scene.&lt;/p&gt;
&lt;p&gt;Cars on either side of the intersection had stopped, doors hanging open as
motorists stepped out and ran towards the vehicles to offer what assistance
they could.&lt;/p&gt;
&lt;p&gt;Cobb and Ames now had a dilemma. Ordinarily, their purpose would have been
clear; they would have exited their vehicle and gone back to the scene of the
accident, offering whatever help they could. But in this case, there was also
a developing situation down on Del ome that also required their attention. It
was not immediately clear what they should do, and in fact, either choice
would no doubt leave them with a disciplinary inquiry.&lt;/p&gt;
&lt;p&gt;Ames decided that the other motorists had the accident covered. Ames ’ and
Cobb’s presence would only add more confusion to the scene. He picked up the
radio and motioned for the still-stunned Cobb to move on.&lt;/p&gt;
&lt;p&gt;“Dispatch, this is unit 402, we’ve got an accident at the Franklin — Niles
intersection. Looks pretty bad, send ambulances and road clearing equipment.
Officers leaving the scene in pursuit of another possible crime.”&lt;/p&gt;
&lt;p&gt;“Ten four, unit 402, ambulances are on their way.”&lt;/p&gt;
&lt;p&gt;“Hope everybody’s all right,” Cobb muttered as he sped up again, continuing
on towards the ind ustrial section of town.&lt;/p&gt;
&lt;p&gt;“Not much else we could do. I have a feeling something is wrong with those
blue and whites, and even if we’d stayed, the ambulances would have taken just
as long to get there.”&lt;/p&gt;
&lt;p&gt;“Yeah, I know, but it seems wrong to just leave them there, you know.”&lt;/p&gt;
&lt;p&gt;“Yeah. Let’s hope whatever’s going on down here is worth it.”&lt;/p&gt;
&lt;p&gt;**Chapter 27: Takedown **&lt;/p&gt;
&lt;p&gt;Angelo had a problem. That bitch old woman from down the street had been
calling the cops again, and not one, but &lt;em&gt;two&lt;/em&gt; blue and whites were running
along the street, looking for signs of trouble.&lt;/p&gt;
&lt;p&gt;There was no way he could stop the fight now. The crowd was in too much of a
frenzy, and Mike was doing a hell of a job beating this guy to a pulp. It was
true magic, and if Angelo hadn’t been so preoccupied with dealing with the law
enforcement threat, he would have enjoyed watching the fight himself.&lt;/p&gt;
&lt;p&gt;But now, he stood pacing in front of four bound and gagged city cops,
wondering what he should do. He had sent out several of his best men to grab
the cops before they could call for backup, but he couldn’t be sure they had
succeeded entirely, and even if they had, it wouldn’t be long until backup
would show up anyway, since no one was responding to the radio calls.&lt;/p&gt;
&lt;p&gt;Shit! Why tonight? Mike was giving them the show of a lifetime out there –
he’d bring in at least &lt;em&gt;double&lt;/em&gt; the normal attendance next week! But he’d
probably have to stop the fight early. He couldn’t risk getting shut down at
this point, and he had little doubt that more cops were on their way.&lt;/p&gt;
&lt;p&gt;He motioned to the men who stood guard over the bound officers, and they all
stepped out of the small closet room, closing and locking the door behind
them.&lt;/p&gt;
&lt;p&gt;“OK, here’s what I want you to do… Go around quietly to the outside of the
fight circle and let people know cops are on their way. It won’t take long for
word to get around. People’ll start clearin’ out on their own. I’m getting’
out of here.”&lt;/p&gt;
&lt;p&gt;“What about the guy?” one of the men asked, motioning towards the arena
where Mike stood hunched over, delivering vicious blows to Ernie’s back and
skull.&lt;/p&gt;
&lt;p&gt;“Leave ‘im. We don’t have time to deal with ‘im right now.” It was a pity,
really, since Mike had already shown such promise, but Angelo didn’t have much
choice at this point. Mike was crazed — out of his mind — right now. It would
take him too long to cool down enough to be lucid. Angelo couldn’t take the
risk of being anywhere near here when the cops showed up.&lt;/p&gt;
&lt;p&gt;His men ran off to follow his directions, and he turned, Marty close behind,
towards the door where his car waited outside. He shot one glance back towards
the arena, where Mike’s latest maneuver elicited another scream of approval
from the frenzied crowd. _What a shame. _&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As Cobb and Ames made the final turn towards the industrial section, they
noticed several cars moving quickly towards the highway, headed the opposite
direction. “Looks like we missed the party,” Ames commented, taking note of
the frantic, frightened look on the face of one of the drivers as he passed
by.&lt;/p&gt;
&lt;p&gt;“Not quite,” Cobb responded. “Look.” He pointed ahead to a warehouse on the
left side of the street. Faint light streamed from the windows, and men in
business suits and loose ties poured out of the doors, scrambling over each
other towards lots on either side of the building, where their cars sat,
obscured behind overgrown weeds and shrubbery.&lt;/p&gt;
&lt;p&gt;“Well, somethin’s been goin’ on,” Ames commented, drawing his gun from his
waist and preparing to jump out of the car at a moment’s notice.&lt;/p&gt;
&lt;p&gt;“I’m going to pull up to the back,” Cobb said, turning the steering wheel
expertly to the left. “There’s no way we’re gonna take all these guys by
ourselves. Let’s go in the back and see if we can find out what’s going on.
There’s gotta be somethin’ going on in there.”&lt;/p&gt;
&lt;p&gt;Ames nodded as he checked the barrel on his gun again. He was ready.&lt;/p&gt;
&lt;p&gt;Cobb pulled the car to a screeching halt and the detectives threw both doors
open, pumped out, and ran to the back door, one on either side of it, backs
pressed against the wall. Ames nodded, and Cobb turned and kicked the door in
with a crash. Ames followed him into the building, gun held ahead of him at
the ready.&lt;/p&gt;
&lt;p&gt;They moved quickly through the small labyrinth of office and maintenance
rooms, checking for anyone or anything, but no one was there.&lt;/p&gt;
&lt;p&gt;They eventually came to the small hallway which led to the main area of the
warehouse. Light crept under the closed double doors leading into the room,
and from their position they could hear echoic footsteps a man shouting.
“Wait! Where are you going? What the hell do you think you’re doing? Get back
here! You’re missing the fuckin’ grand finale!”&lt;/p&gt;
&lt;p&gt;They stepped through the heavy doors and saw a man, bare-chested, covered in
a sheen of perspiration and grit, standing over a bloody mess of a man, a
crazed look in his eyes, shouting at the opposite side of the room, where the
swinging doors indicated the last of the spectators had recently departed.&lt;/p&gt;
&lt;p&gt;“Freeze! Police!”&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Mike’s audience was gone. Out of the corner of his eye, he had seen the
exodus begin. Someone had yelled, “The cops are coming!” With that, the entire
room had turned into a stampede of suits, each one heading for the door as
fast as he could.&lt;/p&gt;
&lt;p&gt;Mike was surprised and annoyed that they were such pussies. The cops? What
could they do to him? He was fuckin’ invincible! He could take a whole army of
cops on himself, none of the men would have to worry at all — he could protect
them.&lt;/p&gt;
&lt;p&gt;He shouted at them to stay, to watch his finale, to observe his final
crushing of the man beneath his foot, but his words fell on deaf ears. When
the last of the men passed through the double doors to the cold night outside,
he became aware of movement behind him.&lt;/p&gt;
&lt;p&gt;“Freeze! Po lice!” He turned and eyed the two men warily. Were they serious?
&lt;em&gt;This&lt;/em&gt; was who’d been sent to take &lt;em&gt;him&lt;/em&gt; on? They leveled their guns on him
and repeated their warnings.&lt;/p&gt;
&lt;p&gt;Mike looked down at the mess below him. He had done quite a job. Angelo had
been right when he had called him an artist. The blood smeared across the
cold, dusty concrete from his opponent’s escape attempts did remind him of a
Jackson Pollack work.&lt;/p&gt;
&lt;p&gt;He leveled his eyes with the two police officers in front of him. They
continued to yell at him, but he ignored them. He was invincible, right? Fuck
them! They’d pay, just like everyone else had.&lt;/p&gt;
&lt;p&gt;With that thought he screamed his battle cry and ran towards them, sweat,
blood, and dirt sliding off of him and landing in miniature puddles on the
floor behind him. He was an ancient warrior, an animal, the personification of
rage, brutality incarnate. None would stand in his way.&lt;/p&gt;
&lt;p&gt;The first bullet struck him on his right side, and threw him slightly off
balance, but the second bullet struck his left side, restoring his balance.
Was this the best they could do? He barreled on, until the third, fourth, and
fifth bullets whizzed through his chest. He was vaguely aware of the small
explosions of blood that erupted as they pierced his skin, and he faltered.
His mind willed his legs to continue their motion, their support of his body,
but they refused.&lt;/p&gt;
&lt;p&gt;He fell on the floor in front of the detectives, sliding forward as far as
the force of his momentum would carry him, and ended in a heap of crumpled
humanity at the feet of the detectives.&lt;/p&gt;
&lt;p&gt;His chest heaved, and he willed himself to rise up, to destroy these
bastards, but his body refused, and he exhaled once in final defeat before his
body ceased to move at all.&lt;/p&gt;</content:encoded></item><item><title>Turducken!</title><link>https://tylerbutler.com/turducken/</link><guid isPermaLink="true">https://tylerbutler.com/turducken/</guid><description>Turducken!</description><pubDate>Thu, 25 Nov 2004 00:32:00 GMT</pubDate><content:encoded>&lt;p&gt;I really should be writing my novel right now, since it is due in six days and
I still have quite a bit to write, but this is just too cool. I heard about it
on the radio yesterday, and I wish I’d heard about it sooner, because I would
have ordered a turducken for Thanksgiving, instead of buying a bunch of fried
chicken from Popeye’s, which is what I am probably going to do. What is a
turducken, you ask? Only the &lt;strong&gt;coolest&lt;/strong&gt; thing ever known to man: It’s a
boneless chicken stuffed in a bonless duck, stuffed in a boneless turkey. The
whole thing is stuffed with Cajun sausage, I believe. I should have known
something this awesome would come from the Cajun culture. Anyway, you can
actually purchase them online at &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.cajungrocer.com%2Fproduct_info.php%3FcPath%3D15_24%26products_id%3D340&quot;&gt;CajunGrocer.com&lt;/a&gt;, which I plan to do as
soon as the holiday is over. I’ll let you know how it goes. My mouth is
watering already…&lt;/p&gt;</content:encoded></item><item><title>November 23rd</title><link>https://tylerbutler.com/november-23rd/</link><guid isPermaLink="true">https://tylerbutler.com/november-23rd/</guid><description>November 23rd</description><pubDate>Wed, 24 Nov 2004 14:52:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 21: The Mark&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ames and Cobb were excited. Joel had been able to give them a description,
albeit a rather poor one, but he’d also been able to give them a rough sketch
of the tattoo the man had on his hand, and &lt;em&gt;that&lt;/em&gt; was something that they
could look into.&lt;/p&gt;
&lt;p&gt;They ignored the dagger-like stares of Joel’s parents as they stood up
quickly, their movements taking on an almost frenzied speed, and rushed out of
the room, murmuring thanks to Joel as they went. Joel was just glad to be rid
of them. The pain had returned, and he was overcome with weakness again. Sleep
overcame him as Karen wordlessly maneuvered the notebook from his hands and
walked briskly out of the room, trying to catch up to Ames and Cobb.&lt;/p&gt;
&lt;p&gt;Ames had a feeling that he had seen the mark before, but he couldn’t
remember where. Maybe if he looked at it again… Wait, where was the sketch?&lt;/p&gt;
&lt;p&gt;“Damn it, Cobb, we forgot the sketch.” They both turned and nearly bowled
over a panting Karen, who thrust the note book at them. Cobb and Ames smiled.
“Thanks Karen. See you back at the station.”&lt;/p&gt;
&lt;p&gt;They turned and continued out of the hospital and on to their car. Ames took
the passenger seat and examined the sketch more closely as Cobb started the
engine and headed out of the parking lot, turning towards the station.&lt;/p&gt;
&lt;p&gt;“Recognize something, Ames ? ” Cobb asked, amused at his partner’s look of
complete perplexity as he peered at the sketch.&lt;/p&gt;
&lt;p&gt;Ames sighed and reluctantly moved his eyes away from the sketch. “I dunno.
It looks so familiar.” He shook his head. “But I can’t put my finger on it
right now.” He rubbed his eyes and leaned his head back against the headrest.&lt;/p&gt;
&lt;p&gt;“What a day. I’ll be glad when we can get some rest. What time is it,
anyway?”&lt;/p&gt;
&lt;p&gt;Cobb glanced at the green clock in the dash. “‘Bout 4:30,” he said. “No rest
‘til we get this thing straightened out though — I’ve got a feeling we’re on
to something. We need to finish this out as soon as we can. This is a make-it-
or-break-it case for us, you know?”&lt;/p&gt;
&lt;p&gt;Ames gave a low snore as a response, and Cobb smiled. Might as well let him
sleep for the few minutes it would take them to get to the station. It would
hopefully clear his head enough to help him remember where he’d seen the
tattoo before.&lt;/p&gt;
&lt;p&gt;The station was clearing out when they arrived. It was quitting time for
many of the administrative workers, and the parking lot was becoming deserted
as they pulled in.&lt;/p&gt;
&lt;p&gt;Their first stop was Foster’s office. She was on the phone when they
entered.&lt;/p&gt;
&lt;p&gt;“I understand that, Mrs. Mendocino. I will speak to them. Of course. If you
have any other concerns, please just give me a call. I know… you’ll be the
first to know. And if your son happens to think of anything else, please let
us know. OK, you have a nice day, and I am sorry about your son… Bye bye.”&lt;/p&gt;
&lt;p&gt;Foster exhaled slowly as she laid the handset down. “That was Joel
Mendocino’s mother. She was upset because you stormed in and disturbed her
son.” She looked up at them pleadingly. “Was it really necessary to barge in
there like you did?”&lt;/p&gt;
&lt;p&gt;“We ran into a complete dead end, Lieu. We figgered the kid could probably
give us more information than he already had, and based on other things we
were able to find out, we think this case may be bigger than just a simple
mugging.”&lt;/p&gt;
&lt;p&gt;“Really? What have you found?”&lt;/p&gt;
&lt;p&gt;Both Cobb and Ames pulled out their notebooks, scanning the cluttered pages
for reminders of the day’s conversations. “Well, we got confirmation that the
dead victim &lt;em&gt;is&lt;/em&gt; homeless. His name is Darryl; we weren’t able to get a last
name. He’s in and out of St. Ives, a homeless shelter down around McAllister
Park .”&lt;/p&gt;
&lt;p&gt;Ames continued, “We went and talked to a number of homeless people in the
area, especially down on 59 th , and they all told us stories of some
‘abductions,’ for lack of a better word, of homeless people these lat few
weeks. Seems they all show up a day later, all beat up. Apparently it happened
to Darryl, but no one we spoke to could tell us if it somehow related to his
death.”&lt;/p&gt;
&lt;p&gt;Ames paused, and Cobb interjected again. “Both of us feel like the
abductions and Darryl’s death are related, but we’re not sure how yet…”&lt;/p&gt;
&lt;p&gt;“But this,” Ames said, slamming the sketchbook down on Foster’s desk
excitedly. “May be the link between everything. Joel Mendocino was able to
sketch this for us. He said that the man who’d shot him had that symbol
tattooed on his hand.”&lt;/p&gt;
&lt;p&gt;Foster held the sketch up to the light, examining it more closely. She
frowned. “You said there have been a lot of abductions lately?”&lt;/p&gt;
&lt;p&gt;Ames nodded. “Is it possible that Darryl told someone a little too much
about his experience and they had to have him killed?”&lt;/p&gt;
&lt;p&gt;Cobb smiled. “That’s what we’re thinking.”&lt;/p&gt;
&lt;p&gt;“Well, check with Organized Crime,” Foster said, handing the sketch back to
Ames . “See if the sketch rings any bells with them. If these abductions are
related, then there’s probably a kingpin involved somewhere along the line. OC
might know something about it.”&lt;/p&gt;
&lt;p&gt;Ames and Cobb nodded before turning and exiting the office, walking to their
own desks in the main office. The station was still populated, but the usual
bustle of the day had calmed down substantially since everyone had gone home.&lt;/p&gt;
&lt;p&gt;Cobb picked up his phone and dialed the extension for the Organized Crime
division as Ames headed back towards the records room. “Hi, this is Detective
Cobb from Homicide. We got a victim over here, homeless man, possibly related
to a rash of abductions and assaults that’s been happening recently in the
McAllister Park area. One of the shooters had a mark on his hand. We’ve got a
sketch, and we were wondering if you guys could take a look and see if you
recognize it. Sure. OK, I’ll do it right now.”&lt;/p&gt;
&lt;p&gt;He out down the receiver. “They want me to fax it over.” He walked over to
the fax machine and fed the paper quickly through. Ames returned carrying a
stack of folders and sat down, poring through them.&lt;/p&gt;
&lt;p&gt;“These are reports from some of the other assaults that have been reported
by hospitals recently. Most of them are from McAllister Park , which isn’t
surprising in and of itself, but here’s something interesting. There are other
reports of assault-like wounds from some middle-aged businessmen from the same
day or the day following the same report from a homeless man. Coincidence?”&lt;/p&gt;
&lt;p&gt;Cobb glanced over Ames ’ shoulder at the cluttered data in front of them.
“So what are you thinking?”&lt;/p&gt;
&lt;p&gt;“I dunno. But it seems strange to me that a bunch of businessmen get beat
up, and a bunch of homeless men get beat up, all at the same time, and nobody
wants to press charges or talk about it. Hell, a lot of them made excuses
like, ‘I fell down the stairs,’ or some bullshit like that.”&lt;/p&gt;
&lt;p&gt;The phone rang, shattering their contemplation. Cobb picked up. “This is
Cobb. Uh-huh. Really? So soon, huh? Great. Yeah, fax it over. You say there’s
a unit over in the area right now? OK, yeah, I’ll do that. OK, thanks a lot.
Bye.”&lt;/p&gt;
&lt;p&gt;Ames looked up from his reading excitedly.&lt;/p&gt;
&lt;p&gt;“Well, we got a match,” Cobb said, walking over to the fax machine, where a
copy of a police report was spitting out. “The OC guys said there’s an
warehouse over on Delome that has been investigated by some blue and whites
for the past couple of weeks. A woman has been calling to complain about noise
coming from it for awhile, but by the time the blue and whites get out there,
there’s nothing to be seen.”&lt;/p&gt;
&lt;p&gt;“But how does this tie into the tattoo, and what does OC have to do with it?
And furthermore, what’s a woman doing &lt;em&gt;living&lt;/em&gt; down on Delome?”&lt;/p&gt;
&lt;p&gt;Cobb chuckled. The old industrial section of the city centered around Delome
Avenue , and it was generally considered to be one of the worst places in the
city to live, but some residents refused to move.&lt;/p&gt;
&lt;p&gt;“Well, OC started looking into it because there was a major OC-related drug
bust around the area, and they’re thinking the entire area is probably used by
gangs and whatnot for all kinds of nefarious activities. So they had a few of
their guys look into it, and he remembers seeing a symbol sort of like the
tattoo on the shooter’s hand etched into a door on one of the warehouses. They
sent a blue and white out there tonight to keep an eye on things, and see if
they could figure out what’s going on. What do you say we join ‘em.”&lt;/p&gt;
&lt;p&gt;“Worth a shot, I guess. Strange that a mark like that would be etched in a
door, but whatever. Thank God for small miracles, I suppose. Let’s go.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 22: Disappearance&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The silence that had followed James’ story was finally broken by Holly’s
expression of thanks. She stood up slowly, reaching her hand towards the
grizzled storyteller.&lt;/p&gt;
&lt;p&gt;“Thank you, James, for telling us about this.”&lt;/p&gt;
&lt;p&gt;“Wal, I figgered somebody oughtta know. Somethin’s got to be done, I think.
I mean, most folks don’t seem to care too much about us down here, but still,
it just ain’t right for us to get kidnapped and beat up like we do. Anyway, I
hope maybe you all can tell the right people…”&lt;/p&gt;
&lt;p&gt;Holly smiled as she released his hand. Ned nodded in acknowledgement and
thanks as he and Holly turned around, looking for Ned and Ken. They weren’t
sitting behind them where they had been initially. Where had they gone?&lt;/p&gt;
&lt;p&gt;Holly glanced around frantically and began to call Ernie’s name. Ned calmed
her down. “Holly… maybe they’ve just gone to the van… let’s just go and
look.” He took her hand and led her towards the van. Holly wasn’t calm. The
stress of the day was finally catching up to her. She needed a stiff drink –
&lt;em&gt;very&lt;/em&gt; stiff.&lt;/p&gt;
&lt;p&gt;And now Ernie had disappeared! Her emotional side had taken over, leaving
rationality by the wayside, and Ned’s confidence was not as comforting as it
ordinarily was. She continued to look around as Ned dragged her towards the
van, and called Ernie’s name at increasing volume even after they had left the
bounds of the bridge community.&lt;/p&gt;
&lt;p&gt;Ned, unlike Holly, still had a sense of rationality despite the straining
and confusing events of the day. Perhaps it was the fact that he was an
engineer, a professional, perhaps it was that he was male, but whatever the
reason, he was dealing with the situation as calmly and coolly as could be
expected.&lt;/p&gt;
&lt;p&gt;Upon their arrival at the van, he peered around, looking for signs of Ernie
and Ken both in and around the vehicle, but he found none. And Ken’s bike
wasn’t in the back. His initial reason for going to the van was to see if the
bike was still there, but upon inspection, he remembered that Ken had insisted
that he remove it when they had arrived. Holly was growing increasingly
agitated, allowing the worry of her maternal instinct get the best of her.&lt;/p&gt;
&lt;p&gt;“Holly! Cal m down! I am going to go back and see if they went to the east
side of the bridge. I’ll be back in a few minutes. You wait here in case they
come back. OK?”&lt;/p&gt;
&lt;p&gt;Holly nodded reluctantly in response. Ned made sure she was comfortable in
the passenger seat of the van, then turned and walked back towards the bridge.
He made his rounds, following roughly the same path that the quartet had made
earlier in the day, but no one had seen Ernie or Ken for quite some time. Some
people reported seeing them ride off on the bike about 45 minutes ago, so
Ned’s suspicion that they had left of their own accord was satisfactorily
answered.&lt;/p&gt;
&lt;p&gt;He returned to the van and continued to try and calm Holly, reassuring her
that both Ernie and Ken were not stupid, that they knew this area of town
well, that they had most likely ridden home on their own; they were fine.&lt;/p&gt;
&lt;p&gt;Holly didn’t seem to believe him, but she reluctantly calmed down and agreed
that they should drive home. She could call St. Ives from home and make sure
Ernie was back. Ned was glad when he finally spun the wheel and maneuvered his
way back onto the road. He wanted to get home and have a stiff drink himself.&lt;/p&gt;
&lt;p&gt;When he reached Holly’s small apartment, he debated whether or not to leave
her alone. She had calmed down considerably during the trip, and assured him
that she’d be fine. If she felt she needed anything, she’d call him and let
him know. She exited the van and waved half-heartedly as she opened the door
to her apartment building and entered.&lt;/p&gt;
&lt;p&gt;Ned felt like he needed to calm his nerves, and driving had always been a
good way to do that, so he decided to take the long route home. His mind
wandered back to his homeland as he drove.&lt;/p&gt;
&lt;p&gt;One of the core reasons that he and Lavina had emigrated to America was to
escape the violence that had plagued their country. Thankfully, neither Ned
nor Lavina had ever experienced the violence firsthand, but they had heard
terrible stories of roving “death gangs” that would travel around, raping,
beating and robbing anyone who got in their path. If they didn’t physically
kill you, they’d do enough psychological damage that it was essen tially the
same.&lt;/p&gt;
&lt;p&gt;Ned shook his head. America was not the land of promise that he had hoped
and dreamed it would be when he had contemplated the move from his European
home. America was no better than the rest of the world — it had the same
vices, the same violence and depravity, the same distaste for the less
fortunate. No, America was not the land he had been promised.&lt;/p&gt;
&lt;p&gt;He approached the small house that his family called home and parked the van
on the street on the next block. His six children poured out of the front door
of the house, the older ones smiling in warm welcome, the youngest running up
to him and attaching themselves steadfastly to his legs. It had been an entire
day! How had they &lt;em&gt;ever&lt;/em&gt; gotten along without him?&lt;/p&gt;
&lt;p&gt;He walked, children in tow, towards their home. Lavina stood in the doorway,
a strange expression of disapproval on her round face. Ned entered the house
and hugged her close, ignoring the children’s burst of laughter as he swept
her back and kissed her fiercely on the lips. What a wonderful family they had
created — together!&lt;/p&gt;
&lt;p&gt;But it soon became apparent that Lavina was not in the mood to revel in the
marvelous nature of their family. She pushed him away and said, “Someone is on
the phone for you. Young and she sounds upset.”&lt;/p&gt;
&lt;p&gt;Ned sighed. Lavina had so many astonishing qualities, but she was jealous.
She thought that every young America n girl was on a personal mission to steal
her husband away, and she fought fiercely for her man, though Ned knew &lt;em&gt;that&lt;/em&gt;
battle had been won long, long ago.&lt;/p&gt;
&lt;p&gt;He walked into the small living room, sitting down heavily on the chair that
was his. The children did try, on many occasions, to claim it for themselves,
but it was well acknowledged among all members of the family that when Ned was
home, the chair was &lt;em&gt;his&lt;/em&gt;, and no one else’s.&lt;/p&gt;
&lt;p&gt;He was looking forward to a few minutes of relaxation on the chair, then it
would be time to do something really fun — work on the Jetta and get it up and
running again. He grinned just at the thought of getting under the hood and
immersing his hands in the greasy machinery.&lt;/p&gt;
&lt;p&gt;He picked up the receiver and held it to his ear. “Hello?”&lt;/p&gt;
&lt;p&gt;“Ned…” It was Holly, and she was crying. “I called St. Ives, and they said
he isn’t there! He hasn’t come home yet! Ned, something’s wrong, I know it. I
can’t explain it, but I &lt;em&gt;know&lt;/em&gt; something isn’t right!”&lt;/p&gt;
&lt;p&gt;“OK, what do you want to do?” Ned was tired, but he knew he couldn’t just
let her sit in her apartment, by herself, and worry. No, he had an obligation,
as both a friend and a man, to help her — to make sure she felt like she was
helping the situation — if there even was a “situation.”&lt;/p&gt;
&lt;p&gt;“Let’s go look for him. Maybe he’s hurt or something, you know, and if we
could just…”&lt;/p&gt;
&lt;p&gt;“Holly, he’s probably OK — the chances of something happening are just
so…”&lt;/p&gt;
&lt;p&gt;“ &lt;strong&gt;&lt;em&gt;Dammit&lt;/em&gt;&lt;/strong&gt;, Ned! I &lt;strong&gt;&lt;em&gt;know&lt;/em&gt;&lt;/strong&gt; he’s not OK!” she screamed into the
phone, forcing Ned to move the handset away from his hear in a self-preserving
reflex.&lt;/p&gt;
&lt;p&gt;“OK, OK, we’ll go looking for him. I’ll be there in 20 minutes.”&lt;/p&gt;
&lt;p&gt;“Thanks Ned.”&lt;/p&gt;
&lt;p&gt;“OK. I’ll see you in a few minutes.”&lt;/p&gt;
&lt;p&gt;“OK, bye.”&lt;/p&gt;
&lt;p&gt;“Bye.”&lt;/p&gt;
&lt;p&gt;He set the handset gently back on it’s rest, and laid his head back on the
chair, closing his eyes blissfully for a few seconds. Well, rest, relaxation,
and the Jetta would have to wait.&lt;/p&gt;
&lt;p&gt;He stood up and called to Lavina. “I have to go out. Holly is worried about
one of the homeless guys she knows, and I’m going to go help her look for him.
I should be back in a couple of hours or so.”&lt;/p&gt;
&lt;p&gt;Lavina met him in the hallway with yet another disapproving gaze. Out with a
beautiful young woman, no doubt. Well, &lt;em&gt;this&lt;/em&gt; one wouldn’t steal her husband
away, oh no. She’d make sure of &lt;em&gt;that&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Ned shook his head, knowing what she was thinking. “You needn’t worry,
darling. You’re the only woman for me.” He reached for her but she pulled
away. Oh well, someday she’d get over it.&lt;/p&gt;
&lt;p&gt;“OK, well I will see you and the children when I get back. Children, be
good, obey your mother, and I’ll be back soon.” A chorus of acknowledgments
came from various corners of the house, and he turned, threw his jack over his
shoulders, and stepped out into the darkness.&lt;/p&gt;</content:encoded></item><item><title>November 21st</title><link>https://tylerbutler.com/november-21st/</link><guid isPermaLink="true">https://tylerbutler.com/november-21st/</guid><description>November 21st</description><pubDate>Mon, 22 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;**Chapter 20: Kidnapped **&lt;/p&gt;
&lt;p&gt;Mike’s surrounding’s slowly faded into view as he came to. He had been
unconscious twice today! It was starting to wear on his mind physically, not
to mention his self-confidence.&lt;/p&gt;
&lt;p&gt;He soon realized that he was tied, completely unable to move, to a chair in
the center of Angelo’s office. The pieces of the broken coffee table still lay
in front of the loveseat, though the girl was now gone. He struggled against
the ropes that tied him down, but they were tight around his wrists and
ankles, and the metal chair to which he was tied seemed too tough to break. It
wouldn’t matter much, anyway. There was no way he’d make it out of the
warehouse alive. He was more likely to rob a casino and run out of the front
door unopposed than to get out of the warehouse with his skin intact.&lt;/p&gt;
&lt;p&gt;He was, to be honest, a little surprised to find himself still alive anyway.
It was very uncharacteristic of Angelo. But Angelo did have a bit of the James
Bond villain in him, and Mike assumed that a delightfully painful death or
maiming awaited him.&lt;/p&gt;
&lt;p&gt;Angelo entered from the side door, smiling at Mike’s present consciousness.
He was closely followed by Marty, the man whose blow from behind had created a
lump on Mike’s head that still ached painfully.&lt;/p&gt;
&lt;p&gt;“Well, Mike, it certainly is good to see you awake. It’s just not
gentlemanly to come and visit someone, then fall asleep while they’re trying
to be hospitable.” Mike ignored him as he paced around the chair to which Mike
was tied, his hands held behind his back in their customary formation, a smile
of supreme, gloating self-confidence written on his face.&lt;/p&gt;
&lt;p&gt;“You may be wondering, Mike, why you are still alive after such an egregious
breach of my rules, of the trust that you and I have built over these past
months.” He paused, waiting for a response from Mike. There was none.&lt;/p&gt;
&lt;p&gt;“And well you should. Ordinarily I would have killed you immediately –
wouldn’t have blinked, wouldn’t have given you a second thought.” He paused
again, ensuring Mike was listening.&lt;/p&gt;
&lt;p&gt;“But I like you, Mike. I do. So I thought I’d give you a chance. You’ve
always been one to stick to my rules in the past, Mike, which gave me reason
to believe that something had happened to you. So, being the extremely
generous individual that I am — I &lt;em&gt;am&lt;/em&gt; a humanitarian at heart, Mike, you
must believe me — I did a little sleuthing and discovered some very
interesting things about you Mike.”&lt;/p&gt;
&lt;p&gt;Mike bristled. What the hell had Angelo dug up on him? And how had he done
it so quickly? Surely he hadn’t been out &lt;em&gt;that&lt;/em&gt; long…&lt;/p&gt;
&lt;p&gt;“Mike, I don’t know how to express to you my regret that Copeland saw fit to
fire you today.” That son of a &lt;em&gt;bitch&lt;/em&gt;! “But Mike, you have to understand the
company’s position — you simply weren’t performing for them. You were a bad
horse to bet on, Mike. And you know something about betting on bad horses,
don’t you?” Angelo glanced at Mike, taking a perceptible pleasure in his
discomfort at the enraging comments.&lt;/p&gt;
&lt;p&gt;“But it didn’t stop there, Mike, and I can honestly say that I fully
understand your actions in light of the new developments on the Turner home
front. From what I hear, Mrs. Marie Turner has told the police all about her
enraged husband who came home early and, in a fit of rage, brutally killed the
man she called her ‘one, true love.’ Sad, really. You really need to learn to
control your anger, Mike. Didn’t I warn you about that last time we discussed
the races? Well, it doesn’t matter… it’s obvious you didn’t listen.” He
raised his hands above his head in mock consternation.&lt;/p&gt;
&lt;p&gt;“Why do I even try? It’s so obvious that no one ever takes my advice to
heart!” Mike struggled violently against the ropes, causing the chair, and
himself, to fall to the floor, crushing his immobile arm uncomfortably beneath
him as he lay on his side.&lt;/p&gt;
&lt;p&gt;Angelo knelt down, bringing his sweaty face within inches of Mike’s. His
breath reeked of acrid smoke and stale coffee; his eyes were still bloodshot
and spacey from the drugs. The toothpick he chewed in his mouth was crushed to
fine fibers from hours of nervous chewing. “The police are crawling the city
looking for you, Mike. It won’t be long before they find your wife’s SUV
outside… and then, I’ll have no choice but to hand you over. After all, I am
a law-abiding citizen — I don’t want to be party to a &lt;em&gt;murder&lt;/em&gt;!”&lt;/p&gt;
&lt;p&gt;He stood up, resuming his pacing. Mike remained on the floor, looking up at
Angelo, whose body seemed oddly out of proportion from this strange angle. “I
have a little surprise for you, Mike. A solution to &lt;em&gt;all&lt;/em&gt; your problems. You
see, I have the resources necessary to keep you from the pigs’ hands. I can
keep you safe. And all I ask in return is a little…” He held his index
finger and thumb slightly apart, illustrating just how little “a little” was.
“…Cooperation. Just a little cooperation. And if this goes well, I may even
be willing to forgive you that sizeable debt that you owe me. Now wouldn’t
that be something?”&lt;/p&gt;
&lt;p&gt;Angelo’s mock-friendliness was beginning to annoy Mike, and the lack of
blood flow to his right arm was becoming extremely uncomfortable. He struggled
again against the ropes, but he had even less mobility than when he had made
his previous attempt, and his movements only confirmed the futility of his
situation.&lt;/p&gt;
&lt;p&gt;“Oh, Mike, forgive me, please! What a terrible host I am!” Angelo motioned
to Marty, who stood Mike’s chair back on it’s four legs. Mike winced as the
blood rushed back into his right arm, sending burning needles through its
entire length.&lt;/p&gt;
&lt;p&gt;“You must forgive me, Mike. Sometimes I just get so caught up in the moment
that I forget my guests completely. It’s never intentional, I promise you.”&lt;/p&gt;
&lt;p&gt;The phony act was really getting old. “You know what, Angelo, just cut the
bullshit and get to the point.”&lt;/p&gt;
&lt;p&gt;Angelo frowned. He was having fun. But business was business. “Fine,” he
said. “Mike, you’re in deep shit. The cops are after you because of your
little ‘indiscretion’ back at your house. So really, you don’t have much
choice. You’re going to do what I tell you, or I turn you over to the cops.
It’s that simple. Understand?”&lt;/p&gt;
&lt;p&gt;Mike chose not to dignify the patronizing question with a response. Angelo
continued anyway. “You really should see the pictures of the man you killed,
Mike. It’s brilliant, the brutality of it, the unbridled primal passion of it
all. It’s damn near a work of art! And that’s what I need — an artist –
someone with a sense of the truly brutal, the truly primal. Someone like you,
Mike.&lt;/p&gt;
&lt;p&gt;“The organization I work with organizes a weekly ‘fight,’ of sorts, and
you’re going to be the next prime attraction. You’re going to tap into that
vicious side of yourself that you love to channel so much and beat some other
guy to all hell. Or you’ll get beat to hell yourself. Either way, I win.”&lt;/p&gt;
&lt;p&gt;He got close in to Mike’s face again. “Remember what I used to tell you,
Mike. The house &lt;em&gt;always&lt;/em&gt; wins.” He smiled eerily. “Tell you what, you think
about it, and let us know.”&lt;/p&gt;
&lt;p&gt;With that, a swift painless knock against his head brought on the blackness
once again.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ernie was walking alone along the nearly empty street, on his way back to
St. Ives. He hadn’t lasted long when James had started telling his story.
There were too many details, too many things to remember. Ernie liked his
stories short and sweet, and happy too. That was the worst part about James’
story — it had a sad ending.&lt;/p&gt;
&lt;p&gt;He had grown bored and restless quickly, so he and Ken had left Ned and
Holly and had continued around the area asking people about Darryl. But Ken
had grown restless too, worried that his parents would be expecting him soon.&lt;/p&gt;
&lt;p&gt;Ned and Holly were nowhere to be found, but fortunately, Ken had already
claimed his bike from the back of Ned’s van, anticipating needing to leave
before the others. 59th Street was within biking distance of Ken’s home, so
he and Ernie set off towards the nice suburban neighborhood, Ernie riding on
the rear pegs again.&lt;/p&gt;
&lt;p&gt;The corner was empty as they passed by on Ken’s bike; the kids had all gone
in for the evening. The sun was sinking low — night was almost upon them.&lt;/p&gt;
&lt;p&gt;Ken had offered to let Ernie stay in the garage again, so that Ernie
wouldn’t need to make the dangerous journey back to St. Ives, but Ernie had
grown hungry again, and he longed for some of Rho nda’s soup and the warmth of
his soft, familiar bed. So despite Ken’s protests and his own judgment, he had
set off alone back towards St. Ives.&lt;/p&gt;
&lt;p&gt;The light had steadily decreased as he had progressed on his trip, until the
sun had dropped completely beyond the curvature of the earth, leaving nothing
but the occasionally visible stars and moon and the flickering streetlamps to
light the way.&lt;/p&gt;
&lt;p&gt;Ernie wasn’t particularly nervous. He had made the trip plenty of times
before, and even in the darkness, but the stories that he and Ken had been
hearing throughout the day of mysterious abductions caused him to be more wary
than normal.&lt;/p&gt;
&lt;p&gt;There was nothing to give him concern, though. The street was quiet, except
for the occasional rustle of a paper cup or newspaper blowing along the
asphalt in the wind. Every so often, a car would round a corner and pass
slowly by him, but for the most part, he had the entire quiet street to
himself.&lt;/p&gt;
&lt;p&gt;And so he walked on, not paying much attention to the car that passed by
him, moving more slowly than the others, and not noticing that it was the same
car that had passed him three ties now. It came to a stop at the curb a half
block in front of Ernie, and the back door opened. A nice looking man stepped
out, dressed in a suit and tie, wearing a fedora on his head, and smiling
broadly at Ernie as he approached.&lt;/p&gt;
&lt;p&gt;“Ernie!” he exclaimed as he approached, arms wide in greeting. “I thought it
was you! I’m glad I stopped. No music today?”&lt;/p&gt;
&lt;p&gt;Ernie didn’t recognize the man. How did he know his name? He stiffened as
the man encompassed his body with his arms.&lt;/p&gt;
&lt;p&gt;“I haven’t seen you in awhile! Hey, are you heading to St. Ives? How about a
ride? It’s getting kind of chilly out here… I’m sure Rho nda would prefer it
if you came in and got yourself something to eat. How about it?” He motioned
to the still open back door of the car a few meters in front of them.&lt;/p&gt;
&lt;p&gt;Ernie nodded. This man may know him, but Ernie didn’t recognize his face,
and Rho nda had warned him nev er to get into strange cars with people he
didn’t know. In fact, Rho nda had been clear that he shouldn’t even speak with
those he didn’t know, but he wasn’t really brea king that particular rule; the
other man was doing all the talking.&lt;/p&gt;
&lt;p&gt;Ernie stepped around the man and continued on his way, but the man followed
him and kept talking. “Oh, come on, Ernie,” he said, wrapping one arm around
him as if they were pals. “I really have something I want to talk to you
about! I know you have a lot of problems… you know, money problems, and
problems remembering things, and stuff… I just want to help you out. Tell
you what, get in the back of the car, and I’ll feel you in on my plan… I can
solve all of your problems, I can get you out, Ernie, honest, but you need to
get in the car.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If a man ever comes to you, sayin’ he’s got da answer, dat he can get you
out, you just gots to do one thing, don’t listen to ‘im.&lt;/em&gt; Darryl’s warning
came flooding back to him, and he felt a sudden chill of fear. He wrenched his
body away from the man’s arm and began to run down the street, but the man’s
car was already pulling up ahead of him.&lt;/p&gt;
&lt;p&gt;Two men stepped out and ran towards him. He attempted to turn and cross the
street, but they were surprisingly quick, and headed him off in the middle of
the street. They wrapped their strong arms around his body, and forced a
strange-smelling rag in his face. He struggled briefly, and felt his Walkman
slide from it’s customary position on his waistband and clatter on the floor.
The men dragged him towards the car, and pushed him roughly into the trunk as
he passed out.&lt;/p&gt;</content:encoded></item><item><title>November 20th</title><link>https://tylerbutler.com/november-20th/</link><guid isPermaLink="true">https://tylerbutler.com/november-20th/</guid><description>November 20th</description><pubDate>Sun, 21 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;**Chapter 19: Story **&lt;/p&gt;
&lt;p&gt;Holly and Ned sat down along the slope beside the drain pipe, looking
intently at the grizzled man who lounged on the pipe in front of them. He wore
a small, faded green kufi on his head, hiding his graying hair underneath it.
His face was crinkled with age, and his kind eyes glowed warmly out of the dim
surroundings. He held his hands in his lap, moving them expressively as he
spoke softly. His dark, rich voice echoed below the bridge as he told his
tale.&lt;/p&gt;
&lt;p&gt;“Well, like I was sayin’, me and Darryl was good friends. We tried to stick
together, you know, have each other’s back. ‘Course it wasn’t always that way.
Fact is, when we first met, we didn’t much care for each other at all.&lt;/p&gt;
&lt;p&gt;“You see, we first met when I tried to work his part of State Ave. one day.
I hadn’t been doing too well on my old strip, so I thought I’d move up further
north and see if I could do any better.&lt;/p&gt;
&lt;p&gt;“The week before, I’d managed to come across some tools at a construction
site and had nabbed a squeegee there, so not only was I imposin’ on Darryl’s
section of the street, I was also doing the exact gig he was. Not to mention,
I was just learnin’ the trade, you know, and I hadn’t really had a chance to
hone my technique. So I wasn’t doin’ the best job of cleain’ the windows,
‘specially compared to Darryl.&lt;/p&gt;
&lt;p&gt;“It was all right the first few days, since we didn’t run into each other. A
couple of guys had told me that Darryl normally squeegeed that section of the
street, but to be honest, I didn’t care. I was just trying to eke by, know
what I mean?&lt;/p&gt;
&lt;p&gt;“But eventually, Darryl and I ran into each other. He had been hearin’ stuff
about another guy down on his street ruinin’ his reputation and all, so when
he finally saw me, he wasn’t to pleased. But if you know Darryl, he wadn’t one
to get real angry and up in your face about somethin’. So he stopped me later
that afternoon after most people had cleared the street ad I was headin’ home,
and he simply asked me to move either further north or further south.&lt;/p&gt;
&lt;p&gt;“He explained that he’d been workin’ that partickler section of the street
for some time, and that he had reputation that he’d built, and it just
wouldn’t work to have two guys tryin’ to squeegee the same section. He
explained that it made more sense for us to split up ‘cause we’d be able to
have more customers.&lt;/p&gt;
&lt;p&gt;“Wal, what he said made sense, but it wasn’t what I wanted to hear. And him
bein’ so friendly about everything, I didn’t take him seriously. So I told him
he could shove it and I just kept on goin’, doin’ what I always did.&lt;/p&gt;
&lt;p&gt;“Next day, Darryl came up and said basically the same thing, askin’ me to
move on north or south again. And again, I told him the same thing. But he was
a persistent bastard, and every day he came up to me, polite as the last time,
and explained the situation again.&lt;/p&gt;
&lt;p&gt;“Eventually, it got to the point where I was considerin’ movin’ on just so I
wouldn’t have to listen to his lecture every day. I started tryin’ to avoid
him during the day, but he usually found me.&lt;/p&gt;
&lt;p&gt;“One day, I had had it partickly rough, and there he was, comin’ on to ask
be to move on, and I just lost it. I let him have it. We got into a bit of a
scuffle, and Darryl, bein’ as mild-mannered and small as he was, didn’t put up
much of a fight. Oh, don’t get me wrong, I didn’t hurt him real bad or
nothin’, but I did pound on him a bit.&lt;/p&gt;
&lt;p&gt;“It made me feel a lot better, and I thought that he’d finally get the
picture that I wasn’t plannin’ on goin’ anywhere, but the next day, he found
me again and started talkin’ to me.&lt;/p&gt;
&lt;p&gt;“This time, though, he’d changed his tactics. He said that if I wasn’t
movin’ on, the least I could do was stop ruinin’ his reputation. So he offered
to teach me how to do a better job with the squeegee. I could hardly believe
my ears. I mean, I’d just hit him up the day before — he still had a bruise on
his face from where I’d let him have it.&lt;/p&gt;
&lt;p&gt;“But as usual, it was a genuine offer, so I spent that day workin’ with him,
learnin’ his technique and listenin’ to him ramble on about his experiences
and whatnot. Man, he liked to talk.” He paused, smiling and shaking his head.&lt;/p&gt;
&lt;p&gt;“I mean, Darryl’d talk and talk and talk — didn’t matter if no one was
listenin’. He just liked to talk. But anyway, that night he invited me back
here, to this bridge, with him, and we spent the rest of the night talkin’
‘bout everything under the sun.&lt;/p&gt;
&lt;p&gt;“And that was really all it took. We started workin’ together every day, and
he taught me a lot. And he and I just became real good friends. I don’t really
know why. By all accounts, we really shoulda still hated each other. We were
very different people, but somehow we ended up makin’ it work.&lt;/p&gt;
&lt;p&gt;“Eventually he and I agreed to stop workin’ together. It really made the
most sense, since we could cover twice as much area in the same amount of
time. He finally got his way, I guess — I moved on up a lit further north and
he stayed working his area, but we would get together here at the end of the
day, and share whatever we had. Sometimes he had a good day, sometimes I did,
most times neither of us did, but we shared everything and we ended up all
right I guess.&lt;/p&gt;
&lt;p&gt;“As time went on, me and him didn’t talk as much as we had, and he started
spending more time at the shelter, I guess. I never much cared for places like
that, though he told me St. Ives was diff’rent. Anyway, when we started
hearin’ all the stories ‘bout people disappearin’, we decided we’d better
start stickin’ together again. It just made sense. So we started workin’
together again, and we did all right.&lt;/p&gt;
&lt;p&gt;“But one night, Darryl decided he wanted to go to the shelter for a meal,
and when I told him I really didn’t want to go, he just left without me. I
didn’t seem him until really late the next day. I figgered he’d just ended up
stayin’ the night there or somethin’, but when he came back he was all beat
up. He’d stopped by St. Ives ad I guess got cleaned up, but he looked
terrible. He was limpin’, cuts and bruises all over his body — he was a wreck.&lt;/p&gt;
&lt;p&gt;“He wasn’t talkin’ much either, and I knew better than to press him to tell
me what had happened. So we just kept on doin’ what we always did for the next
few days. I figgered he’d tell me when he was ready. And finally, about a week
after it had happened, he did.”&lt;/p&gt;
&lt;p&gt;James paused and leaned forward, lowering his voice substantially. “Now,
there were two cops snoopin’ around here earlier today, askin’ about him and
showin’ pictures and whatnot, but I didn’t tell ‘em anything.” Holly and Ned
glanced at each other as James frowned. So Ames and Cobb &lt;em&gt;had&lt;/em&gt; been by.&lt;/p&gt;
&lt;p&gt;“I don’t like cops — don’t trust ‘em. Anyway, you have to understand, I’m
takin’ a big risk tellin’ you this, just like Darryl took a risk by tellin’
me, but people need to know. Maybe then somethin’ can be done.”&lt;/p&gt;
&lt;p&gt;He paused again, drawing Ned and Holly in closer before continuing at an
even lower volume. “Darryl told me, that as he was walkin’ to St. Ives, that a
man had pulled over on the street — he couldn’t remember exactly where — and
started talkin’ to him. He had said he recognized Darryl from a time when he’d
cleaned the windshield of his car, and he just wanted to compliment him on the
job.&lt;/p&gt;
&lt;p&gt;“He gave Darryl a twenty dollar bill, and then asked him if he wanted to
make a lot more. He told Darryl that it was a really simple thing he needed
done, and that if Darryl was willing there could be a lot of money in it.&lt;/p&gt;
&lt;p&gt;“Darryl wasn’t one to believe in these get-rich-quick schemes, but he told
me that the man seemed so sincere — so honest and friendly. So Darryl accepted
the offer and had accepted a ride in the man’s car. He didn’t know where they
had gone. He said they had driven for quite awhile.&lt;/p&gt;
&lt;p&gt;“They arrived at some warehouse or somethin’, and the man had led Darryl
into this huge empty room. Then, while Darryl waited, a whole bunch of men
started coming in and standing around the inner walls of the room. Darryl said
at least 30 to 40 men had come in, and they just stood around, not talkin’ to
him or anything, just stayin’ quiet with these serious expressions on their
faces, like they were anticipatin’ somethin’ exciting. Most of ‘em were
wearin’ suits or sports jackets, Darryl had said, and they all seemed to be
businessmen or somethin’ judgin’ from what they were wearin’.&lt;/p&gt;
&lt;p&gt;“Then the man who had picked Daryl up walked in and started talkin’. ‘Well
gentlemen, tonight we have a man named Darryl. He works down on State Ave. ,
where many of you work, and squeegees your windows for loose change… I think
a lot of you are familiar with him.’ A lot of the men standing around let out
a whoop, and the man smiled. ‘Well, I think you all know how this works, so
who’s first tonight?’ A bunch of men raised their hands, and the man pointed
to one in the back of the room. ‘OK, looks like you’re our lucky guy tonight.
Make us proud.’ The man who’d picked Darryl up stepped out with the other men,
and the one he’d pointed out stepped into the center of the circle with
Darryl. Darryl didn’t know what was happenin’.&lt;/p&gt;
&lt;p&gt;“The man took his shirt off and ran towards Darryl, and hit him square in
the face, knocking him to the ground. He waited for Darryl to get back up,
then hit him again. Darryl tried to get up and run away, or out of the room,
but the men in the circle would grab him and throw him back in.&lt;/p&gt;
&lt;p&gt;“I asked ‘im if he tried to fight back, and he said he did, but there were
too many of ‘em. As soon as he got a good shot in, somebody else would step
into the circle and beat him even harder. By the end of the night, he said he
was just layin’ on the floor, blood leakin’ out of him, prayin’ that’d all be
over soon. He passed out while they were still beatin’ on him.”&lt;/p&gt;
&lt;p&gt;Holly felt like she was going to be sick. She had experienced her share of
violence, but this beating that James spoke of sounded almost sports-like. Who
were all these men? Did they really get off on beating a defenseless homeless
man nearly to death?&lt;/p&gt;
&lt;p&gt;James noticed his audience’s discomfort and broke off his more detailed
description that Darryl had given him. His voice was still low and he looked
around nervously, searching for anyone that might be listening in
surreptitiously. Satisfied that all was clear, he continued.&lt;/p&gt;
&lt;p&gt;“Anyway, Darryl came to after the man who’d picked him up splashed some
water on his face. They threw him back into the car and drove him back to the
street where they’d picked him up. Before they dropped him off, the man said,
‘Darryl, I hope you understand that if you tell anyone about this, and I mean
anyone,’ — he was very clear on this point — ‘I’m gonna hunt you down and kill
not only &lt;em&gt;you&lt;/em&gt;, but &lt;em&gt;every single person that you told&lt;/em&gt;.’ Darryl believed
him. He said there was somethin’ in his eyes that told him he was serious.&lt;/p&gt;
&lt;p&gt;That’s why Darryl wouldn’t tell nobody — and that’s why I’ve been careful
m’self. But there comes a time when this kinda things got to be exposed, and
maybe y’all can do it.”&lt;/p&gt;
&lt;p&gt;James sat back on the pipe and sighed heavily. He was pleased to finally
tell someone Darryl’s story, but worried too — now these fine people, friends
of Darryl’s, also had the burden of Darryl’s experience? There was little
doubt in James’ mind that the man responsible for Darryl’s abduction and
beating was also responsible for his death. Would he also now harm these
people, and James himself?&lt;/p&gt;
&lt;p&gt;Holly and Ned looked at each other. They also understood the magnitude of
the situation. It seemed their quest for answers had yielded some, but also
created more questions.&lt;/p&gt;</content:encoded></item><item><title>November 18th</title><link>https://tylerbutler.com/november-18th/</link><guid isPermaLink="true">https://tylerbutler.com/november-18th/</guid><description>November 18th</description><pubDate>Fri, 19 Nov 2004 15:03:00 GMT</pubDate><content:encoded>&lt;p&gt;**Chapter 18: Memory **&lt;/p&gt;
&lt;p&gt;“Joel?” He opened his eyes slowly, allowing them to adjust to the bright
light that now shone into his room. His mother’s concerned eyes stared down at
him, his father smiled grimly from the corner.&lt;/p&gt;
&lt;p&gt;“It’s good to see you awake, son,” his father said, walking over and placing
a hand on his shoulder as his mother buried her teary face in his chest.&lt;/p&gt;
&lt;p&gt;“Mom, I’m OK…” he protested. Why did she always have to worry so much?&lt;/p&gt;
&lt;p&gt;“I know, that’s why I’m crying.” He rolled his eyes. His mother slowly tore
herself away from him, content eventually to hold his hand.&lt;/p&gt;
&lt;p&gt;“When we didn’t hear from you, we started to worry,” his dad began. “But we
figured you were tired and forgot to call or something. Then the police
called, and we tried to get down here as fast as we could, but you were in
surgery, and even after that the police wouldn’t let us get in here until
they’d had a chance to talk to you. What did they want to know, anyway?”&lt;/p&gt;
&lt;p&gt;“Just what happened, that’s all,” Joel answered, staring up at the white
ceiling.&lt;/p&gt;
&lt;p&gt;“Well, we’re just glad that you’re all right,” his mom interjected.&lt;/p&gt;
&lt;p&gt;“I am, mom, I am.” He patted her hand in reassurance.&lt;/p&gt;
&lt;p&gt;“Well, how was the return trip? We read all your letters. Sounds like you
had a great time.”&lt;/p&gt;
&lt;p&gt;“Yeah, the trip back was pretty uneventful. It was sort of sad, really. I
mean, I was excited to be coming back here, you know, but I sort of felt like
I was leaving home, too. It was very strange.”&lt;/p&gt;
&lt;p&gt;“Well, son you were there for almost 6 months. I suppose that place is a
part of you now.”&lt;/p&gt;
&lt;p&gt;Joel smiled at his father’s phrasing. It was a little melodramatic, to be
sure, but he did like the sound of it, and in truth, it wasn’t that far off
the mark. The culture he’d experienced there, the people, the way the people
there had approached life — it was all a part of him. It was something that
he’d nev er forget, something that would shape all of his decisions and
thoughts from now on.&lt;/p&gt;
&lt;p&gt;“Well, I guess if you’ve read my letters, then there’s not a whole lot left
to tell…”&lt;/p&gt;
&lt;p&gt;“Oh, nonsense! We have plenty of questions! Do you feel up to talking?”&lt;/p&gt;
&lt;p&gt;Joel smiled. If there was one thing he felt like doing, it was talking. It
was nice to revel in their interest for awhile, to explain the experiences
which had changed him so much, and the pain was bearable now, so he should
make the best of the opportunity.&lt;/p&gt;
&lt;p&gt;His father pulled up a chair and sat, and Joel told them about his trip from
start to finish, making embellishments here and there for dramatic effect.
They were a captive audience — neither of them had nev er traveled outside the
state, let alone the country — and Joel did his best to explain the paramount
differences in culture and world-view that he had experienced on his trip, and
what he had felt he learned.&lt;/p&gt;
&lt;p&gt;None of the trio noticed when Ames and Cobb entered the room.&lt;/p&gt;
&lt;p&gt;“So Sean pauses, for effect, you know, then says, ‘A date with Natalie Port
man.’ That’s all he wanted!” His parents broke out in appreciative chuckles.
“So after we all got done laughing…”&lt;/p&gt;
&lt;p&gt;“Excuse me Mr. Mendocino,” Ames broke in, clearing his throat to get their
attention. Joel looked up at him. What did they want?&lt;/p&gt;
&lt;p&gt;“Hi detective. What can I do for you?”&lt;/p&gt;
&lt;p&gt;The two detectives strode in, dragging chairs from the small table in the
corner and sat down around his bed. They had been traveling around for most of
the day, talking to every homeless man they could find in an effort to figure
out who was responsible for Darryl’s murder.&lt;/p&gt;
&lt;p&gt;What they had been told baffled them. The homeless men had told them all the
same story — some mysterious disappearances had occurred, people would wind up
beaten up, but wouldn’t say anything more about it. No one they’d spoken to
knew Darryl personally, so they said, but both Ames and Cobb had gotten the
feeling that some of them were holding back, especially a grizzled man down on
59 th .&lt;/p&gt;
&lt;p&gt;They had checked some records back at the station and at local hospitals,
and had found several unsolved crimes the past few mont hs, all involving
homeless people. Nearly 100% of the cases they had found involved men.&lt;/p&gt;
&lt;p&gt;None of the homeless had pressed charges, of course, and were tight-lipped
about what had happened, so the cases were closed and no one took a second
look. But Ames and Cobb agreed — there was a pattern there.&lt;/p&gt;
&lt;p&gt;It was still a long shot to tie Darryl into the whole scheme. By most
accounts, he had been abducted, but none of the other abductees had been
killed, and it was still a distinct possibility that his death was just
random. But in the end, Cobb and Ames agreed that their instincts needed to be
trusted, especially this early in the investigation, and their instincts said
that there was something behind all of this — something sinister, something
that needed to be stopped, and behind it all, there was a case that could make
their careers.&lt;/p&gt;
&lt;p&gt;Bereft of clues, they decided to go back to the source, to the only witness
to the crime, even though he hadn’t been able to tell them anything useful on
their first visit. Perhaps he’d remember more now.&lt;/p&gt;
&lt;p&gt;“Well, Mr. Mendocino, we’re hoping you can give us some more information.
You see, we’ve been around talking to a lot of homeless people today, and
they’ve given us some leads, but we really need a description of your
assailants.&lt;/p&gt;
&lt;p&gt;“Admittedly, this is a long shot, but we think the men who killed Darryl –
that was the name of the homeless man we found with you — and shot you are
possibly connected to a lot other violent crime, especially among the
homeless. Obviously, if these guys have escalated to m ur der and have a
history of violence, we’re probably going to see a lot more needless deaths if
we don’t find them soon.”&lt;/p&gt;
&lt;p&gt;Joel protested, “Well, I already told you what I know… I’m not sure what
else you want me to try and remember. I didn’t really get a good look at
them…” This wasn’t entirely true. In fact, Joel had gotten a solid look at
their faces, but he hadn’t been paying attention. After all, they were
pointing a gun at him. He wasn’t making mental notes about their shoe size or
the number of freckles on their faces at that point.&lt;/p&gt;
&lt;p&gt;His mother joined in the protest. “Detectives, my son just got shot! Can’t
you give him a little time to recover before you come in here barraging him
with questions and making…”&lt;/p&gt;
&lt;p&gt;“Monica,” Joel’s father interrupted. “They’re just trying to find the men
that did this. Joel can say no if he wants to. It’s his decision.”&lt;/p&gt;
&lt;p&gt;Ames continued. “Well, what we’d like to do, Joel, if I may call you that,
is just have you relax and concentrate on the experience as you think back on
it. We’ve found that many times, if you just relax and focus on a single
element of your memory, you can recall things that you forgot or didn’t even
fully realize before.”&lt;/p&gt;
&lt;p&gt;Joel nodded. He wasn’t terrible keen on trying to think back on the
experience of getting shot, but if it would help the detectives find the men
and possibly save someone else, then it would be worth his discomfort.&lt;/p&gt;
&lt;p&gt;Ames motioned outside Joel’s door, where a young woman stood with a large
sketch pad and an assortment of pencils in her arms.&lt;/p&gt;
&lt;p&gt;“Joel, this is Karen, one of the artists on our staff down at the station.
She’s just going to try and draw some sketches based on the descriptions that
you can give us. Don’t worry about her. Just close your eyes and ell us what
you can. We’ll do the rest.”&lt;/p&gt;
&lt;p&gt;Joel laid back against the pillow and shut his eyes as Karen moved yet
another chair into the cramped suite and sat down, pencil at the ready.&lt;/p&gt;
&lt;p&gt;He thought back to the delicious taste of the bagel on his tongue, the feel
of the concrete and loose gravel as it crunched under his feet, and the
feeling of sudden isolation he felt upon discovering he was lost.&lt;/p&gt;
&lt;p&gt;He was standing in the empty alien alley again, turning round and round,
looking for signs of familiarity, but he found none.&lt;/p&gt;
&lt;p&gt;“I was in this alley that I’d nev er been in before — I didn’t know where I
was.”&lt;/p&gt;
&lt;p&gt;Bang! There it was — the shot! But was it a shot, or just a firecracker, or
a car misfiring?&lt;/p&gt;
&lt;p&gt;“I heard a loud shot, but I didn’t know what it was.”&lt;/p&gt;
&lt;p&gt;Then he was running, running, running towards the shot. Why was he running
towards it? Why not away? His actions made no sense. He tried to force his
body to turn, to stop, to at least slow, but he ran on.&lt;/p&gt;
&lt;p&gt;There were voices now… what had they said?&lt;/p&gt;
&lt;p&gt;“I heard them talking before I got there. One of them was yelling at the
other for pulling the trigger and shooting the man, and he was saying he
didn’t do it on purpose.”&lt;/p&gt;
&lt;p&gt;He rounded the corner — there they were, looking down at the dumpster, where
the shot man was lying, his body obscured from Joel’s view by the dumpster.&lt;/p&gt;
&lt;p&gt;“OK, I see them now. They’re looking down at the man, but they don’t see me
yet. The man with the gun is average height and build, dark brown hair,
leather jacket, stubble on his face. The other man is a little shorter, say 5’
5” or so, with blonde hair, clean shaven, and a light black windbreaker. Both
of them are wearing jeans.”&lt;/p&gt;
&lt;p&gt;Ames glanced at Karen, then at Cobb. This description was so generic it’d be
impossible to get Karen to create a useful drawing from it. Yet another dead
end…&lt;/p&gt;
&lt;p&gt;They turned and spotted him. He felt a strange, uncontrollable sense of
fear. The gun was pointed directly at him. The man was saying something…&lt;/p&gt;
&lt;p&gt;“Joel,” Cobb broke in. “Can you see any distinguishing features on either of
the men? Something bout the way they walk, or a scar, or something?”&lt;/p&gt;
&lt;p&gt;“No, no, don’t shoot…” A sweat broke out on his brow and he shook his head
from side to side on the pillow, eyes still clenched shut.&lt;/p&gt;
&lt;p&gt;“ Cal m down Joel, it’s all right,” Cobb continued. “Concentrate — is there
anything that stands out in your mind?”&lt;/p&gt;
&lt;p&gt;Joel let out a gasp, then a low moan, then went limp on the bed. He was
lying on the sidewalk, reeling in agony; his insides felt as though they’d
been ripped apart. He looked up at the men as they t ur ned away, vaguely
aware of Cobb’s voice trickling down from the heavens.&lt;/p&gt;
&lt;p&gt;Then, a sudden point of clarity — there, on the shooter’s hand, a mark. As
they turned and ran, Joel willed himself to focus on that mark. Time slowed
down; he stepped frame by frame through the scene, and zoomed in on the mark,
bringing it into better focus. Then, suddenly, it was gone, and he was falling
endlessly again.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;He awoke a few minutes later, amidst confused chatter and argument from his
parents, the detectives, and Heather, who had come in after hearing the
commotion.&lt;/p&gt;
&lt;p&gt;“Give me the paper,” Joel said. No response. “Give me the paper!” he said
again, finally getting the attention of the others in the room. There was a
moment of stunned silence, then Karen thrust her pad and pencil at him. She
held the pad for him while he awkwardly sketched the mark he had seen on the
page as best he could.&lt;/p&gt;
&lt;p&gt;He finished it, and handed the pencil back to Karen. “That mark was tattooed
on the right hand of the shooter, between the thumb and forefinger. Now _that
_ is all I can remember.” He sunk back into the bed — he wanted peace, quiet,
and sleep.&lt;/p&gt;
&lt;p&gt;Cobb and Ames looked at the picture, than at each other. Now &lt;em&gt;this&lt;/em&gt; was
something they could work with.&lt;/p&gt;</content:encoded></item><item><title>November 17th</title><link>https://tylerbutler.com/november-17th/</link><guid isPermaLink="true">https://tylerbutler.com/november-17th/</guid><description>November 17th</description><pubDate>Thu, 18 Nov 2004 15:45:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 17: Journey&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ernie was stuffed. He and Ken pushed away from the table, entirely satisfied
with the hearty meal that Rhonda and the other St. Ives volunteers had
provided them. The dining hall, which had been silent during the meal as
groups of hungry homeless dug in to their meals, was now home to a healthy din
of activity, as well-fed men and women chatted, discussed, and joked.&lt;/p&gt;
&lt;p&gt;Rhonda and her staff bustled around the hall, stopping occasionally to say
hello to someone they hadn’t seen in a long time, or to welcome someone new
and make sure they felt welcome to come and dine at St. Ives any time.&lt;/p&gt;
&lt;p&gt;This afternoon, Rhonda was particularly busy. The unseasonably warm weather
had brought visitors from all over. When the weather was warm, people tended
to get out and walk further, so the dining hall was bursting at the seams with
hungry mouths. She ran back and forth from the kitchen, stopping every once in
awhile to greet some of the visitors personally and introduce herself
personally. She wore a big friendly smile on her face, and despite her
business, always gave each individual her full attention while she talked with
them.&lt;/p&gt;
&lt;p&gt;Ernie and Ken were seated a smaller table in the corner of the room right
next to the kitchen door, where they observed the other diners with passive
interest. Ernie didn’t recognize many of the people there today. They were
probably from the west side, and were only able to make it to St. Ives today
because of the weather.&lt;/p&gt;
&lt;p&gt;He had overheard a couple of conversations, while he and Ken ate their soup
quietly, about Darryl. It wasn’t uncommon to hear familiar names, especially
after someone got arrested, hurt, or killed, particularly amongst residents or
frequent visitors to St. Ives.&lt;/p&gt;
&lt;p&gt;He hadn’t gotten any more information about exactly what had happened to
Darryl, but there had been quite a bit of talk about the mysterious
disappearances of people the past few weeks, and their reappearance with fresh
cuts and bruises. The general consensus among those Ernie overheard was that
Darryl had gotten “abducted” as well, except this time, he’d wound up dead.&lt;/p&gt;
&lt;p&gt;Ernie and Ken relaxed at their table once the meal was complete, waiting for
the dining room to clear out somewhat. It was just as well; their bellies were
so overstuffed with Rhonda’s hearty soup that they could barely move.&lt;/p&gt;
&lt;p&gt;It didn’t take long for the crowd to leave the dining hall after lunch was
complete. It was a warm day, after all; a day that would best be spent working
their corner or block, making the most of the warmth. It was __ a day to
be spent inside, warming oneself in the heated interior of the shelter.&lt;/p&gt;
&lt;p&gt;Ken, who’d been keeping a watchful eye on the clock that peered down across
the dining hall, motioned to Ernie that they should get going. They had a few
minutes to walk back to Dominick’s and meet Holly there. Neither Ken nor Ernie
really knew what to expect from their journey to 59 th Street , but Holly
seemed to think that someone there would know something, and it made sense to
follow her lead. Ernie’s presence with them would increase their credibility
anyhow, and they’d be more likely to get the information they were seeking.&lt;/p&gt;
&lt;p&gt;Ken’s zeal for the investigative arts had cooled somewhat. He had come to
the conclusion, after they were unable to gain access to the hospital, that
the life of a true investigator was nothing like that in his books, and that
he’d be better off finding another occupation. He had, however, dragged Ernie
along on this whole escapade, and felt somewhat responsible to see it through
to its conclusion. Besides, if they did by some miracle manage to find out
what happened to Darryl… well, &lt;em&gt;that&lt;/em&gt; would be cool. His friends on the
corner would &lt;em&gt;definitely&lt;/em&gt; give him mad props for that.&lt;/p&gt;
&lt;p&gt;They stood up from the table and waved at Rhonda in the kitchen, then headed
out of St. Ives towards Dominick’s.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;The hours between Ernie and Ken’s initial visit and three seemed to stretch
on forever as Holly and Ned rang up customer after customer. Ned was moving a
little more slowly than usual; his mind was on other things. He worried about
Holly. She had put on a brave face when they had come back into the store, but
inside he knew she wasn’t doing so well. He had seen her talking at length
with Darryl after work in the parking lot; they had talked about life, love,
the pursuit of happiness, and everything else under the sun.&lt;/p&gt;
&lt;p&gt;It continued to amaze him how easily Holly spoke to everyone, especially the
homeless. Her natural listening ear combined with Darryl’s love to speak had
naturally drawn them to each other. Ned had not been privy to many of their
conversations, but he knew that to Holly, Darryl was a special friend — she
would miss him.&lt;/p&gt;
&lt;p&gt;He looked at his watch for what seemed like the millionth time. Only a few
minutes had passed, but three o’clock was almost upon them. He flipped the
light on his register, signaling that he was now closed.&lt;/p&gt;
&lt;p&gt;“Don’t worry,” he said to the confused customers still in his line. “I’ll
finish up with whoever’s in my line right now, I’m just not going to be taking
any new customers.” He smiled reassuringly back at them, and finished checking
out the final customer in record time.&lt;/p&gt;
&lt;p&gt;Holly was already headed back towards he back of the store to punch out, so
he quickly double-checked his register and followed her blonde head back to
the time-card system.&lt;/p&gt;
&lt;p&gt;They remained silent as they walked together to the front of the store and
pushed through the revolving door into the glaring mid-afternoon sun. Ernie
and Ken were just walking into the parking lot, and the four of them
rendezvoused in the middle of the nearly deserted lot.&lt;/p&gt;
&lt;p&gt;Ernie still wasn’t his usual active self, Holly noticed, but the lunch had
done him good; at least he didn’t look so peaked — just sad. His headphone’s
still hung around his neck uselessly, which was unusual and ind icated that
perhaps he had been taking this harder than she had initially thought. Well,
hopefully the guys at 59 th street would be able to shed some light on the
whole situation and give them all a little bit of closure.&lt;/p&gt;
&lt;p&gt;Ned was glad that he’d driven the van today. Normal ly he drove an old,
barely running Volkswagen Jetta, but it had not been cooperating this morning,
so Lavina had offered to take the bus to her job across town, so Ned could
take the van. The van would easily accommodate all four of the travelers; the
Jetta would have been quit a squeeze.&lt;/p&gt;
&lt;p&gt;Everyone piled in, Ned driving, Holly in the passenger seat, and Ken and
Ernie in the back, staring silently out the window as they pulled out of the
parking lot. The trip to 59 th was not far, and traffic was light at this
point in the afternoon, so they arrived at the underpass within a few minutes.&lt;/p&gt;
&lt;p&gt;Ned pulled over to the right and turned on his emergency fla shers. There
was nowhere to park in this area, but he hoped they wouldn’t be staying long;
though Holly knew several of the people here, and Ernie was no doubt a
familiar face to most, he still felt uncomfortable. He didn’t readily admit
it, especially to Holly, but the grubby faces with their piercing eyes and
wary stares, the dirty, worn corduroys, jeans, and jackets, and the makeshift
dwellings made of cardboard and newspaper — all of it made him very
uncomfortable.&lt;/p&gt;
&lt;p&gt;He stuck close to Holly as she moved confidently through the individual
dwellings under the bridge, Ernie and Ken trailing a short distance behind.
She stopped several times to speak with people she recognized, but moved on
after determining that the person knew nothing about Darryl.&lt;/p&gt;
&lt;p&gt;They milled about for around 20 minutes, Holly growing more and more
impatient as they walked. No one knew anything — or if they did, they weren’t
telling her. As they passed by the dark recesses of a drain pipe along the
lower end of the slope, a low, rich voice called out softly.&lt;/p&gt;
&lt;p&gt;“Hey.” Holly turned, peering in the direction from which the voice had come.
She saw nothing. “Down here, in the pipe.” Looking down she saw the
silhouetted outline of a man lying inside the large pipe, a thin blanket
wrapped around him.&lt;/p&gt;
&lt;p&gt;“As long as the water ain’t runnin’, there’s not a better bed for miles,” he
said, referring to the pipe in which he laid. “I hear you guys are lookin’ for
Darryl.”&lt;/p&gt;
&lt;p&gt;Holly stepped closer to the man, who pulled himself out of the pipe and
stood to greet them.&lt;/p&gt;
&lt;p&gt;“Well, not exactly… Darryl’s dead…” Holly said softly, looking down at
her feet as she spoke.&lt;/p&gt;
&lt;p&gt;“Oh, I know,” the man responded. “My name’s James. We’se quite a pair, me
and him. Used to share everything we made, everything we had. We were good
friends. So if there’s somethin’ you want to know about him, I’m your man.” He
thrust his hand out at Holly, who took it and shook it firmly. Ned followed
suit.&lt;/p&gt;
&lt;p&gt;“Well, it ain’t much,” James said, motioning at the concrete slope alongside
the drain pipe. “But have a seat… let’s talk about Darryl.”&lt;/p&gt;</content:encoded></item><item><title>November 16th</title><link>https://tylerbutler.com/november-16th/</link><guid isPermaLink="true">https://tylerbutler.com/november-16th/</guid><description>November 16th</description><pubDate>Wed, 17 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;The scene faded out, movie like, and Joel was once again in the hospital.
His body ached, but at least the sharp pain had dulled. &lt;em&gt;It must have been a
dream&lt;/em&gt;, he thought. A dream based on the memory of that tremendous night the
three of them had shared. The following day he had said goodbye to both Pang
and Sean, and had continued on his trip alone. He had taken Sean’s thoughts to
heart, and had made a concerted effort throughout the rest of his trip to just
sit back and take it all in; to fully absorb the experience and make it his.
His only regret had been that Sean hadn’t made the comment earlier.&lt;/p&gt;
&lt;p&gt;But now, laying in the hospital bed, staring up at the ceiling, he wondered
if Sean had been right. He didn’t feel like he had a lot of time. He had been
&lt;em&gt;shot&lt;/em&gt;! He felt robbed. This was supposed to be his triumphant return. He had
learned so much, and now he was to apply it to his life, to make sense of
everything, and to make things &lt;em&gt;better&lt;/em&gt;. But instead some idiot had shot him,
for no apparent reason, and he was laying in a hospital, probably barely
clinging to his life.&lt;/p&gt;
&lt;p&gt;It seemed ludicrous. Fate had such a twisted sense of humor. He had gone so
far, learned so much, only to be idle again, his brain left to stew and figure
out ways to defeat itself.&lt;/p&gt;
&lt;p&gt;Heather appeared in the doorway again, looking as angelic as she had before.
At least it wasn’t &lt;em&gt;all&lt;/em&gt; bad around here.&lt;/p&gt;
&lt;p&gt;“Hi again, Joel. Feeling all right?” she asked softly, sitting down in the
chair next to his bed. He looked over at her and smiled weakly.&lt;/p&gt;
&lt;p&gt;“I’m OK.”&lt;/p&gt;
&lt;p&gt;She smiled back. “Well, there are a couple of detectives here that would
like to talk to you if you’re feeling up to it. They’re trying to figure out
what happened.”&lt;/p&gt;
&lt;p&gt;Joel nodded. “OK.”&lt;/p&gt;
&lt;p&gt;Heather stood up and signaled to the two men waiting outside, then moved to
the back of the room as they entered.&lt;/p&gt;
&lt;p&gt;“Good afternoon, Mr. Mendocino, I’m Detective Cobb, and this is my partner,
Detective Ames. We know you need to rest, but it would really help us out if
you could tell us what happened.”&lt;/p&gt;
&lt;p&gt;Joel closed his eyes and thought back to the plane, to the train ride, to
the bagel, and to the altercation in the alley — all of the events that had
happened since his return. His thoughts were muddy, everything seemed to run
together.&lt;/p&gt;
&lt;p&gt;“I was walking to my apartment…” he began. “I had gotten off the train,
and had stopped by Dominick’s to get something to eat.”&lt;/p&gt;
&lt;p&gt;Ames interrupted, “We found you a few blocks east of your apartment? How did
you wind up there?”&lt;/p&gt;
&lt;p&gt;Joel furrowed his brow, trying to remember exactly what had happened. “I
don’t know,” he responded. “I wasn’t really paying attention. I was pretty
tired and wasn’t concentrating. I remember hearing a loud bang and running
towards it… there were two men there, and one of them had a gun. I pleaded
with them, but they were crazy. The guy with the gun just shot me for no
reason, then they ran off.”&lt;/p&gt;
&lt;p&gt;“I didn’t see the other guy on the ground until after I got shot. I picked
him up and tried to walk to the street, but I don’t know how far I made it.
That’s all I remember.” He laid back against the pillow. The pain was growing
again.&lt;/p&gt;
&lt;p&gt;“Did you know the other man?” Cobb asked, taking notes on a small notepad.&lt;/p&gt;
&lt;p&gt;“No. Is he OK?”&lt;/p&gt;
&lt;p&gt;“Unfortunately, he was dead when we found you. From what the doctor tells
me, you barely made it yourself.”&lt;/p&gt;
&lt;p&gt;Joel groaned. The pain was becoming unbearable again. “I think that’s enough
for now, Detectives,” Heather spoke up as she moved towards Joel’s bedside
again.&lt;/p&gt;
&lt;p&gt;Cobb nodded. “OK, Mr. Mendocino. Thanks a lot for your help. We’ll let you
know if we find anything.” The detectives turned and exited, and Joel
floundered, feeling for the plunger that would bring him relief. Heather
placed it back in his hand and he pressed it, feeling the relaxing drug flow
wonderfully through him again.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 16: Angelo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Breakin’ the law, breakin’ the law…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Breakin’ the law, breakin’ the law…&lt;/em&gt; Mike sang along with the Judas
Priest song blaring on the radio as he hurtled down the highway at high speed,
weaving in and out of traffic, using the shoulder as his own private lane. He
felt __. In fact, he felt invincible! He was going to go to Angelo’s
seedy “office,” explain the situation to him, and if he didn’t understand,
then tough shit.&lt;/p&gt;
&lt;p&gt;He was sick of taking it up the ass from everyone. Bill at work, Marie at
home, and Angelo… he was sick of it. It was going to stop today — &lt;em&gt;now&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;He abruptly noticed his exit on the left and swung the wheel dramatically,
cutting across the four lanes of traffic that separated him and the exit, and
laughed aloud as the cars behind him slammed on their brakes and their horns.
He was in control — everyone else still worried about their cars, their jobs,
their &lt;em&gt;lives&lt;/em&gt;, but he was free. He didn’t care about any of it anymore, and
&lt;em&gt;that&lt;/em&gt; made him powerful.&lt;/p&gt;
&lt;p&gt;He careened toward the old warehouse that Angelo called his office, just
east of the highway, in a part of town that was about as far from ritzy as you
could get. Mike didn’t know exactly which arm of the underworld Angelo worked
for, but he knew he wasn’t all that powerful. If he had been, Mike would never
had seen him — he would be protected behind other, more expendable characters.&lt;/p&gt;
&lt;p&gt;Angelo was not to be underestimated, though. He had quite a temper, despite
his cold, calculating persona, and enough goons under his control that Mike
knew it would be suicidal to approach Angelo violently. That wasn’t his goal,
at least at this point.&lt;/p&gt;
&lt;p&gt;He parked the oversized SUV in the empty lot across from Angelo’s abandoned
warehouse, wondering as he stepped out of the vehicle just &lt;em&gt;how&lt;/em&gt; Marie had
managed to talk him into buying something so obviously out of place in a city.
He locked the door remotely, a happy beep-beep confirming the vehicle’s
supposed security as he stepped towards the warehouse entrance.&lt;/p&gt;
&lt;p&gt;He looked at the dilapidated brick and faded signs posted on the outside of
the warehouse. Angelo really didn’t keep his place in very good condition,
considering his annual income — all tax-free, Mike noted. It really wasn’t a
bad deal, if you could handle the constant worry of law enforcement and the
threat of prison. Not a bad deal at all.&lt;/p&gt;
&lt;p&gt;Mike pounded on the door with his fist, then stepped away, anticipating the
burly guard who swung the door open and inquired in a gruff voice. “Whaddya
want?”&lt;/p&gt;
&lt;p&gt;“I’m here to see Angelo about a payment,” Mike replied, brushing past the
guard as he spoke. The door closed behind him, and the small sliver of
sunlight disappeared. Mike stopped, waiting for his eyes to adjust to the
dimly lit interior of the warehouse.&lt;/p&gt;
&lt;p&gt;European techno-pop blasted from a deceptively small boom box in the corner,
where a group of card players seated around a table ignored his entrance
completely, engrossed in their own game of chance.&lt;/p&gt;
&lt;p&gt;On his left, a group of shady-looking characters stood next to a makeshift
bar constructed of stacked crates and other miscellaneous junk; they regarded
him with little interest as he walked on down towards Angelo’s main place of
business in the back of the warehouse, maneuvering around crates of random
items as he went.&lt;/p&gt;
&lt;p&gt;The guard who’d granted him passage trailed behind him, monitoring his
travel and ensuring he didn’t deviate from his stated purpose of visiting
Angelo.&lt;/p&gt;
&lt;p&gt;Upon reaching the door to what had been the warehouse’s small records
office, he knocked quickly three times and twisted the doorknob, not waiting
for the invitation to enter. There Angelo sat before him on the small love
seat facing the door, three rather long lines of cocaine laid out on the low
coffee table in front of him. A thin waif sat next to him, rouge and blush
smeared clumsily on her once-attractive face.&lt;/p&gt;
&lt;p&gt;Angelo looked up from the table, and seeing Mike, broke into a smile.
“Mike!” he stood, opening his arms in welcome. “You know, I was just thinking
about you. Here, here…” He motioned at the table in front of him. “Join me,
there’s plenty for everyone.”&lt;/p&gt;
&lt;p&gt;The girl bent down and inhaled one of the lines, whimpering softly upon its
completion, then laid back in the love seat, bringing her hand to her nose as
her pupils dilated and the stimulant began to take effect.&lt;/p&gt;
&lt;p&gt;“No thanks, Angelo.”&lt;/p&gt;
&lt;p&gt;“No? Well, more for me, I suppose.” He sat down and promptly inhaled both
remaining lines, one in the left nostril and the other in the right, shaking
his head hard when he was done. He looked up at Mike again, his nose bright
red and an unfocused look in his eyes.&lt;/p&gt;
&lt;p&gt;“Well, where is it?”&lt;/p&gt;
&lt;p&gt;“I don’t have it,” Mike stated calmly.&lt;/p&gt;
&lt;p&gt;Angelo raised his eyebrows. “You don’t have it?”&lt;/p&gt;
&lt;p&gt;Mike nodded. “I don’t have it.”&lt;/p&gt;
&lt;p&gt;Angelo stood again and approached Mike slowly. His five-foot-three frame was
dwarfed next to Mike’s, but the maniacal gleam in his eyes indicated to Mike
that he meant business. Mike stood his ground.&lt;/p&gt;
&lt;p&gt;“Mike, your debt isn’t due until the end of the month, but you know the
rules.”&lt;/p&gt;
&lt;p&gt;Mike did know the rules, but he knew that that wouldn’t stop Angelo from
reminding him of them now. Angelo seemed to take special pleasure in reminding
people of the rules after they’d already been broken.&lt;/p&gt;
&lt;p&gt;“The only reason you come to visit me unannounced is to pay off a debt.
Anything else, you call me and I &lt;em&gt;invite&lt;/em&gt; you here or we deal with it over
the phone. You know how it works.” The girl on the couch looked up at them
both and giggled, giddy with the coke and tension in the room.&lt;/p&gt;
&lt;p&gt;“Shut up, bitch!” Angelo turned and yelled at her, causing the smile to melt
right off her face. He turned back to Mike&lt;/p&gt;
&lt;p&gt;Mike nodded. “I know, Angelo, but I wanted to come and tell you in person
that I won’t be able to pay you back… ever.”&lt;/p&gt;
&lt;p&gt;Angelo raised his eyebrows even higher in disbelief. “Ever? Hmmm…”&lt;/p&gt;
&lt;p&gt;He turned, clasping his hands behind him as he paced slowly in the small
room. “Well, I certainly appreciate the gesture, Mike, but as you know, I
don’t run that kind of business. Around here, we have strict rules that we
adhere to, and when someone breaks them, they’re punished. And whether you’ll
have the money by the time it is due or not is really irrelevant to these
proceedings. You came to visit me uninvited, without payment, which is an
egregious breach of the contract you and I arranged at the time you bet on
that horse. What was it’s name?” He paused, trying to remember the name, then
resumed his pacing when the name eluded him.&lt;/p&gt;
&lt;p&gt;Mike became aware of the guard from the entranceway behind him. “Well, it
doesn’t matter what it’s name was now, I suppose.”&lt;/p&gt;
&lt;p&gt;The guard reached towards Mike’s arm, but Mike was prepared. He’d been
waiting for this moment. He sidestepped, grabbing the guards own wrist as he
reached for Mike’s, and thrust his body against the guards, forcing him off
balance and sent him tumbling towards the cocaine powdered coffee table.&lt;/p&gt;
&lt;p&gt;He smashed face first into it, sending shards of imitation wood throughout
the room. The girl screamed and picked her feet off the floor just in time to
avoid getting them smashed by the falling body. Angelo moved towards the
falling twosome, and Mike pushed himself off of the falling body and whirled
around 180 degrees, grasping his hands together as he spun. His two united
fists collided with Angelo’s cheek as he completed his spin, sending Angelo
reeling.&lt;/p&gt;
&lt;p&gt;Mike didn’t skip a beat. He separated his hands and pounced on Angelo while
he was still off balance, pinning him against the wall and grabbing him around
the neck. He was in control, and it felt good. He searched Angelo’s face for
signs of fear, but there were none.&lt;/p&gt;
&lt;p&gt;“You motherfucker,” Angelo squeaked, pushing hard on Mike’s hands with his
own, trying to release Mike’s strangle hold, but it was useless.&lt;/p&gt;
&lt;p&gt;“You don’t control me, Angelo!” Mike yelled, squeezing his hands tighter
around the soft flesh of Angelo’s neck. His face was turning a satisfying
color of red. “I’m going to fucking kill you, just like I killed that other
fucking prick.”&lt;/p&gt;
&lt;p&gt;The feeling of complete supremacy that he’d had while pounding away on
Marie’s lover returned. He &lt;em&gt;was&lt;/em&gt; invincible.&lt;/p&gt;
&lt;p&gt;He felt a sharp pain on the back of his neck and felt his muscles go
suddenly limp, then another strike to the back of his skull brought complete
blackness.&lt;/p&gt;
&lt;p&gt;Angelo pushed his motionless body off of him, inhaling deeply to regain his
composure. He leaned on Marty, who had come to his rescue from the interior of
the warehouse, catching his breath. He kicked Mike’s body as hard as he could.
“Who’s in control now, bitch?”&lt;/p&gt;</content:encoded></item><item><title>November 15th</title><link>https://tylerbutler.com/november-15th/</link><guid isPermaLink="true">https://tylerbutler.com/november-15th/</guid><description>November 15th</description><pubDate>Tue, 16 Nov 2004 15:24:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 14: Watson&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ernie wasn’t his usual self. His thoughts had cleared a bit since he had
first set his eyes on Darryl’s motionless body, but the image kept coming back
to him at inopportune times, sending a shudder through his body each time.&lt;/p&gt;
&lt;p&gt;Ken was riding alongside him, occasionally breaking off to scout out ahead
in a large circle, then riding back to resume a slower pace beside him. The
both of them were headed to Elston Memorial hospital to see the other guy
who’d been shot. Ken had said his name was Joel.&lt;/p&gt;
&lt;p&gt;Ernie wasn’t particularly interested in any of this, but Ken seemed excited
about trying to figure out what had happened, and Ernie felt it necessary to
come along, if only to keep Ken company. They had, in the past, kept each
other out of trouble by posing as father and son, or uncle and nephew, or any
one of a number of fictitious relationships that proved advantageous in
certain situations. It had gotten them out of a few scrapes, and rewarded Ken
with a rather large collection of otherwise unattainable mens’ magazines.&lt;/p&gt;
&lt;p&gt;Ernie’s thoughts wandered back to what Darryl had said that day in the
dining hall at St. Ives. He wasn’t much of an analytical thinker. He knew he
had been frightened at the tone of Darryl’s voice, and he’d made it a point to
remember exactly what he’d said, even though his memory was especially
terrible. But what could the meaning have been? It seemed obvious that
Darryl’s comments and his death were somehow linked, but how, Ernie didn’t
know.&lt;/p&gt;
&lt;p&gt;Ken returned from one of his scouting trips and said hurriedly, “Come on,
Ernie, let’s &lt;em&gt;go&lt;/em&gt;! We’re almost there.” He motioned to the large riding pegs
mounted on his rear wheel. “Hop on… it’ll be faster.”&lt;/p&gt;
&lt;p&gt;Ernie grimaced as he stepped up onto the pegs and gripped Ken’s shoulders
for balance. He hated riding with Ken this way — he much preferred to walk.
But when Ken was in a hurry, there was no arguing with him, so Ernie held on
tightly and together they zoomed down the shallow hill towards Elston
Memorial.&lt;/p&gt;
&lt;p&gt;Ken was right; the bike was faster, and the looming multistoried building
that was Elston Memorial was soon upon them. The hospital wasn’t as busy as
Ken and Ernie had imagined. The parking lot was only half-full, and the
occasional flashing lights and flurry of activity at the emergency room
entrance as an ambulance drove up was the only sign of life in the entire
hospital grounds.&lt;/p&gt;
&lt;p&gt;Ken wheeled around the parking lot, weaving between parked cars, and Ernie
held on more tightly. He knew Ken was doing this for his benefit. He’d have to
get him back later. He had to admit that the wind rushing through his hair
felt nice, though. If he could get the fear of falling off out of his head,
riding with Ken might actually be &lt;em&gt;fun&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Ken pulled to a stop in front of the main entrance and pulled his chain lock
around the front tire, locking it securely. Together he and Ernie walked into
the hospital.&lt;/p&gt;
&lt;p&gt;Ernie wasn’t exactly sure what Ken’s plan was, but hopefully it’d be
something they’d done before. Ernie didn’t improvise well, but they had a
large enough repertoire of practiced scams that improvisation was rarely
necessary.&lt;/p&gt;
&lt;p&gt;They approached the front desk and Ken peered over the counter at the nurse
sitting there. “We’re here to see Joel Mendocino,” he said.&lt;/p&gt;
&lt;p&gt;The nurse looked over at them. “OK, friends or family?” She addressed the
question to Ernie. Ken interjected, “My uncle’s deaf; you’ll have to have me
ask him questions in sign language. But we’re family. Joel’s my cousin. We
heard something had happened to him, and that he’d been taken here.”&lt;/p&gt;
&lt;p&gt;Ernie was relieved; no quick thinking would be necessary today. The deaf
uncle role was one with which he was very familiar. Neither he nor Ken really
knew sign language, but they had perfected a series of motions that convinced
most people they were really communicating, and if faced with someone who
actually did know ASL, they would simply say that Ernie had learned a little
known Eastern European signing style, and leave it at that. It was a simple
scam, but worked amazingly well.&lt;/p&gt;
&lt;p&gt;The nurse turned back towards the computer in front of her. “Mendocino, you
say? Hmmm, he’s still in surgery. He should be out in the next hour or so, but
he’ll be unconscious for awhile after that. I’m afraid I can’t let you see
him.”&lt;/p&gt;
&lt;p&gt;Ken frowned. This wasn’t working out at all like the mystery novels he’d
been reading. He’d have to think of something else. Ken motioned at Ernie with
his hands. Ernie responded, waving his hands in a strange wavy arc.&lt;/p&gt;
&lt;p&gt;“My uncle wants to know if anyone else in his family has been contacted, or
if anyone else has come to see Joel.”&lt;/p&gt;
&lt;p&gt;The nurse examine her monitor again. “Well, it looks like the police have
contacted his parents. They should be here shortly.”&lt;/p&gt;
&lt;p&gt;Ken and Ernie exchanged hand motions again. “OK, thanks a lot miss. You have
a nice day.” The two of them turned and walked out of the hospital back into
the afternoon sun. Ernie suddenly realized he was getting hungry.&lt;/p&gt;
&lt;p&gt;Ken seemed to read his mind. “Let’s get something to eat, Ernie. You think
Rhonda would mind if I ate with you at St. Ives?” Ernie nodded. Unlike the van
Zandt’s, Rhonda’s kitchen was open to everyone. Ernie’s rumbling stomach got
the better of him and he hopped on the back of Ken’s bike. Ken knew a few
short cuts, which combined with the faster speed of the bike would put them
back at St. Ive’s in pretty good time.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As Ken dodged the large puddles of water behind the Dominick’s, one of his
favorite shortcuts, Ernie glanced over behind the store, and glimpsed the nice
girl from the store talking with two other strange looking men. He didn’t
recognize the other man that stood with them, but he was dressed the same way
the girl was, so he probably worked with her.&lt;/p&gt;
&lt;p&gt;He tapped on Ken’s shoulder, signaling him to stop. Ken put on the brakes
and looked over his shoulder. “What is it?”&lt;/p&gt;
&lt;p&gt;Ernie motioned towards where the girl and her companions stood talking. The
girl had started to cry and the her apparent coworker was hugging her.&lt;/p&gt;
&lt;p&gt;Ken knew what Ernie was thinking. He turned the handlebars and wheeled
around the sidewalk towards the back of the store, staying within the bounds
of the alley in order to appear as though the two of them were just innocently
riding by. After they cleared the back wall of the store, he stopped and they
both dismounted. He laid the bike down on the asphalt and together they poked
theirs heads around the wall, peering surreptitiously at the motley group
before them.&lt;/p&gt;
&lt;p&gt;The two strange looking men turned and walked back towards the store,
forcing both Ken and Ernie to quickly hide their heads back behind the wall to
avoid being seen. After a minute, Ken slowly stuck his head back around and
looked again. The coast was clear this time; the two men were gone, and the
girl stood with her head against her coworker’s chest, crying quietly.&lt;/p&gt;
&lt;p&gt;“Ernie, you know her, right?” Ken turned and looked back at Ernie, who was
still pressed against the wall, eyes closed. “Don’t worry, they’re gone. I
don’t think they saw us.”&lt;/p&gt;
&lt;p&gt;Ernie opened his eyes and relaxed slightly, then nodded in response to Ken’s
inquiry.&lt;/p&gt;
&lt;p&gt;“Well, let’s go talk to her. I’m think she knew Darryl.” Ernie nodded again.
He was aware that the girl and Darryl knew each other; in fact, Darryl was
partly responsible for introducing Ernie to her in the first place.&lt;/p&gt;
&lt;p&gt;Ken picked his bike up off the asphalt and together they rounded the corner
and walked towards the girl and her companion.&lt;/p&gt;
&lt;p&gt;Holly noticed them approaching and smiled at Ernie amidst her tears. She
broke from Ned’s arms and walked over to meet them, a small smile on her face
despite the tears in her eyes. “Hi, Ernie,” she said, wrapping her arms around
him in a short embrace.&lt;/p&gt;
&lt;p&gt;“Hi…” Ernie replied softly, willing himself to remember her name.&lt;/p&gt;
&lt;p&gt;“Holly,” she smiled as she pulled away from him. She giggled softly, then a
sad looked reappeared on her face.&lt;/p&gt;
&lt;p&gt;“Did you hear about Darryl?” she asked. Ernie nodded, sadness enveloping his
face as well. Holly looked down at her feet. “Do you know what happened?”&lt;/p&gt;
&lt;p&gt;Ernie nodded again, memories of Darryl’s face in the ambulance swirling in
his mind once again. They stood in silence for awhile, looking at their feet,
thoughts of Darryl pin balling between them.&lt;/p&gt;
&lt;p&gt;Holly looked up a few minutes later, dried tears on her face, the sign of
deep thought in her eyes. “Do you think maybe some of the guys down at the 59
th Street bridge might know what happened to him?” Ernie looked up at her and
locked his gaze with her clear green eyes. He shrugged.&lt;/p&gt;
&lt;p&gt;They looked down at the asphalt again, until Holly turned to Ned, who had
quietly approached from behind them. “What time do you get off work, Ned?”&lt;/p&gt;
&lt;p&gt;“Three o’clock today,” he said, glancing at his watch.&lt;/p&gt;
&lt;p&gt;“Me too,” Holly replied. “Fancy a trip down to 59 th Street ?”&lt;/p&gt;
&lt;p&gt;Ned shrugged. How could he refuse her now, with her tear-stained face and
bright, expectant eyes?&lt;/p&gt;
&lt;p&gt;Holly turned back to face Ernie, who was gazing at his feet once again.
“We’re going to go to 59 th street to talk to some of the guys there at 3
o’clock, if you want to come, Ernie.” She glanced at Ken to make sure he’d
heard the time, knowing Ernie wouldn’t remember it. She looked back at Ned.
“Well, I guess you and I had better get back to work.”&lt;/p&gt;
&lt;p&gt;Ernie looked up again and nodded in affirmation before turning slowly and
walking back towards the alley beside the store and the sanctuary of St. Ives.
Holly called over his shoulder at him as Ken walked his bike up alongside him.&lt;/p&gt;
&lt;p&gt;“Ernie, I &lt;em&gt;am&lt;/em&gt; sorry. I know Darryl was your friend too.” Holly turned and
followed Ned back into the store. Ernie kept walking towards St. Ives, Ken
alongside him.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 15: Awakening&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Joel awoke in the hospital, only vaguely remembering how he’d gotten there.
The circumstances surrounding his arrival at the hospital were not at the
forefront of his mind — the pain he was in was. His side ached terribly.
Looking down at his torso, he saw the white gauze covering it. He groaned as
his movement shot white hot pain through his entire abdomen.&lt;/p&gt;
&lt;p&gt;He rubbed his head and moaned again. His movement seemed to have set off a
chain reaction of pain within his body that now radiated from his stomach
through to the tips of his fingers. The door opened quietly and a strikingly
attractive nurse glided in.&lt;/p&gt;
&lt;p&gt;She smiled compassionately down at him and reached down to cover him with
his blanket. He hadn’t even realized he was so cold, but her firm warm hands
on his body made its uncontrollable shaking that much more apparent.&lt;/p&gt;
&lt;p&gt;“Hi, Mr. Mendocino. My name is Heather. It’s good to see you awake. Try not
to move too much. Your body needs some time to try and recover. I know you’re
in a lot of pain. We’ve got you hooked up to a morphine drip, so just push on
this to administer yourself another dose.” She placed a small white cylinder
in his hand and gently wrapped his fingers around it.&lt;/p&gt;
&lt;p&gt;“Joel…” he murmured.&lt;/p&gt;
&lt;p&gt;“Excuse me?” Heather replied.&lt;/p&gt;
&lt;p&gt;“Joel…” he swallowed. “ Cal l me Joel.”&lt;/p&gt;
&lt;p&gt;Heather smiled. He pushed the small button on the top of the white cylinder
and felt a wonderful warmness spread throughout his body. He relaxed almost
immediately and lay back against the soft pillow. He sighed. Heather’s smiling
face was the last thing he saw before he drifted off to sleep again, oblivious
to the two men who stood outside his door, arguing with the doctor.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;“So what do you think, Joel?”&lt;/p&gt;
&lt;p&gt;Joel looked around to get his bearings. Where was he? He examined his
surroundings slowly, taking in the dark claustrophobic walls of the building
he was in, the light painting soft silhouettes against the tables and chairs,
the murmur of mouths loosened by too much alcohol. This was the bar that he,
Sean and Pang had gone to the night before Sean headed back to the States. He
remembered now.&lt;/p&gt;
&lt;p&gt;Sean repeated the question, getting Joel’s attention. “Huh?”&lt;/p&gt;
&lt;p&gt;“Wow Joel, you can be so spacey sometimes!” Sean and Pang both laughed. Joel
chuckled as well. “Come on, what’s the most important thing you want to do
before you die?”&lt;/p&gt;
&lt;p&gt;Joel looked down at his nearly empty cup of beer, now warm. “I don’t know,”
he said. “There’s a lot of experiences I want to have, you know? I mean, the
reason I came all the way over here was to try and figure things out, to find
out who I am, to experience parts of the world I’ve only read about, you
know?” Sean and Pang grinned and nodded in understanding.&lt;/p&gt;
&lt;p&gt;“But I feel like I’ve wound up with more questions than answers. I feel even
more confused than I did when I came. This whole trip has made me realize that
there’s so many things in the world that I will nev er see, let alone
understand, and how can I have an impact on anything, when the world is so
big, and I understand so little of it.” He became conscious that he was
rambling.&lt;/p&gt;
&lt;p&gt;“I guess I just feel like it doesn’t matter what I do in the end, and that’s
disheartening for me, because I need to feel like what I do matters, that it
has an effect…” He looked down at his beer again and took the final swig of
it.&lt;/p&gt;
&lt;p&gt;“Well, you know…” Pang began. Sean groaned, rolling his eyes and burying
his head in his hands. “ Cam us might say that life’s all about amassing
experience, and that it doesn’t really matter what you do, or what effect you
have, it only matter’s what experiences you…”&lt;/p&gt;
&lt;p&gt;“Oh come off it, Pang.” Sean interrupted good-naturedly. They all laughed.
Pang had a habit of bringing up literature or philosophy at somewhat random
points in a conversation, and Sean, not being the most scholarly person one
would ever meet, always ended up confused. None of them could deny the simple
facts though; they had all come to Asia by different means, but searching for
the same thing: answers to the big questions, or at least a compass to help
them find the right direction.&lt;/p&gt;
&lt;p&gt;Joel sighed, peering once again into his now empty glass of beer. “I used to
think I had the world figured out,” he murmured. “I used to think that life
was just a simple equation, and if I could figure out all the variables and
all the constants, I could solve it and be happy. But it’s not that simple is
it?” It was a rhetorical question, and there was a brief moment of silence
before Sean interjected.&lt;/p&gt;
&lt;p&gt;“You two,” he said, shaking his head. “I ask a &lt;em&gt;simple&lt;/em&gt; question about what
you guys want to do before you die, and &lt;em&gt;you&lt;/em&gt; start talking about literary
themes, and &lt;em&gt;motifs&lt;/em&gt;, and all that &lt;em&gt;crap&lt;/em&gt;, and &lt;em&gt;you&lt;/em&gt; go off on this sad sob
story about how you can’t figure life out. And to think I came all the way
around the world just to run into two self-indulgent idiots like you guys.”&lt;/p&gt;
&lt;p&gt;Pang and Joel exchanged satisfied glances. They enjoyed making Sean squirm.&lt;/p&gt;
&lt;p&gt;“Since you guys can’t give a straight answer, I guess I’ll have to show you
how it’s done.” He sat up straight in his chair, pausing for dramatic effect
before continuing. “I would be totally complete, if I could do only one thing
before I die.” He paused again, milking the attention that Pang and Joel were
paying him.&lt;/p&gt;
&lt;p&gt;“Just one date with Natalie Port man. That’s all.” He pushed back from the
table as Pang and Joel burst out in laughter.&lt;/p&gt;
&lt;p&gt;“What? I think it’s a noble pursuit! And trust me, with my charm and good
looks, she’ll be putty in my hands. _Putty! _” He nodded confidently.&lt;/p&gt;
&lt;p&gt;The other patrons of the bar shot confused glances over at Pang and Joel,
who were laughing raucously, pounding on the table in an effort to rid
themselves of the excess energy the mental image of Sean on a date with
Natalie Portman had given them.&lt;/p&gt;
&lt;p&gt;Sean pulled his chair back into the table as their laughter died down and
the din of the bar returned to normal.&lt;/p&gt;
&lt;p&gt;“Are you serious?” Joel asked, eyes still teary from the laughter.&lt;/p&gt;
&lt;p&gt;“Hell, yeah! In all honesty, there’s not much else I want or need right now,
really.”&lt;/p&gt;
&lt;p&gt;“Yeah, I know, I feel the same way, but aren’t there things you want to see
and experience while you can? I mean, you’re the one who asked the stupid
question.”&lt;/p&gt;
&lt;p&gt;“Yes, there are plenty of things I want to see and experience, but I also
try my hardest not to take for granted what I do have, and what I have been
able to experience. I seriously think you’re just pining away for things that
you haven’t had a chance to experience yet. I guess it’s a cliché, but you
seriously seem to think the grass is greener on the other side, but you
haven’t even tasted the grass on your side, you know?”&lt;/p&gt;
&lt;p&gt;Joe started to interrupt, but Sean held up his hand.&lt;/p&gt;
&lt;p&gt;“Wait a second. Think about this. You’re sitting in a bar in Thailand , on a
trip to Asia you saved up for mont hs and mont hs to take, with two random
people you met during your travels, shootin’ the shit, and all you can talk
about is how you’re worried that you don’t have it all figured out. Look
outside, man, and remember where you &lt;em&gt;are&lt;/em&gt;. Friggin’ just enjoy it.”&lt;/p&gt;
&lt;p&gt;Joel looked out the open window, where the bustle of the nighttime street
was slowing down gently, and the stars peeked out behind a haze of clouds that
had earlier graced them with a gentle rain. The goofy oaf had a point. He
sighed and let a smirk cross his face. Sean smiled.&lt;/p&gt;
&lt;p&gt;“You’ve got plenty of time to change the world, Joel, if that’s what you
really want to do. Plenty of time.”&lt;/p&gt;</content:encoded></item><item><title>November 13th and 14th</title><link>https://tylerbutler.com/november-13th-and-14th/</link><guid isPermaLink="true">https://tylerbutler.com/november-13th-and-14th/</guid><description>November 13th and 14th</description><pubDate>Mon, 15 Nov 2004 15:18:00 GMT</pubDate><content:encoded>&lt;p&gt;The lights downstairs were all off. The dishes from Mike’s breakfast earlier
in the morning still sat in the sink; the soft sound of water drops echoed in
the silent twilight of the room.&lt;/p&gt;
&lt;p&gt;Mike glanced around expectantly, all five of his sense on maximum awareness,
ready to respond. Someone was in his house — he could feel it. Someone had the
audacity to enter his home — &lt;em&gt;his home&lt;/em&gt; — and do something — what he didn’t
yet know — but whatever it was, he knew he wasn’t going to like it.&lt;/p&gt;
&lt;p&gt;He stepped quietly to the closet in the den and picked up his trusty
baseball bat. If someone wanted to get physical with him, he was going to have
something other than his fists to protect him. He still had seen no sign of
the intruders, but he knew they were there somewhere, and he was going to
introduce them to Big Bertha.&lt;/p&gt;
&lt;p&gt;Now armed with the bat, he moved slowly towards the stairs up to the second
floor of the house. The creaking of the carpeted stairs hid the sounds
floating down from upstairs until he made it to the narrow hall at the top of
the stairs.&lt;/p&gt;
&lt;p&gt;Once there, the sound was clearly audible. He turned left towards it, bat
held at the ready, and crept towards the bedroom. The perspiration collected
in large beads along his forehead, then ran down into his eyes. He didn’t dare
remove his hands from the bat to wipe them, and instead ignored the burning
sensation and slightly blurred vision the saline sweat produced.&lt;/p&gt;
&lt;p&gt;He reached the bedroom, the apparent source of the sound. The door was only
partly open, and he sidled alongside the doorway, back pressed against the
wall. He peered inside the crack of the door, but nothing was visible.&lt;/p&gt;
&lt;p&gt;The sounds were growing louder. Soft, hushed breathing and occasional low
moans had turned into groans and raspy, labored breaths, coming at a much
greater frequency than before. Mike took a deep breath, gripped the handle of
the bat till his knuckles turned white, turned and stormed into the bedroom,
yelling at top of his lungs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 12: Identification&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“Wow, what a dump,” Cobb said as he stepped into the small one bedroom
apartment. “Not much of a decorator, is he?” The apartment was bare except for
a small unmade bed in the corner. The floor was bare cement, the normally
white walls a light brown from months of city soot and grime.&lt;/p&gt;
&lt;p&gt;“Well, I guess you get what you pay for,” Ames commented as he moved deeper
into the interior of the apartment. “Doesn’t look like there’s a whole lot
here. The landlord did say the kid had been subletting the place, and that the
other two tenants left about a month ago.”&lt;/p&gt;
&lt;p&gt;“Two people lived here?”&lt;/p&gt;
&lt;p&gt;“Well, not everyone has the benefits of a detective’s salary, Cobb,” Ames
smiled wryly. Cobb shook his head in response. “Hard to believe, that’s all.”&lt;/p&gt;
&lt;p&gt;He detectives glanced around again.&lt;/p&gt;
&lt;p&gt;“Yeah, I don’t think there’s anything here. Maybe the kid was just coming
back today. He did have those tickets in his backpack.”&lt;/p&gt;
&lt;p&gt;“All right. What next?”&lt;/p&gt;
&lt;p&gt;Cobb sat down on the bed, looking around the room in thought. “They said the
other guy was most likely homeless, right?” Ames nodded. “Not too unusual in
this part of town. I think there’s a shelter down on Sullivan. Maybe somebody
there knows the guy.”&lt;/p&gt;
&lt;p&gt;“You read my mind. Let’s go.” He slapped his hands on his thighs and stood
up, following Ames out of the ground floor apartment and back to their car.
“You drive,” he said, throwing Ames the keys.&lt;/p&gt;
&lt;p&gt;Ames was surprised. “Say what? You never let me drive? What’s the deal?”&lt;/p&gt;
&lt;p&gt;“I just want to look around a bit. You drive.”&lt;/p&gt;
&lt;p&gt;Ames didn’t argue. Cobb was reticent as he started up the engine and pulled
slowly out of the apartment complex and back onto the main road, making his
way towards Sullivan Street .&lt;/p&gt;
&lt;p&gt;Cobb looked out of the passenger side window at the groups of homeless men
and women underneath the bridges as they passed. Their faces were dirty, hair
greasy, a broken, beaten look in their eyes.&lt;/p&gt;
&lt;p&gt;He thought back to the last summer he’d spent with his mother. He’d grown up
in a neighborhood not unlike this one. He didn’t remember exactly how it had
happened, but one day, his mother had come home from work telling him to pack
his things into his small backpack, and they’d left the apartment that had
been his home.&lt;/p&gt;
&lt;p&gt;They had walked forever that day, him with his backpack, his mother with a
small blue suitcase. When evening fell, they had found shelter under a bridge
with others like themselves — others with nowhere else to go.&lt;/p&gt;
&lt;p&gt;Cobb hadn’t liked it there at first. The cement was a hard, cold bed, and
the others there had smelled funny, but his mother had held him close, told
him that everything was going to be OK, and eventually he was able to fall
asleep.&lt;/p&gt;
&lt;p&gt;Every day they followed the same routine — they’d get up, repack their
belongings, and walk around the city streets, looking for whatever they could
find. At first, his mother went into a few places looking for jobs. Cobb would
sit out in front of the store, patiently watching his backpack and the blue
suitcase, but every time his mother returned with a sad look on her face, and
they started walking again.&lt;/p&gt;
&lt;p&gt;Eventually, his mother stopped looking for jobs and started looking for
food. Cobb was always hungry, and so their lives became a constant search for
sustenance. His mother would take his hand and they’d walk along the alleys,
looking in dumpsters for food or other things that might prove valuable in
trade to someone else.&lt;/p&gt;
&lt;p&gt;This had been his life for that summer. Towards the end, his mother had
started leaving him under the bridge in the evening. She would return a few
hours later, often with new bruises, but the next morning, his mother would
pull out a small wad of crumpled cash, and they would go out and have a big
breakfast, with orange juice, eggs, and pancakes, and sometimes, they’d go to
the carwash and wash themselves with the hose. Those had been his favorite
days.&lt;/p&gt;
&lt;p&gt;One day a policeman had stopped them on the street and had taken them to the
police station. He had sat on the bench with his mother fearfully clutching
her hand, and had cried incessantly when she said she had to go and he would
have a new family and a new life.&lt;/p&gt;
&lt;p&gt;Social Services had placed him with a foster family, and he had gone back to
school. The foster family was nice enough, but all he had really wanted was
his mother. He hadn’t seen her since that day in the police station. He
wondered now, as he peered out on the dirty faces, if perhaps one of them was
her.&lt;/p&gt;
&lt;p&gt;Abruptly, the car turned onto Sullivan Street and Cobb was drawn back into
reality.&lt;/p&gt;
&lt;p&gt;“There it is, at the corner, on the right,” said Ames quietly as they
approached the St. Ives shelter. Cobb looked up at the large stone structure
looming in front of them. The white brick exterior was worn and caked with
city grime. The large orange neon cross above the entrance flickered “Jesus
Loves You.” A few grubby, coated figures sat on the large stairs, sharing a
cigarette between them.&lt;/p&gt;
&lt;p&gt;Ames pulled up next to the entrance and parked the car. “Ready?”&lt;/p&gt;
&lt;p&gt;“Yeah, let’s go.” Cobb pulled his jacket tighter around him as they exited
the car and walked towards the figures sitting on the stairs. They seemed to
have the right idea. He could really use a cigarette right now. He pulled one
from his pocket and lit it as he and Ames took the stairs towards the
entrance.&lt;/p&gt;
&lt;p&gt;“Better not smoke that inside,” one of the figures on the stairs said as
they passed by. Cobb stopped and turned. “Why not?”&lt;/p&gt;
&lt;p&gt;“Rhonda won’t like it. She doesn’t let us smoke inside. Why else you think
we’d be sittin’ out here? Shit, it’s &lt;em&gt;warm&lt;/em&gt; in there.” The man gestured
towards St. Ives. The others sharing the cigarette laughed.&lt;/p&gt;
&lt;p&gt;Cobb handed the cigarette to the man. “Well, I guess you guys can have this
one on me.”&lt;/p&gt;
&lt;p&gt;“Thanks, officer,” the man responded, accepting Cobb’s offer.&lt;/p&gt;
&lt;p&gt;“Is it that obvious?” Cobb asked, putting his hands in his jacket pockets.&lt;/p&gt;
&lt;p&gt;“Only cops move the way you two do,” the man responded, inhaling Cobb’s
cigarette slowly before passing it along to the next one in the small circle.&lt;/p&gt;
&lt;p&gt;Cobb smiled. “Must be our police training.” A few men chuckled as he turned
and followed Ames into the large St. Ives vestibule.&lt;/p&gt;
&lt;p&gt;“Sounds like Rhonda’s the one we want to talk to,” said Cobb as they hung
their coats on the rack in the corner. Ames murmured in agreement, and they
walked up the short staircase into the large dining hall. It was mostly empty,
except for one of two men sitting at distant tables, eating.&lt;/p&gt;
&lt;p&gt;The only sounds seemed to be coming from a door at the far side of the room,
so they walked in that direction, aware of the strong smell of food wafting
more strongly as they approached.&lt;/p&gt;
&lt;p&gt;“They say it’s warm in here?” Ames commented as they entered the doorway to
the kitchen. “Seems chilly to me.”&lt;/p&gt;
&lt;p&gt;“Wal, you try heatin’ a big old place like dis wit what money we got!
‘Sides, it’s warmer than outside, and that’s warm enough for most folks here.”
Rhonda turned from the kitchen sink and wiped her hands on her apron.&lt;/p&gt;
&lt;p&gt;“Are you Rhonda?” Ames asked, stopping at the entrance to the kitchen.&lt;/p&gt;
&lt;p&gt;“Sho ‘nuff,” Rhonda replied. “And you must be cops. Only cops walk the way
you do. What can I do for you?”&lt;/p&gt;
&lt;p&gt;Cobb interrupted, “Hi Rhonda, I’m Detective Cobb and this is my partner,
Detective Ames. I don’t know if you’ve heard yet, but there were a couple of
men found earlier this morning, and one of them is dead. He appeared to be
homeless, so we were wondering if he’d have maybe come in here. We’re just
trying to find out who he is and how he got shot.”&lt;/p&gt;
&lt;p&gt;“Shot? Well, dat’s a new one for one of my guys. Usually they do a pretty
good job of staying out o’ da way of guns. You got a picture?” Ames nodded,
reaching into his jacket pocket for the Polaroid.&lt;/p&gt;
&lt;p&gt;“Ma’am, this is from the crime scene, so…”&lt;/p&gt;
&lt;p&gt;“Just let me see it. I’ve seen worse, I’m sure.” Rhonda walked over,
accepted the picture, and inspected it with a frown on her face, shaking her
head.&lt;/p&gt;
&lt;p&gt;“Yeah, this is Darryl. I don’t know his last name.” She shook her head
again. “Poor guy. Guys around here call him da Squeegee Man, on ‘ccount o’ his
always cleaning car windows down on State Ave. Last time he came in, he was
pretty beat up, but he didn’t seem to wanna talk about it. We don’t pressure
‘em ‘round here. He ate a bit, talked to Ernie once, but didn’t stay the
night. I hadn’t seem him since den.” She handed the picture back to Ames .&lt;/p&gt;
&lt;p&gt;“Do you know anything more about him? Any reason you can think of that he
would have been shot?” Rhonda shook her head.&lt;/p&gt;
&lt;p&gt;“No, Darryl was a nice guy, real friendly and he’d talk your ear off if you
let him. He was different last I saw him, though. Real quiet. Like I said, he
was beat up. I spect he got in front of that bullet by accident — he wasn’t
the kind to seek out trouble.”&lt;/p&gt;
&lt;p&gt;“OK. You mentioned he talked to Ernie last time he was here. Who’s Ernie?”&lt;/p&gt;
&lt;p&gt;Rhonda smiled. “He’s a reg’lar ‘round here. He’s not all right in the head,
but he’s a sweet boy. He didn’t have anything to do with this, I can tell you
dat. He used to talk to Darryl a lot; went out with him to State Ave. once.”&lt;/p&gt;
&lt;p&gt;“Any idea where we can find him?”&lt;/p&gt;
&lt;p&gt;“Wal, he usually goes down and hangs out with some kids around 34 th and
Broadway, but I doubt you’ll get much from him. Ernie can’t describe things
very well. His mind don’t work dat way. Tell you what, though, there’s a girl
that some of da guys talk about ‘round here. She works up at the Dominick’s
just up the street. Da guys say she’s real nice. I know Darryl knew her; Ernie
does too. She might know somethin’ more. Sometimes dey talk to other people
better — they don’t tell me too much. Now, I’ve gotta get the rest of this
food made, we’ll be having a large crowd here for lunch in a bit. ‘Scuse me.”
She brushed pas Ames and Cobb and rummaged around the counter.&lt;/p&gt;
&lt;p&gt;“OK. Thanks a lot ma’am. If you hear anything just give us a call at the
station.” Rhonda nodded, and Cobb turned back and left the kitchen, Ames close
behind.&lt;/p&gt;
&lt;p&gt;“You want to head over to the Dominick’s?” Ames asked.&lt;/p&gt;
&lt;p&gt;“Might as well. Foster’s going to call us when the kid wakes up. Might as
well try to figure out why the homeless guy’s dead.”&lt;/p&gt;
&lt;p&gt;Cobb pulled out another cigarette as they exited St. Ives. The men on the
stairs were gone.&lt;/p&gt;
&lt;p&gt;“Maybe the kid was bein’ held up or something, and this Darryl guy went to
help him out. From what she said, he sounds like he might have done somethin’
like that,” Ames commented as he unlocked the doors. “Am I still driving?”&lt;/p&gt;
&lt;p&gt;“Yeah.”&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ned felt uneasy as soon as Cobb and Ames entered the store. There was a
purposefulness in their walk that said they were on the job, they were looking
for someone; this was not just friendly stop for donuts and coffee.&lt;/p&gt;
&lt;p&gt;Positioned at the register nearest to the entrance, he was their first stop.
They flashed a badge. “Police. Can you call the manager down for a second? We
need to speak with him.”&lt;/p&gt;
&lt;p&gt;Ned nodded and walked to the intercom mounted on the support beam behind the
register. “Bob, please come to register one, Bob, to register one.” Bob was
the nearest thing to a manager today. He wasn’t the big man himself, but he
was in charge for the time being.&lt;/p&gt;
&lt;p&gt;Ned returned to his position behind the register. “He’ll be right over.
Anything I can do for you gentlemen?”&lt;/p&gt;
&lt;p&gt;Ames looked at Cobb for confirmation. “We’re looking for a girl that works
here, may be real friendly with the homeless guys that live around here.”&lt;/p&gt;
&lt;p&gt;They were talking about Holly, no doubt. “This girl in some kind of
trouble?” Ned asked.&lt;/p&gt;
&lt;p&gt;“Not at all. There was a homeless man that was murdered earlier this
morning, and we’re trying to identify him and figure out what happened. Rhonda
from St. Ives said this girl might know him.”&lt;/p&gt;
&lt;p&gt;Ned was relieved. He had been concerned as soon as they had mentioned Holly.
He knew she’d had her run-ins with law enforcement before, but she was a good
kid — he didn’t want anything bad to happen to her. It looked like the police
officers just needed information.&lt;/p&gt;
&lt;p&gt;“Yeah, she was probably talking about Holly. She works here. She knows a lot
of the guys that live around here. I go out with her and talk to them every
once in awhile. Maybe I can help you out.”&lt;/p&gt;
&lt;p&gt;Ames had already taken the Polaroid out of his pocket and thrust it into
Ned’s hand. He peered into it. It was a grisly photograph — the man in it was
obviously dead.&lt;/p&gt;
&lt;p&gt;“Yeah, Holly’s talked to him a couple of times. He’s stopped by when she
brings pizza or hot chocolate or something, but I don’t know if she knows
anything more than what he does and where he works — on the street, I mean.
None of these guys have real jobs.” He handed the photo back to Ames .&lt;/p&gt;
&lt;p&gt;“Tell you what, I think Holly just took a break. She might be out back
smoking or something. I can take you out there if you’d like.” He wanted to be
there when they talked to her — he could keep an eye on things and make sure
they hadn’t been lying to him about why they wanted to talk to her.&lt;/p&gt;
&lt;p&gt;Bob approached from the back of the store, smile pasted on his pale face as
always. “Hey Ned, you called? What do you need?”&lt;/p&gt;
&lt;p&gt;Cobb spoke up before Ned had a chance to answer. “Well, your employee here
has been kind enough to help us out. We’ll let you know if you need anything
else.” He flashed his badge again. A confused expression clouded Bob’s face,
but he replaced it quickly with his award-winning smile and nodded.&lt;/p&gt;
&lt;p&gt;Ned grinned to himself. It was satisfying to see the cops put Bob is his
place. Bob was too used to having things under his control, to being the
ultimate decision maker. But the cops didn’t even give him a second glance as
Ned led them to the back of the store.&lt;/p&gt;
&lt;p&gt;As Ned had expected, Holly was standing outside in the back parking lot, a
lit cigarette between her lips. She smiled as Ned and the cops joined her on
the sidewalk. Cobb lit another cigarette and smoked while Ames explained the
situation.&lt;/p&gt;
&lt;p&gt;Holly’s eyes teared upon inspection of the Polaroid. “Yeah, this is Darryl.
He’s really friendly. Such a great guy.” She cried harder, and Ned put his arm
around her.&lt;/p&gt;
&lt;p&gt;“I’m sorry ma’am. Do you happen to know anyone who would have wanted to kill
him?”&lt;/p&gt;
&lt;p&gt;Holly nodded, still crying softly. “Oh no, not at all. I mean, every once in
awhile somebody’d get huffy with him for cleaning their windshield, but Darryl
just let it go. I can’t imagine him doing anything to anyone that’d make them
want to kill him.”&lt;/p&gt;
&lt;p&gt;Ames looked at Cobb, who signaled their departure by flicking his half-
finished cigarette to the ground. “Thank you, ma’am. And again, we’re sorry.”
The detectives made their way towards the back entrance to the store.&lt;/p&gt;
&lt;p&gt;“Wait!” Holly called softly. She ran up, tears still in her eyes. “Some of
the guys have been talking lately about something. Something that has them all
scared. They were saying that sometimes, one guy disappears for a night, then
shows up the next day all bruised and beat up. It happened to Darryl one time.
I tried to talk to him about it, but he wouldn’t tell me what had happened.
But everybody seems nervous about it these days. Even the homeless guys try to
stay in pairs now, just to be safer. Maybe it has something to do with that, I
don’t know.”&lt;/p&gt;
&lt;p&gt;Ames and Cobb thanked her again and continued on into the store. Holly was
still crying as Ned put his arm around her again.&lt;/p&gt;
&lt;p&gt;**Chapter 13: Beat Down **&lt;/p&gt;
&lt;p&gt;Mike’s vision focused slowly as he stormed into the room, yelling wildly.
His own voice was soon drowned out by Marie, shrieking maniacally at the top
of her lungs, and by that of a man as he jumped free from his position on top
of her and rolled off the side of the bed.&lt;/p&gt;
&lt;p&gt;Marie clutched the sheets around her naked body and continued to shriek on
the bed, a fearful look in her eyes. Mike’s hands were still tightly grasping
the bat, and he ignored her screaming as he scanned the room for the man. He
moved around to the left side of the bed, where the man was cowering next to
the night table, holding his hands in front of his nude, trembling body in an
attempt to shield himself.&lt;/p&gt;
&lt;p&gt;Well, this was an interesting development. He glanced around the room in an
effort to discredit the conclusion he already knew to be true. The room was in
perfect condition, just like the rest of the house; no, Marie had &lt;em&gt;let&lt;/em&gt; this
bastard into the house.&lt;/p&gt;
&lt;p&gt;Marie regained her composure to some degree and shouted, both in fear and
anger, “Mike, what the hell are you doing?”&lt;/p&gt;
&lt;p&gt;Mike’s mission now seemed clear. His job was gone, Angelo was going to kill
him, and Marie was cheating on him; with this pasty-faced bastard, no less. He
couldn’t do anything about the job or Angelo, but he’d be damned if he was
going to let her get away with this. She was going to pay.&lt;/p&gt;
&lt;p&gt;The weakness he’d been feeling on his trip home was now fading, replaced by
the familiar rage that fueled all his best work. He was starting to feel
normal again — in control. But this time was going to be different. He wasn’t
going to stomp around, screaming vulgarities and throwing things around the
room. This time he was going to do it fucking &lt;em&gt;right&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Mike glanced back at Marie, a strange stillness in his eyes. He replied
icily, eyes staring blankly into the distance, “I’m fuckin’ killing your
boyfriend, that’s what I’m doing.”&lt;/p&gt;
&lt;p&gt;He swung the bat down forcefully, striking the pale, sweating man on the
left side. His arm crumpled as he cried out in pain. He scrambled towards the
bed, looking for shelter, but Mike bent down, grabbed his ankle, and pulled
him out one handed. With his other hand he swung the bat again, hitting his
target just between the shoulder blades.&lt;/p&gt;
&lt;p&gt;The man gasped, then went limp, and Mike struck again, with both hands this
time. The man’s body was unresponsive, and in his subconscious Mike realized
that he was either dead or knocked out, but the beating continued.&lt;/p&gt;
&lt;p&gt;Marie jumped from the bed onto his back, screaming nonsensically at him and
pounding weakly at him with her fists. The man groaned unexpectedly and Mike
smiled inwardly at the realization that he wasn’t dead &lt;em&gt;yet&lt;/em&gt;. The beating
could continue.&lt;/p&gt;
&lt;p&gt;He grabbed Marie’s arm and swung her off his shoulder, then clutched her
towards him and threw her hard towards the left closet door. She smashed
awkwardly into the full-length mirror there, sending fireworks of sunlight
from the early afternoon sun around the room, and landed in a heap of broken
glass, broken skin, and tears.&lt;/p&gt;
&lt;p&gt;Mike smiled at her. “That’s right, bitch,” he spoke smoothly, resuming his
swings with the bat. The man was now in a fetal position below him, moaning
softly. Bruises had already started to form on his legs and back, and his
disfigured arm gushed blood where white bone jutted incongruently out of his
pasty skin.&lt;/p&gt;
&lt;p&gt;Mike pounded on him mercilessly with the bat, paying special attention to
his broken arm and now purple back, then abruptly dropped to his knees and
continued with his own fists, focusing on the face and neck. His own blood
mixed with the man’s as the cuts on his knuckles reopened. He raised his hand
for another blow, and without warning, stopped short, instead grabbing the bat
again and standing slowly up.&lt;/p&gt;
&lt;p&gt;The tip of the bat was smeared a dark crimson now, and flecks of a similar
color dotted the sheets and bed surrounding the crumpled body of the man. Mike
smiled coldly, satisfied with his work. He looked over at Marie, where small
rivulets of her own blood ran along the glass pathways on the clean hardwood
floor, fueled by constant drops from fresh cuts on her back, legs and
buttocks. She caught his cold stare from behind a shroud of matted, blood-
flecked hair.&lt;/p&gt;
&lt;p&gt;Mike turned and threw the bat at her feet. Its noisy clatter was drowned out
by her own surprised shriek, and she scrambled away quickly, leaving a broad
swath of crimson in her path.&lt;/p&gt;
&lt;p&gt;Mike reached down and picked up the telephone on the night table, throwing
it at her. “You’d better call 911, Marie. I think your boyfriend needs to see
a doctor.” With that, he turned and strode quickly out of the room, down the
stairs, and into the kitchen.&lt;/p&gt;
&lt;p&gt;He stopped at the sink, running cold water over his own wounded hands. The
white of his own knuckles shone through as the blood washed away. He saw
Marie’s purse in it’s customary position on the kitchen counter, and he swung
it over his shoulder as he walked to the garage.&lt;/p&gt;
&lt;p&gt;Marie wouldn’t be needed her SUV — he might as well take it. It was really
his anyway, he’d paid for it. The angry adrenaline surged pleasantly through
him as he pressed the garage door button. Sunlight streamed brightly into the
dark garage as the door opened. &lt;em&gt;What a beautiful day&lt;/em&gt;, he thought. He pulled
out slowly onto the street, and continued on through the path of finely
manicured lawns, stone yard fountains, and hedge art. It was time to go see
Angelo.&lt;/p&gt;</content:encoded></item><item><title>November 10th</title><link>https://tylerbutler.com/november-10th/</link><guid isPermaLink="true">https://tylerbutler.com/november-10th/</guid><description>November 10th</description><pubDate>Thu, 11 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 11: Debt&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Mike came to propped up against the side of the tower. His head hurt. It
took him a few moments to remember what he was doing there. He was vaguely
conscious of a uniformed security guard standing just inside the tower door,
peering out the window at him. As he looked back at the man, the security
guard raised his walkie talkie to his mouth, uttered a few words, and turned
away from Mike.&lt;/p&gt;
&lt;p&gt;The two security men who’d escorted Mike out of the tower hadn’t known what
to do with his unmoving body. It wasn’t uncommon for them to drag a recently
fired employee out of the office, but they had always stayed conscious.&lt;/p&gt;
&lt;p&gt;Mike collected his muddy thought, rubbed his head and slowly stood up. The
adrenaline that had fueled his angry tirade earlier was now gone, and the
realization that he was in deep shit had fully sunk in, leaving his mouth dry,
his head aching, and his knees weak.&lt;/p&gt;
&lt;p&gt;He was dizzy. What was he going to do? He tried to ignore it, but the
thought of what Angelo was going to do to him kept coming back. He had needed
that bonus! He willed himself to get angry again — to muster up the chemicals
in his brain that would restore him to his normal self — but nothing would
come. He was too tired. He wanted to sleep for a very long time. In his
dejection he found it strangely humorous that he would soon get his wish; when
Angelo found out he didn’t have the money, he’d make sure that Mike would be
sleeping for a &lt;em&gt;very&lt;/em&gt; long time.&lt;/p&gt;
&lt;p&gt;He eventually became aware of the people staring at him. He must have looked
very awkward, staggering on his feet, blood on his shirt, hair mussy, a
distant look in his unfocused eyes. But why did they stare? Had they never
seen a jobless guy downtown before?&lt;/p&gt;
&lt;p&gt;“Screw you!” he yelled at a passing woman who’d kept her eyes on him for a
moment too long. She jumped and scurried on along, looking back every so often
as if she was worried he might follow her.&lt;/p&gt;
&lt;p&gt;Finally his head stopped swimming and he gingerly stepped off the tower
stairs down towards the street. The security guard was there in the window
again, no doubt ordered to keep an eye on him. He spoke into his walkie talkie
again, and maintained his watchful gaze as Mike stepped along the street
slowly.&lt;/p&gt;
&lt;p&gt;It occurred to Mike, as he staggered down the street, that he had no money
for a cab on his person. He normally kept his wallet on him, but on this
particular day he’d worn his nice Italian pants; the back pocket was far too
small for his oversized wallet, stuffed with business cards, credit cards, and
pictures of his wife to show potential customers. It’s large bulge in the back
pocket of these particular pants was unsightly, not to mention uncomfortable,
so he had placed it in the briefcase along with his files — the briefcase that
was by now being ransacked by Maureen and her team in search of his notes on
his new campaign.&lt;/p&gt;
&lt;p&gt;He reached in his pocket, feeling for his keys and cell phone — they were
still there, along with his train pass and a few cents in loose change. At
least he could call Marie. He fumbled with the phone a few minutes before he
finally got the number punched in. There was no answer? She hadn’t been there
earlier either; where was she?&lt;/p&gt;
&lt;p&gt;Without consciously realizing it, he’d been walking towards the State Avenue
train station. It was just as well. He could at least ride the train up
towards his house, then try calling Marie again and hope she would answer. She
could pick him up at the station.&lt;/p&gt;
&lt;p&gt;As he approached the platform, he reached in his pocket and quickly counted
the change he had. He was 50 cents short of what he needed to get back up
north.&lt;/p&gt;
&lt;p&gt;He sighed, defeated, realizing the sick sense of humor the universe must
have. He began to ask passersby if they could help him out with a little
change, but they shrugged him off and hurried by. Why didn’t they believe his
story? He wasn’t a degenerate — he was an important man! And he only needed 50
cents! It wasn’t a big deal! The irony was not entirely lost on him as he
remembered the earlier events of the morning. referring back to beggar story
with Mike, need to addYes, the universe had a sick sense of humor.&lt;/p&gt;
&lt;p&gt;After several unsuccessful attempts at soliciting assistance, and a couple
of close scrapes with a public transportation employee who seemed to enjoy
pointing ominously at the small signs posted around the station that read,
“Solicitation Prohibited,” Mike tried a new approach. He checked around the
vending machines at the station, poking his finger into the change return and
fishing under the machine with his hands. His efforts yielded two dimes, three
nickels, and a collection of pennies, which he exchanged with the public
transportation employee for additional nickels and dimes.&lt;/p&gt;
&lt;p&gt;Before long, he had the requisite 50 cents and found himself on a northbound
train, heading home. He was emotionally drained. Hopelessness enveloped him,
and he tried to sleep, but was constantly plagued by nightmares of Angelo’s
response to Mike’s explanation of why he didn’t have the money.&lt;/p&gt;
&lt;p&gt;It had all started two months ago, when Mike was riding high on the success
of another of his accounts. This account was much, much smaller than Richmond,
but the campaign he’d designed had worked considerably well, and he felt the
need to celebrate that fact in some way.&lt;/p&gt;
&lt;p&gt;He had overheard a conversation in the office regarding a horse that was “a
sure thing.” Mike had never thought of himself as a gambler, though others
would no doubt have termed him that, but when thinking about just how to
celebrate his recent victory at Copeland, a sizable bet on a “sure thing”
seemed to be just the thing. There were few things more exciting to Mike than
watching money turn into more money (this was an important thing in
advertising — it was his job to turn a client’s advertising budget into
revenues), and his cursory research into the horse, named Day Tripper,
indicated that he had a good chance to do well with his bet. His own research
coupled with the overheard office discussion made his decision decisively
simple.&lt;/p&gt;
&lt;p&gt;He had called up Angelo, whose number had been collecting dust in his
Rolodex, and put a sizable bet on Day Tripper to win. Angelo had been more
than happy to take Mike’s bet, reminding him again of the debtor’s obligations
to his creditor. Mike had brushed it off; Day Tripper was a sure thing — it
was money in the bank.&lt;/p&gt;
&lt;p&gt;That was when things started to go wrong. Day Tripper had lost miserably,
and the following day at Copeland he was informed that his client had
misreported their revenue from the last campaign, and the ads weren’t doing as
well as they had initially thought. Mike had had his first and only out of
body experience at that point, and upon returning to normal, had proceeded to
throw random objects around the office and threaten to fire each and every
person on his team.&lt;/p&gt;
&lt;p&gt;Angelo, of course, was pleased with the outcome, and was sickeningly calm
and collected when he phoned Mike to inquire about payment. Mike was in for a
lot, and without the expected bonus from that recent campaign, he didn’t even
have the money he’d put up, let alone enough to cover the juice Angelo was
already running.&lt;/p&gt;
&lt;p&gt;Angelo had been more than happy to extend Mike’s repayment period; after
all, the interest went straight to his pocket. He had, of course, informed
Mike in no simple terms the extreme regret he’d feel if he didn’t pay the
money back when it was due.&lt;/p&gt;
&lt;p&gt;Mike had readily agreed — he figured he could get the money somehow — he
would have done anything to get Angelo off his back for the time being. And
when the Richmond guys said they were looking at renewing their contract, Mike
was confident that the bonus would pay his debt and leave plenty left over for
a little celebration. As the bonus began to seem more and more a reality,
Angelo and the debt were demoted to the back corners of Mike’s thoughts.&lt;/p&gt;
&lt;p&gt;But now, it was all he could think about. Mike didn’t know exactly what
Angelo was capable of, but he knew enough to worry. Angelo wasn’t the kind of
guy you could look up in the yellow pages. Mike had a need to be discreet
about his gambling; that’s why he went through Angelo in the first place. He
had never anticipated actually having Angelo hunt him down.&lt;/p&gt;
&lt;p&gt;He couldn’t decide whether he should call Angelo and let him know he
wouldn’t have the money, or wait for Angelo to wonder where he was and send
someone for him. Either way, the outcome would be the same. He shook his head,
trying to shake off the uneasiness and worry that plagued him. Well, no matter
what, he was going home now. He was going to drink a large glass of scotch –
perhaps the whole bottle — and accept Marie’s soft, tender arms around his
neck to comfort him. And then, perhaps… well, he would have to wait.&lt;/p&gt;
&lt;p&gt;Then he would figure out what to do. The alcohol and Marie would help to
calm him down; it would clear his head, it would make everything better. Then,
and only then, would he be able to make a rational decision, to do the right
thing.&lt;/p&gt;
&lt;p&gt;As the train passed by the Allerton station, he looked out towards the
highway, hoping to catch a glimpse of his car. It wasn’t there. He sighed; it
had probably been towed to the city impound, which meant he’d have to pay to
get it back. It was surprising how quickly something as small as an impound
fee could become a financial burden.&lt;/p&gt;
&lt;p&gt;The train pulled up to the far north station — his station — and he stood
up, head still swimming somewhat from his earlier bout with unconsciousness.
He phoned Marie as he stepped out of the nearly empty train; she still wasn’t
picking up. Her lack of attentiveness to his needs, whether she knew they
existed or not, was starting to wear on him. She was his wife, dammit! What
the hell was she doing.&lt;/p&gt;
&lt;p&gt;The few cents in his pocket had not, unfortunately, transformed into more
during the trip, so he was still unable to afford a cab. He had no choice but
to continue on foot. He called Marie at about every block, but she never
answered. Eventually he started getting busy signals; was she there, and
simply ignoring him? That bitch!&lt;/p&gt;
&lt;p&gt;The mile-long walk to his home went by quickly. He had too much on his mind
to feel the growing blisters on his feet, cramped inside the Italian leather
shoes; too much to feel the throbbing pain of the reopened wound on his hand,
now oozing blood again.&lt;/p&gt;
&lt;p&gt;The house was dark and quiet when he reached the front door. He grabbed his
key from his pocket, and inserted it into the deadbolt. As he pushed the key
in, the door swung open silently; it was unlocked. Something was wrong — the
door was never unlocked. Marie was obsessive about security — the only reason
the door would have been unlocked was…&lt;/p&gt;
&lt;p&gt;He bolted into the room, looking around frantically. Nothing seemed out of
place.&lt;/p&gt;</content:encoded></item><item><title>November 8th</title><link>https://tylerbutler.com/november-8th/</link><guid isPermaLink="true">https://tylerbutler.com/november-8th/</guid><description>November 8th</description><pubDate>Tue, 09 Nov 2004 15:01:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 9: Warning&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ernie felt weak. His stomach hurt, his heart was racing, and all he could
think of was getting out of there. He wasn’t prepared to see a dead body, let
alone the body of someone he knew.&lt;/p&gt;
&lt;p&gt;He turned and ran back out of the alley, leaving Ken scrambling to pick
himself off of the pavement and follow. Ernie didn’t go far. He ducked behind
the building at the end of the alley and sat down, back against the side of a
dumpster, and hugged his knees close to his chest.&lt;/p&gt;
&lt;p&gt;He didn’t cry, but he felt like it. He couldn’t get the image out of his
head — Darryl, with his grimy face and bloody hands, lying there motionless on
the gurney, a twisted expression of fear on his face. At least his eyes had
been closed… Ernie shuddered again.&lt;/p&gt;
&lt;p&gt;Ken caught up with him, and assumed the same position as Ernie just to his
left.&lt;/p&gt;
&lt;p&gt;“Hey, Ern, what’s goin’ on, man? You know that guy or somethin’?” Ernie
didn’t reply audibly, but nodded slightly. Ken knew him well enough to realize
that if you wanted information from Ernie, you were better off to just ask a
lot of questions.&lt;/p&gt;
&lt;p&gt;Ken hadn’t gotten a really good look at the man, since Ernie had dropped him
before his eyes could fully focus, but he knew Ernie didn’t know a whole lot
of people except the kids at the corner and the residents of St. Ives.&lt;/p&gt;
&lt;p&gt;“Was is one of the guys from St. Ives, Ernie?” Ernie nodded ever so slightly
again. “Man, that sucks.” Ken leaned his head up against the dumpster, hugging
his knees even closer to his body.&lt;/p&gt;
&lt;p&gt;A burst of inspiration struck Ken like a lightning bolt. This was a perfect
opportunity to do some sleuthing! Like many children, Ken vacillated when it
came to “what he wanted to do when he grew up.” But lately, he’d been leaning
towards the glorious life of a private eye, due in no small part to the
mystery novels that his friend Rex provided him.&lt;/p&gt;
&lt;p&gt;He could use this opportunity to get some valuable experience. By
investigating the cause of the mystery man’s death, he could try out his
gumshoes and maybe even help Ernie somehow. It was an opportunity that
shouldn’t be missed.&lt;/p&gt;
&lt;p&gt;“Hey, Ern, I’m going to head back to the store and see if I can figure out
what’s going on. Just stay here; I’ll be right back.”&lt;/p&gt;
&lt;p&gt;Ernie was more than happy to stay right there. He was still feeling quite
sick. Sweat gathered quickly on his brow, and his breath became shallow. As
Ken scuttled back towards the flashing lights of the emergency vehicles,
Ernie’s mind cleared enough for him to think about what Darryl had told him a
few weeks previous.&lt;/p&gt;
&lt;p&gt;Darryl was a regular at St. Ives, though he wasn’t there nearly as often as
Ernie. He was known by many of the other St. Ives residents as “the squeegee
man,” largely due to the fact that he spent his days down on State Avenue
cleaning the windshields of commuters as they waited at the lights. It
couldn’t be called a living, since he still made moderate use of St. Ive’s
free food supply, but he did better than many of the others who begged at
street corners or outside grocery stores.&lt;/p&gt;
&lt;p&gt;Part of Darryl’s success was due to his easy smile and the fact that he
never &lt;em&gt;ever&lt;/em&gt; asked for any money in return for his services. He strove to
make it appear that he was simply helping people out; he didn’t want people to
think he needed their charity, even though he most definitely did.&lt;/p&gt;
&lt;p&gt;Darryl preferred instead to believe that people would pay for a service well
done, even though they didn’t necessarily know they needed the service. He
told Ernie on one occasion that most people didn’t realize how dirty their
windows really were until he’d cleaned them, and after that, they were more
than happy to throw a few cents his way in thanks. His attention to detail
certainly didn’t hurt his enterprise either; Darryl made sure your windows
were clean. This was not a cursory effort; this was professional service, even
if it did come from a grimy, off-smelling homeless man.&lt;/p&gt;
&lt;p&gt;Ernie had accompanied Darryl one day, and initially he found it interesting,
but he didn’t excel at smalltalk and smiling the way Darryl did, and the
customers’ looks of dismay upon their approach was more than enough to
convince Ernie that he was better off to stick to his jive.&lt;/p&gt;
&lt;p&gt;He’d learned a lot from Darryl, though, especially about keeping a positive
attitude. Darryl had told Ernie stories of drivers that had gotten
particularly angry at him — so angry that they had stepped out of their cars
and gotten physical with him. Every so often, Ernie would see Darryl with
fresh bruises on his arms, or a cut above his eye. But he never let it get him
down. He had explained his philosophy to Ernie once.&lt;/p&gt;
&lt;p&gt;“Ya see, Ernie, da way I figger it, everybody’s got a lot goin’ on that we
don’t see. Take you and me, fer example. Most folks don’t realize you and me
ain’t gots no home, ain’t gots no food, but at the same time, we gots to
understand that they’se maybe had a rough day. Maybe da wife left ‘em and took
da kids. Maybe dey got fired an’ worry about endin’ up like you and me. I
dunno. But da point is, we don’t know. We gots to give them the opportunity to
be mad, cuz we don’t know why dey are. Maybe it’s me, but I don’t think so. I
think it’s something else. It’s like my momma used to always say, ‘Dey’s more
to it than just a broken leg.’”&lt;/p&gt;
&lt;p&gt;Ernie had never quite understood what Darryl’s mother had meant, but if
Darryl’s account was at all truthful, she was the most intelligent and
insightful woman the earth had ever known, “a true angel,” as Darryl liked to
say.&lt;/p&gt;
&lt;p&gt;Ernie wasn’t sure if he and Darryl were friends or not, but he knew he
enjoyed his company, and whenever Darryl was at St. Ive’s, Ernie sought him
out.&lt;/p&gt;
&lt;p&gt;A few weeks ago, Darryl had come to dinner at St. Ives a changed man. He was
bleeding from numerous cuts on his face, his clothes ripped and torn more than
usual, and his hands were blistered so he could barely hold the now broken
squeegee.&lt;/p&gt;
&lt;p&gt;Rhonda had clucked over him for an hour, dressing his wounds and cleaning
him up as best she could. Darryl was strangely reticent during the whole
procedure and on into the evening, despite Rhonda’s attempts to get him to
explain what had happened.&lt;/p&gt;
&lt;p&gt;Ernie hadn’t had any luck either. He sat with Darryl at the dining room
table long after dinner, waiting for Darryl’s explanation, but it never came.
He just stared aimlessly into space, seemingly lost in his thoughts.&lt;/p&gt;
&lt;p&gt;Finally, Ernie grew restless and stood up to leave, but Darryl had grasped
his arm urgently.&lt;/p&gt;
&lt;p&gt;“Ernie, listen!” He spoke with an uncharacteristic urgency that immediately
caught Ernie’s attention. There was a bizarre fire in his eyes, but they
stared aimlessly the way they had that entire evening.&lt;/p&gt;
&lt;p&gt;“If a man ever comes to you, sayin’ he’s got da answer, dat he can get you
out, you just gots to do one thing, don’t listen to ‘im. Don’t let him take
‘vantage o’ you. Tell him you’ll get out y’own way. Tell him you don’t need
‘im. Hear me?” He clenched Ernie’s arm so hard he cried out in surprise.&lt;/p&gt;
&lt;p&gt;Ernie nodded a slow acknowledgment and drew his arm away quickly. Darryl had
never done anything that would hurt him before, but his eyes still stared off
aimlessly into space; he didn’t seem to even realize he’d done or said
anything.&lt;/p&gt;
&lt;p&gt;Ernie had gone to bed that evening troubled, and he had wanted to ask Darryl
what he was talking about, but Darryl was gone in the morning. It wasn’t
unusual — Darryl often didn’t spend the whole night at the shelter. He
preferred to find his own place to sleep. But Darryl hadn’t returned, and no
one Ernie had spoken to had seen him around his normal Stae Avenue workplace.&lt;/p&gt;
&lt;p&gt;Ernie hadn’t worried too much, though. Darryl was an old-timer; he’d been on
the street for a long time. He knew the ropes and could take care of himself.&lt;/p&gt;
&lt;p&gt;But now, seeing Darryl’s still body in the ambulance, the look of pain in
his eyes, Ernie wondered if perhaps there had been more to Darryl’s admonition
than he’d thought.&lt;/p&gt;
&lt;p&gt;**Chapter 10: Investigation **&lt;/p&gt;
&lt;p&gt;Ken was having considerable luck on his first foray into the investigative
arts. He had quickly found a perfect listening post from a fire escape just
beyond the row of police cars and ambulances. From his vantage point, he could
get a relatively complete view of the mass of blue-suited officers with little
risk of being seen. And if he was quiet and listened carefully, he could make
out the conversations of them men below without too much difficulty.&lt;/p&gt;
&lt;p&gt;Two men in trench coats and white dress shirts seemed to be running the
show. Ken had heard them be addressed as Detectives. Detective — that was a
title he could get used to. Detective van Zandt — yes, it had a nice ring to
it. This investigation stuff was going to be a blast!&lt;/p&gt;
&lt;p&gt;Despite the fun he was having, Ken tried to keep a serious attitude. A man
&lt;em&gt;was&lt;/em&gt; dead, and while that in and of itself wasn’t terribly stunning,
especially in McAllister Park , this was someone Ernie knew, and that made it
even more important that Ken take things seriously. He desperately wanted to
find out something that would put Ernie at ease, or at least give them a clue
as to what had happened. He’d never seen Ernie this way before, which meant
that he knew the dead man pretty well.&lt;/p&gt;
&lt;p&gt;One of the detectives approached the ambulance where Darryl’s body lay. Ken
craned his neck to hear the conversation.&lt;/p&gt;
&lt;p&gt;“Any idea who we’ve got here?”&lt;/p&gt;
&lt;p&gt;“No, sorry. No identification at all. But judging from his appearance and
smell, he was probably homeless. We had more luck with the other guy. We found
a few books and some plane tickets from Sumatra in his backpack, and I think
somebody mentioned that they had his wallet as well.”&lt;/p&gt;
&lt;p&gt;“OK, any idea on what happened?”&lt;/p&gt;
&lt;p&gt;“Not really. Both victims had gunshot wounds, but judging from the blood
loss, I’d say John Doe over here got hit first. The kid probably stumbled on
the perps or tried to help the guy or something. A regular saint, I guess.”&lt;/p&gt;
&lt;p&gt;“Where’s the other victim?”&lt;/p&gt;
&lt;p&gt;“Well, they’ve got him on the train back up to Elston Memorial. Stomach
wound, but it seemed to have missed all the important stuff, so maybe he’ll be
all right. We’ll see.”&lt;/p&gt;
&lt;p&gt;“OK, thanks.” The detective turned and walked towards his partner.&lt;/p&gt;
&lt;p&gt;“What do we have, Cobb?”&lt;/p&gt;
&lt;p&gt;“Looks like a homeless guy,” the first detective said, removing the
toothpick he’d been chewing on nervously from his mouth.&lt;/p&gt;
&lt;p&gt;“Well, we’ve got the other guy’s wallet. His name is Joel Mendocino. Address
on his license is for an apartment just west of here. They’ve taken him to
Elston.”&lt;/p&gt;
&lt;p&gt;“Yeah, that’s what I hear. Is Foster gonna call us when he’s awake so we can
get statement?”&lt;/p&gt;
&lt;p&gt;“Yeah, she said she would.”&lt;/p&gt;
&lt;p&gt;“All right, let’s head to the apartment and see what we can find there.”&lt;/p&gt;
&lt;p&gt;Ken watched as the two men headed on up the road towards their car, debating
whether the rest of the uniformed cops would have any useful information. None
of them seemed to be talking — they were all simply looking around the scene
and taking notes. He decided it was time to go let Ernie know what was going
on, and scrambled noiselessly off the fire escape and headed towards the
dumpster behind the alley, where Ernie was still sitting, head on his knees.&lt;/p&gt;
&lt;p&gt;Ken pulled gently on his arm.&lt;/p&gt;
&lt;p&gt;“Ernie, I found out where they’re taking the other guy. There were two of
‘em. Come on, lets go see if he can tell us anything.” He pulled more strongly
against Ernie’s resistance.&lt;/p&gt;
&lt;p&gt;Ernie reluctantly stood up slowly and followed Ken to where his bike lay on
the asphalt. He didn’t much feel like “investigating,” but Ken seemed to think
it was the right thing to do. He instinctively reached for the headphones
around his neck, but stopped short of pulling them to his ears. No, he didn’t
feel much like jiving either, so he and Ken made their way up the street in
silence.&lt;/p&gt;</content:encoded></item><item><title>November 7th</title><link>https://tylerbutler.com/november-7th/</link><guid isPermaLink="true">https://tylerbutler.com/november-7th/</guid><description>November 7th</description><pubDate>Mon, 08 Nov 2004 15:24:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 8: The Weakest Link&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The train didn’t seem to be moving as quickly as it had the last time he’d
ridden, mont hs ago. He was getting restless. The executives would be
expecting him momentarily. He glanced at his watch for the millionth time.
Time seemed to be slogging along at an incredibly slow rate.&lt;/p&gt;
&lt;p&gt;The jagged cuts on his knuckles had stopped bleeding, and now pulsated a
dull pain through his entire right hand. He’d inadvertently gotten blood on
his fresh white shirt and dark tie; he probably wouldn’t have the time to
clean himself up before the meeting — if he even made it.&lt;/p&gt;
&lt;p&gt;Thee train creaked to a stop. Was this it? No, one more to go. He examined
his appearance in the low-contrast reflection of the train window. Wow, he was
a wreck; hair mussed up from the run, the gritty dull white powder of dried
sweat on his forehead, blood on his shirt, collar and tie loose and wrinkled.
He certainly didn’t look like a poster child for one of the most powerful
advertising firms in the city.&lt;/p&gt;
&lt;p&gt;A wave of anger passed over him, largely directed at Marie. After all, it
was &lt;em&gt;her&lt;/em&gt; fault that all of this was happening. If she’d made sure he was up
this morning, he could have gotten on the road earlier. Granted, it was he
that was out late last night, but &lt;em&gt;that&lt;/em&gt; was her fault too. If she’d kept him
satisfied, he wouldn’t have had the need to stay out late cheating on her to
satisfy his sexual appetite. See, it was all her fault. He ought to leave her.
Well, she’d be kissing the nice house in the Glade goodbye if he didn’t get
his bonus. At least this affected her as much as it affected him — she
wouldn’t get away scot-free.&lt;/p&gt;
&lt;p&gt;After what seemed like an eternity, the train finally made it to State
Avenue , and not a moment too soon. Mike grabbed his briefcase and hurried out
the door, pushing past the mob of people and ignoring their shouted protests
as he continued along.&lt;/p&gt;
&lt;p&gt;The path along State Avenue to the tower was relatively clear; it was so
late in the morning, a majority of people had already made it to their jobs.
His previous physical activity had left his body reeling, and he was unable to
move faster than a brisk walk towards the tower. He pushed his way through the
revolving doors and ignored the pleasant greetings of the security guard as he
headed straight to the elevator.&lt;/p&gt;
&lt;p&gt;He pressed the up button urgently, somehow feeling that the faster he
pressed it, the faster the elevator would descend. The pristine ding of the
elevator’s arrival could not come soon enough, and he boarded the car
anxiously. He was followed by two other nicely dressed individuals who ogled
his appearance as they boarded. He forced himself to smile smoothly, despite
his strong desire to rip their heads off. Who the hell did they think they
were?&lt;/p&gt;
&lt;p&gt;“34, please.” He murmured at the two other passengers as the doors slid to a
close with a hiss. A brief downward force signaled their ascent, and Mike
looked at his watch again. Shit, it was going to be close. The other
passengers departed at the 18 th floor, taking their time, much to Mike’s
chagrin. He pressed the door close button even more urgently than he had the
elevator call, and leaned back against the far elevator wall with an anxious
sigh. Fortunately for his sanity, it appeared no one else had any need to use
the elevator at this late morning hour, and his trip to the 34 th floor
continued uninterrupted.&lt;/p&gt;
&lt;p&gt;The doors opened and Mike flew out frantically, briskly heading towards his
office to grab the collection of charts and mock-ups for the new campaign.&lt;/p&gt;
&lt;p&gt;“Oh, Mr. Turner, I’m so glad you’re here! They’re waiting for you in the
conference room! Oh my, are you all right? Do you need…”&lt;/p&gt;
&lt;p&gt;“No, Susan, just let them know I am on my way right now. I’ll be there in a
minute.” He tightened his tie and buttoned the top button of his collar, then
quickly glanced at himself in the glass reflection of his office window. Well,
this was as good as it was going to get. He pulled the rolled posters from his
desk and walked towards the conference room.&lt;/p&gt;
&lt;p&gt;He pushed the door to the conference room open with his back, and turned to
notice that a majority of the management staff was present. That was odd — he
thought this was just between Bill, his direct supervisor, a few of the other
executives, and himself. And what was Marlene doing here? She shouldn’t have
anything do with this.&lt;/p&gt;
&lt;p&gt;“Ah, Mike, glad you made it… Oh, are you all right? Do you need a few
minutes?” Bill stood in greeting.&lt;/p&gt;
&lt;p&gt;“No, no, I’m OK. I just cut my hand on my way over. No big deal.”&lt;/p&gt;
&lt;p&gt;“Well, all right then. Go ahead and have a seat.” There was something
strange in his demeanor. He was too professional, too friendly. He and Mike
were barely on speaking terms — why the charade? And what were all these
&lt;em&gt;people&lt;/em&gt; doing here?&lt;/p&gt;
&lt;p&gt;“Mike, as you know, we’re here to talk about the Richmond account…”&lt;/p&gt;
&lt;p&gt;“Yeah, yeah, I’ve got some mock-ups here for you to look at.” Mike
interrupted in excitement. He was especially proud of his ideas for the new
campaign. They were quite possibly his best, and equipped with the right team,
he could really deliver the goods on this one.&lt;/p&gt;
&lt;p&gt;He reached down for one of the rolled-up posters and began to unfold it. “As
you can see, I’ve totally rethought the logo and how it integrates with the
rest of the campaign, and I’ve got some new…”&lt;/p&gt;
&lt;p&gt;“Well, Mike, let’s just wait on that. You see, we’ve had a lot of discussion
about the Richmond account, and as you know, they haven’t been pleased with
the latest campaign. We rely on their business, and we really need to pick up
the pace f we want to get them to sign a new con…”&lt;/p&gt;
&lt;p&gt;Mike was annoyed. He already knew all of this. He knew how important the
account was, both to the company and his own career. Why did Bill have to
rehash all this stuff here?&lt;/p&gt;
&lt;p&gt;“Yeah, I know, Bill, which is why I’ve totally rethought our approach, and
if you’d just give me a second to exp…”&lt;/p&gt;
&lt;p&gt;“Please Mike,” Bill said, holding up his hand and shaking his head. “Please
let me finish. We… all of us…” He motioned to the rest of those in the
room. “We’ve decided that we need some new leadership on the Richmond account.
Marlene, as you know, has a working relationship with some of the Richmond
guys from her days at Alliance , and we think that she might be able to
leverage that relationship to produce some good results.”&lt;/p&gt;
&lt;p&gt;Well, that explained Marlene’s presence. “What the hell is going on, Bill?
Are you letting me go?” Mike could feel himself getting hot.&lt;/p&gt;
&lt;p&gt;“In a word Mike… yes.” That son of a bitch. He looked around the room at
the rest of the observers. They all averted their gazes, looking at the floor
or out the window. Was this really happening?&lt;/p&gt;
&lt;p&gt;He stood up suddenly, causing a gasp to ripple through the rest of those
present. Marlene pushed away from the table quickly. Bill stood up to meet
him, a nervous look on his face. He moved his hands slowly, obviously trying
to calm the situation.&lt;/p&gt;
&lt;p&gt;“Now Mike, settle down…”&lt;/p&gt;
&lt;p&gt;Mike didn’t want to settle down. He didn’t want to calm the situation. He
&lt;em&gt;wanted&lt;/em&gt; to rip into someone.&lt;/p&gt;
&lt;p&gt;“This is why you called me down here, Bill? This is the meeting you told me
about &lt;em&gt;two weeks&lt;/em&gt; ago? This is what I’ve been preparing for, spending late
nights in this fucking office, cultivating and developing what is quite
possibly the most brilliant idea this firm has ever had? You son of a bitch!”&lt;/p&gt;
&lt;p&gt;Mike advanced towards Bill. There was too much going through his head. He
couldn’t think everything through. His blood was boiling! Did they honestly
think that Marlene, that &lt;em&gt;bitch&lt;/em&gt;, was going to be able to take over for him?
He was the heart of this company — Richmond was his account! What the hell
were they doing?&lt;/p&gt;
&lt;p&gt;Bill backed away slowly, still moving his arms in a vain attempt to calm
Mike down.&lt;/p&gt;
&lt;p&gt;“Come on Mike, you have to understand…”&lt;/p&gt;
&lt;p&gt;“What?” Mike shouted. He was pissed now. “What do I have to understand,
Bill? Do you really think this little cunt can take the Richmond account?”
There was no answer. “Fine. Let her try!” With a roar, Mike turned and slammed
his right fist into the wall. Pain shot like hot needles through his arm, but
he didn’t care.&lt;/p&gt;
&lt;p&gt;He turned back to where his briefcase and posters sat, leaving a streak of
maroon conspicuously on the cream conference room wall. Someone must have
called the tower security; two hefty-looking gentlemen stood in the doorway
stolidly.&lt;/p&gt;
&lt;p&gt;“Mike,” started Bill again, as Mike began to pick up his briefcase and mock-
ups. With mock-ups like these, he’d at least be able to get another job.&lt;/p&gt;
&lt;p&gt;“Leave the stuff here. You know you can’t take it with you.”&lt;/p&gt;
&lt;p&gt;Shit, he was right. Nothing Mike had done while working at the company was
his — it all belonged to Copeland. Those sons of bitches. He now understood
why they’d waited to tell him they’d decided to fire him; they knew he’d put
all of his energy into revamping the campaign if he thought he had an
opportunity to really change it. Now they could take his work, give it to
Marlene, and turn it into a money-making campaign. And all it cost them was
his severance pay.&lt;/p&gt;
&lt;p&gt;“You’re all sons of bitches, you know that?” He dropped the posters and
briefcase as the two stolid gentlemen grabbed his arms and led him towards the
elevators. His rage continued to mount as the elevator descended. He
considered his options. He could try to take out the two security men and go
on a rampage through the office, but sadly, he had no weapons. The men looked
pretty solid, anyway; he wouldn’t be able to take both of them out.&lt;/p&gt;
&lt;p&gt;This sucked. No amount of profanity murmured under his breath could fully
express the sense of betrayal he felt. As the security men dragged him out of
the elevator on the ground floor, a sudden weight fell down on him. The
adrenaline that his anger had brought forth unexpectedly dissipated, and he
felt light-headed. The last thing he saw before passing out was two delivery
men wheeling a large cake through the tower lobby. The icing read,
“Congratulations Marlene!”&lt;/p&gt;</content:encoded></item><item><title>November 6th</title><link>https://tylerbutler.com/november-6th/</link><guid isPermaLink="true">https://tylerbutler.com/november-6th/</guid><description>November 6th</description><pubDate>Sun, 07 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;**Chapter 7: Shopping **&lt;/p&gt;
&lt;p&gt;Angela ran up and down the aisles, shrieking gleefully at each brightly
colored box of food that she did not recall being there the week before.
Melissa pushed the now overflowing cart behind her rambunctious daughter,
ignoring the disapproving stares of the store employees and other customers.
She’d grown accustomed to them over the years.&lt;/p&gt;
&lt;p&gt;“Can we get this, please?” Angela asked, throwing yet another box into the
cart before turning around quickly and running back to grab more useless
products, pony tail bobbing happily. Melissa sighed again. If she could get
paid a nickel, or even just a &lt;em&gt;penny&lt;/em&gt;, for every sigh she’d uttered since
Angela’s birth…&lt;/p&gt;
&lt;p&gt;Melissa could hardly wait until Angela was old enough to start dating. That
hellion would eat a boy for breakfast! Melissa nearly laughed out loud at the
thought of some boy seeking Angela’s affections, standing at the door with
flowers, nervous upon meeting his date’s father. Melissa chuckled again.
Someone frightened of Lawrence , ha! Whatever boy wanted to date Angela would
be in for a surprise, that was for sure. If he could handle &lt;em&gt;her&lt;/em&gt;, then the
rest of the family would be a piece of cake.&lt;/p&gt;
&lt;p&gt;Melissa shook her head sternly as Angela rounded the corner with a new box
in her hand. A shadow fell across the five-year-old’s face. The fun and games
were over, it seemed. Melissa motioned with her finger, maintaining the stern
expression on her face.&lt;/p&gt;
&lt;p&gt;“Come on, Angie. I told you you had to settle down, and you haven’t. Come
on, up in the cart.” She motioned towards the toddler seat in the overloaded
cart.&lt;/p&gt;
&lt;p&gt;“But Mommy, I’m not a baby anymore,” Angela replied, putting on her best
pouting face. She looked pitiful, but Melissa was not falling for the act.
Lawrence might, but she was tougher than he, especially when it came to their
daughter.&lt;/p&gt;
&lt;p&gt;“Well, you certainly seem to &lt;em&gt;act&lt;/em&gt; like a baby, so I think you can ride
like a baby. Come on, up you go.” She lifted the girl and placed her in the
seat. Angela crossed her arms across her chest and forced her frown to become
even more pronounced. It was comical. The entire store seemed to erupt in
silent applause at the site of the annoying blonde trapped in the toddler
chair.&lt;/p&gt;
&lt;p&gt;Melissa pushed the cart along each aisle, silently replacing each item that
Angela had placed in the cart, ignoring the small whimpers escaping her mouth
at the loss of each incredibly important item. The rest of the excursion would
transpire in silence, since Angela’s method of retribution when wronged was to
keep her mouth shut. Lawrence hated it. If he’d made her angry, he’d spend the
next hour trying to get her to talk to him, but Melissa simply ignored her.
Making her angry was often the only way to get her to shut up anyway.&lt;/p&gt;
&lt;p&gt;At last the final one of Angela’s contributions to the day’s purchases was
replaced on the shelf, and Melissa double checked her short list to ensure
that she had found everything she needed. The cart seemed sparse after
removing all the superfluous items, but she had everything she needed.
Surveying the surrounding aisles quickly for any last-minute things she might
have forgotten, she turned the cart briskly and strode towards the checkout
lines, which were overpopulated with customers.&lt;/p&gt;
&lt;p&gt;“OK, Angela, you can have one small thing — just one. What do you want?”&lt;/p&gt;
&lt;p&gt;The girl didn’t respond. Apparently she was still angry. Melissa shook her
head and sighed. It was her loss.&lt;/p&gt;
&lt;p&gt;She peered around the register lanes, looking for Ned, the nice man who
always helped her to the car and always said something kind to Angela. There
he was, ringing up a constant stream of customers, as usual. The wait in his
line would be worth it. She could use a pick-me-up today.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ned was back in his groove. The brief break earlier had really rejuvenated
him, and he’d been visited by several of his regular customers already today,
which kept him feeling good. The pain in his knee had grown duller, and while
still present, was bearable.&lt;/p&gt;
&lt;p&gt;He was scanning items more efficiently than he had in awhile, passing item
after item quickly over the glowing red bars of the UPC scanner. He had
explained once to some of the other cashiers how the scanning machine worked.
They all were amazed at his knowledge, and for a brief shining moment, he had
felt like he was himself again. A smart, respected engineer, whose knowledge
of mechanical and electrical machines was belied by his soft eyes and quiet
demeanor.&lt;/p&gt;
&lt;p&gt;Of course, Bob had quickly disbanded the small group of listeners to Ned’s
explanation, somehow turning a UPC scanner into a major character in the
latest episode of his corporate kiss-ass saga. Holly had been kind enough to
listen to his further explanation during one of their mutual breaks. She had
seemed genuinely interested, though Ned knew she had promptly forgotten
everything he’d said. It didn’t matter. She’d given him the chance to feel
smart and useful again, and that was what he needed.&lt;/p&gt;
&lt;p&gt;Ned often spent his breaks chatting with Holly when he could. They often sat
out on bench in the parking lot, while Holly smoked a cigarette. She never
failed to offer one to Ned, though he always declined. Truth be told, he found
the habit disgusting and repulsive, but Holly was interesting to be around,
and her presence offset the acrid smell of the smoke. In fact, there were
several things that Ned disapproved of about Holly, and if she had been his
daughter, they certainly would have a lot to discuss. But she wasn’t his
daughter, and as their work relationship turned into a true friendship, he
found that the eyebrow piercing and smoking habit defined their relationship
less and less.&lt;/p&gt;
&lt;p&gt;He was constantly astounded by her generosity. She often invited the beggars
standing outside to join her for a snack, and always listened to their stories
of heartache and longing. That was her real gift to them, whether they
realized it or not — the gift of a listening, interested ear. Anyone could
give them a piece of pizza or the loose change in their pocket, but Holly’s
genuine concern for them and inquiries about their well-being lasted longer
than both the food and the loose change.&lt;/p&gt;
&lt;p&gt;Ned knew that many of the homeless men and women that frequented the area
surrounding the store were residents, either permanent or otherwise, of the
St. Ives shelter. He had mentioned to Holly that she should consider
volunteering there or something, but she seemed reluctant. She always just
smiled and said, “Yeah, Ned, I know,” but to his knowledge, she never had even
set foot in the shelter.&lt;/p&gt;
&lt;p&gt;He shot a glance to register 7, where Holly was now busy ringing up her own
long line of customers. She caught his glance and smiled. He smiled back. He
might hate his job, but at least he had to opportunity to become friends with
good people.&lt;/p&gt;
&lt;p&gt;“Thanks a lot, Ned. I’ll see you next week.”&lt;/p&gt;
&lt;p&gt;“You too, Mark. Be careful on the way out, it’s a bit slick by the door,” he
replied, referring to the small puddle of soda, remnants of an overactive
bottle of Sprite.&lt;/p&gt;
&lt;p&gt;He looked up to identify his next customer, and groaned inwardly as he saw
Melissa and Angela. Melissa was nice enough, but her daughter was a brat. Ned
had seen the way Melissa and Lawrence doted on her every whim, and it made him
sick. If _she’d _ been his daughter — well, he was just glad she wasn’t. He’d
have picked Holly over her any day.&lt;/p&gt;
&lt;p&gt;“Hi, Ned! How’ve you been?” Melissa inquired cheerfully, her smile
contradicted by the obvious tension and exhaustion in her voice.&lt;/p&gt;
&lt;p&gt;“Oh, I’m fine, fine. And your husband?”&lt;/p&gt;
&lt;p&gt;“He had to work today. It’s just me and Angie.”&lt;/p&gt;
&lt;p&gt;“Ah, I see. And how are you, little miss?” He smiled, eyes peeking over the
edge of his nose at the girl who looked very angry, arms crossed defiantly
across her chest.&lt;/p&gt;
&lt;p&gt;“Fine,” she replied, not looking up.&lt;/p&gt;
&lt;p&gt;He began to scan the items on the small conveyor belt. He knew that would
get Angie’s attention. She was always intrigued by the speed at which he
loaded the bags, so much faster than any other cashier.&lt;/p&gt;
&lt;p&gt;Today was no exception. As the &lt;em&gt;beep&lt;/em&gt;, &lt;em&gt;beep&lt;/em&gt;, &lt;em&gt;beep&lt;/em&gt;, of the scanned
items reverberated in the echoic store, Angela became transfixed on Ned’s
hands. They seemed to blur as he scanned and bagged each item with lightning
speed.&lt;/p&gt;
&lt;p&gt;Ned grinned at her, willing his arms to move even faster, mentally
confirming that every item had scanned by carefully listening for the
confirmation beep. He was going &lt;em&gt;fast&lt;/em&gt; today.&lt;/p&gt;
&lt;p&gt;Unexpectedly, his hands faltered. The jar of peanut butter, fortunately
plastic, flew from his fingers and clattered loudly on the tiled floor. The
store seemed to freeze; the all of the customers’ attention was focused on
him, and him alone.&lt;/p&gt;
&lt;p&gt;The silence was broken by Angela’s childish laughter. She clapped her hands
with glee, apparently deriving some sadistic pleasure from Ned’s mistake. Ned,
speechless at this unexpected development, knelt down silently and picked up
the jar. He scanned it again and continued, moving more slowly and del
iberately this time.&lt;/p&gt;
&lt;p&gt;The rest of the store reanimated itself, and Ned glanced up again to see
Holly still looking his direction. Her eyes asked, “Are you OK?” He nodded
back at her and painted his smile back on before looking back up at Melissa.&lt;/p&gt;
&lt;p&gt;“Well, will there be anything else for you this morning?”&lt;/p&gt;
&lt;p&gt;“No, Ned, that’ll be all. How much do I owe you?”&lt;/p&gt;
&lt;p&gt;“Well, you owe me a smile, but the store will want $87.13.” Ned joked back,
trying to shake off the embarrassment he felt at having dropped the peanut
butter. Melissa grinned.&lt;/p&gt;
&lt;p&gt;“Well, here’s your smile, and here’s the check for the store. Can I trust
you to make sure they get it?”&lt;/p&gt;
&lt;p&gt;“But of course,” he replied. “Would you like some help getting out to your
car?”&lt;/p&gt;
&lt;p&gt;“Well… Actually, yes, that’d be great.”&lt;/p&gt;
&lt;p&gt;Ned glanced around, looking for one of the young cart collectors to help
Melissa, but there were none to be found. Oh well. “I’ll be right back,
everyone.” He flipped the light on his register off and limped along behind
Melissa to her car, ignoring the faces Angela made at him as they walked. He’d
be glad when they were gone, especially the little brat.&lt;/p&gt;
&lt;p&gt;Melissa opened the trunk and Ned quickly loaded the bags into it with his
strong arms, oblivious to the sound of sirens as they passed along the street
in front of the store.&lt;/p&gt;</content:encoded></item><item><title>November 5th</title><link>https://tylerbutler.com/november-5th/</link><guid isPermaLink="true">https://tylerbutler.com/november-5th/</guid><description>November 5th</description><pubDate>Sat, 06 Nov 2004 13:02:00 GMT</pubDate><content:encoded>&lt;p&gt;**Chapter 6: Disembarkation **&lt;/p&gt;
&lt;p&gt;Joel didn’t notice when the man he’d held the train for stepped off. He was
more interested in sleeping at that point. The metal bar alongside the train
seat wasn’t the most comfortable pillow he’d ever used, but it wasn’t the most
uncomfortable either. The mounting fatigue of the trip had finally overwhelmed
him and he would have slept anywhere.&lt;/p&gt;
&lt;p&gt;Lucky for him, the McAllister Park stop was the last, and the train operator
woke him with a harsh clap on the shoulder and a shout, looking less than
pleased. Joel smiled sheepishly and rubbed his eyes as he was pushed out onto
the platform.&lt;/p&gt;
&lt;p&gt;The sun was looming higher in the sky now, and it was beginning to warm up.
His bare arms and legs felt quite comfortable as he twisted from side to side,
stretching his stiff body. He drew in a deep breath, let it out slowly, and
began walking towards the exit.&lt;/p&gt;
&lt;p&gt;He considered briefly walking straight home. His apartment wasn’t far, and
he &lt;em&gt;was&lt;/em&gt; tired. But looking around him, he realized that days as beautiful as
this one were in short supply here at this time of year, and he should make
the best of it while he could. Besides, he could really use a bagel — he
hadn’t had one while he’d been in Asia.&lt;/p&gt;
&lt;p&gt;He had sampled much of the local cuisine — a variety of curried rice,
countless vegetables, and fruits that few western mouths had tasted. But the
simplicity of a bagel slathered with cream cheese was something he had missed
greatly during his absence.&lt;/p&gt;
&lt;p&gt;It took him a moment to get his bearings. Things hadn’t changed that much
since his departure, but months of trekking through real jungle had left him
unready to tackle the asphalt one.&lt;/p&gt;
&lt;p&gt;He set off east the opposite of his apartment, heading towards the
Dominick’s that serviced all of McAllister Park’s grocery needs. He’d suffered
a little culture shock during his return flight, largely due to the wide array
of various items that were made available in even the smallest airport
convenience shop. Dominick’s was sure to shock him even more.&lt;/p&gt;
&lt;p&gt;The streets appeared to him much cleaner than when he last saw them. It was
certainly an observation colored by his experiences with much dirtier streets
in Asia. Most any street would appear cleaner than those.&lt;/p&gt;
&lt;p&gt;He soon settled into a now familiar stride, born of countless hours spent
hiking in secluded mountain jungles and vast grassy valleys. The distance to
the store was more than an average American would consider walkable, but then,
Joel was no longer an average American, was he?&lt;/p&gt;
&lt;p&gt;A few children passed by on bikes, sending inquisitive glances his direction
as they sped by. They probably didn’t see too many young men walking along the
streets of McAllister Park. It wasn’t known as the best neighborhood in the
city. Joel had ended up here just because it was cheap, and he’d never had any
real problems. Every once in awhile you’d hear of someone getting beat up, or
a bike getting stolen, or something, but Joel just did his best to be careful
and didn’t let himself get too worked up about it.&lt;/p&gt;
&lt;p&gt;He had sublet his apartment to a young couple that were still in school
relative close by. They were strapped for cash, and he didn’t really want to
give up his lease because of the trip. They had agreed to be out of the
apartment by a month before Joel’s scheduled return, so by now the place would
probably require a thorough cleaning. The bed, though, would be clean enough
for a good night’s rest — no need to concern himself with that now.&lt;/p&gt;
&lt;p&gt;What he did need to concern himself with was getting food. His stomach’s
complaints grew audible as he crossed the nearly abandoned parking lot of
Dominick’s. He entered through the automatic doors and thought idly how lazy
people had become.&lt;/p&gt;
&lt;p&gt;The scent of fresh-baked bread beckoned his nose frantically upon entry to
the store. It didn’t take him long to find the bakery section of the store,
despite his unfamiliarity with the new configuration of the store. It was much
different that when he last saw it, but he let his nose do the leading, and
all was well.&lt;/p&gt;
&lt;p&gt;He pulled a large plain white bagel from an oversized bin and smiled as he
imagined the joy he was about to experience while consuming it. He considered
briefly buying a few more items while he was there, but he he hadn’t had a
chance to convert any of his larger foreign currency, and the change in his
pocket was barely enough to cover his bagel.&lt;/p&gt;
&lt;p&gt;The line at the register was much longer than he had anticipated given the
deserted parking lot. A man with graying hair and a Dominick’s smock motioned
at him as he walked past the registers. The man seemed a little weak on his
legs, but he hobbled over and flipped the light on his register back on.&lt;/p&gt;
&lt;p&gt;“Good morning, sir,” he said, smiling slightly and quickly typing in the
code for bakery goods. “Will that be all for you?”&lt;/p&gt;
&lt;p&gt;“Yes, I’m just a little hungry,” Joel replied, smiling back. “Just got off a
long plane trip.”&lt;/p&gt;
&lt;p&gt;“Ahh, I see. Was it a good trip?”&lt;/p&gt;
&lt;p&gt;“Yes, I think so. I certainly learned a lot.”&lt;/p&gt;
&lt;p&gt;“Good to hear, good to hear. Well, enjoy your bagel, and have a nice day.”&lt;/p&gt;
&lt;p&gt;“You too…” Joel glanced at the man’s name tag. “…Ned. I’ll see you
later.” They both smiled at each other again. Joel was grateful for the
conversation. The man sounded tired, but he had made a concerted effort to be
friendly and engage with Joel. It was a quality he hadn’t seen a lot of since
his return, and it was something he knew he’d miss from his trip.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;[Insert another Asia back story here.]&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;He exited the store and began making his way back towards his apartment. The
bagel was heavenly delicious, and for a time he became so lost in its flavor
that he didn’t pay attention to where he was going. When he finally realized
he’d missed a turn and was headed down the wrong street, it had turned eerily
quiet and deserted. The sudden lack of sound struck him as strange, and he
peered around in a vain attempt to get his bearings.&lt;/p&gt;
&lt;p&gt;It was not in Joel’s nature to get nervous, but something about the air made
the hairs on the back of his neck stand at full attention. He felt for a
moment like a lawman from the wild west, stepping out into the main street of
a seemingly deserted town, expecting ambush, but not knowing from where it
would come. A newspaper, floating lazily by on the breeze, so tumbleweed-like,
did nothing to erase the image from his mind.&lt;/p&gt;
&lt;p&gt;In the silence, the unexpected **bang! ** from the east was startlingly
stentorian. His mind stumbled for a moment — was it a shot, a firecracker, or
what? Then he just started running, not really knowing why. Instead of running
away from the sound, he ran &lt;em&gt;towards&lt;/em&gt; it. It didn’t make much sense, he knew,
but he felt that east was the only direction that made sense to run in. He
couldn’t explain it, and the question of why he ran towards it instead of away
would later plague him, but for now, he was running.&lt;/p&gt;
&lt;p&gt;As he drew closer to the source of the sound, voices became clearer.&lt;/p&gt;
&lt;p&gt;“Holy shit, man! Why’d you do that?”&lt;/p&gt;
&lt;p&gt;“I wasn’t tryin’ to hit him! He jumped out of the way… I don’t know…
Shit!”&lt;/p&gt;
&lt;p&gt;“We’d better get the hell out of here, man.”&lt;/p&gt;
&lt;p&gt;Joel emerged from an alley and saw what had transpired. Two men, the
apparent sources of the screaming, were standing in the opposite corner of the
alley, facing a dumpster, hands waving animatedly. One held a gun. Well, that
answered his question about what caused the bang.&lt;/p&gt;
&lt;p&gt;Joel froze in his tracks almost immediately, but the men noticed him quickly
and he soon found himself eying the barrel of the pistol.&lt;/p&gt;
&lt;p&gt;“Don’t move, man. Shit!”&lt;/p&gt;
&lt;p&gt;“Come on Charlie, let’s get out of here!”&lt;/p&gt;
&lt;p&gt;“No man, he’s seen us, he can ID us.”&lt;/p&gt;
&lt;p&gt;“Just forget it, Charlie. Come on, let’s go. We’re already in deep shit
man.”&lt;/p&gt;
&lt;p&gt;“Yeah, and this’ll make it worse.”&lt;/p&gt;
&lt;p&gt;Both men approached Joel slowly; Joel stood frozen.&lt;/p&gt;
&lt;p&gt;“Don’t worry, guys… I won’t say a thing… I just took a wrong turn, you
know. I just want to get home… Either one of you know where Western is from
here?” He tried to steady the shaking in his voice. Who’d have thought having
a gun pointed at you could reduce you to jelly so quickly?&lt;/p&gt;
&lt;p&gt;“Yeah, I know where Western is,” replied the man with the gun. “But I think
you’ll be needin’ more than directions to get there.”&lt;/p&gt;
&lt;p&gt;Joel didn’t even hear the shot. He was suddenly on the ground, a sharp pain
in his belly, nausea washing over him. He blinked and tried to focus as the
men turned and ran, feet pounding hard on the asphalt.&lt;/p&gt;
&lt;p&gt;“Shit! Charlie, you’re a fuckin’ idiot!”&lt;/p&gt;
&lt;p&gt;Joel groaned. His head was swimming. What had happened? He looked down at
his stomach and was surprised to see a hole that hadn’t been there before.
Where did that come from? He tried to stand, but found any attempt to use his
abdominal muscles sent wave after wave of pain coursing through his body.&lt;/p&gt;
&lt;p&gt;He rolled over, and that’s when he noticed the crooked body beyond the
dumpster. It wasn’t moving. Joel steeled himself against the pain and pushed
upwards with one hand, using the other to hold his aching stomach. His mind
still wasn’t entirely clear, but he knew he had to help the other guy crumpled
there and get himself some help. He put his left arm under the man’s shoulder
and lifted upward with all his might, keeping his right hand pressed against
his abdomen.&lt;/p&gt;
&lt;p&gt;The blood ran out over his fingers and dropped silently onto the asphalt as
he dragged himself and his new companion out of the alley. He didn’t know
where he was headed — he hoped the right direction. He made it about a block
before an unexpected wave of lightheadedness hit him. He was suddenly falling
towards a field of daffodils and butterflies, and then, nothing.&lt;/p&gt;</content:encoded></item><item><title>November 4th</title><link>https://tylerbutler.com/november-4th/</link><guid isPermaLink="true">https://tylerbutler.com/november-4th/</guid><description>November 4th</description><pubDate>Fri, 05 Nov 2004 14:43:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 4: Mike&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;_Come on, come on… Just start already! _Another wheeze and gasp from the
engine, but it still wouldn’t fully turn over. “Dammit!” Mike shouted as he
smashed his right fist down against the front dashboard, cracking the brittle,
sun-bleached plastic of the air vents.&lt;/p&gt;
&lt;p&gt;The day had not been going well. Come to think of it, the week, the month,
the &lt;em&gt;year&lt;/em&gt; had not been going well. But today had been especially trying.
Marie had given him crap again for coming in late last night, he’d overslept
and got on the highway later than he’d hoped (no thanks to Marie, who hadn’t
been persistent enough in making roll out of bed), and now the car was &lt;em&gt;not&lt;/em&gt;
cooperating.&lt;/p&gt;
&lt;p&gt;This was ridiculous. Any other day but this one! Today was important! Today
was the meeting about the Richmond account — his account. An account that he
had nursed from its infancy at Copeland. An account that he had brought to the
company himself. Copeland didn’t even know Richmond &lt;em&gt;existed&lt;/em&gt; until he’d
brought it in. And he’d turned the account into a cash cow. Mike Turner was
totally responsible for turning Copeland Advertising into a large, well-
respected firm, and he wasn’t getting any credit at all.&lt;/p&gt;
&lt;p&gt;Not enough, anyway. And these new executives — young enough to be his
children — were coming in, acting like _they’d _ built the company, yanking
his talented staff away and putting them under other, less adept leaders. Then
they had the audacity to complain when the returns on the Richmond account
weren’t as high as usual. How could he be expected to produce results when
they were giving crappy, unskilled kids to work with? Most of these kids
didn’t know Z-Form advertising from their ass. And he was expected not only to
train them, but use them to produce high-quality advertising for the company’s
biggest account. Yeah, right, the logic made sense.&lt;/p&gt;
&lt;p&gt;And these kids — all they knew how to do was use a computer. If they
couldn’t do it digitally, they couldn’t do it. Not an ounce of artistic talent
between them. They only knew how to click a few buttons, move a cursor around
a screen, and hit the print key. Mike had come in with a few physical mock-ups
and these kids were amazed. “This must have taken you so long,” they
exclaimed. Damn kids, with their skateboards, their body-art, their Japanese
anime bullshit. They didn’t know jack about advertising. How the hell did they
get degrees?&lt;/p&gt;
&lt;p&gt;Today was the day he was going to fix the problems. The bigwigs upstairs
wanted to talk Richmond , and Mike was ready. He’d prepared several new ideas
for the account, and had outlined a plan to rejuvenate Copeland’s advertising
efforts. He’d even formulated a sound argument to get some of the more
seasoned staff back on his team. Surely they could listen to reason. After
all, it was the least the company could do for him. And the Richmond guys were
ready to sign a contract renewal, provided Mike could produce some quality
mock-ups for the new campaign. A renewed contract meant a bonus for Mike — a
bonus he desperately needed.&lt;/p&gt;
&lt;p&gt;But now the damn car wouldn’t start. He’d asked Marie three weeks ago to
take it to the mechanic while he was at work, but apparently she hadn’t. She
wasn’t good for much of anything these days. She was a decent cook, though,
and he kept her around as a back-up if he couldn’t get any from the younger,
more lithe interns. A man had needs, right?&lt;/p&gt;
&lt;p&gt;Besides, in his occupation, he needed a wife — someone he could bring to
company functions and provide his account-holders a sense of stability and
constancy. The latest in a string of vacuous office biddies wasn’t the best
choice for a dinner companion if clients were present; they needed to see him
as reliable, honest, and consistent, even if none of those words had ever
accurately described him.&lt;/p&gt;
&lt;p&gt;This was ridiculous. The anger of the surrounding drivers on the highway was
mounting quickly, and they sped by him honking their horns and screaming
obscenities in his general direction. What was he going to do? He could call a
tow truck, but by the time they arrived and he made it downtown, he’d have
missed the meeting and his opportunity to get things back on track at Copeland
would be gone. He already felt he was on thin ice with many of the executives
– he couldn’t afford to make a bad impression at this meeting.&lt;/p&gt;
&lt;p&gt;So what was he going to do? He slammed his fist on the dash again, sending
pieces of broken plastic flying, and dialed Marie on his cell. No answer.
Where the hell was she? There was absolutely no reason she wouldn’t be picking
up this early in the morning. Dammit, &lt;em&gt;dammit&lt;/em&gt;, &lt;strong&gt;&lt;em&gt;dammit&lt;/em&gt;&lt;/strong&gt;! He hit the
dash three more times for emphasis, this time driving plastic splinters into
his knuckles. He didn’t care. He had to get downtown.&lt;/p&gt;
&lt;p&gt;There was more riding on this meeting than anyone realized. He &lt;em&gt;needed&lt;/em&gt;
that bonus, and in order to get the bonus, had had to convince the execs to
give him his old team back. And to do that, he &lt;em&gt;had&lt;/em&gt; to get to the meeting!
It was a chain of events, all connected and reliant on the other, and he
couldn’t afford to screw any one of them up at this point.&lt;/p&gt;
&lt;p&gt;In a moment of sudden clarity, Mike noticed the train track to his left,
running parallel to the highway. How close was he to a station? He could see
the outline of the Whoorsley station in the distance ahead of him. Could he
make it on foot? He glanced back and saw the light of an approaching train
pulling to a stop at the faraway Allerton stop. He’d have to chance it.&lt;/p&gt;
&lt;p&gt;He threw the door of his black Mercedes open, grabbed his briefcase, and
dodged oncoming traffic and verbal assaults over to the shoulder. He briefly
looked back at the car; he’d probably never see it again, but it was a small
price to pay.&lt;/p&gt;
&lt;p&gt;He loosened his tie and began to run towards Whoorsley as fast as he could.
He hadn’t run like this since college, and his body apparently took great
pleasure in reminding him of that fact with burning lungs, rubbery legs, and
the complexion of a pickled beet. And this was only the first hundred feet.&lt;/p&gt;
&lt;p&gt;The train passed him with about 1000 feet left. He felt as if his lungs were
going to explode, but he kept going. He had to. Mike was not a religious man;
he hadn’t prayed since he was a small child kneeling at his bedside, hands
folded, but he prayed harder than he ever had that something, some &lt;em&gt;one&lt;/em&gt;,
would make that train wait. If he could make it, he might be able to make it
all the way downtown and still have a few minutes to take the elevator up to
the office.&lt;/p&gt;
&lt;p&gt;And the train waited. Time just seemed to stop. The rest of the world kept
moving, but that train was rooted, statue-like, at the Whoorsley station. Mike
kept running, sweat pouring from his brow, legs numb, lungs pumping furiously,
blood oozing from the dashboard-incurred injury he hadn’t even noticed yet. He
made it to the rear car and literally fell into it. The passengers looked at
him strangely, but he didn’t care. He’d made it, somehow. Perhaps this day
wasn’t going to be so bad after all.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Chapter 5: The Corner&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ernie stepped his way back along Sullivan Street . The music was roaring in
his ears again. The walk would get him warmed up; he’d be more than prepared
to take on the kids at 34 th and Broadway by the time he arrived.&lt;/p&gt;
&lt;p&gt;Some of the kids on “the corner,” as it was known to those in the elite
circle of participants, resented Ernie’s presence, but no one could deny that
he could move. Ken was sure to set straight anyone who argued about Ernie’s
participation. Ken understood that despite appearances, Ernie wasn’t a grown-
up, and the rest of the kids had nothing to fear from him.&lt;/p&gt;
&lt;p&gt;A rising rhythm in the music caused a requisite wave to ripple through
Ernie’s body. He loved that part of the song. In a sudden burst of
inspiration, he jumped up, spun 180 degrees and landed on his back heels,
still moving the same direction. A new move! He didn’t discover that many
anymore. He’d have to try that out at the corner today. It would drive the
kids nuts — especially Karen.&lt;/p&gt;
&lt;p&gt;Ken teased Ernie all the time about his crush on Karen. He tried to deny it,
but he had to admit to himself that it was true. There was something about the
way she shook her body while out on the floor, moved her hips back and forth,
and seemed to look right through him when their eyes met… he grinned. She
should be there today, and armed with a new move, he was sure to impress her.&lt;/p&gt;
&lt;p&gt;He rounded the corner and made his way along the Dominick’s parking lot. He
stole a glance in the storefront window, searching for the nice girl with the
blonde hair and a metal bar in her eye. Ernie had always found the piercing
strange — why someone would do that to their body was beyond his comprehension
– but she had been friendly to him, providing him with the occasional sandwich
or soda on a warm day, so he eventually accepted the shiny metal accessory as
a part of her.&lt;/p&gt;
&lt;p&gt;She was kind to all the residents, past and present, of St. Ives, and many
others that had never set foot there. She always had some spare change, a kind
word, or a candy bar, or &lt;em&gt;something&lt;/em&gt;. She often brought a pizza out on her
lunch brea k and dined with the less fortunate in the lot, or, during the
winner, brought small mugs of del iciously warm hot chocolate for all.&lt;/p&gt;
&lt;p&gt;Ernie could nev er remember her name, but he’d nev er forget her face. She
always took the time to talk to him when she could, and he appreciated it. She
reminded him of Rho nda, but he could nev er remember her name. She’d told it
to him many times, but it wouldn’t stick. She always giggled when he repeated
it countless times in her presence to make sure he’d know it for next time.
Perhaps he forgot it just so he could make her laugh again the next time they
met.&lt;/p&gt;
&lt;p&gt;There she was in the store, scanning items over the laser reader and smiling
at the customers. She didn’t see him, but he didn’t have time to try and get
her attention. Ken would be waiting at the corner.&lt;/p&gt;
&lt;p&gt;In fact, Ken came out to meet him a couple blocks before the corner.&lt;/p&gt;
&lt;p&gt;“Hey, Ern, didja hear?” Ernie nodded in confusion.&lt;/p&gt;
&lt;p&gt;“Somethin’s going on down by the store. Cops and everything! Come on, lets
go check it out!” Ken whizzed by on his bike, made a wide u-turn, and pedaled
up beside Ernie.&lt;/p&gt;
&lt;p&gt;“Man, I hope we can see somethin’. Maybe there’ll be a body and everything!
Wouldn’t that be awesome?” Ernie wasn’t entirely sure he was ready to witness
a dead body. He certainly wasn’t as excited as Ken, but with something this
exciting going on, it was doubtful anyone would be at the corner anyway.&lt;/p&gt;
&lt;p&gt;The fla shing red and blue of the emergency vehicles were visible a few
blocks from the convenience store. Ken sped up and pedaled on ahead, leaving
Ernie alone with his thoughts for a few moments. All he really wanted to do
was jive down on the corner. Maybe he should just go back towards St. Ives and
jive by himself for the day. No, eventually the kids would get bored or
realize they weren’t going to see anything, and the corner would ramp back up
to it’s usual buzz of activity. He’d just have to wait it out.&lt;/p&gt;
&lt;p&gt;As he approached Ken’s chosen vantage point, men in blue police uniforms
were wheeling a gurney into the back of an ambulance.&lt;/p&gt;
&lt;p&gt;“Well, they ain’t in no hurry. He must already be dead. Come on, let’s go
take a look!” Ernie groaned inwardly, but followed Ken as he clandestinely cut
up the alley behind the store and emerged beside the nearly deserted far side
of the ambulance.&lt;/p&gt;
&lt;p&gt;“Come on, Ern, lift me up,” Ken whispered, gesturing at the small side
window of the ambulance. Ernie grasped Ken under his arms and heaved him
towards the window, holding him steady as he himself peeked in the window.&lt;/p&gt;
&lt;p&gt;Ernie dropped Ken hard on the pavement as his vision cleared and he
recognized who it was on the gurney.&lt;/p&gt;
&lt;p&gt;It was Darryl.&lt;/p&gt;</content:encoded></item><item><title>November 3rd</title><link>https://tylerbutler.com/november-3rd/</link><guid isPermaLink="true">https://tylerbutler.com/november-3rd/</guid><description>November 3rd</description><pubDate>Thu, 04 Nov 2004 14:21:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 3: Joel&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“…like to thank you for flying with American Airlines. We know you have a
choice when you fly and we’re glad you chose American. Enjoy your stay, and we
hope to fly again with you soon.”&lt;/p&gt;
&lt;p&gt;Joel stirred from his light slumber and stretched his arms above him in a
wide arc. Finally, the flight was over. It was about time, too. Fourteen hours
on the plane had left him stiff, tired, and certainly not the most pleasant to
be around. But the trip was over. He wasn’t in a particular hurry to get off
the plane, so he sat back and allowed the rest of the crowd to clamor for
their bags.&lt;/p&gt;
&lt;p&gt;That was one of many things he’d learned this trip. Time was simply not as
important as everyone seemed to think it was. Waiting patiently ten minutes
for a majority of the passengers to clear out would not negatively impact
one’s life beyond repair. But if the frenzied approach of the other passengers
was any indication, this particular philosophy was certainly not the most
popular. At least it was different elsewhere.&lt;/p&gt;
&lt;p&gt;Joel closed his eyes and smiled, leaning his head back against the
uncomfortable hard foam of the seat. It had been a good trip. He’s learned a
&lt;em&gt;lot&lt;/em&gt;, about &lt;em&gt;everything&lt;/em&gt;. He didn’t know whether it was more incredible
that it had come to an end or that it had even started in the first place.&lt;/p&gt;
&lt;p&gt;When he’d graduated high school, he’d never imagined he’d take a trip like
this. Many of his friends traveled to Europe for that summer before college,
but Joel hadn’t been able to afford it. He’d attended St. Ignatius College
Prep on a merit scholarship, and unlike most attendees, didn’t have a trust
fund. His father owned a gas station, his mother was a seamstress, and pretty
much everything about Joel’s life contrasted starkly with that of his
classmates at St. Ig’s.&lt;/p&gt;
&lt;p&gt;But Joel was a whiz with numbers. They just made sense to him. He couldn’t
draw, he couldn’t sing, and he spelled at about a third-grade level, but he
could do wonders with numbers. At St. Ig’s, he had been led through the
magical world of mathematics by Dr. Alan Sparrow, who had impressed upon Joel
the fact that math was everywhere.&lt;/p&gt;
&lt;p&gt;It was a fact that opened up an entire universe of opportunities to Joel.
After he realized that there were few things in life that couldn’t be broken
down mathematically, his entire world began to make sense. He began to compose
music mathematically, writing entire symphonies and handing them out to
friends to play on real instruments, because he didn’t play any himself. He
created complex formulas that, when graphed, produced wonderful works of art.
He turned his entire world into numbers, and he excelled.&lt;/p&gt;
&lt;p&gt;During his senior year at St. Ig’s, Joel met his first girlfriend, Sara.
They hit it off immediately, and began dating exclusively after two weeks of
knowing each other. For awhile, life was good. But eventually, as he did with
all things, Joel began to analyze their relationship statistically, attempting
to find the magic formula that would allow him to make sense of the complex
interactions between them.&lt;/p&gt;
&lt;p&gt;At first, Sara was amused and intrigued by Joel’s approach. His analytical
mind had been a major contributor in her attraction him from the start, and
his fascination with her &lt;em&gt;mathematically&lt;/em&gt; was, in her words, “cute.”
Increasingly, though, Sara began to resent her role as a mere variable in
Joel’s increasingly complex formula. It became clear to her that Joel was
simply running an elaborate experiment, and she was the guinea pig. He didn’t
seem to care about her at all except in the context of his attempt to quantify
human interactions. So, in the middle of their final semester at St. Ig’s, she
explained to him that their relationship, such as it was, was over.&lt;/p&gt;
&lt;p&gt;Sara had not been totally correct about Joel’s feelings towards her. In
reality, Joel cared very much for her. His “experiment,” as she termed it, was
really his attempt to figure the relationship out and put it into a context
that he could understand. He had a burning need to know exactly what action he
should perform in a given scenario in their relationship, and Sara simply
wasn’t telling him.&lt;/p&gt;
&lt;p&gt;He was beside himself with depression after the breakup. His statistical
model had never, &lt;em&gt;ever&lt;/em&gt;, predicted this outcome. Sara should be enthralled by
him — he was doing &lt;em&gt;everything right&lt;/em&gt;! Wasn’t he?&lt;/p&gt;
&lt;p&gt;The failure of his model to predict the breakup was a source of great
distress for Joel. It meant only one of two things; either he had made a
mistake in his abstractions or calculations, or human interaction simply
couldn’t be analyzed in terms of mathematics. Both options made him shudder.
He was fairly certain he hadn’t made any mathematical mistakes, which left
only… Joel hadn’t been able to come to terms with the possibility that he
wouldn’t be able to arithmetize human sociality.&lt;/p&gt;
&lt;p&gt;The emotional repercussions of the unexpected breakup did not contribute
positively to his situation, so Joel had consoled himself by throwing himself
into college preparations. He’d already been accepted and was enrolled, so he
found out what classes he’d be taking, and spent most of his days that summer
in the local library reading the text books and other material for his
classes. In retrospect, it probably wasn’t the best decision. During his first
semester at college, he became &lt;em&gt;very&lt;/em&gt; bored, &lt;em&gt;very&lt;/em&gt; quickly. His above-
average intelligence combined with the foreknowledge of most of the material
forced him to look for other things — some of them good, most of them bad — to
keep himself occupied.&lt;/p&gt;
&lt;p&gt;It wasn’t long before Joel realized that more schooling simply wasn’t in the
cards for him. The nagging suspicion that mathematics weren’t everything just
wouldn’t go away, and he didn’t feel as though he were truly learning anything
in his classes that he couldn’t learn in a library.&lt;/p&gt;
&lt;p&gt;He dropped out after his freshman year with no plans, no job, and
realistically, no real future. His uncle owned a lawn mowing business, and
Joel eventually began working there. It wasn’t especially difficult work, but
it kept Joel busy, and he had plenty of time to contemplate the questions that
were plaguing him about his approach to life.&lt;/p&gt;
&lt;p&gt;It didn’t take long for him to realize that he needed to get out and
experience the world if he wanted to try and understand it. That realization
gave birth to the trip he was now returning from.&lt;/p&gt;
&lt;p&gt;He had saved pennies for two years to afford it. Two years of ramen,
weekends spent reading instead of going to the movies, and shirking vacation
time in favor of overtime pay. Two years of blood, sweat, and tears for this –
the trip of a lifetime.&lt;/p&gt;
&lt;p&gt;Fortunately for Joel, the trip was all he had imagined it would be and more.
He had hiked through countless mountains, seen wonders he never thought
existed, and had met so many &lt;em&gt;good&lt;/em&gt; people. The cultures of the places he had
been were so much friendlier, so much more, he thought, evolved. His smile
grew broader as he leaned back on the airline seat again and remembered the
sheer incredibility of it all. He had done it.&lt;/p&gt;
&lt;p&gt;His thoughts were brought back to the present by the sudden realization that
all was quiet. He opened his eyes and glanced around. Nary a soul was present,
save a woman and her two uncooperative children in the section behind him. He
found his backpack, the sole possession he had with him and ambled towards the
exit of the plane.&lt;/p&gt;
&lt;p&gt;The hustle and bustle of the airport terminal was another wake-up call. It
was now clear that he was far from the quiet jungles from which he had
recently departed. Everyone seemed in such a hurry. People brushed by him
roughly, not even stopping to apologize. It was strange, the difference
between the attitudes of those he’d met in his travels and the people that now
surrounded him.&lt;/p&gt;
&lt;p&gt;It was a transition that he had noticed on this return trip. He had had some
trouble with his tickets on the return flight. The airline in Thailand had
suggested that he confirm his reservations with the local agent at each stop
along his itinerary, so he did. At most stops, the agents were helpful,
friendly, and understanding. One even made several frantic phone calls and
escorted him personally to his gate to make sure he made his flight.&lt;/p&gt;
&lt;p&gt;As if he’d crossed some invisible line, the agents on the American side of
the world turned snobbish, were far less than helpful, and seemed determined
to make interaction with them a living hell. And that was only part of it. The
passengers on the domestic flights were closed off as well — they seemed to
actively avoid all contact with other passengers, content rather to cower
under their blankets and read the in-flight magazines. Joel had, on several
occasions, attempted to start a friendly conversation during a flight or while
waiting at a gate, but he was always pushed away. He had a lot of adjusting to
do before he’d feel at home again in this place.&lt;/p&gt;
&lt;p&gt;He arrived at the terminal train station just as a shuttle was departing. Oh
well, no matter. He’d just get the next one. Stepping outside, he realized
he’d forgotten how cold the city could be at this time of year. It was in fact
quite warm, relative to the usual temperature of the city, but the gentle wind
against his bare legs and sandaled feet only accentuated the remaining chill
he had from the frosty airplane cabin. Yet another thing he’d have to readjust
to.&lt;/p&gt;
&lt;p&gt;Looking around him, he noticed several other travelers standing on the
platform, donned in light autumn jackets, each one with a serious expression,
talking on a cell phone and smoking a cigarette. Everyone seemed so isolated –
he wondered for a moment if perhaps two of the people standing there were
perhaps talking to each other, not realizing that they were in fact less then
twenty feet apart. It wouldn’t be that surprising. None of them looked at each
other. They were too engrossed in their own private conversations to care bout
or notice the rest of the world around them.&lt;/p&gt;
&lt;p&gt;Joel decided to take a short stroll around the platform while he waited. The
conversations he overheard were topically different, but equally indicative of
worried, frightened people.&lt;/p&gt;
&lt;p&gt;“I know I’m late, Gerald. You don’t have to keep telling me. If the damn
plane had been on time, I would have made it. Well, you’ll just have to
without me for the time being. Yes, I have the portfolio. I’ll bring…”&lt;/p&gt;
&lt;p&gt;“Did you get Mikey to school? Is he feeling better? What did the doctor say?
Was he sure it was just a cold? I thought…”&lt;/p&gt;
&lt;p&gt;“…got me thinking, you know? I mean, it was just a little fender-bender,
no big deal, right? But the insurance company is saying that they might not
cover it, and the mechanic is charging me my left nut to get it realigned.
Yeah, I know…”&lt;/p&gt;
&lt;p&gt;Joel shook his head. So many things to worry about — so many things to push
out of proportion. He silently wished he was back in Asia . Things seemed a
lot simpler over there. He chuckled. He was “home” less than an hour and
already complaining. That made him a true America n, right?&lt;/p&gt;
&lt;p&gt;The train pulled up and Joel stepped on behind a tired-looking woman pulling
three large suitcases. She was trying to pull them, anyway.&lt;/p&gt;
&lt;p&gt;“Could I give you a hand, ma’am?” Joel asked, placing a hand on the largest
of the three and preparing to pull it up into the train. Confused, the woman
gave Joel a quick visual appraisal and apparently judged him unworthy of the
task.&lt;/p&gt;
&lt;p&gt;“No, no, I’m fine, I’m fine. Just leave me alone.”&lt;/p&gt;
&lt;p&gt;Joel shrugged as she moved as quickly as she could to the opposite side of
the train, sat down, and eyed him warily. Whatever.&lt;/p&gt;
&lt;p&gt;As the train began to move towards its downtown destination, Joel found an
empty seat and sat down, peering out the window at the cars passing on the
highway alongside him. Every driver had the same serious expression as the
commuters at the station. Eyes gazing straight ahead, hands clenching the
steering wheel tightly, lead foot on the accelerator. Everyone had somewhere
to be, apparently.&lt;/p&gt;
&lt;p&gt;Joel distracted himself by watching the autumn leaves perform complex
acrobatics in the winds above the highway. The seasons were one thing that
he’d missed while he was away. He didn’t much care for winter, and spring was
his favorite, but autumn, with its falling leaves, grey skies and clear
moonlit nights, held a special allure for him as well.&lt;/p&gt;
&lt;p&gt;He smiled to himself as he realized he’d been absent-mindedly contemplating
the physics governing the leaves movements, and reflecting on the equations
behind them. He hadn’t changed &lt;em&gt;that&lt;/em&gt; much on his trip, had he?&lt;/p&gt;
&lt;p&gt;_[Insert more Asia back story here.] _&lt;/p&gt;
&lt;p&gt;At Allerton, the traffic on the highway had come to a complete stop. Joel
soon discovered the reason. A car was abandoned in the center lane, driver
door swung open. The drivers rolled down their windows and cursed, at who they
didn’t know, and abruptly cut off their rant when they noticed the car was
empty. The combined symphony of multi-pitched car horns was deafening. Joel
wanted to go out in the middle of it and yell at everyone to calm down.
Seriously, it wasn’t the end of the world. &lt;em&gt;Geez&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;As they approached the next stop, Whoorsley, Joel noticed a man running brea
thlessly towards the train from the highway entrance. _He’ll never make it _,
Joel thought as the train slowed down for the stop. As the passengers boarded
and departed, Joel poked his head out looking for the man. There was no way he
could make it without a little help. He discreetly dropped his backpack to the
floor, making sure it obstructed the door closing mechanism just enough to
prevent the train from departing.&lt;/p&gt;
&lt;p&gt;The passengers grew increasingly agitated as the annoying prerecorded voice
said, “Doors closing,” over and over again, but no one noticed Joel’s
surreptitiously placed backpack.&lt;/p&gt;
&lt;p&gt;The man boarded a few seconds later, and there was a sigh of relief from all
the passengers when the final “Doors closing” warning was repeated. Joel
leaned back against the train door, awash in the glow that came with doing
good deeds. His place in heaven was assured, no doubt about &lt;em&gt;that&lt;/em&gt;. He
smiled.&lt;/p&gt;</content:encoded></item><item><title>November 2nd</title><link>https://tylerbutler.com/november-2nd/</link><guid isPermaLink="true">https://tylerbutler.com/november-2nd/</guid><description>November 2nd</description><pubDate>Wed, 03 Nov 2004 12:10:00 GMT</pubDate><content:encoded>&lt;p&gt;This was his least favorite part of the meal, but he had to drink the
remaining milk or Rhonda would not be pleased. “Waste not, want not,” was her
motto, and she made sure Ernie ate everything he was given.&lt;/p&gt;
&lt;p&gt;He grasped the bowl by the sides and brought the edge to his gaping mouth,
pouring as quickly and carefully as he could. He swallowed, barely, and set
the bowl on the table with a clatter as he shook his head back and forth
violently.&lt;/p&gt;
&lt;p&gt;Rhonda chuckled at the sight. She knew he hated the taste of milk, but she
couldn’t afford to have him wasting any, not with as many financial problems
as St. Ives was having. She was already stretching it just to buy him his
favorite cereal every week. But really, how could she deny him?&lt;/p&gt;
&lt;p&gt;She couldn’t put her finger on the quality about Ernie that made him so
endearing. Perhaps it was his quiet, unassuming eyes, always hidden behind
those thick glasses. Or it could be the fact that he danced — if you could
call his carefree movements that — his way everywhere, and didn’t care at all
what others thought of him. Most likely, it was just his mind. He was a child
trapped inside a man’s body, destined never to understand the complexities of
the world. He perceived things so innocently — and struggled with even the
simplest task that involved remembering something — but he had such tenacity
that it was hard not to admire him. It was sad, in a way, that he’d never
mature past his current mental capacity, but Rhonda was careful never to pity
any of the many down-on-their-luck people she knew at St. Ives. She didn’t
believe in pity — she believed in helping people.&lt;/p&gt;
&lt;p&gt;Rhonda thought back to 20 years ago, when she first came to St. Ives looking
to help those less fortunate than herself. She’d always had a heart for the
homeless, and St. Ives needed someone skilled in the culinary arts to help out
in the kitchen. It seemed to be a perfect fit, and for a long time it was.
That was a long time ago, when she was an attractive, idealistic
whippersnapper of a child who wanted to save the world. Much had changed since
then — now she was just struggling to keep food on the table for all the
residents, and every day seemed to drag on longer than the next. Her chance to
make a true difference was gone, and her options were dwindling even more
quickly.&lt;/p&gt;
&lt;p&gt;Thankfully, though, there were people like Ernie that appreciated the work
she did. Even if he didn’t say it, she knew he’d be lost without her and the
rest of the staff at St. Ives. And truth be told, they’d be lost without him
and the other residents as well. Their lives were inexplicably intertwined,
and Rhonda knew she could never leave St. Ives voluntarily, no matter how hard
it got or how pointless it all seemed sometimes.&lt;/p&gt;
&lt;p&gt;The scraping of Ernie’s chair brought her back to the present.&lt;/p&gt;
&lt;p&gt;“Ernie,” she said. “We need to talk ‘bout last night.” He’d hoped he could
escape without receiving the lecture, but he knew better.&lt;/p&gt;
&lt;p&gt;Rhonda pulled out the chair across from Ernie and sat down heavily. Her dark
round face, framed by her bunned graying hair, was taut as she looked hard at
Ernie, but her eyes shone a compassionate gleam. He looked down at the floor,
avoiding her eyes.&lt;/p&gt;
&lt;p&gt;“Ernie, why didn’t you come back las’ night?” The questions was simple
enough. Ernie thought hard, trying to remember exactly why he hadn’t made it
back, but his mind drew a blank. “I don’t know,” he finally muttered.&lt;/p&gt;
&lt;p&gt;“Wal, you know da rules… You know I want ya ta be back before 8. You
shouldn’t be runnin’ ‘round late at night by yerself. Besides, you have a nice
warm bed here. Why you wanna sleep anywhere else?”&lt;/p&gt;
&lt;p&gt;“I slept with Ike… he was warm,” Ernie replied, moving his head back and
forth methodically, still staring at the floor.&lt;/p&gt;
&lt;p&gt;“Wal, jus’ be sure you make it back in tonight. You know I was worried ‘bout
you. I’m just glad you’re all right.” She stood up and patted him on the back.&lt;/p&gt;
&lt;p&gt;“Go on. I guess you’ll be going back up to the corner today?”&lt;/p&gt;
&lt;p&gt;Ernie nodded.&lt;/p&gt;
&lt;p&gt;“Well, come back later on. I’m baking cookies, and you might not get any if
you’re not careful.” Ernie nodded again and stood up quickly as Rhonda began
busying herself around the kitchen again.&lt;/p&gt;
&lt;p&gt;“Bye Rhonda,” Ernie mumbled as he walked out of the kitchen. Rhonda smiled
again. One could never stay angry at Ernie for very long. She knew he didn’t
mean to stay out, and that he was sorry. He was safe, that was all that really
mattered.&lt;/p&gt;
&lt;p&gt;As soon as he left the kitchen, Ernie grasped the headphones and put them
over his ears. With a familiar flick of his index finger, he started the music
again, and jived his way on back towards 34 th and Broadway.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Chapter 2: Ned&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Beep. &lt;em&gt;Eggs, they’d have to wait for a minute.&lt;/em&gt; Beep. &lt;em&gt;Ahh, milk, that
could go with the orange juice –- better double-bag it just in case.&lt;/em&gt; Beep.
&lt;em&gt;Chips. Nothing special there.&lt;/em&gt; Beep. Beep. Beep. &lt;em&gt;Load the bags in the cart
and…&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“Would you like some help getting that out to your car, Mrs. Jensen?”&lt;/p&gt;
&lt;p&gt;“Oh no, dear, I’ll be fine. Thank you for your help. You have a nice day.”&lt;/p&gt;
&lt;p&gt;“You too, Mrs Jensen.” Looking towards the back of the store, he was Ned was
pleased to see an empty register line. He ran his hand through his graying
hair and began to twirl his mustache. Finally a short break. His line had been
non-stop for the entire morning, and despite his affinity for hard work, Ned
needed a break. He nodded at Maria, turned off his cashier light, and walked
towards the men’s’ room.&lt;/p&gt;
&lt;p&gt;After relieving himself, he lowered himself slowly on the small bench in the
lavatory. His knee was acting up again today. He’d need to take a few more
Aspirin if he was going to make it through the rest of the day.&lt;/p&gt;
&lt;p&gt;The door to the restroom blew open with a whoosh and in stepped Bob McCrane.&lt;/p&gt;
&lt;p&gt;“Hey, Ned. Taking a break?” His smile was far too plastic to be genuine. Bob
was about 25 years old, and most of the cashiers resented him, Ned included.
Ned was nearly twice his age, and probably twice as intelligent, but Bob was
the boss. He knew how to kiss corporate ass like no one Ned had ever met, and
he was rewarded for it. He was always smiling, always trying to joke with
everyone, always oblivious to the fact that no one liked him.&lt;/p&gt;
&lt;p&gt;Ned smiled wryly back. “Yes, it’s been a busy day.”&lt;/p&gt;
&lt;p&gt;“Indeed it has. Everybody needs a break eventually, that’s the truth, mmm-
hmm. Back when I was working for…”&lt;/p&gt;
&lt;p&gt;Ned took the cue and tuned out the rest of the inane story. All of Bob’s
stories were the same. They all eventually ended with Bob saving the day
somehow with his ingenuity, his charisma, and his I-just-won-an-Oscar smile.
Ned didn’t need to hear another one of Bob’s supposedly inspirational stories
in order to do his job better. And no story could improve his knee’s condition
– certainly not one of Bob’s.&lt;/p&gt;
&lt;p&gt;He already took his job very seriously. In fact, he took everything in his
life seriously, but the job was especially important. Before immigrating to
the US , Ned had been a well-trained, well-respected mechanical engineer. He
was a wizard with mechanical structures, talented at design, and had a decent
job designing small engines for lawn mowers, cement mixers, and the like.&lt;/p&gt;
&lt;p&gt;It was a decent life, but there were dangers too. He and Lavina just didn’t
have the kind of freedom that they truly wanted, and they wanted their
children to have the best possible opportunities available to them. Life in
the US seemed the best way to provide all of that, so they emigrated.&lt;/p&gt;
&lt;p&gt;Things didn’t work out as they had planned, though. Lavina had become
pregnant early on in their new life in America , and their finances were
already strained from the journey itself. The pregnancy was long and
difficult, and hospital bills continued to pile on. Ned had been holding out
for a job related to his field of expertise, but at every interview they
turned him away, citing “lack of reliable experience.” It seemed his years in
Europe were not verifiable by the American companies, and despite his
excellent overseas references, most companies were not willing to give him a
chance.&lt;/p&gt;
&lt;p&gt;He tried everything he knew to become more desirable to the American
employers. He immersed himself in American culture, became familiar with
American mechanic style and design, and created a portfolio of impressive
ideas to present at interviews. He even changed his name to Ned, since
employers seems to have such a hard time pronouncing his real one.&lt;/p&gt;
&lt;p&gt;Again and again, however, he was turned away. With mounting bills and a new
baby at home, Ned did the only he could — he took a manual labor job helping
out at a construction site. Most of his co-workers were either in high school
or immigrants like him. It wasn’t glamorous, but it helped pay the bills.&lt;/p&gt;
&lt;p&gt;Ned worked incredibly hard, but he hadn’t lasted long. The knee injury from
his childhood made it nearly impossible to carry heavy loads for long
distances, a major job requirement, and he spent each evening with an ice pack
on his swelling joint. Lavina finally convinced him to try and find another
job, one that would require less physical strain. And with yet another baby on
the way, Ned knew he’d have to find something.&lt;/p&gt;
&lt;p&gt;When Ned spoke to Jon, his supervisor, about leaving, Jon had asked his
wife, who worked as a manager at the local Dominick’s to hire him. It was a
dock in pay, and certainly not the step upwards that Ned was hoping to make,
but he was grateful for the much needed opportunity.&lt;/p&gt;
&lt;p&gt;That was several years ago. Jon’s wife no longer worked at this particular
store, and most of the other people he’d worked with in the past had long
since moved on, but Ned had kept his job and continued to support his growing
family.&lt;/p&gt;
&lt;p&gt;It was far from the dream he and Lavina had had when they came to America ,
but Ned worked hard and earned himself quite a reputation amongst those
customers who frequented Dominick’s Store # 4534. His grocery bagging skills
had grown so legendary that new trainees were required to work with him a
minimum of 10 hours before they could start bagging items themselves, just so
they could learn the ropes.&lt;/p&gt;
&lt;p&gt;Ned was ruthlessly committed to efficiency. He could scan, bag, and load a
customer’s groceries into their cart faster than most customers could get
their credit card out of their purse, all while holding a pleasant
conversation. He never forgot a customer, he remembered everyone’s children or
family and asked after them, and was always ready with a joke or short
anecdote to lighten someone’s mood. Not to mention his uncanny ability to fit
more items in a plastic bag than one would think possible. He knew exactly
when items required a double or even triple bag, always took extra care not to
break eggs or crush bread, and ensured all scented items were kept separate
from food items, to protect his customers from soapy tasting bread, meat and
cheese.&lt;/p&gt;
&lt;p&gt;Ned did not go entirely unnoticed for his dedication and knack for the job.
He’d been employee of the month countless times, and many customers flocked
specifically to his line at the front of the store, just so they could tell
him how their new baby girl was doing, or hear his latest joke, or ask for
prayer for an ailing relative. Many women in the local area brought cakes,
cookies, and other food stuffs for Ned and his family; yes, Ned was not
unnoticed for his hard work.&lt;/p&gt;
&lt;p&gt;But Ned was growing old. He could feel it in his bones every morning, and he
could especially feel it as he sat down idly listening to Bob ramble on about
nothing in the men’s room.&lt;/p&gt;
&lt;p&gt;“So how about that, huh?” Bob beamed as his story drew to a close.&lt;/p&gt;
&lt;p&gt;“That’s pretty incredible, Bob,” Ned answered idly. He had no idea what Bob
had been talking about, but all the stories were the same, and the appropriate
responses sounded nearly as rehearsed as the stories themselves by now. Of
course it was all lost on Bob. He was completely infatuated with no one but
himself, and Ned’s lack of interest didn’t faze him in the least.&lt;/p&gt;
&lt;p&gt;“Yeah, it’s a great story… Well, I’d better get going. Lots to get done,
mmm-hmmm. Don’t dally too long, Ned. The candy around your line seems to be a
little out of whack.” Bob flashed another prize-winning smile as he dried his
hands and stepped back out of the men’s room with a whoosh.&lt;/p&gt;
&lt;p&gt;Ned stood up slowly and gingerly put some weight on his knee. He hoped the
Aspirin would kick in soon. It was going to be a long day.&lt;/p&gt;</content:encoded></item><item><title>November 1st</title><link>https://tylerbutler.com/november-1st/</link><guid isPermaLink="true">https://tylerbutler.com/november-1st/</guid><description>November 1st</description><pubDate>Tue, 02 Nov 2004 15:59:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Chapter 1: Ernie&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;“Are we there yet?”&lt;/p&gt;
&lt;p&gt;Melissa sighed again. “No, baby, not yet.” The five-year-old squirmed
restlessly in the backseat.&lt;/p&gt;
&lt;p&gt;“Mommy…”&lt;/p&gt;
&lt;p&gt;“Angela, I’ve told you already. We’ll get there when we get there. Sit down,
be still, and hush up!” Melissa felt the tension in her own voice. Could it
really only be 10 AM? It was guaranteed to be a long day. Offhand she realized
that it had been far too long since Angela had commented.&lt;/p&gt;
&lt;p&gt;At Lawrence ‘s insistence, she had taken Angela to an ear, throat and mouth
specialist, but of course he had found nothing wrong with Angela’s hearing. It
was with a certain sense of satisfaction that she had informed Lawrence of the
results. She had long since argued with him that Angela &lt;em&gt;could&lt;/em&gt; listen; she
simply never &lt;em&gt;wanted&lt;/em&gt; to. Lawrence, ever the idealist, desperately wanted to
believe that there was something physically hindering her obedience, rather
than accept the fact that their daughter was obstinate and overly excitable.&lt;/p&gt;
&lt;p&gt;By now, Angela should have been bouncing off the walls, but all was quiet in
the back seat. A quick glance in the rear-view mirror revealed an enthralled
five-year-old, nose glued to the window of the beat up Chevy Astro, staring
outside.&lt;/p&gt;
&lt;p&gt;“What are you looking at?” asked Melissa as she followed Angela’s eyes to
the sidewalk outside. Melissa smiled as she realized what had caught her
daughter’s attention. On the left side of the street was a man in a faded
wind-breaker walking in their direction.&lt;/p&gt;
&lt;p&gt;Well, he wasn’t really &lt;em&gt;walking&lt;/em&gt;, he was &lt;em&gt;gyrating&lt;/em&gt;. His arms flew out at
odd angles from his body, his head bobbed, Melissa assumed in time to the
music that was coming out of a pair of ancient, oversized headphones he wore
on his ears, and every so often he spun in a full circle and started the whole
process over again.&lt;/p&gt;
&lt;p&gt;“Why is he walking like that, Mommy?” Angela giggled.&lt;/p&gt;
&lt;p&gt;“I think he’s dancing,” Melissa replied, slowing down slightly. The quiet
brought on by Angela’s trance was something to be cherished, and Melissa
wanted it to last as long as possible.&lt;/p&gt;
&lt;p&gt;“Well, he’s not very good at it,” Angela piped up, with a slight hint of
disdain in her voice. The ballet lessons to which Melissa and Lawrence had
finally given in were paying off in many ways; not all of them were positive.&lt;/p&gt;
&lt;p&gt;“Everyone could use practice, Angela. Not everyone is blessed with as much
talent as you are.” Melissa caught herself as soon as she said it — there was
far too much sarcasm in her voice. Thankfully, the condescension was lost on
her daughter, who was now squirming restlessly once again, her interest in the
strange man now gone.&lt;/p&gt;
&lt;p&gt;Melissa sighed again as she pushed down gently on the accelerator. It was
going to be a long day.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ernie was oblivious to the curious faces peering at him as he jived his way
down Sullivan Street . He wouldn’t have cared, even if he had noticed them,
but with his headphones on he was in another world — &lt;em&gt;his&lt;/em&gt; world. A world
where one couldn’t afford to be still. A world of vigorous, deliberate
movements, of spinning and twirling, of quick-stepping, of fishtailing,
bouncing, and doing it all over again. A world of glorious &lt;em&gt;movement&lt;/em&gt;; when
surrounded by such miraculous music as Ernie’s, what other choice did one
have?&lt;/p&gt;
&lt;p&gt;Ernie had been out since last night. He had tried to make it back to St.
Ives, but the kids at 34 th and Broadway had been jiving late, and by the time
the last of them went inside, it was too late for Ernie to make his return
trip safely. Ken snuck him into his garage later that night, after his parents
had gone to bed, and Ernie stayed warm playing quietly with Ike, Ken’s German
Shepherd.&lt;/p&gt;
&lt;p&gt;Ken was a good friend, probably Ernie’s best. He had invited Ernie over for
dinner once, but Mr. and Mrs. van Zandt were less than thrilled having a
“dirty, disturbed man” at their home. Ernie had heard them arguing about it
from outside the house, and though he didn’t understand all the words, he knew
that he wasn’t going to be eating dinner at the van Zandt’s then or ever. Ken
had come to the door with a sad look on his face telling him that his parents
“already had dinner plans.” Ernie didn’t argue; he knew Ken didn’t have a lot
of choice in the matter. Ken’s parents had told him not to hang out with Ernie
any more, but fortunately Ken took much pleasure in doing the exact opposite
of what his parents told him.&lt;/p&gt;
&lt;p&gt;Ernie had woken up early to make sure he made it out of the garage before
Mr. van Zandt saw him. He had wanted to stick around to jive with kids some
more, but it was too early; they were all still sleeping. He milled about the
neighborhood for awhile, but hunger eventually got the better of him, and he
started making the long trek back towards St. Ives. Rhonda was probably
worried about him anyway.&lt;/p&gt;
&lt;p&gt;The perspiration was beginning to gather on his brow. It was going to be a
warm day. Ernie preferred it that way. It made him feel as though he was
working hard, even though he wasn’t. After all, work couldn’t feel &lt;em&gt;this&lt;/em&gt;
good. Rhonda made him do work around the shelter every once in awhile,
landscaping and such, and she never let him listen to his music while he did
it. He hated being without his music; life was so empty, so boring without it.&lt;/p&gt;
&lt;p&gt;The first side of his cassette finished, and his trusty Walkman soon made
the familiar _click-pah, click-pah _ as it automatically switched to the
second side. Ernie turned the Walkman over in his hand and admired it yet
again. His rough, calloused fingers traced over the worn buttons. The text
identifying their respective functions had long since faded, but it didn’t
matter. He knew the buttons by heart anyway. The casing was scratched and
cracked, the battery cover was attached by a piece of duct tape, and the small
motor made a dull moaning sound as it spun, but the Walkman was &lt;em&gt;his&lt;/em&gt;. It
belonged to him, and only him; it was his passport to an astounding world of
sound and rhythm.&lt;/p&gt;
&lt;p&gt;The dull gray stone of St. Ives snuck up on him without warning. The smell
of sweetbread and chicken soup wafted gently across the street towards him,
and he salivated involuntarily. He jived his way across the way, pausing
momentarily while a taxi flew by, horn blaring. Glancing up at the flickering
neon cross above the door, Ernie pushed the large oak door open with one hand
and reluctantly pulled the large headphones from his ears. Rhonda would
already be a little annoyed that he hadn’t come in last night — there was no
need to annoy her more by keeping the headphones on.&lt;/p&gt;
&lt;p&gt;He took the small staircase from the vestibule to the dining room two at a
time, and glanced around the small tables looking for familiar faces. Lester
was there, apparently taking a break from his occupation begging down on the
Boardwalk, and Michael too, accompanied by his ever-present collection of
assorted aluminum scrap.&lt;/p&gt;
&lt;p&gt;Ernie briefly considered attempting to bypass the kitchen and head upstairs
to his room, then retrace his steps back downstairs to trick Rhonda into
thinking he’d been upstairs all along. Of course, it wouldn’t work. Rhonda was
already well aware that he’d been out all night, and he’d only incur more
wrath by trying to avoid her now.&lt;/p&gt;
&lt;p&gt;So into the kitchen he went, head down in his customary ignore-the-world
fashion. He was aware of Rhonda’s stare as he moved straight towards the
cupboard and grabbed a bowl and spoon.&lt;/p&gt;
&lt;p&gt;“Just siddown, Ernie. I’ll git it for ya,” Rhonda said, moving towards him.
Ernie didn’t argue. He sat down with his bowl and waited patiently for Rhonda
to fill it.&lt;/p&gt;
&lt;p&gt;Rhonda walked over to the cupboard, took a nondescript Tupperware container
out, and filled Ernie’s bowl. Ernie was more than happy to do this himself,
but Rhonda knew it would take him an hour just to find the right container. No
matter how hard he tried, he could never remember which container held the
magical cereal known as Trix. On the rare occasions he did attempt to locate
the Trix himself, he was reduced to tasting each container of cereal to find
the correct one.&lt;/p&gt;
&lt;p&gt;Rhonda poured the cereal and milk, and Ernie dug in with great fervor. Ah,
Trix… or an off-brand that tasted remarkably similar… what a brilliant
cereal! An explosion of sugary, fruity flavor in every bite! He wished that
Rhonda would give him real Trix — he could tell the difference — but Rhonda
said that Trix were for kids and Ernie, unfortunately, was no longer a kid.
How could such a wonderful dietary concoction be limited to only those under
age 13? He didn’t argue with Rhonda, though, because he had a feeling there
were other issues, most likely financial — which he would not even attempt to
decipher — at play.&lt;/p&gt;
&lt;p&gt;“Wal, it look dat man done done it ageen,” Rhonda shook her head back and
forth at the small television in the corner. Ernie peered up at the screen,
where the President was prattling on, looking strangely determined and
striking his hands against the podium definitively. Ernie wondered briefly
what music he was listening to that could make him move like that — if he ever
met the President, he’d have to ask to borrow the tape.&lt;/p&gt;
&lt;p&gt;Rhonda was still shaking her head and muttering under her breath as Ernie
returned to his breakfast. Politics made the same amount of sense to Ernie as
finances, so he just avoided getting into any discussions about it. Rhonda, on
the other hand, was quite vocal about the upcoming election.&lt;/p&gt;
&lt;p&gt;“How we gonna manage with dem cuttin’ this, cuttin’ dat, not thinkin’ about
dose ‘round us ain’t got nothin’? How we gonna do dat, Ernie?” She didn’t
expect an answer — but the question had to be vocalized in order for it to
matter.&lt;/p&gt;
&lt;p&gt;Ernie took the last bite of his Trix and stared down at the remaining milk,
now the color of rainbow sherbet.&lt;/p&gt;</content:encoded></item><item><title>Tyler, a Novelist?</title><link>https://tylerbutler.com/tyler-a-novelist/</link><guid isPermaLink="true">https://tylerbutler.com/tyler-a-novelist/</guid><description>Tyler, a Novelist?</description><pubDate>Mon, 01 Nov 2004 13:46:00 GMT</pubDate><content:encoded>&lt;p&gt;OK, I’m going to keep this short, because I will be writing a lot in the next
month. I am participating in &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.nanowrimo.com&quot;&gt;National Novel Writing Month&lt;/a&gt;, and will be
writing a 50,000-word fictional novel in the 30 days of November. The journey
will be difficult, but with your prayers I will be victorious. I am
registered at the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.nanowrimo.com&quot;&gt;NaNoWriMo website&lt;/a&gt; as dragonfly2004. Feel free to look
me up. I will be posting my manuscript in its entirety &lt;a href=&quot;/tags/nanowrimo&quot;&gt;on this site&lt;/a&gt; as I
write it. Hopefully I will also have time to post some stats on how I am
doing, but no guarantees. I’d love for people to read what I write and offer
encouragement during the month, but I’d prefer if there were no comments
regarding the characters, plot, themes, or anything of the sort, because I
want to be able to focus on my vision for the month and not second-guess my
decisions while I am trying to write. Wish me luck.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It’s going to be a long month.&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Homeland Security?</title><link>https://tylerbutler.com/homeland-security/</link><guid isPermaLink="true">https://tylerbutler.com/homeland-security/</guid><description>Homeland Security?</description><pubDate>Sat, 30 Oct 2004 01:08:00 GMT</pubDate><content:encoded>&lt;p&gt;OK, this is ridiculous. The Department of Homeland Security can’t find
anything better to do, apparently, than harass small business owners. Check
out this &lt;a href=&quot;/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&quot;&gt;Yahoo News story&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ST. HELENS, Ore. - So far as she knows, Pufferbelly Toys owner Stephanie Cox
hasn’t been passing any state secrets to sinister foreign governments, or
violating obscure clauses in the Patriot Act.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;So she was taken aback by a mysterious phone call from the U.S. Department of
Homeland Security to her small store in this quiet Columbia River town just
north of Portland.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“I was shaking in my shoes,” Cox said of the September phone call. “My first
thought was the government can shut your business down on a whim, in my
opinion. If I’m closed even for a day that would cause undue stress.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;When the two agents arrived at the store, the lead agent asked Cox whether she
carried a toy called the Magic Cube, which he said was an illegal copy of the
Rubik’s Cube, one of the most popular toys of all time.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;He told her to remove the Magic Cube from her shelves, and he watched to make
sure she complied.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;After the agents left, Cox called the manufacturer of the Magic Cube, the
Toysmith Group, which is based in Auburn, Wash. A representative told her that
Rubik’s Cube patent had expired, and the Magic Cube did not infringe on the
rival toy’s trademark.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Virginia Kice, a spokeswoman for &lt;strong&gt;Immigration and Customs Enforcement&lt;/strong&gt;, said
agents went to Pufferbelly based on a trademark infringement complaint filed
in the agency’s intellectual property rights center in Washington, D.C.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“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,”&lt;/strong&gt; she said.
Six weeks after her brush with Homeland Security, Cox told The Oregonian she
is still bewildered by the experience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“Aren’t there any terrorists out there?” she said.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I have several problems with this whole event. First of all, why is the
“protection” of our nation’s economy the responsibility of the government at
all, least of all the DHS? We’re supposed to be [relatively] free market,
right? Second, why is someone from the &lt;strong&gt;Immigration and Customs Enforcement&lt;/strong&gt;
office doing the commenting? This makes even less sense! Third, it’s a Rubik’s
Cube for crying out loud! And the patent’s expired! Finally, wasn’t the DHS
created to safeguard our country from terrorists? Even if terrorists &lt;strong&gt;were&lt;/strong&gt;
infringing on trademarks (which I seriously doubt they are), I’d still rather
the DHS leave them alone if they can’t actually tell a terrorist from a small
business owner.&lt;/p&gt;
&lt;p&gt;On the other hand, had this happened to me I probably would have asked for
some paperwork or something proving they had authority to do this, but then,
we live in a culture of fear here in the US, so I can’t say I blame Ms. Cox
for simply complying. She hadn’t done anything wrong, after all. What did she
have to fear? (The answer is &lt;em&gt;everything&lt;/em&gt;. Government sucks. And yes, I am
&lt;a href=&quot;/2004/09/tolls-and-cameras/&quot;&gt;paranoid&lt;/a&gt;.)&lt;/p&gt;</content:encoded></item><item><title>Playing With Ubuntu</title><link>https://tylerbutler.com/playing-with-ubuntu/</link><guid isPermaLink="true">https://tylerbutler.com/playing-with-ubuntu/</guid><description>Playing With Ubuntu</description><pubDate>Fri, 29 Oct 2004 03:04:00 GMT</pubDate><content:encoded>&lt;p&gt;I finally got fed up with XP on my laptop. I don’t use it much for games
anymore, so I decided that it was time to try Linux again. I had previously
loaded Suse 9.1 on it over the summer, but I could never get my Linksys WPC54G
PCMCIA wireless card working, no matter what I tried, so I gave up. I didn’t
want to shell out cash for a new card, and a laptop without wireless is a
pitiful thing. Also, I used to like KDE, but it looked really bad on my
laptop, and I simply didn’t feel like going through all the hassle of trying
to get Gnome up on a KDE-centric distro. Finally at that point I was still
using Outlook (gasp!), and I didn’t relish trying to convert everything into
Evolution &lt;em&gt;again&lt;/em&gt;. So I went back to XP for awhile.&lt;/p&gt;
&lt;p&gt;Then I made the switch to GMail, and based on some high praise that
&lt;a href=&quot;http://www.ubuntu-linux.org&quot;&gt;Ubuntu&lt;/a&gt; was getting from Patrick and others, I thought I might as well
give it a try. I needed to reformat my laptop anyway, and I figured if I
didn’t like it or it didn’t work, I could always just put XP back on there.&lt;/p&gt;
&lt;p&gt;Well, I am proud to say that Ubuntu up and running on my laptop. I was able to
&lt;em&gt;very&lt;/em&gt; easily set up my wireless card using &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fndiswrapper.sf.net&quot;&gt;NDiswrapper&lt;/a&gt;, and there was
even a helpful guide linked to on the Ubuntu website. It doesn’t allow me to
monitor link quality and everything, but at least it works.&lt;/p&gt;
&lt;p&gt;I have never used a Debian-based distro before, but I really like it so far.
The package management has been great, and using alien I’ve been able to load
up some RPM’s as Deb packages as well. I’ve got &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fbeatniksoftware.com%2Ftomboy%2F&quot;&gt;Tomboy&lt;/a&gt; running, which is
cool (I’m using it for notes about my upcoming novel), and I am installing
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.gnome.org%2Fprojects%2Fbeagle%2F&quot;&gt;Beagle&lt;/a&gt; as we speak. I like the overall polish of Gnome, but the “spatial
browsing” is driving me nuts. I want an address bar! I suppose I’ll get used
to it - it’s my only major complaint right now. Well, that and the fact that
there’s no IE for Linux (haha). I need it for work - Firefox doesn’t render
the application we use for ticket management correctly. I have to use RDP and
log into my server to enter tickets. And I’m still having problems getting
Samba and Web Folders shared between my Windows boxes and Ubuntu. But
hopefully &lt;a href=&quot;http://forge.novell.com/modules/xfmod/project/?ifolder&quot;&gt;iFolder&lt;/a&gt; will help with that.&lt;/p&gt;
&lt;p&gt;Anyway, overall I am very pleased with my new setup so far, and have not yet
found any truly compelling reasons to switch back to XP. Here’s hoping I
don’t. I’m certainly learning a lot more with Linux.&lt;/p&gt;</content:encoded></item><item><title>Interview with Microsoft</title><link>https://tylerbutler.com/interview-with-microsoft/</link><guid isPermaLink="true">https://tylerbutler.com/interview-with-microsoft/</guid><description>Interview with Microsoft</description><pubDate>Thu, 28 Oct 2004 05:01:00 GMT</pubDate><content:encoded>&lt;p&gt;Microsoft is coming to campus on Thursday and Friday of this week, and I
managed to get an interview. One of the guys who’s coming is an alumnus from
IIT, and he used to be in &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.hawktour.net%2F&quot;&gt;my IPRO&lt;/a&gt; (back before it became &lt;strong&gt;&lt;em&gt;my&lt;/em&gt;&lt;/strong&gt; IPRO),
and he sent me an email asking if I knew of anyone from the IPRO that I would
recommend he interview. I gave him the only name I could in good conscience,
and suggested he interview me as well. So he asked for my resume, and I got an
email this afternoon requesting my preference for an interview time. I’m not
sure if any of it’s going to pan out, but it’s a good opportunity nonetheless.
I’m also not too sure how I feel about working for MS, but I’ll cross that
bridge if/when I come to it. Wish me luck!&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;November 5, 2004&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, I made it past the first two hurdles. The on-campus interview went well,
and I must have impressed Ondrej enough that he pushed my resume on through to
an official recruiter. The recruiter emailed me today about setting up a phone
interview Wednesday next week. The way I understand it is that if the phone
interview goes well, then I’ll be heading out to Redmond for an on-site
interview. Then, if they’re &lt;em&gt;really&lt;/em&gt; interested, I’ll get an offer.&lt;/p&gt;
&lt;p&gt;Anyway, I am excited, but would appreciate your thoughts and prayers. This is
a big deal for me. I’m keeping my fingers crossed.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;December 17, 2004&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Well, I finally heard back from them today, and they are moving me through to
the next stage of the interview. I still don’t know the logistics yet, and it
kind of throws a wrench in the works with my current plans for next semester,
but I’m sure I can work something out if I get an offer. :-)&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;January 21, 2005&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Looks like I am flying out to Seattle on February 7th, interviewing on the
8th, then flying back on the 9th. I am excited, but a little nervous as well.
Hopefully I’ll impress them.&lt;/p&gt;</content:encoded></item><item><title>No More Anonymous Comments</title><link>https://tylerbutler.com/no-more-anonymous-comments/</link><guid isPermaLink="true">https://tylerbutler.com/no-more-anonymous-comments/</guid><description>No More Anonymous Comments</description><pubDate>Sat, 23 Oct 2004 07:36:00 GMT</pubDate><content:encoded>&lt;p&gt;I have, after much thought, decided to disable anonymous commenting on this
site. For one thing, there are actually blog spammers who hit me with a few
long non-sensical spam comments every once in awhile. But I could deal with
that — and if I had the time, I could even upgrade &lt;a href=&quot;https://www.geeklog.net/&quot;&gt;Geeklog&lt;/a&gt; so it would
block most of the spam. But that wasn’t the real problem — the real problem is
that people post comments and I have absolutely no idea who they are. Most of
my friends are nice — Patrick and Kim usually sign their comment posts, which
is nice. There are, however, a few people who never do, and I am forced to go
looking through my access logs to figure out what IP accessed the site at the
approximate time the comment was posted, then lookup the IP and see if I can
think of anyone I might know that uses ISP. While I certainly do enjoy being
&lt;a href=&quot;/2002/04/april-16-2002/&quot;&gt;Sherlock Holmes&lt;/a&gt; on occasion, this is just too much. So Pat, Kim, Ricardo,
and anyone else who indulges me by reading this, please just set yourself up an
account and post your comments — I really do like it when you post comments.
It makes me feel all warm and bubbly inside.&lt;/p&gt;</content:encoded></item><item><title>Ode to the Nice Guys</title><link>https://tylerbutler.com/ode-to-the-nice-guys/</link><guid isPermaLink="true">https://tylerbutler.com/ode-to-the-nice-guys/</guid><description>Ode to the Nice Guys</description><pubDate>Wed, 20 Oct 2004 08:55:00 GMT</pubDate><content:encoded>&lt;p&gt;A friend gave this to me. It’s written by a girl somewhere, and is available
online at &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.stwing.upenn.edu%2F~jenf%2Fwriting%2Frant04.html&quot;&gt;http://www.stwing.upenn.edu/~jenf/writing/rant04.html&lt;/a&gt;. I like
it. It’s well-written and very on point. As a “nice guy,” or &lt;a href=&quot;https://www.intellectualwhores.com/&quot;&gt;Intellectual
Whore&lt;/a&gt;, as some have called it, I identified very well with the topic. May
my vindication come quickly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ode to the Nice Guys&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This rant was written for the Wharton Undergraduate Journal&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is a tribute to the nice guys. The nice guys that finish last, that
never become more than friends, that endure hours of whining and bitching
about what assholes guys are, while disproving the very point. This is
dedicated to those guys who always provide a shoulder to lean on but restrain
themselves to tentative hugs, those guys who hold open doors and give
reassuring pats on the back and sit patiently outside the changing room at
department stores. This is in honor of the guys that obligingly reiterate how
cute/beautiful/smart/funny/sexy their female friends are at the appropriate
moment, because they know most girls need that litany of support. This is in
honor of the guys with open minds, with laid-back attitudes, with honest
concern. This is in honor of the guys who respect a girl’s every facet, from
her privacy to her theology to her clothing style.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is for the guys who escort their drunk, bewildered female friends back
from parties and never take advantage once they’re at her door, for the guys
who accompany girls to bars as buffers against the rest of the creepy male
population, for the guys who know a girl is fishing for compliments but give
them out anyway, for the guys who always play by the rules in a game where the
rules favor cheaters, for the guys who are accredited as boyfriend material
but somehow don’t end up being boyfriends, for all the nice guys who are
overlooked, underestimated, and unappreciated, for all the nice guys who are
manipulated, misled, and unjustly abandoned, this is for you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is for that time she left 40 urgent messages on your cell phone, and
when you called her back, she spent three hours painstakingly dissecting two
sentences her boyfriend said to her over dinner. And even though you thought
her boyfriend was a chump and a jerk, you assured her that it was all ok and
she shouldn’t worry about it. This is for that time she interrupted the best
killing spree you’d ever orchestrated in GTA3 to rant about a rumor that
romantically linked her and the guy she thinks is the most repulsive person in
the world. And even though you thought it was immature and you had nothing
against the guy, you paused the game for two hours and helped her concoct a
counter-rumor to spread around the floor. This is also for that time she
didn’t have a date, so after numerous vows that there was nothing “serious”
between the two of you, she dragged you to a party where you knew nobody, the
beer was awful, and she flirted shamelessly with you, justifying each fit of
reckless teasing by announcing to everyone: “oh, but we’re just friends!” And
even though you were invited purely as a symbolic warm body for her ego, you
went anyways. Because you’re nice like that.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The nice guys don’t often get credit where credit is due. And perhaps more
disturbing, the nice guys don’t seem to get laid as often as they should. And
I wish I could logically explain this trend, but I can’t. From what I have
observed on campus and what I have learned from talking to friends at other
schools and in the workplace, the only conclusion I can form is that many
girls are just illogical, manipulative bitches. Many of them claim they just
want to date a nice guy, but when presented with such a specimen, they say
irrational, confusing things such as “oh, he’s too nice to date” or “he would
be a good boyfriend but he’s not for me” or “he already puts up with so much
from me, I couldn’t possibly ask him out!” or the most frustrating of all:
“no, it would ruin our friendship.” Yet, they continue to lament the lack of
datable men in the world, and they expect their too-nice-to-date male friends
to sympathize and apologize for the men that are jerks. Sorry, guys, girls
like that are beyond my ability to fathom. I can’t figure out why the
connection breaks down between what they say (&lt;em&gt;I want a nice guy!&lt;/em&gt;) and what
they do (&lt;em&gt;I’m going to sleep with this complete ass now!&lt;/em&gt;). But one thing I
can do, is say that the nice-guy-finishes-last phenomenon doesn’t last
forever. There are definitely many girls who grow out of that train of thought
and realize they should be dating the nice guys, not taking them for granted.
The tricky part is finding those girls, and even trickier, finding the ones
that are single.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;So, until those girls are found, I propose a toast to all the nice guys. You
know who you are, and I know you’re sick of hearing yourself described as
ubiquitously nice. But the truth of the matter is, the world needs your
patience in the department store, your holding open of doors, your party
escorting services, your propensity to be a sucker for a pretty smile. For all
the crazy, inane, absurd things you tolerate, for all the situations where you
are the faceless, nameless hero, my accolades, my acknowledgement, and my
gratitude go out to you. You do have credibility in this society, and your
well deserved vindication is coming.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Fu-zu Jen, SEAS/WH, 2003&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Fun With Text-to-Speech</title><link>https://tylerbutler.com/fun-with-text-to-speech/</link><guid isPermaLink="true">https://tylerbutler.com/fun-with-text-to-speech/</guid><description>Fun With Text-to-Speech</description><pubDate>Sat, 16 Oct 2004 05:25:00 GMT</pubDate><content:encoded>&lt;p&gt;At work, we have a mindless task that has to be done manually every hour.
Basically, we have to log into this website and click around a bit to make
sure that the site is still up and running. It’s pretty ridiculous, I know,
but it has to be done nonetheless. No one in the office ever remembers to do
it, so I decided it might be nice to have an alarm of sorts. So I remembered
some of my old Micrososft Agent tinkering back in High School, and looked
around for some examples of using the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.microsoft.com%2Fspeech%2Fdownload%2Fsdk51%2F&quot;&gt;Windows speech API&lt;/a&gt; in C#. It didn’t
take me long to figure it out, and the code for my simple text-to-speech
program is deceptively simple. Instead of providing the code as a download,
I’m just posting it here since it is so short.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpeechLib&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;using&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;System&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Threading&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;namespace&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Speak&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;class&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Speak&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;///&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;/// The main entry point for the application.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;///  [STAThread]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;12&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;static&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;void&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;Main&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span&gt;[] &lt;/span&gt;&lt;span&gt;args&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;13&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;14&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;SpeechVoiceSpeakFlags&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;flags&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; SpeechVoiceSpeakFlags&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;SVSFlagsAsync&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;15&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;SpVoice&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;new&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;SpVoice&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;16&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;( args&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Length &lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;17&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;18&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Speak&lt;/span&gt;&lt;span&gt;(args[&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; flags)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;19&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;20&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;21&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;22&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;                &lt;/span&gt;&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Speak&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&quot;Please specify what you would like me to say.&quot;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt; flags )&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;23&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;24&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;v&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;WaitUntilDone&lt;/span&gt;&lt;span&gt;(Timeout&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Infinite)&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;25&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;26&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;27&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Basically all you need is the code above and the Interop.SpeechLib.dll file,
which provides access to the speech utilities. For completeness (and since I
had some trouble finding the DLL), I put a copy of the file up on here.
This program basically just echoes back whatever string you pass in at the
command line, so to get the scheduling working, I just used Windows Task
Scheduler. I scheduled a task to run every hour ever day between 8am and 10pm
(check the advanced settings of the Task Scheduler), then pointed the task to
the compiled program, passing it the string I want it to say as the argument.
Simple. And it works. I still smile every time one of the office computers
says, “It is time to check Blackboard.”&lt;/p&gt;</content:encoded></item><item><title>Getting Rich</title><link>https://tylerbutler.com/getting-rich/</link><guid isPermaLink="true">https://tylerbutler.com/getting-rich/</guid><description>Getting Rich</description><pubDate>Thu, 30 Sep 2004 03:24:00 GMT</pubDate><content:encoded>&lt;p&gt;I came across a link to this story on Slashdot. I always enjoy reading Paul
Graham, because he writes quite simply, but obviously has the technical
knowledge and experience to write on the topics he does. This particular
article was a brief analysis of trends in the market during the DotCom Bubble
and talks a little bit about the future based on some of the market trends and
techniques from that time period. A good read, and it gives me hope that maybe
I can still get rich. After all:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have no illusions about why nerd culture is becoming more accepted. It’s
not because people are realizing that substance is more important than
marketing. It’s because the nerds are getting &lt;a href=&quot;https://www.paulgraham.com/nerdad.html&quot;&gt;rich&lt;/a&gt;. But that is not going
to change.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now, I don’t think I’m overly hung-up on “getting rich,” but it sure would be
nice not to have to worry about how much I’m paying for food and whether or
not I can afford rent this month. Opposed to that, rich sounds pretty nice. If
not rich, at least “comfortable.” I also liked the quote about dressing
informally:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dressing up is not so much bad in itself. The problem is the receptor it
binds to: dressing up is inevitably a substitute for good ideas. It is no
coincidence that technically inept business types are known as “suits.” Nerds
don’t just happen to dress informally. They do it too consistently.
Consciously or not, they dress informally as a prophylactic measure against
stupidity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So true, so true! While I fully understand the importance of appearance,
people seem to miss the seemingly obvious fact that even underdressed people
can be very talented and have good ideas. I have found in my IPRO that while
people need direction and leadership, they also need freedom and informality.
That way they can get their work done on their own terms. Frankly, as a
leader, it shouldn’t matter how the work gets done (within reason, of course),
as long as it gets done. Obviously there are limits to this (for example, I
require that students follow a standard comment format when writing their
code), but the idea is that most &lt;strong&gt;smart&lt;/strong&gt; people work better when they can
work on their own terms. I have had managers argue with me about this, and I
have decided that dumb people exist, and that if you require someone else to
tell you how to get your work done, you must also be dumb. It is against my
policy to work with dumb people. FInally, I really like what Graham says
about young people:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A 26 year old may not be very good at managing people or dealing with the
SEC. Those require experience. But those are also commodities, which can be
handed off to some lieutenant. The most important quality in a CEO is his
vision for the company’s future. What will they build next? And in that
department, there are 26 year olds who can compete with anyone.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You better believe it. While I do my best to defer to my elders, I don’t think
the fact that they are 20 years older than I is a default reason for them to
make better decisions than I do. And frankly, I &lt;strong&gt;do&lt;/strong&gt; know a lot more about
some topics than they do. Consustently, however, I get little or no respect
from people just because I am young. On the other hand, I am lucky in that I
have several older people who I deeply respect that also seem to respect me
and my abilities (Dr. Sun, my friend Patrick). For the rest of you who think
I’m too young to be any good at anything, how about reading a little bit of
the Bible:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t let anyone look down on you because you are young, but set an example
for the believers in speech, in life, in love, in faith and in purity.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.biblegateway.net/cgi-bin/bible?passage=1TIM+4:12&amp;amp;language=english&amp;amp;version=NIV&amp;amp;showfn=on&amp;amp;showxref=on&quot;&gt;1 Timothy 4:12&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Take &lt;strong&gt;&lt;em&gt;that!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</content:encoded></item><item><title>Firefox Extensions (Updated)</title><link>https://tylerbutler.com/firefox-extensions-updated/</link><guid isPermaLink="true">https://tylerbutler.com/firefox-extensions-updated/</guid><description>Firefox Extensions (Updated)</description><pubDate>Mon, 13 Sep 2004 23:06:00 GMT</pubDate><content:encoded>&lt;p&gt;I have quite a few Firefox extensions that I find extremely useful, so I
thought I’d share them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Firesomething: &lt;a href=&quot;http://www.cosmicat.com/extensions&quot;&gt;http://www.cosmicat.com/extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Adblock: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fadblock.mozdev.org%2F&quot;&gt;http://adblock.mozdev.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tabbrowser: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwhite.sakura.ne.jp%2F~piro%2Fxul%2F_tabextensions.html.en&quot;&gt;http://white.sakura.ne.jp/~piro/xul/_tabextensions.html.en&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GMail Notifier: &lt;a href=&quot;http://www.nexgenmedia.net/extensions/&quot;&gt;http://www.nexgenmedia.net/extensions/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Allow Right-Click: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fextensions.roachfiend.com%2Findex.php&quot;&gt;http://extensions.roachfiend.com/index.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;User Agent Switcher: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.chrispederick.com%2Fwork%2Ffirefox%2Fuseragentswitcher%2F&quot;&gt;http://www.chrispederick.com/work/firefox/useragentswitcher/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;WeatherFox: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fweatherfox.mozdev.org%2F&quot;&gt;http://weatherfox.mozdev.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dictionary Search: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdictionarysearch.mozdev.org%2F&quot;&gt;http://dictionarysearch.mozdev.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Target Alert: &lt;a href=&quot;http://www.bolinfest.com/targetalert/&quot;&gt;http://www.bolinfest.com/targetalert/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mozilla Calendar: &lt;a href=&quot;https://www.mozilla.org/projects/calendar/&quot;&gt;https://www.mozilla.org/projects/calendar/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Foxy Tunes: &lt;a href=&quot;https://www.iosart.com/foxytunes/firefox/&quot;&gt;https://www.iosart.com/foxytunes/firefox/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Cute Menus: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fcute.mozdev.org%2F&quot;&gt;http://cute.mozdev.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Disable Targets for Downloads: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.cusser.net%2F&quot;&gt;http://www.cusser.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download Manager Tweak: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fdmextension.mozdev.org%2F&quot;&gt;http://dmextension.mozdev.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Update 09/22/2004&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;OK, so the new version of Firefox (1.0PR) just isn’t cooperating with
TabBrowser Extensions and pop-ups. I want my pop-ups to appear in new tabs,
but I don’t want all of them blocked - especially in GMail. Despite adding the
GMail domain to the Exceptions list in the Firefox pop-up blocker, things
still won’t work. I think the problem is with TabBrowser Extensions, since
disabling it made everything work again. Anyway, in the meantime, I have tried
to find a few other smaller extensions that will emulate the TabBrowser
Extensions functionality to get around this. Here’s what I’m using right now.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tabbrowser Preferences: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.pryan.org%2Fmozilla%2Fsite%2FTheOneKEA%2Ftabprefs%2F&quot;&gt;http://www.pryan.org/mozilla/site/TheOneKEA/tabprefs/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;TabX: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fextensionroom.mozdev.org%2Fmore-info%2Ftabx&quot;&gt;http://extensionroom.mozdev.org/more-info/tabx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Tab Duplicator: &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.twannos-extensions.tk%2F&quot;&gt;http://www.twannos-extensions.tk/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One minor aesthetic problem is with TabX. It just puts simple X’s for close
buttons, unlike the nice looking red buttons that TBE puts there. Oh well,
beggars can’t be choosers, right? I just hope that TBE doesn’t cause these
problems when a new version is released.&lt;/p&gt;</content:encoded></item><item><title>Tolls and Cameras</title><link>https://tylerbutler.com/tolls-and-cameras/</link><guid isPermaLink="true">https://tylerbutler.com/tolls-and-cameras/</guid><description>Tolls and Cameras</description><pubDate>Sat, 11 Sep 2004 06:13:00 GMT</pubDate><content:encoded>&lt;p&gt;Lots to talk about in this rant. I first heard of the Illinois Governor’s plan
to increase tolls in Illinois one day when I was driving to work. And this
isn’t a small increase, either — the &lt;a href=&quot;https://www.google.com/search?q=cache:B6k2O8uaf5sJ:www.suntimes.com/output/news/cst-nws-toll26.html&amp;amp;hl=en&quot;&gt;tolls are doubling&lt;/a&gt;! Unless you get
an IPASS, of course. The solution, obviously, is to get an IPASS.
Unfortunately, that in and of itself presents a bit of a problem. You see,
IPASS tracks you. That’s my biggest beef with it. I understand the argument
that it “makes things faster” and reduces congestion, but it also records
&lt;strong&gt;where I go&lt;/strong&gt;. Check the &lt;a href=&quot;https://www.illinoistollway.com/portal/page?_pageid=53,34586,53_34725:53_34734&amp;amp;_dad=portal&amp;amp;_schema=PORTAL&quot;&gt;FAQ &lt;/a&gt;at their website. One part reads:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I-PASS users can log onto &lt;a href=&quot;http://www.getipass.com&quot;&gt;www.getipass.com&lt;/a&gt; or link to the online maintenance
function through the general Illinois Tollway Web site at
&lt;a href=&quot;http://www.illinoistollway.com&quot;&gt;www.illinoistollway.com&lt;/a&gt; to update credit card information, add a new vehicle
to the account, or &lt;strong&gt;even check on recent I-PASS transactions.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This bugs me. I have no intention of ever getting arrested or anything, but if
for some reason I was, I’m fairly certain my IPASS records could be pulled and
used against me. This makes me angry. And despite the fact that the Tollway
Authority says they don’t track users speeds to issue tickets, I don’t trust
them. Didn’t RealNetworks claim their player wasn’t spyware at one point?
Anyway, you won’t see me buying an IPASS.&lt;/p&gt;
&lt;p&gt;The day after I learned about this I decided to finally go and get my Chicago
Card, which can be used as a fare card on CTA busses and trains. Since I’m a
part-time student now, I don’t get a U-PASS, and I ride the train enough to
warrant getting one. But that made me realize the similarities between the
Toll situation and the Chicago Card. You no longer get a 10% bonus in funds
when you add 10 or more dollars to your regular CTA fare card — you only get
the bonus when you have a Chicago Card. But the Chicago Card is tied to your
name, so tracking is possible. With the regular fare card, they can track the
use of the card, but they can’t tie it to any one person. That’s the way I
like it. I submitted a question to the CTA people asking about the privacy and
information collection policies of the Chicago Card, and here’s the response I
got:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear Mr. Butler:&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for your inquiry. The CTA does not track the use of these cards by
any individual unless requested by that individual. The Chicago Card Plus does
provide its users with an online record of their usage, but each customer has
a password of his or her own selection to access the information. The regular
Chicago Card does not offer this online service.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;If a law enforcement agency wishes to review our records, it can do so with
the official, lawful use of a warrant, court order, etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Thank you for your interest.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Sincerely,&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Terry Levin&lt;br /&gt;
CTA Customer Service&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, this doesn’t really answer my question. So no tracking is done
“unless requested?” But what if law enforcement has a warrant to pull their
records? Is Mr. Levin saying the information doesn’t exist (i.e. users aren’t
tracked), or that it exists and isn’t used for any other purpose other than
for posterity’s sake? I don’t know. But it looks like no Chicago Card, Plus or
not, for me.&lt;/p&gt;
&lt;p&gt;Finally, I came across &lt;a href=&quot;https://yro.slashdot.org/article.pl?sid=04/09/09/2217232&amp;amp;tid=158&amp;amp;tid=103&amp;amp;tid=1&amp;amp;tid=17&quot;&gt;this story&lt;/a&gt; on Slashdot. Apparently the city is
considering rolling out a whole bunch of cameras in the city and tying them
into the 911 call center. All good, in theory, right? It’ll help deter crime,
right? I don’t think so. Why not just put up more street lights? A bright
light is the biggest deterrant to random crime. But that would be too simple,
I guess. And lights can’t track you.&lt;/p&gt;
&lt;p&gt;Do I sound paranoid? I am. I don’t trust the government. They’ve given me no
reason to. And government is universally corrupt, be it a national government,
a local government, or even a school administration. So it looks like I’ll be
paying a lot more than the rest of you for the same services. Yes, it’s my
choice, but the government shouldn’t be allowed to charge me for my freedom.&lt;/p&gt;
&lt;p&gt;For what it’s worth.&lt;/p&gt;</content:encoded></item><item><title>The Right to Read</title><link>https://tylerbutler.com/the-right-to-read/</link><guid isPermaLink="true">https://tylerbutler.com/the-right-to-read/</guid><description>The Right to Read</description><pubDate>Wed, 01 Sep 2004 04:15:00 GMT</pubDate><content:encoded>&lt;p&gt;The article is in the form of a sort of sci-fi story, and is only one of
several articles (I think) that were published by the &lt;a href=&quot;http://www.acm.org&quot;&gt;ACM&lt;/a&gt;. I’m not the
biggest fan of Stallman (he’s far too big a hippie for my tastes), but I think
the article’s use of extremes illustrates some excellent points about the
tendency of government to get all up in our electronic business. Anyway, I
enjoyed it. At first glance, it seems very outlandish, but when you think
about it and read the author’s notes, it becomes clear that the sad future
isn’t far away.&lt;/p&gt;</content:encoded></item><item><title>Bear Beer Guzzler</title><link>https://tylerbutler.com/bear-beer-guzzler/</link><guid isPermaLink="true">https://tylerbutler.com/bear-beer-guzzler/</guid><description>Bear Beer Guzzler</description><pubDate>Thu, 19 Aug 2004 13:20:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://patrick.wagstrom.net/&quot;&gt;Patrick&lt;/a&gt; sent me this story. What a cool bear! Does anyone have his
address? I’d like to invite him to my apartment-warming party. Betcha he does
an awesome keg-stand. He’s probably been arrested though — he’s well under the
legal drinking age. (Yuk yuk).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.cnn.com%2F2004%2FUS%2FWest%2F08%2F18%2Fbear.beer.reut%2Findex.html&quot;&gt;http://www.cnn.com/2004/US/West/08/18/bear.beer.reut/index.html&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A black bear was found passed out at a campground in Washington state
recently after guzzling down three dozen cans of a local beer, a campground
worker said on Wednesday.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;“We noticed a bear sleeping on the common lawn and wondered what was going on
until we discovered that there were a lot of beer cans lying around,” said
Lisa Broxson, a worker at the Baker Lake Resort, 80 miles (129 km) northeast
of Seattle.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The hard-drinking bear, estimated to be about two years old, broke into
campers’ coolers and, using his claws and teeth to open the cans, swilled down
the suds.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;It turns out the bear was a bit of a beer sophisticate. He tried a mass-market
Busch beer, but switched to Rainier Beer, a local ale, and stuck with it for
his drinking binge.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Wildlife agents chased the bear away, but it returned the next day, said
Broxson.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;They set a trap using as bait some doughnuts, honey and two cans of Rainier
Beer. It worked, and the bear was captured for relocation.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>The Big Move (Part 1)</title><link>https://tylerbutler.com/the-big-move-part-1/</link><guid isPermaLink="true">https://tylerbutler.com/the-big-move-part-1/</guid><description>The Big Move (Part 1)</description><pubDate>Wed, 18 Aug 2004 01:22:00 GMT</pubDate><content:encoded>&lt;p&gt;I have been looking for a new apartment for what seems like forever. I started
out with 5 other roommates, but when they decided to go into a house that just
wasn’t up to my standards, I struck out on my own and started looking for one-
bedroom places. Unfortunately, the search was tough. Many places I looked at
were either in fairly bad shape or just too expensive for the size. I was
getting pretty discouraged, especially since my financial situation isn’t
exactly great and time was running out.&lt;/p&gt;
&lt;p&gt;On Saturday of last week (August 7) I looked at a 2 1/2 room studio apartment
on Hamilton Avenue, close to the corner of 35th and Archer. I liked what I saw&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;and I liked the price, too. It was a little further from campus than I had
hoped (about a 15-minute drive, depending on the lights), but it had beautiful
hardwood floors, a large walk-in closet, and was in pretty good shape. It also
smelled great, which, considering some of the other places I looked at, was a
definite plus. The landlord was understanding of my financial situation, and I
explained to him that I wouldn’t be able to pay until later the following week
because &lt;a href=&quot;/2004/08/i-hate-banks/&quot;&gt;my bank is stupid&lt;/a&gt;. That was fine with him, so I crossed my
fingers and waited until Friday so my bank would finally ackowledge that I had
the necessary funds in my account (have I mentioned yet that &lt;a href=&quot;/2004/08/i-hate-banks/&quot;&gt;I despise
banks?&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Thankfully (and miraculously), my bank cleared the funds just before I needed
to make the withdrawal for the security deposit and first month’s rent. I
headed over to the landlord’s office, got everything in order, and had the
keys in my hand in less than an hour. It felt really good to have the keys in
my hand. I grabbed Alex’s camera and headed over to get some pictures before I
destroyed the place with my stuff. Some of the best ones are here. Others are
available in the download section. Click on the photos below to get an
even bigger photo.&lt;/p&gt;</content:encoded></item><item><title>I Hate Banks</title><link>https://tylerbutler.com/i-hate-banks/</link><guid isPermaLink="true">https://tylerbutler.com/i-hate-banks/</guid><description>I Hate Banks</description><pubDate>Tue, 17 Aug 2004 06:18:00 GMT</pubDate><content:encoded>&lt;p&gt;I hate banks. I despise them. I wish a plague of death and disease upon them.
The concept of a bank seems simple, and indeed, useful, at least at first.
People have money that they want to secure somehow so their money doesn’t get
stolen from under their mattress or out of their wallets. So they give their
money to an &lt;a href=&quot;http://www.fdic.gov/&quot;&gt;insured&lt;/a&gt; “corporation” of sorts that holds their money and
keeps a record of how much they have. For large transactions, the account
holder can write a check for the amount of money they want to transfer to
another party and sign it. The “corporation,” (aka the bank) honors the
request to transfer and handles the details so that the account holder doesn’t
have to. This is simple, right? This is “protecting ourselves,” right?&lt;/p&gt;
&lt;p&gt;Maybe, maybe not. In my experience, banks are nothing but hassle, especially
for people like me that have very limited funds available and need to bleed
our accounts dry about every week or so. &lt;a href=&quot;http://www.iit.edu&quot;&gt;Illinois Tech&lt;/a&gt; pays me every two
weeks with a check that I deposit to my checking account at &lt;a href=&quot;http://www.lakesidebank.com&quot;&gt;Lakeside
Bank&lt;/a&gt;. These checks are &lt;strong&gt;not&lt;/strong&gt; out of state (obviously); In fact, they’re
drawn from Lakeside Bank! &lt;em&gt;So why does it take a &lt;strong&gt;week&lt;/strong&gt; for my deposit to
show up in my account?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This was the question I set out to answer a couple of weeks ago. The problem
arose when I made an electronic bill payment after making a deposit that my
online account information reported had been deposited and was available. The
bank charged me an overdraft fee, claiming that the deposited funds were on
hold, even though the account screen online clearly said that the funds were
available. I called the bank and was given the basic run-around:&lt;/p&gt;
&lt;p&gt;“This person is who you need to talk to.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Phone transfer. Wait for a while.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“No, it’s so and so.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Another transfer. Doesn’t go through. Back to operator.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“I’m sorry, she’s out of town for… ummm… looks like forever.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Is there anyone else I can speak with?”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“Ummmm, no. You’re screwed.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Can you help me at all?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“No. That’s not my job. I just transfer phone calls. I am here to make your
life miserable.”&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“Well, tell your supervisor I said you’re doing an excellent job.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;“Ummm, OK.”&lt;/p&gt;
&lt;p&gt;After that entirely useless exchange, I headed over to see if I could have
better luck in person. I did, sort of. I got thrown around a bit from person
to person, but finally one of the bankers helped me. She explained that these
checks were not being deposited in my account immediately because I was a “new
customer.” New customer?! I’ve been banking there for &lt;strong&gt;four years!&lt;/strong&gt; And
seriously, Illinois Tech, who’s writing me the checks, hasn’t bounced a check
in who-knows-how-long, so what are they worried about? I don’t know. I hate to
say it, but I gave up. My thirty dollars is gone forever. It just wasn’t worth
it. I guess I’ll try to set up direct deposit. But with my luck, they’ll mess
it up and I’ll lose the money permanently, or have to wait even longer to have
access to it. I hate banks.&lt;/p&gt;</content:encoded></item><item><title>A Short History of Video Games</title><link>https://tylerbutler.com/a-short-history-of-video-games/</link><guid isPermaLink="true">https://tylerbutler.com/a-short-history-of-video-games/</guid><description>A Short History of Video Games</description><pubDate>Mon, 16 Aug 2004 12:15:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;http://www.1up.com&quot;&gt;1Up.com&lt;/a&gt; is running a story called &lt;a href=&quot;http://www.1up.com/do/feature?cId=3116290&quot;&gt;The Essential 50&lt;/a&gt;, which lists what
they consider to be the 50 most essential video games. It’s an interesting
history lesson, since every entry has a short history of the game, the
innovations it had, and the impact it had on the industry and video game
development. Interestingly, several games’ major impact was not technology or
innovation, as I would have imagined, but rather political and/or social.
Interesting stuff.&lt;/p&gt;</content:encoded></item><item><title>American Airlines Apologizes For Your Flight Delay</title><link>https://tylerbutler.com/american-airlines-apologizes-for-your-flight-delay/</link><guid isPermaLink="true">https://tylerbutler.com/american-airlines-apologizes-for-your-flight-delay/</guid><description>American Airlines Apologizes For Your Flight Delay</description><pubDate>Sat, 14 Aug 2004 03:27:00 GMT</pubDate><content:encoded>&lt;p&gt;When I received an email with the subject “American Airlines Apologizes For
Your Flight Delay,” I got a little excited. “Yes! They’ll probably offer me a
free flight or some frequent flyer miles or something! Then my hours of
meaningless waiting at the Seattle-Tacoma terminal won’t be for nought!” Alas,
it was not to be. Here’s the email:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear Tyler Butler,&lt;/p&gt;
&lt;p&gt;On two separate occasions during the past week, we experienced technical
difficulties with our computer systems, causing some flights to be delayed. We
understand that you traveled during both periods and likely were doubly
inconvenienced.&lt;/p&gt;
&lt;p&gt;Please accept our sincere apologies for any inconvenience you may have
experienced, and rest assured that we are working diligently to take
corrective actions. We greatly value your business, appreciate your
understanding and look forward to delivering the service you deserve in the
near future.&lt;/p&gt;
&lt;p&gt;Sincerely,&lt;/p&gt;
&lt;p&gt;Dan Garton&lt;br /&gt;
Executive Vice President Marketing&lt;br /&gt;
American Airlines&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I suppose I was dumb to assume that there would be some sort of incentive for
me to continue my association with their airline included in the email, but
there wasn’t. As I thought about it more, I realized that flight delays are
just something you have to deal with when you fly, and the fact that I was
expecting to get something out of my suffering was a by-product of a
suffocating atmosphere of “customer-is-always-right” consumerism. So, though I
initially wanted to call them and give them a chance to offer me something, I
decided to keep my mouth shut.&lt;/p&gt;
&lt;p&gt;Maybe I did get something after all?&lt;/p&gt;</content:encoded></item><item><title>Word of the Day: Cruft</title><link>https://tylerbutler.com/word-of-the-day-cruft/</link><guid isPermaLink="true">https://tylerbutler.com/word-of-the-day-cruft/</guid><description>Word of the Day: Cruft</description><pubDate>Sat, 14 Aug 2004 00:37:00 GMT</pubDate><content:encoded>&lt;p&gt;I came across several different articles regarding a wide variety of topics,
but they all center around Apple’s OS, user interface design, and the concept
of cruft. I found them to be quite interesting, and I learned a lot. I think
I’m going to force the IPRO 305 students to read a few of them before they
start redesigning the &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.hawktour.net&quot;&gt;HawkTour&lt;/a&gt; interface.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#when-good-interfaces-go-crufty&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://mpt.mirror.theinfo.org/stories/storyReader$374&quot;&gt;When Good Interfaces Go Crufty&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A good introduction to the basic concept of cruft, which, as the article
states, should be familiar to any programmer worth his salt, especially those
involved in UI design. Unfortunately, few programmers, let alone computer
users, realize what sort of cruft they’ve become accustomed to through regular
computer use.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-art-of-the-parlay&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://daringfireball.net/2004/08/parlay&quot;&gt;The Art of the Parlay&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;An interesting discussion of the common belief that Apple could be Microsoft
if they’d made some different decisions in the 80’s. An interesting history
lesson, and includes some comparisons of the Apple and Microsoft approach to
product design.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#in-the-beginning-was-the-command-line&quot;&gt;&lt;/a&gt;&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fjoesacher.com%2Fdocuments%2Fcommandline.php%3FPage%3DETRE&quot;&gt;In the Beginning was the Command Line&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A historical look at BeOS and how that OS was an attempt to attack cruft. Too
bad it failed to become popular (for various reasons).&lt;/p&gt;</content:encoded></item><item><title>eBay Scams Are Funny!</title><link>https://tylerbutler.com/ebay-scams-are-funny/</link><guid isPermaLink="true">https://tylerbutler.com/ebay-scams-are-funny/</guid><description>eBay Scams Are Funny!</description><pubDate>Fri, 23 Jul 2004 05:16:00 GMT</pubDate><content:encoded>&lt;p&gt;eBay used to be safe, and for the most part, I suppose it still is. The honest
people in the world still outnumber the dishonest ones, and I hope it stays
that way forever. But anyone who has used eBay a fair amount has gotten
scammed at least once or twice, or at the very least, received emails from
people fishing for a gullible seller/buyer to scam. I myself paid for a
relatively expensive item that was never sent to me. Luckily, in that case, I
was protected because I went through eBay and they refunded my money. Of
course, I was out a few hundred bucks for about three months while I went
through their fraud process. That pretty much sucks for someone on a
shoestring budget like me (though one has to wonder just how shoestring my
budget is if I can spend hundreds of dollars on eBay… yup, I’m enigmatic
like that…).&lt;/p&gt;
&lt;p&gt;Anyway, I saw a story on Slashdot about an eBay scammer, and eventually found
this site, &lt;a href=&quot;http://www.p-p-p-powerbook.com/&quot;&gt;P-P-P-Powerbook.com&lt;/a&gt;, that chronicles a relatively recent
(April/May 2004) scam story. It’s really really funny, and there are some
awesome pictures to go with it. I have the PDF document shared on here, but
I’d really recommend checking the site as well.&lt;/p&gt;
&lt;p&gt;It’s tough to explain quickly what exactly happened. I guess the really
important thing is that the seller, who was trying to sell an Apple Powerbook,
was contacted by a scammer who wanted to buy the Powerbook through an Escrow
site. Eventually the seller decided to scam this scammer, and eventually sent
him a P-P-P-Powerbook, picturres of which are below. Anyway, the story is
quite long and involved, but very humorous, so I’d recommend checking it out.
Some of my favorite picutres are below (there are more in the PDF and at the
site). Oh, and there’s also a hilarious site that offers &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fbu.dotsomething.net%2Fpowerbook%2Fppppstore.html&quot;&gt;P-P-P-Powerbooks for
sale&lt;/a&gt;. It looks pretty legitimate…&lt;/p&gt;
&lt;p&gt;Get the PDF story here.&lt;/p&gt;
</content:encoded></item><item><title>DropBoxxer</title><link>https://tylerbutler.com/dropboxxer/</link><guid isPermaLink="true">https://tylerbutler.com/dropboxxer/</guid><description>DropBoxxer</description><pubDate>Wed, 21 Jul 2004 05:02:00 GMT</pubDate><content:encoded>&lt;p&gt;I am a mobile guy. I use my laptop on the road a lot, and at home I have three
different computers (desktop, server, media box). On top of all that I use
&lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fomega.cs.iit.edu%2F&quot;&gt;Omega&lt;/a&gt; to host some files and such for easy mobile access. I have
everything networked together using windows file sharing, and for most part,
everything wors flawlessly. The problem is, I often need to copy or move files
from one remote location to another. Simple, right? Just drag and drop!
Unfortunately, often times the windows I need to drag to aren’t readily
visible, and it is relatively time consuming to drag down to the taskbar, wait
for the window to become active, then drag back up to the window to drop the
file.&lt;/p&gt;
&lt;p&gt;If Windows would let me drop items on the taskbar, it’d be all good, but since
it won’t, I decided to make my own application that would allow me faster
access to common “drop” locations.&lt;/p&gt;
&lt;p&gt;I did this in C# using a copy of Visual Studio .NET that I got through
Illinois Tech’s Academic Alliance program through Microsoft. I’d never used C#
or .NET before, so I learned as I went.&lt;/p&gt;
&lt;p&gt;DropBoxxer sits in your system tray, and doesn’t take up any screen real
estate at all until needed. When you select a file and drag it over the left
corner (right above the system time) DropBoxxer fade up and in from off
screen. There are different “drop boxes” for various locations, with three
types of icons — one for local locations, one for remote locations, and one
for the Recycle Bin (note that the recycle bin icon doesn’t currently work in
version 0.1). Simply drop the file over one of these drop boxes, and the
program copies or moves the file to the drop location. By default, everything
is copied rather than moved, but simply hold down the Shift key as your drag
the file(s) onto the drop box, and the files will be moved rather than copied.
As you drag something over a drop box, the location bar will display where the
current drop box points, in case you forget or need to double check.&lt;/p&gt;
&lt;p&gt;After the job is complete, DropBoxxer fades back down off screen so you
don’t have to worry about it any more. Next time you need it, simply drag a
file back over and it’ll automatically reappear. To exit the program, simply
right-click on its task bar icon and select “Exit DropBoxxer.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Notes About Version 0.1&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Everything is currently hardcoded, so it’s not a whole lot of use to anyone
other than me unless you want to get into the source code (included in the
download) to make modifications. I plan to add functionality that will allow
you to drag folders onto the drop area to add drop locations, or at the very
least provide a menu option to that effect when you right click in the system
tray. I’d also like to provide some better progress indicators when copying
large files. As it stands right now, you don’t have any indication of what’s
going on or how long the process is going to take.&lt;/p&gt;
&lt;p&gt;Finally, I want to trim the file size down a bit. It’s almost an entire meg
executable, which seems ridiculously large for something as simple as it is.
Probably has something to do with the image files I store in there…&lt;/p&gt;
&lt;p&gt;You can snag a copy of DropBoxxer Version 0.1 here. The zip contains an
executable and the source code files/resources. The source code is crappy
right now, but I will clean it up when I add the other functionality. If you
make modifications to the code, please write me and let me know. DropBoxxer
requires Windows XP (because of the fading and transparency effects), and
requires the .NET framework (I know, I know, but seriously, there is no other
way to do an application that operates in a snazzy way and integrates so
closely with Windows. Java? I think not…)&lt;/p&gt;</content:encoded></item><item><title>Mailinator to the Rescue!</title><link>https://tylerbutler.com/mailinator-to-the-rescue/</link><guid isPermaLink="true">https://tylerbutler.com/mailinator-to-the-rescue/</guid><description>Mailinator to the Rescue!</description><pubDate>Tue, 20 Jul 2004 05:58:00 GMT</pubDate><content:encoded>&lt;p&gt;Ricardo sent me this website, &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.mailinator.net&quot;&gt;Mailinator.net&lt;/a&gt;. It’s a really cool concept
for people who need to sign up for websites once or need to enter an email
address on a form for some reason. You don’t need an account - you make up the
name on the spot, then the account is created automatically when a message is
received. Then you log in, get the message, and leave. The account is
automatically deleted later! What a cool concept! Check out their website for
more info.&lt;/p&gt;</content:encoded></item><item><title>GMail: A Review (Updated)</title><link>https://tylerbutler.com/gmail-a-review-updated/</link><guid isPermaLink="true">https://tylerbutler.com/gmail-a-review-updated/</guid><description>GMail: A Review (Updated)</description><pubDate>Thu, 08 Jul 2004 00:44:00 GMT</pubDate><content:encoded>&lt;p&gt;When &lt;a href=&quot;https://www.google.com/&quot;&gt;Google&lt;/a&gt; first announced their new GMail service, I was
relatively unimpressed. The big deal was the gigabyte of storage. Of course, a
gig is a lot of storage space, especially when compared to most quotas for
other web-based email services such as Yahoo and Hotmail (Yahoo has since
upped its quota to 100 MB) , but I have been using Outlook (I know - many
don’t like this program, but I have never had any problems) as a
mail/contacts/calendar manager for a long time, and I tend to POP my mail.
That means I have lots and lots of gigs for mail, because everything just goes
to my hard drive.&lt;/p&gt;
&lt;p&gt;After doing a little more reading, though, I discovered that GMail actually
had a really spiffy interface, was fast, and introduced some really cool ways
to categorize, sort, and store your email. It makes sense, really. If I am
Google, and I want to introduce a new service, I first stop and think, “What
do we do really well as a company?” Obviously, in Google’s case, the answer is
searching. From there, I start thinking, “Email is the largest volume of
information most every person in the world has to try and keep organized.” If
I am Google, and I want to introduce an email service, I’d better be able to
leverage my strength in the search department to make it exciting. To really
leverage search capabilities, I need a large volume of email - hence the 1GB
quota. You see, I think that Google only offers 1GB of space because that is
what is necessary to really make GMail’s other features stand out. Other email
providers won’t be able to compete with GMail solely by increasing their
quotas, because that large volume of information introduces an organizational
problem that Google is better suited to solve. I think Google started looking
at ways they could leverage their search engine on email, and realized that
they needed a large email base to be able to provide that, not the other way
around. All in all, I decided I definitely needed to check it out, so I asked
a guy at work to hook me up with an account.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-interface&quot;&gt;The Interface&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Well, they weren’t kidding. GMail is fast (though I have’t tried it on a non-
broadband connection yet). GMail is spiffy-looking (very minimalistic, but
done well). GMail is useable. GMail is just &lt;strong&gt;cool&lt;/strong&gt;. As you can see from the
screenshot, there really isn’t a whole lot to the interface. Links on the left
to get to various classifications of email, emails displayed in the middle
with the standard checkbox to select them and a star to set them apart from
other emails (comparable to flags in Outlook), and some “action links” along
the top and bottom of the message display. Nothing terribly groundbreaking,
but this is email, not rocket science.&lt;/p&gt;
&lt;p&gt;Before I could really take a look at things, though, I needed some emails.
That become my first problem. I first set up my @iit.edu account to forward to
both my @tylerbutler.com and @gmail.com accounts. I thought this was working -
but it wasn’t. In fact, for an entire weekend, I got no emails forwarded from
my @iit.edu account, because the stupid webmail IIT uses didn’t properly parse
the delimiter between the two addresses (I’ll save that rant for another time,
I guess). I was confused at not getting any email (save the spam that came in
directly to my @tylerbutler.com account), but I just figured nobody loved me.
Stranger things have happened, after all.&lt;/p&gt;
&lt;p&gt;Anyway, I finally managed to get some email into GMail, and was happy to see
that things looked like I expected - sort of. The most exciting thing to me
about GMail was the concept of conversations. Each email is displayed in the
context of other emails sent from you back to someone, or from them back to
you. For example, if Brad writes me an email, then I respond to him, our
emails will be grouped and displayed together as a conversation. This makes
sense, since many times emails follow a threaded conversational format. For
personal emails, conversations are great.&lt;/p&gt;
&lt;p&gt;One of the quirks with conversations that I’ve noticed is that they’re
displayed as “Brad, me(2).” This means, of course, that this conversation is
between Brad and me, and that there are two emails in the conversation. But
who is Brad? I would much prefer if the last names were listed. I know lots of
people, and to me, first names alone don’t help a whole lot for descriptive
purposes. I have a conversation between myself and two other people, both
named Kyle. GMail displays the conversation as “Kyle, Kyle, me.” It’s
confusing which Kyle each is referring to. I imagine this could get even more
confusing as I get more and more email into my inbox. Also, some of my
professors use Dr. X as their outgoing name. Conversations with these people
are displayed as “Dr., me(3).” This particular quirk consistently makes me
laugh, so it’s all good.&lt;/p&gt;
&lt;p&gt;Another problem I have with the GMail interfce is that it doesn’t display full
email addresses in the “from” field when a name isn’t specified. In the case
of personal emails, this isn’t usually a problem, but I get a lot of automated
emails from addresses like &lt;a href=&quot;mailto:support@domain.com&quot;&gt;support@domain.com&lt;/a&gt;. These emails simply display as
from “support,” while in Outlook they always displayed as
“&lt;a href=&quot;mailto:support@domain.com&quot;&gt;support@domain.com&lt;/a&gt;.” In this case, I think GMail should opt to display it the
way Outlook does, and display the email address when a name field isn’t
specified.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#contact-management&quot;&gt;Contact Management&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GMail does a decent job with its contacts/address book functionality. It
contains fields for name, email, and notes, and it provides an import utility
that can read Comma-Separated files. I exported my Outlook contacts to a CSV
file and easily imported them all into GMail. Interestingly, all the
extraneous fields were placed into the Notes field, so the data is still
visible. I definitely don’t want to lose that information (addresses, instant
message names, even some birthdays), so I am glad that GMail tries to keep it
available in some format. Fortunately for me, &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.plaxo.com%2F&quot;&gt;Plaxo&lt;/a&gt; handles my address
book now, so it’s all backed up and available online anyway.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#a-monumental-decision-a-bit-of-a-segue&quot;&gt;A Monumental Decision (a bit of a segue)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Initially, I thought GMail would be a great supplement to my mobile
lifestyle — I could keep mobile copies of all my email, plus test out this new
conversational mode and see what it was like. So I downloaded &lt;a href=&quot;http://jaybe.org/info.htm&quot;&gt;Pop Goes the
GMail&lt;/a&gt;, a utility that allows you to fetch your GMail from any POP email
client, including Outlook. Unfortunately, the version I downloaded just didn’t
work for me (known bug), and I couldn’t find an old version (links that said
they were for the older version actually linked to the new one), so I gave up.
But that got me thinking - is there really any reason I want to stick with
Outlook, other than to have access to all my old emails? I thought about the
other functionality Outlook provides that I use: Contact Management and
Calendaring. Well, Plaxo takes care of my contact management, and GMail has
copies of all the email addresses already, since I uploaded the CSV file. I’ve
been thinking for a long time about switching my calendaring to an online
format anyway, since I don’t use Exchange, but I would like to allow my
parents and other interested people see my schedule. I really wish I could get
iCal for Windows, but since I can’t, I plan to use the calendar on this
website.&lt;/p&gt;
&lt;p&gt;Between GMail, Plaxo, and Geeklog, I have a total online replacement for
Outlook! So having made the decision to switch over to GMail completely, I set
about making the transition.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#the-transition-begins&quot;&gt;The Transition Begins&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Initially, I thought I’d just use Outlook to access my old email. But then I
started thinking that the conversation viewing would be much more useful if I
ha all my old email available. A quick visit to Google produced a link to
&lt;a href=&quot;http://www.marklyon.org/gmail/default.htm&quot;&gt;Mark Lyon’s GMail Loader&lt;/a&gt;, an application that will forward email from an
MBOX file to a GMail account. Perfect! Only one problem - it doesn’t support
PST files, which is what Outlook uses. Mark provides some great links to
utilities on his site, but the PST -&amp;gt; MBOX converter doesn’t support Outlook
2003’s PST format - in fact none of the ones I found did. So I was forced to
import things folder by folder into Outlook Express, then convert the OE DBX
files into MBX files using the utility Mark linked to on his site,
&lt;a href=&quot;http://people.freenet.de/ukrebs/dbxconv.html&quot;&gt;DBXConv&lt;/a&gt;. Then, just for good measure, I ran &lt;a href=&quot;http://www.marklyon.org/gmail/cleanmbox.zip&quot;&gt;MBox Cleaner&lt;/a&gt; on the MBX
files. This process is time consuming - especially for my thousands and
thousands of emails. In fact, I am still working on this part.&lt;/p&gt;
&lt;p&gt;I decided to go ahead and split things up a bit so that I could test the
upload through GML and make sure things were working. GML uploaded everything
I gave it fine, but it is kind of slow, and GMail is even slower at displaying
the messages after they’re sent. I am sure this has something to do with the
sorting and scanning (for advertisement targeting, more info below), but it is
kind of annoying. I am really paranoid, so I keep track of the number of
emails I uploaded, and I don’t start uploading a new batch until I’ve
confirmed that all the mail from the pervious batch arrived. Thus far,
everything seems to be working fine, albeit a bit slowly.&lt;/p&gt;
&lt;p&gt;As far as Mark’s GML is concerned - it is a nifty little program. Two things,
though. Most importantly, the emails that you upload to GMail will be
timestamped when they actually arrived at GMail, not when they were initally
received. This is kind of annoying, since I would prefer everything to be in
order, but I don’t think it’s Mark’s fault - I think it’s a limitation in the
way he has to interface with GMail right now. Maybe once GMail goes live,
there will be a better way to import old email. I am keeping my imported mail
under a special label just in case I want to delete it and reimport it later.&lt;/p&gt;
&lt;p&gt;Second, GML is written in Python, which is &lt;strong&gt;really cool&lt;/strong&gt;. Despite this,
though, it uses TK instead of wxPython - what is Mark thinking?!&lt;/p&gt;
&lt;p&gt;Well, let’s get back to the GMail specific stuff, before I lose those of you
came here for a GMail review completely.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#organizing-your-mail&quot;&gt;Organizing Your Mail&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GMail offers great search capabilities, yes, but you’ll probably want to be
able to sort your mail in some way. Traditionally, this has been done with
Folders, which mirror the file system setup by allowing you to place emails in
a heirarchical structure. GMail’s sorting method is done through Labels. Every
message can be labelled multiple times, and then recalled easily by sorting
based on the labels. It’s very cool, since there are many times when emails
fit into one or more categories. As an example of what labels are like, think
about this: A Ford Taurus is a car, but it is also a vehicle. If I search for
“cars,” I want the Taurus to be found. But if I search for “vehicles,” I want
to see the Cadillac Escalade and the Taurus. Just because the Taurus is a car
doesn’t mean it stopped being a vehicle. Labels allow this multiple
classification, while traditional folders do not.&lt;/p&gt;
&lt;p&gt;It is possible to delete mail from GMail, but it is discouraged. “Archiving”
is the preferred way of getting emails out of your inbox. Archived mail
doesn’t display in the inbox, but can be labelled, and it always can be found
by selecting the “All Mail” category. If you’d prefer to delete messages, you
can move them to the Trash (More Actions -&amp;gt; Move to Trash), which is emptied
automatically every 30 days, or you can manually empty it if you’d prefer.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;As is to be expected, GMail’s search functionality is very good. It’s also
fast, especially when compared to Outlook’s horribly slow search function.
Searching email is pretty easy, though I wish the “Search the Web” wasn’t so
close to the Search Mail button. If you prefer to further customize and refine
your search, simply expand the search options box and customize away.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#filters-and-spam&quot;&gt;Filters and Spam&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you want to filter incoming mail automatically, GMail can do it. It’s a
pretty standard filtering system that allows you to label email based on
content, sender, or other information. Filters are especially useful for
mailing list subscribers. You can choose to have email automatically archived
after it is filtered, or you can choose to have it kept in your inbox. Each
Label on the left shows how many unread emails are contained in it, so you can
quickly tell if a new filtered email arrived even if you choose to have it
automatically archived. (A note on the “archive” term. I understand what
Google is trying to imply, but I think the archive term is misleading. When I
think archive, I think, “Saved somewhere, but a pain to get to.” In GMail this
simply isn’t the case. Archived email is as fast to access and find as other
mail, it simply doesn’t sit in your inbox any more.) One really nice thing
about the filter is that it lets you “run” it on the email already in your
account so that you can make sure the parameters you’ve set in the filter are
going to work properly.&lt;/p&gt;
&lt;p&gt;GMail also includes an always-on automatic spam filter. It seems to do a
pretty good job, though it is certainly wrong every once in awhile. It has
made a lot more mistakes with the mail I have been importing from Outlook than
with my new mail. I am not sure why that is. It is easy to classify mail as
spam and vice-versa by selecting messages and clicking the appropriate button
(see the screenshot). I am not sure if these classification changes you make
are stored somewhere or affect the spam filter in any way. I’d like to think
that it does, and if GMail’s using a Bayesian filter, it’s likely. I’m sure
they probably have a database of known spam senders and use that in
conjunction with Bayesian filters. That’s all just speculation of course. The
bottom line is, it works pretty well.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#suggestions&quot;&gt;Suggestions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GMail is currently in beta, and considering that, it’s in pretty good shape.
There are several things I’d like to see in the “final release,” so to speak.
Some of them I’ve already mentioned, but I’ll include them here just so this
list is more comprehensive.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#spam-count-display-now-supported-in-gmail&quot;&gt;Spam Count Display (Now supported in GMail!)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Currently GMail doesn’t display the number of spam messages in the spam box
like it does for the Inbox and Labels, even if the Spam box contains new
messages. I like to filter through my spam manually just to be sure there’s
nothing there that got misclassified, and I’d like to be able to tell if there
are any new messages there without opening the spam section.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#accurate-message-count&quot;&gt;Accurate Message Count&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Currently GMail displays the total number of conversations in a box, not the
total number of discreet messages. I’d like both, or at least a place where I
can toggle it on or off. Since I’ve been importing a lot of email, I’d like to
know how many messages I’ve got, not conversations. I think this would be
trivial to include, and would be very useful.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#conversations-toggle&quot;&gt;Conversations Toggle&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I’m not sure if this would be too difficult to do, but I would like
conversation mode to be toggle-able. There are some types of email that it is
simply better to have messages as discreet items. It’d be nice if this could
be toggled based on labels, so some labels would have conversations and others
wouldn’t, but I’d settle for a global toggle if I had to.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#name-display&quot;&gt;Name Display&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;I mentioned this earlier, but I’d like conversations displayed with full
names, and I’d like emails without the name field filled in displayed as
“&lt;a href=&quot;mailto:address@domain.com&quot;&gt;address@domain.com&lt;/a&gt;”, not just “address.” I’ve put an edited screenshot to the
left.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#official-message-import-method&quot;&gt;Official Message Import Method&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Mark’s GML is a great solution, but because it forwards mail using SMTP, the
timestamps are all messed up. I’d like to see an official import mechanism for
GMail that solves this problem and might work a little faster. I think
allowing people to get their old mail in GMail will convert a lot more people
to using it full time as I plan to. It doesn’t have to support PST files (in
fact, I’d rather it didn’t), but MBOX support would probably be the best place
to start. I think that the server load might be pretty high when such a
service starts, as hundreds of people will be trying to upload hundreds of
gigs of email. So it might be best to have a sign-up system of some sort,
where you provide users with a window of time that they can upload email.
Basically, users would need to set up an appointment, sort of like setting up
time on a server farm. I’d gladly do that, especially if it meant I would get
faster upload service.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#simpler-label-removal-added-june-12-2004-now-supported-in-gmail&quot;&gt;Simpler Label Removal (Added June 12, 2004) (Now supported in GMail!)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As it is right now, you can only remove labels from conversations by opening
up the label group and selecting messages within that context. I’d like there
to be a box that is basically the same as the “Add Label…” box, but removes
labels instead. Whenever messages are selected, no matter what the context,
that box gets populated with the labels that currently apply to the selected
messages, and by selecting a label from that box, the label is removed. It
might make more sense to do a different GUI design for this functionality,
rather than having two separate boxes, but there just has to be a simpler way
to remove labels - especially since I often mislabel emails and need to fix my
own mistakes.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#mailing-list-delivery-options-added-september-22-2004&quot;&gt;Mailing List Delivery Options (Added September 22, 2004)&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;While I am very glad to see some of my earlier suggestions added (see above),
there is one absolutely horrendous “feature” of GMail that I just noticed
recently that is driving me bonkers. Luckily, I did find out that this is
expected GMail behavior, and I am not just being dumb. The problem is this:
When I send a message to a mailing list, my mailing list processor (MailMan,
for the record), modifies the subject and then sends a copy of the email on.
This subject modification is very useful for automatic sorting of mailing list
mail. Also, MailMan (and other mailing list managers, I’m sure) have an option
for every list subscriber that allows them to decide whether they want to
receive a copy of the emails they post to the list or not. I &lt;strong&gt;always&lt;/strong&gt; leave
this option on, for several reasons. One, I want all mail from a list in one
folder (or in GMail’s case, under one label). Manually moving my emails that I
sent into that folder/label is a pain. Second, I want to quickly search all
email with &lt;strong&gt;[ipro305]&lt;/strong&gt; in the subject quickly - that’s a fast way to only
search for IPRO mailing list mail. Yes, GMail offers superb searching
capabilities that would probably let me get around this, but frankly, I just
want to do it my way. The version of the emails that GMail saves (in my Sent
Mail label) do not have that subject modification. **Arggggghhhhh! **&lt;/p&gt;
&lt;p&gt;Finally, this breaks one of my major rules of email - never &lt;em&gt;ever&lt;/em&gt; &lt;strong&gt;ever&lt;/strong&gt;
deny a message without telling the user. MailMan is sending out the copies of
my email back to my account (I verified this) - GMail simply doesn’t put them
in my box - anywhere. Apparently they’re gone, because it is assumed that the
copy saved in my Sent Mail label is enough. I don’t like server-side spam
filters for the same reason (if GMail automatically deleted mail it classified
as spam I’d be incredibly annoyed - sorting it and then letting me make
adjustments is OK though). If my account receives an email, it should be put
in my account &lt;strong&gt;somewhere&lt;/strong&gt;, no exceptions. Here’s hoping this gets changed or
can be disabled on a per-user basis at the very least.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#one-caveat&quot;&gt;One Caveat&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In case you haven’t heard, GMail is ad-supported. This isn’t all that
surprising, considering most free webmail services are ad-supported. GMail is
much more discreet than other webmail providers, though. See the screenshot to
the right for an example of GMail ads. These ads are displayed just to the
right of the email contents, and are in relatively small font, as you can see.
GMail’s ads are also targeted based on the content of the email. This means,
of course, that the contents of the email is scanned automatically and ads are
chosen based on the content of them email. The example ads to the right were
displayed next to an email regarding Biblical scripture to be read at a
wedding.&lt;/p&gt;
&lt;p&gt;Some people have expressed concern about the privacy of their email,
especially since GMail scans it. I guess I sort of understand where they’re
coming from, but people need to realize that email is a very insecure medium
anyway, and that sensitive or private matters shouldn’t be handled through
email. I believe Google when they say they’re not seeing this info and that
it’s all automatically done by their system. I also trust them to keep their
system secure so nothing is compromised. Google has some very talented,
intelligent people working for them, and they’ve given me no reason to doubt
them thus far. If you’re interested in what the link “About these links” in
the screen shot says, go to
&lt;a href=&quot;http://gmail.google.com/support/bin/answer.py?answer=6603&quot;&gt;http://gmail.google.com/support/bin/answer.py?answer=6603&lt;/a&gt; and see for
yourself what Google says about the ads and their commitment to privacy and
taste.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#final-thoughts&quot;&gt;Final Thoughts&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;GMail is an awesome webmail system, even though it is still in beta. Even
without the features I requested above, it is still a very useable, very
comprehensive system. I am looking forward to continuing to use it for as long
as I can, and I hope to be able to completely switch over to it in the near
future.&lt;/p&gt;</content:encoded></item><item><title>Etymology Dictionary</title><link>https://tylerbutler.com/etymology-dictionary/</link><guid isPermaLink="true">https://tylerbutler.com/etymology-dictionary/</guid><description>Etymology Dictionary</description><pubDate>Mon, 05 Jul 2004 15:26:00 GMT</pubDate><content:encoded>&lt;p&gt;Haha, just kidding. Seriously, though — Ricardo sent me this link to an online
etymology dictionary. I haven’t had a chance to look at it as in depth as I’d
like, but I hope to over the next week or so. Looks like it could be a really
useful resource. Gosh, I turn out more like my dad every day…&lt;/p&gt;</content:encoded></item><item><title>Comfortable</title><link>https://tylerbutler.com/comfortable/</link><guid isPermaLink="true">https://tylerbutler.com/comfortable/</guid><description>Comfortable</description><pubDate>Tue, 15 Jun 2004 07:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Money can’t buy happiness, but it can make you awfully comfortable while you’re being miserable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Clare Boothe Luce&lt;/strong&gt;, &lt;em&gt;Socialite&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Impressing Your Friends</title><link>https://tylerbutler.com/impressing-your-friends/</link><guid isPermaLink="true">https://tylerbutler.com/impressing-your-friends/</guid><description>Impressing Your Friends</description><pubDate>Tue, 15 Jun 2004 07:00:00 GMT</pubDate><content:encoded>&lt;p&gt;From &lt;em&gt;An Introduction to the Theory of Traveling Waves&lt;/em&gt;, by Erwin Weber:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;/blockquote&gt;</content:encoded></item><item><title>Site Transfer Almost Complete</title><link>https://tylerbutler.com/site-transfer-almost-complete/</link><guid isPermaLink="true">https://tylerbutler.com/site-transfer-almost-complete/</guid><description>Site Transfer Almost Complete</description><pubDate>Tue, 15 Jun 2004 04:54:00 GMT</pubDate><content:encoded>&lt;p&gt;I am almost done transferring all of the content from the old tylerbutler.com
site to the new format. There are still some sections that I am working on,
but it should be done pretty soon. As you can see, the new stuff is now at the
root of the site. The old site is still visible at &lt;a href=&quot;/link-not-available?url=http%3A%2F%2Fwww.tylerbutler.com%2Foldsite&quot;&gt;http://www.tylerbutler.com/oldsite&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Firemen</title><link>https://tylerbutler.com/firemen/</link><guid isPermaLink="true">https://tylerbutler.com/firemen/</guid><description>Firemen</description><pubDate>Fri, 04 Jun 2004 06:07:00 GMT</pubDate><content:encoded>&lt;p&gt;As I was walking home for my lunch break today, I noticed a car that had
broken down in at a stop light, slowing traffic down and bringing out the
worst in many Chicago drivers that happened to be stuck behind the car. As I
walked by, a fire truck passed through the intersection, pulled over, and
three firemen and a paramedic got out and helped the man push his car out of
the intersection.&lt;/p&gt;
&lt;p&gt;No one called the fire department — they were just on their way back to a
station, saw someone in need, and helped him. They didn’t have to. No one
would have thought anything of it if they had just driven on by, but they
didn’t. It’s nice to see that people still help each other out. Is it possible
I’m just surrounded by the only self-centered, egotistical people in the
entire world here at Illinois Tech? Nah, I’m sure they’re everywhere, but
thankfully, so are fire fighters.&lt;/p&gt;</content:encoded></item><item><title>Wait, Matches Burn?</title><link>https://tylerbutler.com/wait-matches-burn/</link><guid isPermaLink="true">https://tylerbutler.com/wait-matches-burn/</guid><description>Wait, Matches Burn?</description><pubDate>Sun, 30 May 2004 12:08:00 GMT</pubDate><content:encoded>&lt;p&gt;Apparently, K-Mart has recalled some Martha Stewart brand matches because they
&lt;strong&gt;“may ignite upon impact.”&lt;/strong&gt; Nope, I am not kidding. It is really
unbelievable that a retail store has to be &lt;strong&gt;this&lt;/strong&gt; frightened of lawsuits to
do this. Can we all just agree to stop being stupid so stuff like this can
stop happening? Please? With sugar on top?&lt;/p&gt;</content:encoded></item><item><title>All I Said Was Comiskey Park!</title><link>https://tylerbutler.com/all-i-said-was-comiskey-park/</link><guid isPermaLink="true">https://tylerbutler.com/all-i-said-was-comiskey-park/</guid><description>All I Said Was Comiskey Park!</description><pubDate>Sat, 22 May 2004 02:50:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been meaning to write for awhile about my outrage over Comiskey Park
(where the White Sox play; it’s only a couple blocks from my house) becoming
US Cellular Field. When the change initially took effect, there were many
radio personalities, especially sportscasters, who said they were going to
keep calling it Comiskey. That lasted until someone (no doubt US Cellular’s
lawyers) got angry and started suing people. At one point, I think (this has
not been verified, so take it with a grain of salt), the FCC started levying
fines when someone said “Comiskey Park” in reference to “US Cellular Field,”
just like how they fine stations when they slip up and broadcast “illegal”
words over the air.&lt;/p&gt;
&lt;p&gt;Anyway, the outrage I feel at renaming a historic sports landmark to something
as ridiculous as US Cellular field may seem unwarranted. But for all you
baseball fans out there, how would you feel if Wrigley Field became Wrigley
Juicy Fruit Gum Arena, or even worse, Spider-Man 2 Movie Coliseum? The problem
is the perversion of our social culture by advertising. There’s an article
over at k5 that nearly made me cry (out of agreement with what the guy was
saying, not sadness or happiness). Finally, someone else who feels the way I
do. I mean, one of the main reasons I built my own web server was so that I
didn’t have to host my site somewhere where they advertise all the time. I use
Mozilla Firefox as my browser so the pop-ups don’t bug me. If slashdot and k5
wouldn’t advertise, I think I’d like them even more. I absolutely hate static
advertising. Why does everything &lt;strong&gt;have&lt;/strong&gt; to revolve around money?&lt;/p&gt;
&lt;p&gt;Interestingly, when I bring this up in conversation, most people I talk to
seem opposed to the idea (though admittedly not as vehemently as I am). So why
aren’t we fighting this sort of thing? Does our apathy and laziness truly run
that deep? In the end, I am forced to ask the age-old question: Is nothing
sacred?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kuro5hin.org/story/2004/5/5/165728/6687&quot;&gt;http://www.kuro5hin.org/story/2004/5/5/165728/6687&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Oh, and I am trying to buy the domain savecomiskey.org, and hope to develop a
site where people can speak out against the evils of advertising. Maybe we
could even buy out US Cellular’s share of Comiskey! Then we could call it
whatever we want, right? I mean, money talks… If you’re interested in
helping me out, drop me an email.&lt;/p&gt;</content:encoded></item><item><title>The drugs, the drugs...</title><link>https://tylerbutler.com/the-drugs-the-drugs/</link><guid isPermaLink="true">https://tylerbutler.com/the-drugs-the-drugs/</guid><description>The drugs, the drugs...</description><pubDate>Fri, 21 May 2004 12:03:00 GMT</pubDate><content:encoded>&lt;p&gt;“Wow,” was all I could say after reading this article. For those of you who
are unaware, a MUD is an online multi-user game. (There is a MUD FAQ at
&lt;a href=&quot;http://www.mudconnect.com/mudfaq/&quot;&gt;http://www.mudconnect.com/mudfaq/&lt;/a&gt;) Anyway, the game in question is
Achaea, a text-based MUD. It seems that the creators of the game introduced a
highly addictive substance, called “gleam,” into the game environment, and
players’ characters quickly became addicts. The benefit of using gleam is an
increase in the character’s dexterity, but players who are suffering from
withdrawals after becoming addicts and trying to quit are paying a high price:
it can take up to 25 hours of in-game time to recover from gleam addiction.
Maybe people will learn from this virtual experience? Nope, didn’t think so…&lt;/p&gt;</content:encoded></item><item><title>Unproduced Screenplays</title><link>https://tylerbutler.com/unproduced-screenplays/</link><guid isPermaLink="true">https://tylerbutler.com/unproduced-screenplays/</guid><description>Unproduced Screenplays</description><pubDate>Fri, 21 May 2004 08:10:00 GMT</pubDate><content:encoded>&lt;p&gt;Interesting stuff from some pretty big names. I haven’t read it all yet, but
I’m hoping maybe some of it will provide some fuel to get my own creative
juices flowing so I can write something of my own for &lt;strong&gt;Keygrips&lt;/strong&gt;. Anyway,
the link is &lt;a href=&quot;http://www.kuro5hin.org/story/2004/5/8/73755/86297&quot;&gt;http://www.kuro5hin.org/story/2004/5/8/73755/86297&lt;/a&gt;. Enjoy!&lt;/p&gt;</content:encoded></item><item><title>From Diary to Blog</title><link>https://tylerbutler.com/from-diary-to-blog/</link><guid isPermaLink="true">https://tylerbutler.com/from-diary-to-blog/</guid><description>From Diary to Blog</description><pubDate>Fri, 21 May 2004 06:32:00 GMT</pubDate><content:encoded>&lt;p&gt;Well, as you can see because you’re here, my diary has been moved here to a
blog. The word “blog,” for all of you not well-versed in Internet terminology,
is short for Web Log. A Blog is basically an online journal or diary where
people (in this case, mainly me) can post their thoughts, links to cool
things, etc. I started a diary last summer, but I didn’t keep it very updated,
and once school started up, I actually forgot all about it. Now summer is here
again, and I am bored out of my mind. I tend to read a lot more now, because I
am so bored, and because of this, I have a lot more things that I want to
respond to. Also, because it is summer, many of my friends are gone, so I have
less people to talk to. So this blog gives me something to do. Also, a blog is
really cool because it allows people to post comments. So if you’re a friend
of mine, or even a complete stranger, and you have something you want to say,
post a comment in response to one of my posts! Anyway, that’s about it.&lt;/p&gt;</content:encoded></item><item><title>Never A Dull Day</title><link>https://tylerbutler.com/never-a-dull-day/</link><guid isPermaLink="true">https://tylerbutler.com/never-a-dull-day/</guid><description>Never A Dull Day</description><pubDate>Wed, 02 Jul 2003 00:37:00 GMT</pubDate><content:encoded>&lt;p&gt;How often are you contentedly watching a movie in your comfortably air
conditioned room, when a friend (Matt Cerney, for the record) throws your door
open and yells, “Dude, the projects are on fire!” Welcome to my life. Never
dull, that’s for sure. By the time Ricardo and I got out there, it was mostly
just billowing smoke. I still haven’t heard exactly what happened, or if there
were fatalities or injuries. Nevertheless, running outside was the most
exercise I’d gotten in awhile, and Matt’s expression as he opened the door to
my room almost made the whole experience worth it in and of itself.&lt;/p&gt;</content:encoded></item><item><title>April 16, 2002</title><link>https://tylerbutler.com/april-16-2002/</link><guid isPermaLink="true">https://tylerbutler.com/april-16-2002/</guid><description>April 16, 2002</description><pubDate>Wed, 17 Apr 2002 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;What follows is the account of Tyler Butler’s amazing transformation from
ordinary university student to super-sleuth…&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#saturday-april-13-830pm&quot;&gt;Saturday, April 13, 8:30pm&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;While on the way to get food, Tyler’s beloved 1986 Nissan Maxima gives out at
the stoplight at 35th Street and Wallace Ave. in Chicago, IL. The engine emits
loud squealing noises, sparks, and black, burning-rubber-smelling smoke.
Fearing the worst, Tyler calls his friend Tom Hennigan, a Chicago native, to
come pick him up and figure out what to do with the car. Tom arrives, and the
two decide to push the car into a parking space and leave it — it is already
too late to call a trustworthy mechanic and tower, and they won’t be available
until Monday anyway. The safest and best course of action seems to be to push
the car into a parking space and wait until the weekend ends.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#sunday-april-14&quot;&gt;Sunday, April 14&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tyler goes to church in the suburbs, as per usual. He can’t really do anything
about his car until Monday, anyway.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#monday-april-15&quot;&gt;Monday, April 15&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Tyler discovers that Tom Hennigan has broken his foot, and needs to go to the
hospital, and that his parents are in Arizona until next weekend. He can’t
remember the name or address of Tom’s family friend, the mechanic that worked
on the car last time. He finally reaches Tom about 5:30pm, and gets the name
of the mechanic’s shop. Consultation of the Chicago-land Yellow pages reveals
the phone number of Southwest Auto; a quick phone call to them and
arrangements are made. A number to a towing company that is trustworthy and
works with Southwest is given to Tyler, and he promptly calls them to make
arrangements. Because it is 6:15 by now, the tow driver is on his way back
home from his final tow for the day. He is willing to come out, but would
rather not. Tyler figures his car has already been there for two days, and
it’s not going to matter if it’s there for another night.&lt;/p&gt;
&lt;h2&gt;&lt;a href=&quot;#tuesday-april-16&quot;&gt;Tuesday, April 16&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;&lt;a href=&quot;#1045pm&quot;&gt;10:45pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler calls the tower, and arranges for the pickup that day at noon. He finds
a friend to drive him to the location to meet the tower with the key and
information. They arrive where the car is supposed to be parked, and it’s
GONE. Uh-oh. Dan drops Tyler at the corner to do some investigating, and goes
on to run some errands. Since the car was parked a block from the local police
station, and in a safe residential area (safe — relatively speaking…), Tyler
doubts very highly that it has been stolen, and has instead been towed by the
city. A visit to the police station confirms this. It seems that the seemingly
legal parking spot was not-so-legal, and that the car has indeed been towed by
the city. Tyler calls the Southwest tower and explains to him that he is no
longer needed at 35th and Wallace. The tower says to call him back when Tyler
finds the car, and that he’ll pick it up at the pound. Tyler thanks the man
and calls the number for the pound that was given to him by the police.&lt;/p&gt;
&lt;p&gt;The pound tells Tyler that without a License plate number, which Tyler doesn’t
have memorized (but does now!) or the 17 digit Vehicle Identification Number
(VIN), they can’t verify whether they have the car or not. Tyler thanks them
and goes home.&lt;/p&gt;
&lt;p&gt;Internet research suggests that the Tennessee Department of Motor Vehicles
will probably have the License plate number on file, so Tyler calls them.
Unfortunately, the woman who would be best suited to help him is out on lunch
break. Tyler thinks for a moment, and then remembers that the University
parking services should also have a record of his license plate number. A call
to them confirms this, and Tyler gets the plate number.&lt;/p&gt;
&lt;p&gt;He calls the pound back, and they say they don’t have record of a car with
those plates being impounded. Great. More internet research indicates that
while it is possible to get a VIN from a plate number, it is time consuming
(10 days) and there is a fee involved ($10). Tyler’s roommate, Jacques,
overhearing the situation from Tyler’s phone conversation, picks up the phone
and calls his mother in Iowa. She works at a local Sheriff’s Office, and at
Jacques’ request, runs Tyler’s license plates and secures the VIN and Title
number. &lt;em&gt;(Amazing — it took less than 30 seconds, but don’t ask me if it was
legal or not…)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Armed with the VIN, Tyler calls the pound back. To his disgust, neither the
VIN nor the plate number yields any results. Tyler takes a break and goes to
lunch.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#130pm&quot;&gt;1:30pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler tries to get a ride back to the 35th street police station, but everyone
has class. He finally text messages Tom Hennigan’s cell phone, since Tom is in
class, asking what police district IIT is in. Tom messages back, and Tyler
does more internet research to find the correct phone number for the station.
A call to that station verifies what Tyler suspects — he was given the wrong
pound and phone number.&lt;/p&gt;
&lt;p&gt;Tyler calls the new pound and gets the address and pound inventory number of
his car. He is told that he can pay the $180 tow and storage fee by either
credit card or cash. He calls the Southwest tower and asks him to meet him at
the pound at 3:00. The tower agrees, and Tyler asks his friend Aaron to drive
him to the pound.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#245pm&quot;&gt;2:45pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler finally finds the pound — after walking five blocks in circles. He walks
in and stands in line. The tower calls at 3:15 and says he has arrived. Tyler
still hasn’t gotten to the front of the line. He tells the tower he should be
done shortly. The tower says he’ll wait.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#345pm&quot;&gt;3:45pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler finally gets served at the pound. However, because the car is titled
under his mother’s name, he is unable to pay using credit. He has only $70 on
him. The pound people direct him to an ATM, but Tyler is unsure whether he has
enough in his account to pay for the car. He walks outside, meets the tower,
and explains the situation again. The tower agrees, in infinite patience, to
wait while Tyler gets the money.&lt;/p&gt;
&lt;p&gt;The instructions to the ATM yield no results, and Tyler is forced to walk two
blocks to the Sheraton Hotel, where the Concierge directs him to an ATM.
Luckily, the monthly rent check has not yet been deposited, and Tyler does
indeed have enough money in his account to pay for the car. He makes the
withdrawal, and runs back to the pound. The tower is still waiting, and Tyler
goes, once again, to the end of the line.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#415pm&quot;&gt;4:15pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler finally gets served at the pound again. The man signs his form, and
explains that he will have to go to the cashier now to pay. Gee. How nice.
What a smooth operation. He is second in line to the cashier, but she is
“busy” doing something else at the moment, and he is forced to wait for 15
more minutes.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#430pm&quot;&gt;4:30pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tyler finally gets the necessary paperwork done, and meets the tower outside
to go get the car. The security guard explains that he cannot admit a tower to
get the car without an additional signature from someone inside. Tyler, not
surprised at all at this point, heads back inside, prepared for another 30
minute wait. How the tower manages to maintain his patience is beyond Tyler.
Luckily, one of the men who can sign the tow form is outside, and signs the
form almost immediately, negating the need for Tyler to go back inside.&lt;/p&gt;
&lt;h3&gt;&lt;a href=&quot;#445pm&quot;&gt;4:45pm&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The car is finally found in the lot, and the tower puts it on the truck. Tyler
tests it before it is put on the truck, and surprisingly, it starts and
doesn’t seems to have any problems. However, he’s come this far, so he might
as well get it checked out. He tells the tower to go ahead and put it on the
truck, and the tower goes on his way — finally.&lt;/p&gt;
&lt;p&gt;Aaron has returned home already, so Tyler decides to decline his offer to come
back in and pick him up, and instead walk to an El station. Tyler doesn’t
realize he’s far away from an El station, and it takes him another 10 blocks
to find one. Finally, though, he makes it home.&lt;/p&gt;
&lt;p&gt;And so, as you can see, with the proper amount of internet knowledge and
Sheriff’s Office Worker connections, anyone can be Sherlock Holmes. If only
Arthur Conan Doyle could see me now…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Tyler “Sherlock” Butler&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;</content:encoded></item></channel></rss>