The Top

Inspired in a roundabout way by a recent Ask MetaFilter question, and fueled my desire to procrastinate a little longer, here’s my take–in no particular order–on the top songs ever. I started off as a blanket list of songs were good, but kept whittling it down until only the best songs ever remained.

  1. Pink Floyd – Keep Talking: Not only does it sound great, but find me another song with a guest appearance by Stephen Hawking. And, unlike some of their other songs, it’s pretty “normal” and upbeat. (However, High Hopes takes a close second for Pink Floyd songs, and honorable mention goes to Run Like Hell, Cluster One, Learning to Fly, and the rather creepy One of My Turns. And The Happiest Days of Our Lives, but only if you play it loud.
  2. RHCP – Snow (Hey Oh): I’m hesitant to include things I’ve loved for less than a month, but I’ve liked the Red Hot Chili Peppers for years and years, so it’s not like I’m throwing a Top 10 spot into something unfamiliar. (Their Aeroplane is a close second.)
  3. Jimmy Eat World – Hear You Me: Many of the songs I love turn into lists of other great songs by that author. This isn’t so with Jimmy Eat World–some of their other songs are so-so. This one has secured a spot in the top, though. It’s always been a good time, but have it come up on Shuffle when someone close to you has died and tell me it isn’t wonderfully appropriate. I also tend to not keep downbeat songs in my playlists, but this one–even with all the associate sadness–stays in. You owe it a listen.
  4. Creed – One: I think I own a couple Creed songs, but I might rank them in the Top 100 artists in my playlist. But something about this song propels it into the Top 10. Part of it’s just that it sounds great. It also has a neat sort of “burst of energy” that keeps you from just playing it as background music. And the lyrics are excellent, too. (Actually, one might copy-and-paste this text for Green Day’s American Idiot, although I rank One higher.)
  5. The Fray: I just can’t decide which one. I confess that Iliked them so much that I almost did something vile–bought a CD. I didn’t, but if ever I came close, it was upon hearing their other songs. You’ll surely recognize How to Save a Life and Over My Head (Cable Car), but some of the others–All at Once, Heaven Forbid, Little House, Look after You, and She Is are all as good.
  6. Smashing Pumpkins – Today: Out of a band that does a lot of, err, melancholy, songs, a beacon of happiness. (I think.) And don’t skip the beginning, which caused my classic, “I forgot about glockenspiels!” line. (But really, when was the last time you thought about glockenspiels? I’d gone years without so much as remembering their existence. I might not think about coconuts more than every few weeks, or ventriloquists more than once a month. But glockenspiels? It’s been years.)
  7. Nirvana – Smells Like Teen Spirit: Amid a sea of nice calm, upbeat music, we need something that can only be described as loud. This is it. Unintelligible lyrics? Check. Screaming, without being “heavy metal” that grates on my nerves? Check. But the real reason for including them? Lyrics like “a mulatto, an albino, a mosquito, my libido” are a reminder that sometimes, just every now and then, a song doesn’t have to make any sense at all to be good.

In lieu of finishing a Top 10 list, I’ll leave you with three songs that I bet you heard years ago but forgot all about–the glockenspiel factor.

  • New Radicals – You Get What You Give.
  • Spacehog – In the Meantime.
  • Primitive Radio Gods – Standing outside a Broken Phone Booth with Money in My Hand.

Starting Writing

I’ve been asked to write an article for the school paper on what will probably be a front-page issue. Combined with the police logs and a burning desire to write a letter to the editor, I’ve realized something.

I hate writing introductions. Here, I can just start in with terrible openers like “So…” But “So, like, some girl got meningitis” would probably not fly as an opening line in our paper. So right now my introduction is, “Great, gripping introduction goes here,” with a big highlight in Word to remind me to not submit it that way. The vague alliteration with g‘s was to amuse me as I wrote it.

What I really enjoy doing is writing phrases. This isn’t to suggest that I can’t turn phrases into sentences, sentences into paragraphs, and paragraphs into a full… things. I can. But for the letter to the editor, something I have no obligation to write (and something that they may well choose not to run anyway), I’m free to work as I please.

So I have some things scrawled down: “foisting their preferences” and “a smug sense of self-entitlement,” for example. They reflect the wonder that is finding the perfect word to get something across. I could have said “forcing their preferences,” and probably would have if I wasn’t allowed to randomly scribble down phrases I liked. Similarly, I’d probably have said, “arrogant” if this was an article I had to rush and couldn’t take creative liberties with. But it’s a letter to the editor that I can submit whenever I please. And besides, “arrogant” sets off bells as being an ‘attack word.’ Calling it “a smug sense of self-entitlement” flies just below the radar, introducing an edge of snippiness without being as overtly offensive at “arrogant.”

And here I am, writing about how I should be writing something else…

This Is My Hobby

I want to start a “meta ISP.”

When you sign up with your ISP, you’re paying for transit. They carry your data from one network to the other.

But now let’s say that I’m a mediocre residential ISP. I buy connectivity from a couple different upstream providers, and use BGP to make sure your data takes the fastest route. This is what most people do. It works.

Let’s further say that you run an extremely popular site, maybe one of the top 100 sites out there. You have a mediocre IT team. You have enormous bandwidth, coming in from three different carriers. You, too, use BGP to make sure that your outgoing traffic takes the quickest route.

So everything works. Traffic flows between the two networks. What’s the problem?

Well, it turns out that you, Mr. Big Site, have some of your core routers in a major data center out this way. And I, Mr. Big ISP, also have a few core routers in that building. This is really pretty common–there’s a (very aptly-named) network effect with transit. When several big guys move into a building, all of a sudden, more people want to be there too. So you get sites like One Wilshire, a thirty-story building in LA full of networking equipment. They’re very confidential about their tenants, but “word on the street” is that every network you’ve heard of, and plenty you haven’t, is in there. (When viewing that picture, by the way, it’s worth noting that these wires don’t go to some secretary’s PC. Each is probably carrying between 100 Mbps and 10 Gbps of traffic between various ISPs and major networks… Also an interesting note to the photo, they supposedly keep an elaborate database and label each wire, so that this huge rat’s nest is actually quite organized.)

Since we’re both huge companies, we’re each paying six figures a month on Internet. But when one of my customers views your site, they go through a few different ISPs, and across multiple states, before it arrives on your network. It’s asinine, but that’s how the networks work.

So we wise up to this. I call you up, and we run a Gigabit Ethernet line between our racks. And all of a sudden, life is peachy. Data travelling over that line–my customers viewing your site–is free. My bandwidth bills drop, and speeds improve, too. This is the world of peering. And, strangely, the mutually-beneficial practice is rarely done.

I think there’s a market for a big middleman here. The last mile (that would be a good book title, if a telecom magnate wanted to write his memoirs) is difficult–running lines to consumers’ homes. Similarly, it’s hardly trivial to become a Tier 1 ISP, a sort of ‘core backbone’ of the Internet. But an intermediary broker? Easy enough to do.

So you’d get space in the major exchanges, and peer with popular sites. Google, Yahoo, MSN, Youtube, Facebook, eBay, Myspace, Amazon, Akamai, etc.

Dork

Yesterday was, for all intents and purposes, a snow day. They closed the school down at 1. Of course, I had no classes anyway, just some work that could be done anywhere. But this was a snow day. You don’t do work. At least, not the work you’re supposed to.

Kyle, always being curious about the hardware side of things, sent me a link to the RoomWizard downloads page after fishing out the hardware specs elsewhere. There were two things that interested me–one was that you could download a firmware image. The other was that they had a PDF of how to use their API.

Wait… API? That means… it’d be trivial to write an interface to these things!

The problem is that the manual never mentions the actual address of the API, which is just accessed over HTTP and returns XML. They give a few examples–/rwconnector is used most often. But alas, /rwconnector on these throws a 404.

Somewhat discouraged, I started poking around the firmware image. It’s a .tar.gz, and extracts… a (fairly) normal Linux filesystem. Besides some juicy stuff that I hope admins are instructed to change (there are several privileged user accounts), I also found some neat stuff. For one, it’s based on SuSE, but a very trimmed-down version. And it’s basically a full-functioning Linux machine, including an SMTP server, Apache Tomcat, etc.

But then I hit gold. There’s a configuration file for Tomcat, which mentions one URL of /Connector. So I fired it up and tried it in on one of the systems. Bingo!

So then I read a bit more of the API manual. It’s actually very simple–you can retrieve, edit, and delete bookings. (The edit and booking doesn’t let you do anything you can’t do via the web interface, by the way, lest anyone think this is a security flaw.) You get an XML document back with results.

So then I had to figure out how to get PHP to parse XML. It turns out that PHP actually has several ways to do it, including SimpleXML and DOM objects. I spent a while learning it and by the end of the day, I had a prototype working that would get reservations for the next 24 hours and parse out the information. (Small tip–don’t try to “escape” colons when dealing with XML. They denote a namespace. When you get rb:name, for example, the tag name is just name, in the rb namespace. Knowing this a little sooner would have saved me about half an hour of, “This code is so simple! Why doesn’t it work?!”)

The next step is to insert all of this into an SQL database, and then write a nice viewer for it. And also to experiment with adding bookings, although that should just require changing a line of code.

I haven’t actually written code to do timing, but it feels like it’s 1-2 seconds for me to get the XML data back, which suggests that the bottleneck is in its little database. Short-term, I want to write myself a little interface that will parse all the data, cache it, and give me a faster interface. Long-term, I want to try to see if I can get the library to adopt this, and have it be the booking mechanism. You can store them to a local database, and then have a background process use the API to push reservations out to the respective RoomWizards, so that they continue to function normally. But when people view the page, it’ll just get it all from the local database, meaning that the whole “Get the listings via API” thing is no longer necessary. (Unless you want to rebuild the database in case of a disk failure!)

Criticizing Web Apps

As long as I’ve posted a lengthy diatribe about how awful the library room-booking web interface is, there are two more that drive me nuts.

We have a way of putting in work orders for maintenance. Last semester I tried to open one of our windows and it just fell out. This semester, we had three different light fixtures burn out in 2 days time. So you go online and put in a work order. This is a great thing to have web-based. Except they picked this insane system that opens multiple browser windows, resizes your browser (?!), uses copious JavaScript requiring you to double-click on links… And it only works in IE. Oh, and there are irritating things that could be fixed with one line of code… You log in with your student ID, which is eight-digits that inexplicably have an @ sign in front of them. So they have this big note on how you cannot use the at sign, you must only use your eight-digit number. One line of code could just strip it out if it was included.

Much like booking library rooms, submitting help tickets is a Programming 101 exercise. In fact, it’s easier than the library interface, because you don’t have to do time calculations. You have an employees table, a clients table, and a work table. Tasks get entered into work by the client, and the staff assigns an employee to it. And when it’s done, you set work.status to “Complete,” a simple ENUM field. This is like 45 minutes of coding, although I’d probably spend more time prettying up the interface.

Then there’s the computer help desk, another web app. For one thing, all the links to it point to an http:// URL. But if you actually use them, it barfs up an error that you must view it over a secure channel. Being a web dork, I just take “s” onto the end of “http” and life is golden. To someone who’s not so good with computers, and who’s already at wits’ end with their computer, they’re probably going to break down and cry, because even the help desk webpage doesn’t work for them.

This, too, only works in IE. In this case, they didn’t have copious bizarre crap (like requiring double-clicking on links), so I set Firefox to pretend it was IE. The page loads okay, but looks terrible, with nothing lining up right. IE and, well, the rest of the world, have differing views on how lots of things are done, but requiring IE really isn’t the best solution. Oh, and as an added bonus, they control your mouse cursor, preventing it from indicating links in any manner. This means that someone took time to write code that does nothing but decrease usability.

But worst of all, even if you use IE like they demand, if you actually try to click on any tickets to view them, you get taken to a random system with a long canonical hostname, which just throws you “HTTP 400 – Bad Request.”

So last night, I submitted a help desk ticket indicating that the help desk is broken. Because, frankly, it doesn’t work. All of its internal links take you to the wrong server (or, seemingly, the right server but with the wrong hostname), and that’s assuming you’re smart enough to get in, by understanding the error indicating that you need to use HTTPS, not HTTP.

Most of these things are sold as turnkey devices, it seems. Maybe I should start a company making them. Apparently, no technical expertise is required to do so.

RoomWizard

Even though I got to a business school and am a management major, my real passion is working on websites.

We just build a new library here, for millions and millions of dollars. We use a tool called RoomWizard for booking rooms. We get a web-based interface to book library rooms. This is a great idea. Unfortunately, it’s so fraught with bugs that it borders on unusable.

The main “bug” is that it’s basically so slow that it’s unusable. I tried viewing the source, and it’s got a HUGE block of JavaScript that’s a pain to read. Most of the page is being generated on the fly with JavaScript. There are times when this is the best way to do something. This is not one of them.

My current understanding–I may be wrong, since I’m still trying to make sense of this–is that each of the touch-screen units on the wall is a webserver. It’s responsible for storing all of its reservations. So when you view the main page, JavaScript has you going out to each of the 20+ rooms and requesting their status. The problem is that this takes forever, probably at least 15 seconds. By the time the page has finished drawing, it’s about time for the 60-second refresh to kick in.

I did a bit of viewing headers. The main page is running on ASP.net, but each individual room controller (probably like a 300 MHz embedded chip?) is running Apache Tomcat. Someone did a quick port scan and found that the devices have a lot of open ports–ftp, ssh, telnet (!), HTTP, and port 6000, which nmap guessed was X11. So I have a pretty good feeling these things are running embedded Linux.

Another problem is that there’s always one or two of the devices that, for whatever reason, are unreachable. So you get errors on those ones.

Booking conference rooms is like a Web Programming 101 interface. You get a basic introduction to SQL databases, and write a little interface. You could run this on an old 1 GHz PC with 128 MB of RAM and have pages load in fractions of a second, especially if you really knew how to configure a webserver. (Turn on APC and MySQL query caching, in this case, and you’re golden.) I cannot fathom why they thought it was a good idea to have a page make connections to 25 different little wall-mounted touchscreens. This places a big load on what have got to be underpowered little units, and is just a nightmare any way you look at it. I really see no benefit to what they’re doing.

Furthermore, this breaks off-campus connections, since you can’t connect to these units remotely.

You convert the wall-mounted RoomWizards from embedded webservers into a little web browser client, and they just pull down the data from the main server.

With a traditional, single database, it would also be easy to write a little search tool–“I need a room on Friday from 3:00 to 5:00.” This is a fairly simple SQL query. This is not a fairly simple question to ask 25 wall-mounted touchscreen things.

I’m tempted to write a little PHP script to go out, retrieve the data, and cache it. Essentially a hacked-together proxy…

Radio

I’m a long-term radio geek, and I’ve realized that the technology interests me more than actually using it. Having worked with lots and lots of radios (I realized that I have three sitting on my desk, all of which I have used in the past 30 minutes), I’ve concluded that I’d like to start a radio company. Our motto would be, “Our radios don’t suck.”

One of my radios is a ham radio, which is front-panel programmable (FPP), meaning that you can punch in frequencies on the keypad. This is pretty common with ham radios. By contrast, land-mobile radios (things that, say, a police officer would carry) very rarely have FPP capability; in fact, the FCC frowns on certifying radios with that capability, except for certain federal agencies that need to be able to reprogram their radios in the field. However, it’s often offered as a software add-on. But even using the ham radio, it’s really hard to use. Part of the problem is that the radio’s probably a decade old, and the print on the keypad has worn off. So I’m guessing at what buttons do.

There are very few radios with a graphic LCD. Dot-matrix LCDs almost seem cutting-edge in the radio world. By contrast, try to find a cell phone that doesn’t have a big color LCD on it. I have an old Garmin GPS III, and still admire that screen. I think it’s four shades of gray, and fairly high resolution. It’s a nice graphic LCD. It’s so much easier to use, and introduces stuff like the ability to “arrow” around a screen, as opposed to trying to use obscure key combinations. I’d actually love to see something like a 2″ by 2″ e-ink display (which, in addition to looking amazing, would reduce power usage), but it’d be a pain since it’s slow to redraw.

Motorola’s MDC1200 technology is practically ubiquitious in the public safety industry, transmitting a 1200 bps data burst containing a four-digit identifier. This could be so easily improved. Put a little $20 GPS chip in it, and have it transmit GPS coordinates on each transmission. (You could also include stuff like battery level, if on a portable, and information on received signal strength. The latter would be useful to run in the background and plot a map of the radio system’s reach.)

Programming is always a pain. Some of Motorola’s radios are programmed in ways that are so obscure that they border on comical. (I think the goal there is security.) I want to write an XML file for my radio. Put a USB port on the side of the radio. Let me hook it up to a computer, or just plug a thumb drive in and reprogram from that. But consider bigger problems, though. Boston PD switched to an “improved” channel lineup last year. Apparently they worked for weeks to pull radios in at the end of a shift, load up the new set of data, but leave the radios set to old configuration, until all the radios had the new programming in them. And then, at a quiet time one day, they broadcast a message telling officers how to switch to the new configuration. Over-the-air programming is possible, but it’s generally used in some specific situations. (OTACS, Motorola’s Over The Air Channel Steering, to direct a radio to switch to a particular channel, and OTAR, Over the Air Rekeying, to send new encryption keys to the radios.) Why not let the system send out bursts of programming data when the radio system is idle, loading up new programming data in the background, until they’re ready? Obviously, all of these programming things need some security constraints, but that’s trivial to implement.

I’m pretty confident that software-defined radio is going to become ubiquitous in the next decade, but no one’s really making use of it yet, except for uber-geeks in labs. APCO’s Project 25 digital voice (IMBE) has emerged as a standard in digital voice, but it’s meant to be made obsolete in the future by a “Phase II” implementation. Various other technologies have come and gone, such as Motorola’s VSELP. And there exist myriad trunking protocols for larger networks. I want to embrace SDR and use it in everything, “future-proofing” radios. (Of course companies have an incentive to not future-proof their hardware, forcing people to upgrade… But you can still make your money on selling software upgrades!)

Oh, and put an SD slot on the darn thing. Record the audio it receives, letting people play back transmissions they miss. Or host applications. (Or, permit programming!)

Languages

I’m learning German. You could stick learning in air quotes, though: I have a million more important things on my plate, and my strategy of playing it in the background while I work, rather than “language through osmosis,” seems to result in nothing but me becoming distracted and irritated.

I signed up for Live Mocha tonight, a neat (free) online service with language lessons. And I decided that learning languages is neat. I learned Spanish in high school, but never enough to be fluent. What’s interesting is that podcasts and VoIP are playing a role, as people can chat in real time with other speakers, and language lessons can be put onto iPods easily.

I’d like to work on picking up a little more German. After that, I’ve come across a decent number of pages in Polish and Slovak (which, to an untrained completely oblivious eye, look similar), not to mention French. And my interest in the Netherlands continues, so Dutch continues. (Not to be confused with Deutsch, the German word for “German.”) Learning either Chinese or Japanese would be helpful, as would Arabic. (Unfortunately, none of these languages really have anything in common, unlike the Romance languages, and supposed similarities between German and Dutch.)

And after learning all those, I’ll move onto Luxembourgish.

Resizing Images and HTML

This post is meant for webmasters, and it addresses a startlingly common problem: images included on pages and “resized” only in HTML.

The basic tag to include an image, of course, is <img src="something.jpg">. That will include something.jpg on the page.

But say that the image is 1600×1200 pixels (2.1 megapixels: big enough to fill your screen and then some, at least for most people). This is way too big to put on your webpage. So what do people do? They do something like <img src="something.jpg" height="480" width="640"> to resize it. This is a very, very bad way of doing it.

The problem is that this shows a fundamental misunderstanding of what the height and width attributes do. They’re essentially ‘hints’ for the browser. The web browser, when it sees an image in your HTML, will download the whole image. In this case, it’ll download your 1600×1200 image, which is probably about 500kB in size. (God help us if you have a whole series of these photographs on your page.) When it sees a mismatch between the specified height and width attributes, the browser will do a very rudimentary (read: very crappy) resize. So not only are you wasting a ton of bandwidth unnecessarily (which also makes your page load very slowly), but the end product is images that look horrible.

Instead, open the image up in your editor of choice. Photoshop CS3 is wonderful, but those of us who can’t justify spending more than $500 on image editing software may prefer a free tool like Paint.NET. Resize the image to the size you desire, and include that image, newly resized, on your page.

You’ll see multiple improvements: your site will use less bandwidth, your pages will load much faster, and your images will look much better. (Also: I’d encourage you to simply omit the height and width attributes if you’re not sure what you’re doing. Writing perfect HTML, you’d set them to the image’s native dimensions, but so many people screw it up that it’s probably safest to just omit them. Every browser I’ve ever used has handled this seamlessly.)

It’s a Game, Sam

Tonight we toured Waltham’s 911 center. They told us to take the elevator up, so all 14-ish of us climbed in. The doors shut behind us, and then… Nothing happened. At all. We started joking about how funny it would be if we had to call 911 to tell them we were stuck in an elevator… in their office. But as the time passed, the joking gave way to a fearful realization that nothing was happening.

A minute later the doors randomly opened and we decided it would be best to take the stairs.

They showed us their dispatch interface… It looks like it’s Java-based, although it didn’t have the stereotypical ugly Swing GUI. The interface was modeled a lot like a mail application: a “tree” on the left, and two panes on the right. The left tree had three categories: Unassigned calls, Active calls, and Closed calls. It’s kind of neat, though: they have a dedicated calltaker, and a couple dispatchers (who answer calls if the primary calltaker is busy). So as he talked to us about how the system worked, we’d watch stuff pop up in the Unassigned category, and a timer would start. With any luck, it’d get moved into the active category in a matter of seconds, denoting that units had been dispatched. They had about half a dozen actives at any given time. Some lasted a few minutes: a traffic stop would pop up and close a few minutes later. Others were much longer-lasting. A call to check the well-being came in as he was talking, so he clicked on it to show us how things worked.

It opened the details up in the main two panes. It showed the address, written directions, and other various stuff. Below that was a scroll list with all sorts of entries, essentially notes each person entered. A few lines from the call-taker: “[Name] hasn’t been seen since Friday” and stuff of that nature. Some of the notes are automatically added. One looks up gun permits at the address. This one was an apartment complex, and we saw the classic message, “Too many gun permits to list.” (But clicking on the address pops up a web browser page listing every single one.) Another note adds, “3 prior calls at this address” or something of the sort.

Below that was a list of every officer dispatched, color-coded to show their current status. We visited an ‘older’ call to show more, and it showed an ambulance and fire engine which had cleared, and a couple officers still on scene. We didn’t go into it, but the buttons suggest that the system will permit the dispatcher to automatically determine which units to dispatch. (There’s also a “Roster” menu item he showed, which lists every single officer, the sector they’re patrolling, and their current status.)

I’m also impressed at how advanced some of their other stuff is. It’s nothing new for every call to be logged, along with all radio traffic. But what is new, at least to me, is for it all to be stored on a computer with a little GUI. The other day I was at Campus Police researching police log entries, and the dispatcher took a (very low-priority) call. An officer was asking about some specific detail, so he just clicked a few things on the computer and played back the call. On the radio side of things, in addition to displaying unit IDs, everything gets logged to disk, too.

He also talked about the psychological aspect of the job, which was actually quite interesting. He had some training material which consisted of past calls (not sure whether they’re from the department or not?). In one, he plays back a female caller who’s screaming and wailing. You hear a passing allusion to a gun, and then get an insanely detailed description of a car, and then more screaming. Thirty seconds into the call, he paused it. “So what’s this call about?” We collectively shrugged our shoulders. He kept playing, and the dispatcher finally asks if someone is hurt. We get a no, and more information about the car. Two minutes go by, and we’re still not clear what’s going on. He stops the clip at that point, and talks about how one of the most important things they do is taking charge of the call.

Then he switches to another one. It starts off the same way–screaming. But the dispatcher here is much better. “Calm down, I need you to tell me what happened.” We get that someone was stabbed, and more screaming. “Just send the police! Send the police!” “Ma’am, they’re already on the way. Who is stabbed? Who else is there?” The victim is named (not that the name is what they needed right then, but I digress). The dispatcher prods a little more about the woman’s condition, and then adds, “Can you go check? Is anyone else there?” “Yes, her husband. He’s screaming.” “Are you going to be in danger if you go check on her?” “Yes. He has a knife!” It’s a neat example, because it really changes things. It starts off sounding like a simple medical call, and the caller utterly fails to mention the guy running around with a knife until the dispatcher prods him for enough details. The first officers arrived about 90 seconds after the call came in, and they show up already knowing exactly what they’re facing.

I’m left thinking that some of these skills are things that could probably be applied elsewhere. All too often we rely on what other people say and do, when it’d really be better to take control over the situation. As a mundane example, this type of thing happened all the time at work, when people would come up to me with rambling stories and questions. So rather than directly answering their questions, you take control of the call. “Do you have a waiting list?” lead me to ask about the size of the group. And from there, I’d either tell them we had no list and make a mental note that we had a group coming in, or I’d tell them we did have a list, but the fact that I’d already asked about the size of their group somehow made them seem more receptive to me taking putting them on our waiting list, as opposed to them not coming in.

The whole dispatching thing is vaguely reminiscent of games, though. Rather than deciding where to place a teleporter and sentry gun in TF2, they’re deciding what police cars and fire trucks to send to a given location. (He described it as something vaguely like chess.) Rather than being a “shoot ’em up” game, it’s a strategy game.