Seattle

I don't really have anything to say about my trip to Seattle last weekend that the photos can't say for me. It was awesome and that's precisely what they say.

(And to think, I'll be out of the Northwest completely next weekend.)

I enjoyed driving there, I watched the Blue Angels practice a bit (again I have to ask, who in the world decided that closing the city's main East-West interstate for three hours was a good idea?), walked around the Seattle Center area (Space Needle and all), had some delicious Filipino food, hung around Pike Place Market, and got a chance to see a Mariners game at Safeco Field. (Over the course of 2-3 days; there's no way in hell I'd be hectic enough to cram that into one.)

View the slideshow or browse the photoset manually.

Select photos after the jump.

I'm pretty sure I captioned most of the photos, so click 'em if you want some context.

Columbia River / Wanapum Lake

  Low Flying Objects: Watch your head.  Needle n' Wheel

EMP

Pike Place Market

    Safeco Field

Safeco Field

Jim Edmonds is “!@#$% done with the Cardinals”

According to a messageboard post by Bernie Miklasz of the Post-Dispatch:

No, what he did was this, according to Mike Claiborne of KTRS:

When FSN's Brent Stover and Claiborne (KTRS) approached Edmonds after the game for a quickie on-field interview that has become standard procedure for MLB rights holders, Edmonds blew them off and said:

"I'm (censored) done with St. Louis TV and radio and I'm (censored) done with the Cardinals."

And then he walked into the Cubs dugout.

Me, I'd love to pretend the above never happened. I'd love to pretend that Jimmy ain't playing on the Cubs. You know, just relive 2004 all over again.
Jim Edmonds, 2004 NLCS home run

But no, that's not going to happen.

Jim Edmonds is dead to me. He's a Cub now. And an asshole. (I'll admit that I'd heard similar things about him while still a Cardinal, that I batted a blind eye to.)

(Stat update: As of the third inning today, Jimmy is batting 3-for-12 2-for-15 against the Redbirds -- both being home runs.)

Transit

In Seattle for the weekend. Staying with a Filipino family (old friends of my mom) and they're showing me around town. (Boy, did I miss Filipino food.)

Columbia River / Wanapum Lake

Above photo is one of those off-highway scenic view locations, this one overlooking the Wanapum Lake / Columbia River area, just west of a little town named George. (Which is home to the legendary Gorge Amphitheatre, by the way.) I didn't put two and two together until I saw the water tower for the town of George. Which is to say, George, WA. Which is to say, the town is named George Washington. You know, like the guy.

I mean, I guess Missouri has some pretty obnoxious place names -- i.e., Versailles, MO (pronounced ver-sales).

But I'm holding George Washington high on my list of obnoxiously named towns. Right up at the top with Missouri City, Texas -- a town that went so far as to even gank my fine home state's motto and call itself "The show me city."

And yes, after a mild hiatus, I'm taking photos again. I stopped for most of July since I left my camera battery charger in New Jersey after my trip over there and (as of yet) haven't bothered to get it sent back to me.

Blogmaking: Fun with Django newforms-admin

I've been developing in Django for the Spokesman-Review for just over a month and a half now on our super exciting new Web site project -- we most recently got a team together to churn out a replacement for our current blog platform.

A major issue we came across was the problem of multiple blog users on the single Django installation. The permissions setup was great, but wasn't granular enough for our needs -- it was impossible to filter out the admin panel to only display blogs that a particular staffer is assigned to. At least, without having to write our own blog-specific admin panel (or writing managers that plug into the existing Django admin panel -- yuck!).

Anybody that's anybody that follows Django development should have heard about the newforms-admin branch landing last Friday. Upon landing, the branch -- being a big, bulky, backwards-incompatible change -- brought about the big headache of having to tediously convert any Django trunk-based code.

But I'd been looking forward to it. Big enhancements in customization were the prime game-changing features.

I noticed a mention of extra hooks in the newforms-admin documentation.

  • has_change_permission and the related has_add_permission and has_delete_permission bits -- to specifically set up what users can do to models, based on any logic you want

  • more importantly, a queryset hook that allows you to filter out what is displayed to a user in the admin panel. The idea here is that you can be as granular as you want in displaying stuff to a particular user.

Here's a thrown-together example of how I'm planning on using these hooks, based on what I've played around with:

  • models.py -- The User foreign key and the permissions give us things to test for...
  • admin.py -- ... and the has_change_permission and queryset functions turn that into something useful.

I'm also using extra permissions ('access_all_posts' and 'access_all_blogs') in this example to provide extra permission to users and groups that might need the original (unfiltered) view -- editors, for example. (I'm also providing the same logic to superusers so they have full access all the time, of course.) In both queryset cases, the logic more or less follows such: I make sure to show everything to the people that are supposed to see it all; otherwise, filter out content to blogs that the current (logged in) user owns. Simple as that.

The full list of hooks and options isn't documented yet, but the model code can be looked at, to see for yourself.

This is a pretty rudimentary example, but the hooks are still poorly documented. For anyone with Python experience, the code itself shouldn't be difficult to understand. I'm sure that folks will find more interesting ways to use this, in time.

Update: Forgot to mention a few particulars with the Users you create.

  • The "Blog author" (lowest rank) user should receive the edit Blog permission and all (add, edit, delete) BlogPost permissions -- you wouldn't have to worry about users editing/deleting posts that aren't theirs, since you're limiting their view (via queryset) and limiting their permissions outside of the standard Django user permissions interface (via the has_change_permission and has_delete_permission hooks).
  • An "editor" user -- someone who should be able to access/change/edit all content -- should receive the standard permissions (add, edit, delete on Blog and BlogPost) but also the special 'access_all_blogs' and 'access_all_posts' permissions.
  • Site superusers won't need anything special, as far as I know.

The above applies to groups, as well. Hell, the "author" and "editor" roles can be turned into groups; you know, save yourself from the individual permission-assigning gruntwork.

Social Networking and News

For the past few weeks, I've been attending a series of staff roundtable discussions -- dubbed "iSalon" (or "Innovation Salon") -- that we have each Monday at the Spokesman-Review. This week, we discussed the changing landscape in the news industry, especially in regard to current restructuring at the newspaper. This was mostly in relation to Project for Excellence in Journalism study and a conference that our Editor (in chief), Steve Smith, attended last week.

Some major topics discussed included the variety of modern distribution platforms -- print, online, mobile phone, radio -- and the use of online communities and social media to extend the idea of journalism providing a public service to the community. (We've discussed the duality between "journalism as a product" and "journalism as a service" many times. I'll definitely write something on this some other time.)

That's all speculation, though. Another thing that happened today brings up an important question: What role do existing social networks and social media tools play in journalism?

The St. Louis Post-Dispatch linked to a slain firefighter's Facebook profile, leading to a deluge of criticism.

The arguments of whether Facebook classifies as a "legitimate source" or not, are moot. The stories and coverage regarding his death don't source Facebook outside of mentions of mourning and a photograph taken from his profile. From my own browsing through the Post-Dispatch site and reading through the stories, I don't believe they used the Facebook profile as coverage, as some claimed. This is not what I'm here to discuss or argue.

There are plentiful complaints that linking to the Facebook profile is disrespectful and that directing the public to view a "personal profile" is tasteless.

However, several comments to that Editor's Note remind me of something that college professors often remind students of: a public profile is public. It is legitimate (though some may say underhanded) for an employer to browse Facebook and make decisions on your character based on the information and photographs there. (Underage drinking, anyone?) The advice often amounts to, if you're making this public, then make sure it represents you, the way you want to be seen.

My point of view in this situation, as a person who occasionally dabbles in street photography is this: if it's in public view -- if you can get to it without jumping any hoops or trespassing on private property or otherwise breaking the law -- it's legitimate to mention. If the public can get to it, then it is within the rights of the news media to reference it.

A link to the man's Facebook profile and a link to a memorial Facebook group -- to me, this says, "this is who he was, and this is where mourners and well-wishers can leave a message for friends and family." I don't feel that this is in bad taste. I feel that this helps interested parties connect with others in a useful way -- isn't that part of journalism's mission to keep the community connected and informed?

So long as the coverage does not source Facebook as a primary source and so long as the Facebook profile and group links represent a way for the community to get in touch, I honestly don't see a problem with this.

Serious business

Internet memes are the backbone of online pop culture. They're those little phrases and concepts that take the Internet by storm, one IM at a time. They're like viruses, propagating throughout the collective consciousness of all those who "lol." But they've got to start somewhere.

And after finally figuring this out, the Wall Street Journal and Time Magazine both covered 4chan last week.

Don't know about 4chan? As the Time article puts it, "You may not realize it, but 4chan has probably touched your life. Possibly inappropriately." If you've heard of lolcats or if you've ever been Rickrolled, you've been touched by 4chan. If you've herd about mudkipz, you've been touched by 4chan. If you've noticed radical and vocal opposition to Scientology in recent months, you've been touched by 4chan. Says the Time article:

4chan is also very profane. A phrase from Star Wars comes to mind: It's a wretched hive of scum and villainy. Spammers don't even bother to spam 4chan; Google started searching it only six months ago. But it is the wellspring from which a lot of Internet culture, and hence popular culture, bubbles.

The articles covered 4chan in a much less sensationalized way than a Fox affiliate did last year. In fact, I'll say they both did a good job in covering such a strange, strange community.

It was revealed in those articles that "moot," the man behind 4chan, was 15 years old when he started the site. (This means that moot himself was breaking his own "no minors" rule on several boards. This also means that he's younger than me. Weird.)

But really, the biggest bomb was the revelation of moot's real name, which had been a well-kept secret all this time. Lev Grossman , the author of the Time article, put it thus:

Towards the end of the piece I mention moot's real name: Christopher Poole. I figure there's about a 5% chance that Christopher Poole is in fact not moot's real name but some incredibly filthy 4chan inside joke. I took the chance because in person moot/Poole comes across as a really nice guy, and if he was playing me he was doing a hell of a good job. But it turns out the Wall Street Journal has the same story -- had it shortly before we did, I think -- so if we're going down, at least we're all going down together.

Me? I'm taking it all with a grain of salt. This could easily be part of an elaborate trolling, and I think it speaks to the quality of Grossman's work that he, too, is treading lightly on it.

Boys of Summer

With nothing better to do after work today, I decided, on a whim, to walk over to the bus station and catch a bus to the ballpark. Why not? Today was opening day in the Northwest League, which the Spokane Indians are a member of. The Northwest League, along with the New York-Penn League, are short-season Class A league, where many fresh-out-of-college draftees end up.

Avista Stadium at game time was perfect. It was 74 degrees, breezy, and clear. Over the horizon, you could see the rolling emerald hills of Spokane County. Families were all over the place. Hot dogs were affordable. The joys of minor league ball: players having fun and working hard to get to The Show, gimmicks and side attractions every inning, and the quaint surroundings of the stadium itself -- the County Fairgrounds. A barn and grain silo sat directly over left field. More than anything, that defined the hometown feel.

Two families set up shop on either side of me -- 10 year olds, constantly asking questions and taking the game in. I stood over the right field fence, literally standing above the players in the bullpen. I listened to a couple of the players chat among themselves, in Spanish. I, of course, understood none of it.

At the start of the game, the Indians starter threw six straight balls, a couple of those by the catcher. The second batter struck out, though the baserunner stole his way to second, advanced to third on another wild pitch, and eventually scored. I watched one of the pitchers warm up through the second inning, standing and throwing literally five feet from my face. He came in to pitch after the starter threw another wild pitch to score an AquaSox run.

The Indians scored two in the bottom of the first. The PA announcer mentioned at some point that if the Indians score six runs or more during the game, everybody in attendance gets a free chalupa from Taco Bell. The folks around me were debating whether this meant six in one inning or six for the whole game. The Indians put this to rest by scoring six in the bottom of the fourth inning, capped off by a big home run by their DH. (The promotion was six for the whole game, heh.)

I left after the fourth inning (Indians leading 10-3), when the sun started sneaking past the horizon and the temperature started veering below 65. I forgot to wear a coat -- granted, I came here straight after work anyway, it's not like I'd planned for the event. Either way, it was getting chilly, it was still windy, and I wanted to get home before it got too dark.

Indians won, 15-3. Yay for my new home team, eh? Seriously, I needed a fix of some good ol' baseball, in-person. Fun game, good crowd, great weather, and hell -- I get a free chalupa out of it. Can't ask for too much more than that.

Photos are up. I'm particularly in love with this one and this one.

Greetings from Spokane

I may not be posting much in this blog, but damnit, I've got plenty of photos.

Review Tower Monroe St. Bridge / Spokane River Spokane Falls, Long Exposure
Riverfront Park

Yeah, I've been messing around with Photomatix Pro (for those HDR shots) and Autostitch to do the panoramic images. Gimmicky, but fun.

I'll most likely be updating that Spokane photoset throughout the summer, so keep checking that out for updates, I suppose.

___

Also of note is that my previous post, Small World, was picked up and mentioned by the STL Hops beer blog. Pretty sweet.

Small World

I owe you some stories from the first week, I know. I'll get to that later, though.

Feeling sick of my small (and spartan) apartment, I wander around town tonight, looking for something to do. I'd felt a bit too much of a stranger, just wandering downtown the past few days... Most of downtown just seems a bit too upscale for me — at least, on a night like tonight — so I go a bit off the beaten path: downtown, but not quite the city center. I stumble upon the Empyrean Coffee House, this little coffee shop / bar / music venue just a few blocks from where I live...

Really reminds me of the places I used to hang out at back home. You know, the Blue Fugue, or Lakota, or the Cherry Street Artisan... Soulful music — and by that I mean your smalltime touring musicians and local artists — really nice people, and a little artsy/cultured/counterculture (that's a weird mix, I know) feel to the establishment.

I walk up to the bar and get myself a beer. One man at the bar immediately notices the St. Louis Cardinals hat I'm wearing.
"Hey man, nice hat."

"Thanks."

"I love baseball. Nobody up here really seems to; hell, my bandmates usually give me crap for it, always talking about how boring it is."

The man's name is Luke — he'd played here solo earlier tonight, as part of a little tour he's doing through the Northwest. He lives in Montana but cheers the Cardinals because his folks all live in St. Louis. We shoot the shit as time passes by: his folks have season tickets, he watched one of the playoff games against the Mets back during that year we won the World Series...

"So where in St. Louis are you from?" he asks me.

"Florissant, that's up in North County."

"I know where that is, that's actually where my folks live."

"No shit?"

"On Lindbergh somewhere. I used to visit them every summer."

"Wow. I live right off New Halls Ferry, at the north part of the town."

He mentions hanging out at Jamestown Mall throughout his summers, until he "got beat up there one day." This is the same ol' ghetto Jamestown Mall that I grew up going to, where I got to know some of my closest friends today. Which leads us to a conversation on the whole place becoming a hole and the white flight problem all over St. Louis.

...At some point I mentally remind myself that I'm in Spokane, Washington — I'm nowhere near Missouri. But strangely enough, it's like home followed me straight out here, over a thousand miles away. This was a natural conversation that could've easily happened in Columbia, at any random bar over there. Every other person over there is from St. Louis. Right now? I'm in Washington. This is something else entirely.

He tells me he's heading though the Midwest in September, and I mention that he should stop by Columbia if given the chance (and name drop the Fugue). He's played in Columbia before, a few years back.

I churn through another beer and before I know it, the place is about to close. (I've come to notice that most places I frequent near here seem to close at like 11pm at the very very latest.) We part ways and I wish him the best as he continues touring.

I get home and I smile at the irony: the first random bar conversation I have in Washington is with a guy who knows where Florissant is and who used to hang out at Jamestown Mall — the places of my youth. The odds of such a thing are near-miraculous.

I guess I've found a place to frequent in Spokane. Such grand irony cannot be ignored.

Untitled

Browsing my Flickr account just now, I'm almost disappointed in the collective Internet for the popularity of this faux Natty Light ad I made. It's in my top 15 photos, seriously. More interesting than the Cathedral Basilica, Chris Carpenter, or a 9/11 vigil? I call BS.

Steady Denial

Three days from now I'll be flying over the western half of the continental United States. I'll be moving up to the Inland Empire, where I don't know anyone, and where I'll be starting some really awesome work. In five days, I'm going to be working at the Spokesman-Review, starting my work in an awesome full-scale Django project they're cooking up — possibly the largest and most fulfilling project I'll have worked on yet. If anything, it seems as if adulthood and age are starting to catch up with me here.

"Are you nervous?" friends have often asked me. It's a natural thing to ask, with such a big summer in store for me. But it's practically the only thing they ask.

"No," I said once. "I'm keeping it off my mind." My voice carries the tone of a graduating high schooler — a naïve calm and the underestimation of significant changes ahead.

I've kept up a steady and blank state of denial for the past month or so, keeping my emotions down and taking care of business — such as signing my apartment — with an almost mechanical stoicism. I'm not thinking about it. I'm just doing it.

"Do you need anything else from us? Is there anything else we can help you with?" ask the folks at the Spokesman-Review — the newspaper that I'll soon call my job.

"Nope," I say. "I think I've gotten most things on my end figured out. I'll just wing everything else when I get there." Again, I was simply putting it off my mind.

I'm starting to pack my things, trying to figure out what's necessary and what's not — I need to survive three months on my own two feet and I need to choose carefully here. I can't ignore it now.

"Now that I think about it, I'm not that nervous," I told one friend. "Actually, I'm looking forward to it more than anything."

Untitled

Wired's aggregated coverage of the San Francisco Olympic torch relay is awesome. I'm enthralled by the event simply because of the up-to-the-minute, user-submitted material which includes a live video feed from a user's phone, a Flickr link for recent "olympic" tagged photos, and CNN's iReports. The everyman has turned into the most up-to-date and most comprehensive event journalist. This stuff is awesome.

I'm reading into Qik right now, which is what the phone-based video feed is using. This looks like an excellent idea; I'm probably getting a new phone in the next couple months and might have to plan around using this.

Summer storms

I love thunderstorms, probably to levels that shouldn't be considered safe by normal standards. When I lived in the dorms a couple years ago and they forced us to the basement during a tornado warning? I was the guy that snuck out the back and stood on top of the parking garage to take photos like this one:
Lightning over Mizzou

I drove through today's storm, accidentally, because I didn't have the time to check my usual radar page. Oops. If I'd checked it, I would've seen something like this:
A crop of the radar image. Click to see a full, animated copy.

So, there I was, on Stadium Boulevard, driving to work through a stretch where the sky got dark -- and I really mean late-evening twilight dark. By the time I got to Forum (like a mile or two from campus) the sky started lightening up. As if the system had come and gone without doing anything. Oh, if only we were so lucky.

I waited maybe a minute for the stoplight to turn green. It started to rain right as the light turned green. By the time I passed where the old T.K. Brothers grill/pub stands (quarter mile, if even), the rain got really hard. Then I started noticing little ice pellets.

And then everything turned to white. Like a blizzard. A blizzard of sleet. And by blizzard, I do want to convey that I couldn't see anything past a couple feet.

I made it to work just fine; I ran through the parking lot, under the Yankees umbrella I got from one of the games I went to last year, as the rain and hail continued to flood everything around me. The sleety hail didn't do anything to my car; the pellets were just too small to do any damage to anything.

That got my heart going better than anything I've done recently. I can't wait for more.

---

Also, an update on photos from my vacation: I can't seem to find the negatives I developed in St. Louis and I think they're somewhere lost somewhere between here, St. Louis, or New Jersey. I'll keep you posted.

(April) Fooling around

Update: Site's back to the "normal" theme.

It's no joke, I have an obsession with nostalgia. Most notoriously, there's my love of baseball and the rich history of the game and it's traditions. But there are plenty of other examples of nostalgic indulgences, like typewriters, black and white film photography, and (most recently) fountain pens.

But I'm also prone to actual nostalgia -- not just the faux nostalgia of surrounding myself with the old school.

Every time I revise my résumé and realize I've been on the Web for a decade and realize I've been messing around with HTML and Web design/development for almost as long... Well, I can't help but feel a little nostalgic about those humble roots. And with good reason -- while most of the things I've worked on since 1998 have disappeared (account inactivity, group disbanding, hosting change, site redevelopment...), my first site, somehow is still live (albeit in a limited capability).

Today, I've invoked that feeling from that first website of mine and recreated that very plain, styleless HTML into a Wordpress template. In a sick and twisted way, I actually enjoyed writing the tag soup of <font> tags and pointless <hr> and <br> tags... You know, the same way you'd enjoy hearing an old Backstreet Boys song you haven't heard in years -- that is, before you realize what it is you're actually listening to.

(I also get the strangest feeling I'm going to regret linking to that ol' site...)

I recently read an article (I can't seem to remember where) about the increase in faux-90's retro Web design, like the one used on Radiohead's site. I smiled to myself because I remember making plenty of pages and sites that looked like that in my day. When I was like, 15. Retro-trendiness is a sad, sad thing.

So cheers to April Fool's Day and cheers to good ol' nineties Web nostalgia.

The long road’s end

March 27: Dunellen, NJ

We decided to take a minor road trip down south to visit Eight on the Break, which is definitely one of the coolest arcades I've been to.

All the driving games I like? Got it. All the music-based games for Glenn? Got it. And plenty of fighting games, which Chris definitely enjoyed. It's also the host for the New Jersey Pinball League, lol.

We try to make it down to The Break every time we're in Jersey, of course for the games, but also for the cheap lunch -- $4 buys you a cheese steak sandwich with fries and a drink.

Good times.

March 27: New Brunswick, NJ

We stopped by Dave and Erin's again, without calling ahead. Wasted a few hours, got another fat sandwich dinner at the grease trucks... We figured it was the best way to spend the last day of the trip.

March 28: Back on the road

We woke up early and got breakfast with Chris at the Original Pancake House on Route 10 near Livingston. I drove all the way to Indianapolis by 9pm... Hell, I probably could've made it all the way to St. Louis if we didn't have to stop over...

Met Marcie and my dad in Indy for the Indiana State Yoyo Contest and we stayed overnight in a hotel.

March 29: Indianapolis, IN

Took photos of that Indiana Yoyo Contest. A lot of photos, for free, because there was a ton of interest last time I took photos of an event like this.

2008 Indiana State Yoyo Contest 2008 Indiana State Yoyo Contest

Spent the afternoon driving the last four hours back to St. Louis... And with that, the trip basically ended. (There's still the last leg to Columbia, but that's a no-brainer at this point.) My odometer reads 2340 miles since I've left Columbia over a week ago. I can't believe I did it and I drove it all.

It's been fun, but on the flip side I realized I've got a ton of work to get done over the next couple weeks. Eh, I shouldn't fare too poorly.

I have a lot of photos from the New Jersey/New York trip, but I think I left the negatives in Jersey. The scanner over there also wasn't that great, so I decided to wait to print before scanning/uploading. Eh, I'll keep you posted; it'll be done whenever I get around to it.

Manhattan, New York, NY

Found our way over to the city today.

I got a chance to meet with Brian Hamman, of the New York Times. Got a tour of the newsroom and office (quite an awesome building) and got some lunch with him.

Visited our good ol' friend, Pat -- the guy behind YoYo Nation. We know Pat through Glenn's yoyoing -- he's ordered from that site plenty and Pat actually came down to St. Louis for one of the competitions a year or two ago. (Hell, he had dinner at our house when he was in town.)

Stopped by the B&H Photo super store, too. The place is huge. And from what I looked at, it's got everything the online store has -- it's sheer ridiculous. Got the supplies to develop my many rolls of film (yum, Xtol), which I did the moment we got back to Livingston.

And of course, no trip to New York would be complete without a bite to eat at Tasty Dumpling. Seriously. You can feed a large family for $8 at that place and the stuff actually tastes good. Honest, pick some up and sit down in Columbus Park to eat. It's a good meal.

I've found that navigating New York has become somewhat second nature to me, too. Might have been that summer exchange trip to Germany years ago, but transit maps over here make so much sense to me. Might also be the infographic guy in me, too. Or it could be that I've been to the city at least once a year for the past five years now. Either way. Got in via train, took the subway a few places, took the bus back to Livingston... Got lost once, and that's only because I remembered the wrong street number -- oops.

If I bother to borrow the scanner here, you might get some photos soon. I haven't used my "good" (meaning "digital SLR") camera all vacation, but instead have abused the hell out of my Yashica film camera lately. I dunno, I think I'm falling in love with film again.

Side trip: Parsippany, NJ

My luck is a funny thing.

Back on Saturday night, right after getting into town, I had a tire blow out en route to Chris' cousin's for a family party of sorts. You know, mere hours after finishing a 1100 mile drive. We got the spare on and went on our way. It got to New Brunswick and back fine, too.

To tell you the truth, my tires should've been replaced way back in November -- I've been having trouble keeping one of my tires inflated (a tiny leak practically at the sidewall, hard to completely repair). That was not the tire that blew out.

With help from Chris' dad, we found our way to a couple of shops only to find that they didn't have a full set in my size. We finally ended up in Parsippany, half an hour away, and got it fixed by an understaffed shop that had way too much to do today.

Oh, life. 1100 miles and then a blown tire after getting here? Someone's smiling down on me.

Tomorrow: New York City.

New Brunswick, NJ

Spent the night at Erin and Dave's place at Rutgers. Had quite a blast even though it was just us five there (me, Glenn, Chris, Erin, and Dave). Had a couple trips to some local eats, including Stuff Yer Face and Grease Trucks (which is basically 500 feet from the house).

---

Protip: If you're ever near Rutgers, you must get yourself a fat sandwich at some point.

What's a fat sandwich? Think of all the greatest quick food (cheese steak, fries, mozzarella sticks, chicken fingers, etc...), put it in a sub bun, throw some sauce on it (marinara, mayo, or ketchup), and suddenly you've got yourself one of the most ridiculous and amazing foods on the planet. Even better are the eccentric names by which the sandwiches are referred to: ranging from the classics (Fat Knight, Fat Sam, Fat Cat, etc...) to the strange (Fat Beach) to the controversial (Fat Dyke, Fat Phillipino, and Fat Bitch). They taste better than they sound, I promise.

Something about the names of things and places, and something about the very food itself screams creativity to me. Screams college town. It's sure got soul.

---

Quotable: Chris described SoCo & Lime shots by saying, "Imagine the smallest feather, tickling your ballsack." (Everybody else agreed that they aren't quite that good.)

Livingston, NJ

After nearly 1100 miles, the worst is over. Quick rundown in numbers: 27 hours total, with 20+ hours driving. 1100+ miles. 6 total stops between Columbia and Livingston. Damn, that was smooth.

Okay, so gas the entire rest of the way was cheaper than what it was in Illinois. In fact, one gas station here in Livingston had gas at $2.97/gal... which is cheaper than what it was in even St. Louis.

Never came across any snow, either, even though the forecast for my entire route looked poor. But Bailey was five hours behind me, back in Ohio (en route to D.C.), and told me that it had started snowing there a bit. I guess I outran it or something.

I want to say that I'll be updating with photos throughout the week, but I'm leaning closer and closer to just using film for the week, heh. We'll see.

Anonymous vs. Scientology, redux

Like last month, I went over to St. Louis to take in the protest against the Church of Scientology.

I don't have much to say this time, mainly because it was more of the same. The dogma and message are still the same and I honestly don't feel it's worth repeating. There are much better sources of information, anyway.

The weather was surprisingly dry (there was a projected 70+% chance of rain in the area) and warm (was in the upper 40's, was projected to be in the upper 30's). This helped as the crowd marched through the Delmar Loop, spreading fliers and information. By comparison, Delmar was a veritable ghost town last month, when the weather was in the 20's.

An "Anonymous global speech" was read out loud at least twice during the protest hours. We sang "Happy Birthday" to L. Ron Hubbard. (We sang "Never Gonna Give You Up" and "Still Alive" a couple times, too.)

I do feel that this one was more productive than last month's. I think that has to do with the weather and the fact that more average citizens were on the town. (As I said before, there was hardly an audience last time around.)

In any case, a bunch of my photos are up.

I've got more on some black and white film that I'll get developed sometime this coming week. A buddy of mine also took a bit of video, we'll see if we can get something out within the next couple days.

Update: B&W, yay. They're all mixed in with the gallery linked up above.
013

Update: Videos are up.

Adventures in the 100 Acre Wood

This is a story about road trips, rally racing, and finding saints in the most surprising places. If you'd rather just see my photos, go here.

Flashback: Friday, February 22, 2008

I wake up late, so I take my time showering and eating breakfast. Last night, the weather was sleety like crazy and I decided to call off my trip to the 100 Acre Wood Rally. Started planning for the weekend. You know, giving up with the white flag flying and all.

But on a whim -- I think it's the leisurely morning I'm having -- I change my mind. I think to myself, why the hell not? I've been looking forward to it since last year's event.

I know: I'm the worst at being indecisive.

11:30am

After class, I make my way to Brady Commons because I need to print out the rally spectator guide... And finish my application to get into the 4802 Convergence Fundamentals course. (Due at 5pm, yeah, I'm a slacker.) I run into Caitlin on the way.

“Where are you off to?”

“Brady. Gonna print off some maps, check the weather, and skip town.”

“So you decided to go to the rally, huh? In this weather? You're insane.”

“Yep. This morning I woke up and I figured I didn't want to wait 'til next year.”

But she's right. I'm insane, since we just had an ice storm the past couple days. This is a problem because my car is a crappy little RWD Kia Sportage that loves to slip and slide when it's wintry out. (Believe me, I've gotten pretty damn good at controlling the power slides over snow and ice... It scares some people.)

But hell, I don't want to wait until next year. That's lame. That's what the Cubs always do, and it never gets them anywhere.

---

2:16pm / Mile 0 / Columbia, MO

After hanging out at Brady for a couple hours, I turn in 4802 application (I finally got accepted, by the way), print out the spectator guide, and start down US-63.

---

2:45pm / Mile 27 / Jefferson City, MO

Pass Jeff City, pulling off the highway to take some photos and grab a snack.

---

3:00pm / Mile 40 / Jefferson City, MO

I definitely took the wrong way out of the city -- US-54 toward Lake of the Ozarks instead of US-63 to Rolla. Definitely dropped 15 minutes, oops. So here I am again.

I stop for gas, just in case this sort of thing happens again.

---

3:40pm / Mile 68 / Freeburg, MO

Yeah, I'm taking photos while I'm driving. Absolutely safe, I know.

---

---

4:00pm / Mile 82 / Vienna, MO

I stop for a snack and grab a bag of pizza-flavored Combos.

Just past town, I break off of US-63 and get onto a tiny little road, Route 68. 68 takes me away from Rolla and leads me toward Steelville, which is where I'm actually interested in going today.

---

---

4:30pm / Mile 108 / St. James, MO

I've finished the bag of Combos already. Didn't realize I was that hungry...

I pass I-44, which was relieving: it's my route out of here. And it means I'm almost there.

---

---

5:02pm / Mile 130 / Steelville, MO – Rally Service Area

I drive through town, not exactly sure how to find the city park -- the location of the service area.

But lo and behold: a long line of Subaru Imprezas, all clad in decals and mud, sitting in front of a large recreational area. Damn straight. I pull over somewhere across the street and wander into the service park, camera in tow.

I sort of saunter in, no questions asked, and I make a long loop around the entire service park.

I'm absolutely ecstatic when I come across the official Subaru Rally Team USA camp. At which point I take a ton of photos and get Travis Pastrana's autograph.


Believe me, I took a ton of photos.

---

5:45pm / Mile 135 / Steelville, MO

On the way out, I end up following Travis Pastrana's car (I think he was the first car scheduled out of service) toward the special stage. Which basically makes me want to jump up and down like a little kid. (Okay, truth be told, I got into my car, noticed his car speed by, and then I sped off after him to catch up. Since they're under time control, trying to make precise times between points, they normally run under the speed limit. All the easier for me to follow, heh.)

---

5:50pm / Mile 138 / Steelville, MO

I'm having trouble making it to the spectator area. The road's WAY too icy and I've already gone off road once.

The spectator area is just to the other side of a steep, iced-over hill. A hill that I can't scale.

I try to speed through it, but can't seem to make it more than 3/4 up.

---

6:05pm / Mile 141 / Steelville, MO

I give up on the spectator area and head back.

To make matters worse, there's a much steeper hill back the way I came. Going back the way I came doesn't seem to work out.

---

6:15pm / Mile 143 / Steelville, MO

It's getting dark. I'm getting worried. I'm absolutely stuck in a foreign place. I've tried both directions over and over and over...

I give up. I pull up to one of the houses on the road, one with the lights on and people mulling around inside. Walking up to the house, I mutter to myself “I can't believe I'm doing this.” You know, this is totally safe knocking on a random door in the middle of the woods in the middle of nowhere.

I knock on the door. A woman answers the door.

"Sorry to bother you, ma'am, but I can't seem to get out of this road."

"Well, come on in and let's see what we can do."

We enter the house. It's a nice place with a big entryway/living room/kitchen, with a few doors and hallways coming out of the main area -- and I almost want to describe it as a cabin, but it's not exactly that, either.

We walk up to the kitchen, where her husband is, and we go over my predicament.

The husband works for MODOT, apparently. He's been putting up with this weather all week.

"What do you think, hon?" she asks. "Think we should call a wrecker or what?"

He decides to give me a hand.

"Here's what we'll do. You, you'll follow me in your car and try to take my line up the hill. You gotta get all the way over to the right to get any traction going up there. I can't tow you up, but you'll probably get up there if you follow me."

---

6:45pm / Mile 145 / Steelville, MO

That absolutely did not work. Going up the hill didn't work -- regardless of which path I tried to take. Making matters worse, I got stuck in a ditch trying to get back to the house. Like literally, across the road from the couple's house.

The stage had ended -- I know this because other spectators are starting to make their way up here.

The husband stays on the road to warn cars of the hill up ahead. I'm just mulling around my car, because I've got nothing better to do and I've got no way out.

The spectator area marshal drives by and, noticing my car off the road, stops to give me a hand.

"What's the matter here?"

"Well, I tried getting up that hill over there and I couldn't, so I came back here and my car ended up in this ditch here."

"I can't pull you up that hill, and I'm in a hurry because I've got to take care of the next area, but I'll pull you out of that hole."

He's visibly edgy. I can tell he's had a long day.

We chain my car to his truck and he pulls me into the couple's driveway. He rides off, leaving me high and dry.

---

Back inside the house, I have a drink with the couple and think of what to do next.

"Want to give it another shot?" the husband asks me.

I really would rather not. Especially after spending most of the past two hours trying to tackle these hills, something tells me I won't fare any better this time around -- if anything, it's even more icy and the darkness can't possibly help at all.

"I don't know. I think I've had enough. Maybe we should just call a wrecker." (A tow truck, for anyone who grew up away from the Midwestern countryside. Don't worry, I don't remember ever hearing it before that night, either, but that's what they all called it.)

So they help call one. They seem to know everyone in town and they call someone they know to see if they can bring a truck from their shop for me.

"I never caught your names, either."

"Krist," the wife says. "And he's Lonnie," she says, pointing over to her husband on the phone. "And you?"

"Mike."

Lonnie gets off the phone.

"Well, Mike. Go ahead and make yourself at home. Wrecker won't be here for at least another hour. And it'll set you back about 70 bucks, depending on how much trouble they have."

Fine by me, sure beats being stuck here.

---

Lonnie and Krist have a couple of guests over later, Lonnie's sister and her husband. The husband is a tall, muscular guy wearing denim overalls -- and as much as I hate applying stereotypes, he looks the part of a country handyman or farmer.

We chat and have some spinach dip that Krist made.

Both couples have sons that are in St. Louis at the moment, both guys on the verge of graduating from high school and moving away.

...Which reminds me to call my folks and let them know where I am and how I'm doing. I use their house phone because apparently, out here, my cell phone is useless.

And naturally, my folks aren't expecting me. Last they heard, I'd called the trip off. Oops. I tell them not to worry, I've got it under control, and I've got a tow coming. I'll still see them tonight.

---

7:45pm / Mile 145 / Steelville, MO

There's a car parked in a driveway across the street and it's been there for a while.

I guess I'm not the only one stuck here.

---

8:15pm / Mile 145 / Steelville, MO

The tow truck pulls in.

Apparently they took so long because they spent quite a bit of time clearing up that hill. Go figure.

Lonnie and Krist wish me the best and send me on my way. I really wish I could pay them more gratitude, but at this point all I can do is thank them a lot. (I'm honestly not sure I know many people that would take in a stranger and keep them comfortable for a couple hours.)

The two truck operators attach my car to the truck and we make our way.

As we crest the hill, the driver asks me, "feel any better now?"

"Hell yeah."

In lieu of a $70 check, turns out they can use my AAA card. (Lemme tell you, my AAA card has bailed me out of car trouble plenty of times.)

I must have the biggest smile on my face.

I'm home free.

---

8:30pm / Mile 163 / Cuba, MO

My cell phone signal comes back to life. I let the folks know I'm back on the road and that I'm safe and sound.

I grab a hot dog from a gas station and get on the interstate toward St. Louis.

---

I make it home by 11pm. I give my mom the biggest hug ever, tell them all the stories of the day, and show off my Travis Pastrana autographed poster.

I sleep comfortably, knowing that although I missed the creature comforts of Columbia (and Kevin's 21st birthday party), I've survived one of the most interesting days of my life. I met one of my idols, I took plenty of good photos, and I met some people that outwardly showed those increasingly rare traits of kindness, compassion, and honesty, in their actions.

And honestly, meeting Lonnie and Krist might have been the most important thing I did that weekend. For me, more and more losing my faith in the human race, it knocked a little bit of the pessimism out of me. I'm not the biggest fan of Kurt Vonnegut's work, but he summed it up in A Man Without A Country:

But I replied that what made being alive almost worthwhile for me, besides music, was all the saints I met, who could be anywhere. By saints I meant people who behaved decently in a strikingly indecent society.

I could use a few more adventures like this.

What lies ahead

In a couple hours, I'll have turned 21. And I can't say that it didn't sneak up on me: it's been the last thing on my mind lately.

To tell you the truth, I'll probably be sober tomorrow, too. (Minus an exception for a possible couple glasses of Framboise or Guinness.) I'd given it up -- not for Lent, but for the hell of it, on a whim, to see if I could do something so absurd. With the amount of consumption that goes on around me, I just wanted to see if I could do it and what I'd do if I got rid of that vice.

To tell you the truth, I gave up a lot of things at the end of January because I wanted to go above and beyond what other people do for Lent. People do it just to go through the motions for Lent. The past handful of years have bent my faith and honestly, I'm not sure what I believe, and nor do I regularly practice anymore. I decided -- on a whim -- to get rid of not just alcohol, but most vices I'd indulged in lately: energy drinks, espresso drinks, smoking (anything), and alcohol. You know, to see what I'd do if I got rid of those vices I'd used as a crutch.

I even disabled my Facebook account for three weeks to see what would happen if I got rid of that obsession. (Which, honestly, affected other people more than it affected me -- "Why am I not your friend anymore?" "You are, I just got rid of my Facebook.")

Why the whole straight-lacedness all of a sudden? (I wanted to say "Why so serious?", I really did.)

---

People like to say that 19 and 20 years old don't mean anything -- you don't get any new rights or privileges, you're just kind of held back until 21. They couldn't be more wrong. 18 may give you a taste of adulthood, but in my mind 19 and 20 are there to remind you that you're still not ready for the real world. That couldn't have been more true over the last year of my life.

At this time last year, I was somewhere in the middle of a lazy free fall that culminated in me failing out of school. Which was the biggest wake up call I'd ever received in my life. The worst part is that I knew it was coming and didn't do anything about it until it was too late. After the semester ended, I knew what was going on and I knew I needed to get my shit together. I personally met with Brian Brooks, Dean of the Journalism School, and appealed before they had even sent out the dismissal letters.

(On the flip side, I was on the Journalism honor roll for last semester. I rolled my eyes at the ironic and impersonal correspondence they sent me for it.)

And since then, I like to think that I've been trying harder than ever. My roommates can probably attest to the fact that throughout the week I'm often gone at school or work, or locked up in my room, or I'm out on campus or downtown, hanging out or getting something done. I keep myself busy because that's how I keep myself sane and that's how I pass the time -- I fucked up once and I guess I don't really like wasting a minute now. (I'm not sure, I think I've got something against being home because loitering around downtown seems more "productive" or "interesting" to me than loitering around my house. It's one of those tendencies I have, I guess.)

---

So back to the question of why so straight-laced?

I'm a huge baseball fan and I'm nostalgic about it. Nostalgic as in: I'm a lover of the old-school, tried and true traditions. Like superstitions. You know, you see those ball players that make sure they don't step on the first or third base line when they go to and from the dugout. You see the batters warming up with the same routine, same number of paces around the batter's box between pitches -- only part of this is for "rhythm" and the rest is "routine" or superstition. And of course, there's Tony La Russa who batted the pitcher in the eight spot most of last season (and is apparently going to do it next season, too).

Look, the lesson of baseball superstition is basically this: when things are going great, don't you even think of changing a damn thing.

The past couple months have been kind to me, and it may or may not be related to my hard work and it may or may not be related to me quitting my vices, but right now, I'm happy. Happier than caffeine, alcohol, or anything like that could have made me.

---

Throughout the years, I've gotten interesting results from being mistaken for someone much older. And that's not a bad thing, I guess I just grew up and matured fast.

Over the past month, it's gotten really interesting with a bunch of new opportunities sitting ahead of me. Not only did I launch the Maneater project (after two years of failures) and finally get into J-4802, but I had prospects of full-time employment from a couple places, mainly because they weren't aware that I don't graduate this year. But it's good to know that I'm being noticed and that I have skills that are in demand. One of those prospects is, in my book, a very solid fallback in case all shit hits the fan; in case I have another year like last year. Another prospect... Well, I'm just hoping a few things fall in my favor and we'll see.

The thing about catching breaks is that you've got to actually open your hands, reach out, and catch. I guess (to make another baseball analogy) I'm here in the outfield, with my glove ready.

---

I'll probably grab myself a glass of Framboise tonight and tomorrow, but I've been amusing myself with a thought: The closer I got to being 21, the less I seemed to care. About the number itself, about the privileges it provides me.

Like I said, it's been the last thing on my mind. (And good reason, with midterms, class registrations, work projects, internship applications...)

When I was 19 and 20 years old, I really was so apathetic toward everything and I guess that's why things fell apart around me so quickly. There were lessons there, in all of those failures and false starts. And I've tried my best to learn them and keep them close.

In early February, I joked about "finding myself" by quitting all these vices. I wasn't even completely serious about this reformation at that point yet (I didn't "officially" decide to quit those things until the middle of the month, retroactive to the last time I'd done any of it, which was January). And here comes the superstitious part of me, believing I'm actually finding a more specific direction in my life (career-wise and in general) than the previous conviction I had of let's just saunter out into the world and figure it out as we go.

Even if some of these breaks don't go my way, for once I'm actually happy and somewhat confident in the path I'm taking.

The road ahead of me is getting clearer, less treacherous seeming. Let's see where this goes.

Oh, convergence

Lately, the Convergency Room somehow got onto the list of blogs I check daily -- perhaps it's the relative frequency of posts that students are forced to write. Or perhaps I'm bracing myself for the pain that's yet to come when I eventually take those classes. Or I'm learning what I can in the event that I don't get in to that sequence.

Of note was this post, by Alex Tribou, regarding a local iPhone news application, currently in the research phase. And I thought to myself, "finally, something here that I might be interested in reading."

...We've coordinated with all of our newsrooms to come up with an idea for a local news application. There will likely still be some tweaking here and there, but we have a pretty solid idea about what we want to do. We continue to try to get into contact with iPhone users, which has been challenging so far. We were not able to get a list of names like we had hoped, so it looks like we're going to have to spread the word and see what happens. Misty is starting to post our survey so that we can get as much feedback as possible...

I wonder: why solely target iPhones as opposed to any wireless Internet device? I know plenty of people with Windows Mobile phones or Blackberries -- moreso than I know iPhone users. Or is everyone in the School of Journalism so blinded by the empire of Apple?

Bah, and I also wonder why I haven't gotten myself involved in the J-School for all of this Internet business they're trying to do.

At the end of Spring last year, I got a letter from the J-School that said I'd been kicked out of the entire university. I'm positive it was just an impersonal, automatically-generated letter based on the fact that my GPA was so low that it merited kicking me out without probation.

Last week, I got a letter from the J-School that said I made it on the Dean's Honor Roll for Fall 2007. And again, I'm pretty positive it was just an impersonal, automatically-generated letter based on my GPA. Do they even know what kinds of trouble I've been putting myself through for them?

I don't know what to make of it -- being kicked out one semester and then lauded the next. Like in high school, I'm not quite sure any of them really know who the hell I am.

---

It was a really long weekend and I've got some stories to tell, though I may or may not ever get around to it. But there are always photos, and those are supposed to say like a thousand words each anyway. (So basically I've given you a 52,000 essay there. But not really.)

2008 Rally In The 100 Acre Wood

Anonymous” protests Church of Scientology

Update, March 15: Post and photos regarding the March 15 demonstration.

---

In other news, I've got a lot of pictures I need to upload and a few stories to tell. Let's get to that now.

In January, Anonymous, a large, decentralized online community, declared war on the Church of Scientology regarding actions the church has brought upon current and former members. The war became dubbed Project Chanology, a portmanteau of "chan" (i.e., "chan" sites, such as 4chan, which harbor most of the Anonymous community) and "Scientology".

Why should you care about this? You probably shouldn't, but most of you know that I enjoy watching chaos unfold in the first-person.

Protests were scheduled for February 10, the birthdate of Lisa McPherson, who died in 1995 after being kept in isolation by the Church of Scientology for 17 days, also apparently taken off of important medication due to Scientology's stance on psychiatry and medicine.

To be fair, I did not go to St. Louis this weekend for this. In fact, I'd completely forgotten about it. But on Saturday, I did have a conversation about how I hadn't been to The Loop in a while... which brought up the fact that yes, we did remember reading something about a protest on Sunday and yes, the regional Church of Scientology was in fact on Delmar, just on the edge of The Loop. Being a frequenter of the Anonymous community, I thought it might be fun. But the clincher really came from reading the official Project Chanology pages and noticing that the St. Louis-area estimated headcount was at over 100, I was suddenly interested.

I normally wouldn't put much stock in an online-born movement against Scientology, as the Church's detractors have always been many. (Though, February's Wired has an awesome feature on online and IRL-based griefing, which does validate the fact that actual personal losses can come from such online attacks.) However, the Project Chanology site was remarkably well-organized and by the time I checked on Saturday night, there were also reports of successes in Australia, where it was already midday on Sunday.

I woke up at 8am on Sunday and I went to watch.

I saw the crowd as I drove by and as I walked up to the area -- maybe 40 or so people. I heard a guy drive by and yell, "fucking hippies!" as he passed.

This was going to be good.

Image of protesters Image of protesters

Protesters were warned to wear masks or otherwise obscure their face by wearing sunglasses and scarves. You know, to prevent them from later being identified by the Church. (The scarves thing helped -- it was extremely gusty and the temperature sat below 30 throughout the morning.) Some people reportedly looked into the local regulations and found that masks were legal; however, the police standing watch across the street politely asked the protesters to take them off. So, most wore them on top of their head. (Yes, those are Guy Fawkes masks, invoking a bit of that V For Vendetta feeling.)

Protesters Protesters

Folks came from around the region and set up shop across the street from the Scientology building. The mood was quite upbeat and friendly. Conversation often drifted back and forth between the beliefs of Scientology and randomly invoked internet memes. A group sang parts of "Still Alive," from the game Portal. Later, others sang the classic Rickroll, "Never Gonna Give You Up."

"Scientology is under 9000!" said one person.

It was a morning of intellectual discussion regarding the beliefs and methods of Scientology (and the Church) mixed in with fun-loving internet subculture.

Protesters

Fliers were handed out and most cars honked as they passed. Many in the crowd pointed out that the protest wasn't against the religion or belief system, but rather the actions of the church.

It was fun, save for the paranoia that came with noticing that a video camera facing the crowd had been placed in the doorway of the Scientology building. It seems that organizers may have been right in warning the protesters that the Church could log the protest and identify individuals in the crowd. But this didn't really stop anybody.

One organizer gathered a group together and remarked that "this is only phase two of this 'war'."

He continued by saying that if people really want to get involved with dismantling the secrecy and unjust actions of the Church, they should write letters and make calls to legislators and government officials to truly investigate the Church and (because of the high dollar amounts paid per member) remove its tax-exempt status as a religious organization.

I left when I realized I was probably getting frostbite in my hands from holding my camera too long. (Left my gloves in CoMo, heh.) But I think it was worth the trouble.

---

There are 38 photos in the full photoset, if you want to see 'em. You know you want to.

themaneater.com Launch

Update: I'm getting a lot of traffic to this page, thanks to Simon Willison linking to me. (Which, in turn, promoted this post on the Django community RSS feed.)

If you were linked to this page and are interested in reading a bit more of the history of this project and a few technical notes about the new site, you should probably start here.

---

We launched Friday morning, with an e-mail to our MizzouIT DNS contact to switch our themaneater.com domain over to the new site.

Of course, we just couldn't have a flawless launch. The site was slow, the site would break (503 Service Unavailable), and it sucked.

So I rewrote some views. I rewrote some caches. I reconfigured the cache. I disabled the cache. I re-enabled the cache. I reconfigured the URLconf...

...After spending the better part of Friday afternoon trying to optimize the site to no avail, I learned that sometimes the best solution to the most complex problem is the simplest.

Jacob Kaplan-Moss' Django performance tips said "Turn KeepAlive off."

I don’t totally understand how KeepAlive works, but turning it off on our Django servers increased performance by something like 50%.

Launching the site before turning KeepAlive off was like getting on the highway and realizing that the handbrake was on. By 50%, he must have meant 99%.

The site is now live and public.

Lesson learned.

And a HUGE sigh of relief: I've been involved with this new site on and off for nearly a year and a half now. I can't even express how happy I am to finally be somewhere with it.

Maneater Open Beta (Lessons Part 4)

Over a year and a half since I became involved with the online side of the Maneater, I finally feel that this new site project has fought its way out of the jaws of vaporwaredom. Following one false start after another and over a year of high hopes and dashed dreams, I think we have finally accomplished something.

Without further adieu, here is the current URL at which you can test the new Maneater site:
http://www.themaneater.com/
New Maneater Site

Things of note

Also, the site is currently one issue late on content, because updating the currently live site is already a time-consuming process.

---
Things I'd change

The way I programmed the site is (in hindsight) pretty sloppy. I set up multiple applications that all rely heavily on one another, which is a pretty big sin against the modular philosophy of Django. I should have lumped in most of the staff, content, and publishing information into one overall Newspaper application.

The stylesheet is still under consideration because I haven't yet had the time to tinker with it.

Some of the metadata (like "published date") is extremely redundant. Though perhaps it's just me being picky, but I don't think you need to set the date of an article if you're already attaching said article to an issue (which has the date set).

Ah, and I've got a long list of things that I'll be adding to this in the coming days. I'll port over parts of my todo list and notes when I get around to it.

---

Notes on searching

The one complaint I've noticed the most about Django is the lack of good search functionality. At the time of this writing, even the Columbia Missourian seems to have lost their search functionality.

Django only has limited capabilities in contains() -- which uses a wildcard LIKE statement on what you enter in -- and search() -- which uses MySQL's fulltext indexing but isn't very customizable. Fulltext (for those who don't do database work) uses real search algorithms instead of just looking for the exact thing entered. It also provides a guess to accuracy, so you can sort by the most accurate items -- you don't get this when you're doing a plain ol' LIKE statemenet.

My personal gripe with search() is that it uses boolean searching which isn't necessarily what a user should be using by default on a search box. I feel that the boolean capabilities are an advanced thing that only the diehard would really be using -- you know, "putting things in quotes" to search an exact phrase ... putting + or - in front of words to find articles that have one word but not another. Not to mention that for plain searches (no quotes, no + or -), boolean searches seem to be less accurate since it uses a much different algorithm than the normal "natural language" fulltext search.

So I resorted to a custom solution based on this whitepaper, revolving around a custom manager to handle searching however I wanted.

Creating a view around searching was also a bigger challenge than I originally thought. In the one day of staffer beta testing, I already got a handful of complaints regarding being able to search for staffers or photos. And being able to sort by date instead of accuracy -- it's not convenient to get a lot of articles from the 1990's when you're looking for something you vaguely remember reading last week. And then the issue of paginating large sets of search results.

I think we have a pretty robust search engine, that even demanding journalists should be able to find what they need. But that's coming off of the uncustomizable, date-sorted search that we have on the old site. And the lack of search on the Missourian site. (If anyone working on that site is reading this, I'd love to talk sometime.)

Maneater/Django development lessons, Part 3

Through a series of posts, I’m counting down to a public test of the new Maneater web site by the end of the weekend. We’re hoping to launch Tuesday.

This is part three.

This is mostly a technical writeup. For those that aren't programmers, the final post (Part 4) will be a general "layman's terms" overview of new features on the site.

---

I'm really going to gloss over the templates and views more than I'd like. Honestly, writing the views was more of a Python learning experience than a Django learning experience.

Learning from the past

The trouble we had in prior launch attempts was mostly due to overloading the Apache/Python instance on the server and overloading the database -- some of the more complex views involved lots and lots of database queries that would pull all columns from a set. Indexing helped a little bit, but lacking an easier method in Django, a few of the views I created relied heavily on subqueries. The logic around some of these views would bring the server down to a crawl. We have over 27,000 articles in our database, and some views would iterate over every single article several times before printing to a template.

Another limitation of the previous project was that we couldn't update Django to use the latest code and features. The backwards-incompatible changes I mentioned before sort of set us back in this regard, since caching wasn't nearly as extensible or quick in the early version of Django that was used. (Luckily, the API is now pretty stable, so the chances for backwards-incompatible changes at this point are low.)

Basically: everything about the old Django project was slow, and this was partially due to the old version of Django we were using and it was partially due to the code itself being poorly optimized.

---

Caching, as a lazy performance improvement

In an environment such as a newspaper website -- where, after a certain point, your content doesn't continue to update -- most pages and data don't change for a very, very long time (if ever). New stuff just gets added and old stuff is assumed to be static and archived.

In Django, you can cache anything. Caching more or less means you're putting your data somewhere that's quicker to access than where you normally get it. For example, leaving some documents on your desk so you can look at them later, as opposed to filing them back in a drawer. With Django, you can cache data (obviously) and the objects you get out of your database. And since you're normally caching in memory, the result ends up being extremely fast.

This is extremely beneficial in those situations above, where queries are server intensive and slow. Say you have a page that does this:

def some_function(self):
articles = Article.objects.all()
staffers = Staffer.objects.all()
#...
#do stuff that takes a lot of server power
#...
#in this example, i'm theoretically
#narrowing down articles & staffers
#...
data = {
'articles':articles,
'staffers':staffers
}
#...
#do stuff to data
#...
return data

Which is fine, but if you use some_function a lot, your server starts to slow down quite a bit.

Let's say that it's safe to assume that the data doesn't change all the time. You can cache the "data" object by doing the following:

def some_function(self):
cachename = 'some_function_asdfasdfasdf'
data = cache.get(cachename)
if data==None:
articles = Article.objects.all()
staffers = Staffer.objects.all()
#...
#do stuff ...
#...
data = {
'articles':articles,
'staffers':staffers
}
cache.set(cachename,data)
#...
#do stuff to data
#...
return data

If you haven't done this function before (or the last cache expired), then it does the stuff you'd normally do to get "data". If you have it in the cache, then it skips over the database-intensive work, which makes it fast, and makes your server happy.

The default cache time is 5 minutes, and is modifiable in the settings. If your data doesn't change for an unusually long time, you can also set a specific time for a cache:

cache.set(cachename,data,60*60*24)
Caches your data for 24 hours (cache time is set in seconds).

Caches work by unique cache name, so by making "cachename" dynamic you can even cache very specific pages if you deem it necessary. (For example, I cache staffer profile pages on a per-person basis, because it uses lists of every article, photo, graphic, page design, and podcast credited to a given person.)

As a programmer, I considered my stopgap object-caching a very lazy way to optimize, but due to the nature of some of the data models and due to the sheer volume of information we have to go through (27000+ articles, thousands of photos, hundreds of staffers), there really isn't much I can do at this point on a deadline. And sometimes, because of the limitations of a language or framework, there may not be an easier way to optimize anyway.

---

I'm not going to touch templating that much here (though I may come back to this subject later to talk about "abstracting" templates and creating custom templates for RSS feeds and Javascript). I will say that as long as you can create basic HTML/CSS and know that "hey, this variable goes inside this tag" (i.e. <h1>{{title}}</h1>), you can more or less create a template for Django. Since most of the logic comes at the view level, you really don't need to know Python as much as simply understand programming basics like variables and for loops. (And of course you'll need to know what variables are coming at you from the view level, and you'll need to know the data models your site uses.)

It's my understanding that Ruby on Rails (another framework) uses some form of Ruby as it's template language. I love Django for the very plain text-based approach.

---

Next: I'll link you to the new site, walk you through the new features, and solicit your comments. I'll also outline a few new things I'm hoping to accomplish on the site, after polishing out any post-launch issues. Stay tuned.

Maneater/Django development lessons, Part 2

Through a series of posts, I’m counting down to a public test of the new Maneater Web site by the end of the weekend. We’re hoping to launch Tuesday.

This is part two.

This is mostly a technical writeup. For those that aren't programmers, the final post (Part 4) will be a general "layman's terms" overview of new features on the site.

---

Square One

In late December, frustrated with a poor development workflow in Drupal, I mulled it over with Carolina Astrain (our online editor) and decided to go back to Django. I did this on the condition that I could fashion a functional demo in four days or go back to the Drupal project. I promised to have the site (regardless of platform) done by February. A big dare on my part, but necessary in my book: I needed hard deadlines for results. This was getting done whether I liked the workflow or not.

Over the course of hosting switches for the Django and Drupal projects, all of the old code from the prior Django project was lost. But this didn't really matter because Django -- still in development -- had gone through several major revisions and backwards-incompatible changes from the version Chase and Brian had worked on.

Again, this was fine because the site barely worked in that incarnation -- we nearly rewrote it from the ground up at one point, until the project stagnated.

So, I started the arduous task of creating a full-fledged news outlet Web site from nothing. Did I mention that I didn't know Python and that I was in way too deep the last time I worked on the old Django project? Yes, I was learning this on the fly. (I actually wish I hadn't lost Chase and Brian's code; I did not understand a bit of it back when I was responsible for it, but I believe I could learn a lot from that now.)

Django is a framework -- not so much as a "program everything" programming language as much as a programming language that does a lot of your workflow for you. Having such a versatile framework environment is probably the only reason I was able to do this with such little help.

---

And we're off

Django uses a "design pattern" (workflow) that is split up into three "layers". Most frameworks are. Django uses a very pure three-tier method: model, view, template. Or in layman's terms: what sort of information you have in your database, the logic that determines what stuff to get from your database and processes it, and the templates that take that "view" and turn it into pages, feeds, and other files. (For those programmers that know of the "Model-View-Controller" pattern, the "view" represents your controller in doing the logic, and the "template" represents your view.)

I think it's a nice system, because you can delegate your tasks based on those layers and so long as your team members know what to expect from people working on another "layer", they don't need to know the innards of the other layers.

But of course, I'm working on this more or less on my own (save for some templating help from Justin Myers) so that layer separation doesn't necessarily save me except for the fact that it's really well-suited for learning on the fly. Think about it: instead of worrying about every aspect of a site at once (overload!), you can focus on and learn specifically how to model your data and finish that, focus on how to create views for your data and then finish that, and then learn the nitty-gritty on templating.

Let me tell you one thing, though: Frameworks like this are designed to be quick-to-build. It's a framework, in literal terms, where you build off of a mostly prefabricated structure. I can imagine designing fast workflows around this, with the ability to churn out very diverse applications (don't just copy and paste the same code between projects) at the drop of a hat. I'd be happy to learn a few other frameworks and use another MVC/MTV pattern in the future.

---

Next Top Model

The beauty of a framework like Django is the data modeling features. If you've used an entity-relationship diagram (ERD), you already know more about this than is necesary. If you can list out the types of metadata for something...

  • Issue
    • Volume (Integer)
    • Date (Date)
  • Staffer
    • First Name (Text)
    • Last Name (Text)
    • Position (Text)
  • Article
    • Title (Text)
    • Date (Date)
    • Issue (Issue)
    • Section (Text)
    • C-Deck (Text)
    • Byline (Staffers)
    • Body (Text)
  • Photo
    • Date (Date)
    • Byline (Staffer)
    • Photo (Image)
    • Cutline (Text)
  • ...you more or less already have your database set up and an admin interface automatically made for you. This example is a gross simplification of the Maneater's basic data models. (If you're really interested in learning what models look like in code, see the Django Book.)

    The best part about Django's data models is fields that represent images you upload (for photos and graphics) and regular files you upload (for PDF pages and podcast audio files). The admin panel automatically takes care of uploading files to a folder you specify.

    That example admin interface uses different example data, but visually it's the same admin panel the new Maneater site uses. And I'm assuming that the Columbia Missourian and Vox Magazine admin interface probably looks the same too.

    The automatic admin interface is one of the single most important features of Django. Believe me, it takes forever to program your own way of adding, modifying, and removing stuff from a custom database.

    Taking that CS 3380 database class at the same time as this project also propelled me along quite a bit. I cannot stress enough the importance of good, connected data models, and that class is where I got it pounded into my skull. Of all the things in the Django framework, your data models really can't be edited after the fact without massive pain -- i.e. manually editing your database. It's better to have more metadata than you need than to realize later that you left out some information.

    Create a very full outline of the things you plan on putting into the site and every bit of information that goes under them. I don't think I could start a major project in any language without doing that sort of visualization now.

    ---

    Of course, data modeling and having an admin interface doesn't give you a site that's browsable.

    Next: "Views" and templating.

    Maneater/Django development lessons: Part 1 (Prologue)

    Through a series of posts, I'm counting down to a public test of the new Maneater Web site by the end of the weekend. We're hoping to launch Tuesday.

    If you're interested in understanding the history of the project and the underlying technology that powers a fully-functional, cutting-edge newspaper site, then read up. If not, wait 'til the final post Sunday afternoon or evening. To be fair, there's a chance this ends up being a treatise on why frameworks are awesome and why I like Django so much right now.

    This is mostly a technical writeup. For those that aren't programmers, the final post (Part 4) will be a general "layman's terms" overview of new features on the site.

    ---

    I'm not much of a quitter. Really. At some points last semester I still held all four of my jobs -- you know, the jobs that sucked the life out of me during the disaster semester I bombed -- even though I said I'd quit half of them. That's a dead giveaway to me. (I've since made good on my word to only work two of those jobs and on a more limited basis than before.)

    But I also haven't been very good at finishing anything last year after say... Spring? I've recently bitched and moaned to a few people about how I have added absolutely nothing to my web, photo, and writing portfolios since right around November 2006.

    To start this new year I decided, "to hell with it all, I'm going to finish things right now." And I jumped headfirst into this project, aiming to finish it once and for all.

    Backstory

    From 2005 to 2006, Chase Davis and Brian Hamman worked on building news sites based on Django, a Python-based framework. The Maneater site they built was the first Django site they worked on. They later launched successful Django-powered sites for the local Columbia Missourian and Vox Magazine.

    The Maneater site never got off the ground. Although the site was complete, the project was marred by one false start after another after another due to its knack for crashing and burning. I came in and thought I'd solved the server load issues and we launched again. The site again buckled under any standard load. Over the course of the past two years, the project became a textbook example of vaporware.

    Goodbye Django, Hello Drupal

    I stepped down from my post as Online Editor this school year so I could put more focus on school and have fewer outside responsibilities. (I did mention that disaster semester, and I did not want to repeat those results.) We assembled a new Web team and after much deliberation we decided to scrap the Django project and build a site in Drupal, a PHP-based content management platform. We developed a new template and actually had a decently functional site going.

    I wasn't a big fan of Drupal, as it represented a very static way of using data. Everything was represented by "Nodes," which sounded simple enough to extend into different types of data, but became a nightmare when trying to create the type of cross-linking data models I had in mind for the Maneater. But I wasn't in charge, so the argument became moot; I just put my faith in our project lead and our team and went with it.

    We stuck with the Drupal project until our project lead flaked out and I became frustrated with the prospect of finishing programming the site myself and importing the archives from the old Maneater site -- Drupal's database structure is not the friendliest once "nodes" are extended. (For reference, the old site's database table of articles alone weighs in at over 27,000 rows and is larger than 80MB.)

    ---

    Next: Going back to Django and creating the initial features, data models, and admin site.

    Darkroom Adventures

    I've been sick since Sunday and it's sucked quite a bit. It's been (not unlike the stock market) inconsistently getting better and worse and better and worse over the past few days. (Not necessarily in that order.) But I've been downing orange juice like no other, and hopefully the combination of rest, juice, tea, and medicine has started turning the tide. Honestly: who gets sick to start off a semester of school?

    After an afternoon nap, I was feeling well enough this evening to spend some time in the craft studio darkroom. Because hey, I finished this roll of film almost three weeks ago and I wasn't about to get lazy and pay someone else to do it. And I get cabin fever all too easily; I can't think of more than five instances where I spent more than 18 consecutive hours at home.

    In my negatives binder, the last page is dated "Dec 2006 - Jan 2007." Damn. It's been a while.

    From the Flickr page:

    Gabe

    Gabe is THE most adorable kid around.

    I took this picture, and then he ran up to me and tugged at my shirt saying, "Let me see! Let me see!"

    "It's not a digital camera," I told him. "It's film."

    He walked away with a dejected "Oh..."

    I sighed. "...I guess you don't even know what that is." None of our family friends still use film.

    Kids these days.

    I love the bordered negative carrier I was using, by the way.

    Some selects from the Facebook set of New Year's photos:
    Toasting
    Group portrait

    Those shot glasses were made out of frozen Kool-Aid, by the way.

    And oh, what the hell. A photo of Jenn's cats that we're taking care of right now, because it's the first thing I've shot with my good digital camera in almost a month now.
    Kitty Love

    ---

    In other news, I checked out House of Leaves from the library today, because Glenn mentioned it to me and it seemed like something I'd enjoy. Read up on the formatting of the book and you'll see why I'm so interested in it.

    I've already got a few things to say and a few quotes to hand out. Stay tuned.

    A Resolution

    It's 21 days in, but I think I finally have a resolution.

    I need to shoot more pictures. Something about the past two weeks has been nagging at me to do so. Opportunities, messages, conversations -- everything's telling me that I miss the days of shooting like a madman.

    So the moment I finish doing all of this crazy website development for the Maneater (lord help me) and some of these other freelance jobs I have going on, I really really really want to start taking up photo assignments again. Of course that's contingent on finishing that major project first.

    I have a camera and lenses -- worth too many months of rent -- that I worked so hard to get... And I haven't even used it more than once or twice in two months. And that just sucks.

    If all fails, it'll give me more things to post on this ol' blog of mine: I'm averaging 1-3 things per month right now. I know I love the distraction of reading other people's blogs, so I'm sure (or at least, I'm hoping) it'd be appreciated.

    In the meantime, for the couple people who haven't already seen 'em: Some of the photos I got developed today. And the full album's here on Facebook, publicly accessible so you don't need an account there.

    $7 roll of film in a $5 cheapo camera = priceless.

    Lauren

    Moody Sara

    Intensity

    Intensity is the word this year because I've been bringing a lot of it. I've got an attitude like "no more bullshit, I'm getting things done." I've been working for real, instead of slacking off. I've been learning new things. I've gotten out more. I've been more brutally honest. Or maybe just more brutal. Confrontational. I seem to have lost some (or a lot?) of the restraint I had.

    It's come to my attention this week that I'm prone to ranting again. That my verbal assaults are more piercing and drawn out than they'd been. I've had no less than five conversations this week in which I probably came down too hard (with one of truth, frustration, anger, or depression) on the ears that had the misfortune of being tuned to my voice.

    Did I really just tell her that?

    Did I really just go off on him?

    Maybe it's all of this work that I'm trying to get done before school starts up again.

    It sure isn't the alcohol because of my relative sobriety for most of these conversations and the fact that this hadn't happened before in similar circumstances.

    Maybe it's just the culmination of a lot of things that have built up for weeks, months, and years for me.

    Whatever the reason, I'm evidently more high-strung than I used to be.

    ---

    A year ago I sat at my favorite coffee shop with a few friends of mine, joking around about growing up and getting old. Joking around about that "bitter old man" stereotype.

    "Maybe I’ll grow up to be bitter," I told them, "just to spite all of you."

    I said this with the biggest, most amused smile on my face.

    "Tigas, I can’t possibly picture you ever being bitter," one of them said. The tone in her voice as if I was winning the yearbook award for "Least Likely To Be A Bitter Old Man."

    I was happy and fine then, in spite of the shit I'd been through. And I really can't tell you what's changed between then and now.

    Every so often I hit these low points that seem completely unrelated to anything in my life. It's a nonsensical feeling along the lines of "not having a very good time" that pops up at random occasions when (as far as I know) most of what I've got and what I'm in the middle of is as good as I could ask for. Family, friends, work, school, it's all going pretty well right now -- and how often has that happened for me in the past what, four years?

    And that's part of the reason I feel like I need change so much: especially with relation to how my life is going, I don't think I'm enjoying myself as much as I used to. I have a lot of what I want, but I don't seem to want what I have. It's like I don't really feel like myself in these places and circumstances anymore.

    On and off for months I've become worried that (self-prophecy be damned) I'm turning jaded and bitter at the world.

    Twelve days in and I'm already wondering what this year might turn out to be.

    ---

    I know I only wrote the vague feeling and the sense of these things and not any underlying reasons. This was intentional. And there are no guesses to reasons here, either. For everyone's sake, I'd rather thoughts like that usually stay off the record.

    Clean Break

    Transitioning between the ramp and the highway, I burst into laughter.

    It was 5 AM.

    January 1.

    2008.

    Finally, the new year. Something to get away from what I wrongly thought would be "lucky number seven." Up to this point, sevens were always lucky for me. Ask my parents: I was born on March 7, 1987, just before 7pm, weighing in at 7lbs, 7oz. If you were like me, you'd love to believe this means something.

    Finally, 2008. My symbol of finally having beaten the odds by surviving 2007.

    I was laughing to myself in my car.

    It was 2008. And I'd already had a couple of real good, heart-to-heart conversations this year.

    To think -- one of the more uneventful crushes I had last school year... (Uneventful? Well, look at what happened to other crushes I'd had. Between "groupcest," general drama, being played, or friends and I falling for the same girl at once... sheer normalcy was uneventful in itself. Or is there such a thing as "normal" these days?)

    In a strange way, it apparently wasn't uneventful as I'd thought. To me, perhaps it was, but it was a bit more connected for a few others close to me.

    I'm not sure what was worse -- the mild jaw-dropping feeling I got as she spoke to me, or the odd and interesting side story that I couldn't tell her.

    I should have figured things weren't actually as simple as I'd thought.

    I reverted back to being shy and cautious last year and I guess that whole situation is precisely what I'd avoided. Unknowingly and jokingly, she told me that I "should be proud" of this.

    I laughed to myself on the highway.

    If she only knew.

    ---

    The lowest points of this year represent the lowest I've ever felt in almost every aspect of my life: mental, productive, social, spiritual, and emotional. I remember staring myself down in the mirror not too long ago and seeing the broken shell of a persona that used to be smarter, happier, friendlier, more caring, and more enthusiastic than the man in the mirror.

    Groucho Marx once said "I've had a perfectly wonderful evening. But this wasn't it."

    I think back to three, four, five years ago and in my mind some of those things actually seem more authentically "me" than some of the things I've done this year. Especially over the past three or four months, I feel like at times I've been becoming nothing more than a shell of a man and simply going through the motions of the day.

    I've been myself before. But this wasn't it.

    It's not that I'm in a bad spot right now or that my life right now is all that terrible -- far from it. But, I've been getting this feeling lately, as if I'm coming to the realization that I'm not really attached at all to these things I've surrounded myself with and the actions that I pursue day in and day out. I'm just going through motions where once I had a drive and a belief upon which I acted on.

    My sense of "belonging" has been fading in and out like it's decided on something random like a coin flip.

    And while I'd like to blame the past year on that reason, I know it's just part of the mess. It's like saying "my desk is messy, I should clean it" when you haven't looked at your closet yet.

    I'm going to admit that I'm finally trying again. In school and in my external life. Cleaning some of that stuff up, if you will.

    ---

    Luck was on my side tonight and I want to believe it means something for the upcoming year. A couple of near-miracles, just enough to tease some hope out of me:

    In a game of "up the river, down the river" (essentially a 14 card one-man "higher or lower" drinking game) I made it up the river (first seven cards) and nearly the entire way back flawlessly, only guessing the last one wrong. Never seen a perfect game in my life, and I've never seen anyone come as close as the very last card. That's damn well bringing a perfect game into the ninth inning and giving up a hit to one of the last two batters.

    And in a game of beer pong, facing a six cup loss, I nearly made a miracle happen by sinking five straight cups on rebuttals. Finally, we lost on the sixth. It's like being down 30-7 going into the fourth quarter, making a miraculous comeback, but not being able to put up the final score to win the game.

    If you were like me, you'd love to believe this means something. Like "I'm going to do something nearly miraculous this year, but come up just short." Hell, I hope not.

    ---

    I learned a lot about myself last year. But I also realized that I've lost track of who I actually am.

    If I say I'm going to go "find myself" this year, I'm going to say it with honesty. (Or at least I'll go find a few more things to add to the list of "things I'm not.")

    I'm going to go find myself and some faith. Faith in myself, my friends, my family, humanity in general, and any higher power out there. Seems like faith's been hiding from me for a long, long time now.

    The sun comes up in an hour. Though I'll be asleep by then, I'll be excited for it.

    Everyone here, is wondering what it's like to be with somebody else
    Everyone here's to blame,
    Everyone here gets caught up in the pleasure of the pain,
    Everyone hides shades of shame,
    but looking inside we're the same, we're all the same
    And we're all grown now, but we don't know how
    To get it back to good
    --"Back 2 Good," by Matchbox Twenty