Home

Customer Support - A Three Act Story

Aug 18, 2010

I recently switched cell phone providers.

Me
"Hi, I'd like to know when you're launching in Vancouver?"
Them
Silence.
8 days pass.
Them
"Thanks for the email it is greatly appreciated. We can't say when. Keep refreshing our site!"
Me
... "You and your pre-customer care suck."
Me
"Hi, my SIM card still has my temporary number. How do I fix this?"
Them
"We don't know. I attempted to browse the internet for an answer but was unable to find one."
Me
... *googles* ... "Please do one of these things: ..."
Them
"Thanks for contacting us, it’s appreciated. Try resetting your phone."
Me
"It's not the phone. I already tried that. Just tell me X."
Them
"Ok."
Me
"Hi. I can't listen to internet radio or use IRC because you block all non-trivial ports. Look at this netstat report. I want real internet, how do I get it?"
Them
"Thanks for your email to WIND - the power of conversation! Please tell me your phone make and model and which applications you are having problems with. Don't hesitate to join us for a conversation over instant messaging at WIND!"
Me
*facepalm*

I'm usually a pretty calm person, but customer support just drives me up the walls. Why do we let these big corporations talk to us in these utterly bizarre newspeak voices in the name of Customer Service? I'd much rather deal with a computer... then at least I know it can't help being dumb. :/

My JS1K Demo - The Making Of

Aug 06, 2010

If you haven't seen it yet, check out the JS1K demo contest. The goal is to do something neat in 1 kilobyte of JavaScript code.

I couldn't resist making one myself, so I pulled out my bag of tricks from my Winamp music visualization days and started coding. I'm really happy with how it turned out. And no, it won't work in Internet Explorer:

Original Version

Edit: OH SNAP! I just rewrote the demo to include volumetric light beams and still fit in 1K:

New and Improved Version


(the music is not part of the 1K, but it does make it more enjoyable)

Now, whenever size is an issue, the best way to make a small program is to generate all data of the fly, i.e. procedurally. This saves valuable storage space. While this might seem like a black art, often it just comes down to clever use of (high school) math. And as is often the case, the best tricks are also the simplest, as they use the least amount of code.

To illustrate this, I'm going to break down my demo and show you all the major pieces and shortcuts used. Unlike the actual 1k demo, the code snippets here will feature legible spacing and descriptive variable names.

Making Worlds: 4 - The Devil's in the Details

Dec 25, 2009

Last time I'd reached a pretty neat milestone: being able to render a somewhat realistic rocky surface from space. The next step is to add more detail, so it still looks good up close.

Adding detail is, at its core, quite straightforward. I need to increase the resolution of the surface textures, and further subdivide the geometry. Unfortunately I can't just crank both up, because the resulting data is too big to fit in graphics memory. Getting around this will require several changes.

Strategy

Until now, the level-of-detail selection code has only been there to decide which portions of the planet should be drawn on screen. But the geometry and textures to choose from are all prepared up front, at various scales, before the first frame is started. The surface is generated as one high-res planet-wide map, using typical cube map rendering:

This map is then divided into a quad-tree structure of surface tiles. It allows me to adaptively draw the surface at several pre-defined levels of detail, in chunks of various sizes.

Kindle Faux PDF Zoom

Dec 18, 2009

Through the miracle of xmas, I acquired a Kindle. A sleek e-reader, but also a shameless vehicle for Amazon's digital book store. But with the latest firmware installed, they do make for great PDF readers... in theory.

Kindle PDF fail

The good news is that the e-ink display on the Kindle is indeed pretty sweet. It works so well that the screen looks positively fake when it's not changing, as if it was just a display item in a shop somewhere. But the bad news is that the software needs a lot of love.

The included PDF reader for example has no zoom option. All you can do is toggle between portrait and landscape. Either way, normal sized text ends up tiny and barely readable.

Thankfully, we can still do it ourselves. Armed with PyPDF I wrote a simple script that takes a regular A4/Letter PDF and chops each page into four parts. You can pan through the document just by hitting next. Most of the stuff I read these days is academic, in the classic two column paper format, so this orders the sub-pages to match that.

Making Worlds - Intermission

Nov 07, 2009

Today at BazCamp YVR I gave a short presentation and demo of my "Making Worlds" project, as well as an overview of procedural content generation in general.

The slides are available for download.

Tron

Making Worlds: 3 - That's no Moon...

Nov 05, 2009

It's been over two months since the last installment in this series. Oops. Unfortunately, while trying to get to the next stage of this project, I ran into some walls. My main problem is that I'm not just creating worlds, but also learning to work with the Ogre engine and modern graphics hardware in particular.

This presents some interesting challenges: between my own code and the pixels on the screen, there are no less than three levels of indirection. First, there's Ogre, a complex piece of C++ code that provides me with high-level graphics tools (i.e. objects in space). Ogre talks to OpenGL, which abstracts away low-level graphics operations (i.e. commands necessary to draw a single frame). The OpenGL calls are handed off to the graphics driver, which translates them into operations on the actual hardware (processing vertices and pixels in GPU memory). Given this long dependency chain, it's no surprise that when something goes wrong, it can be hard to pinpoint exactly where the problem lies. In my case, an oversight and misunderstanding of an Ogre feature lead to several days of wasted time and a lot of frustration that made me put aside the project for a while.

With that said, back to the planets...

Normal mapping

Last time, I ended with a bumpy surface, carved by applying brushes to the surface. The geometry was there, but the surface was still just solid white. To make it more visually interesting, I'm going to apply light shading.

Recent comments

Images