Not your average regex find-and-replace

December 25, 2008

I was reading through some of the Coding Horror archives, and came across this post examining Microsoft Visual Studio’s use of regular expressions in its find-and-replace dialog. Visual Studio has support for all of the usual regex constructs but throws in a lot of its own quirky constructs too. I suppose they could be useful if you learned to use them.

But this post isn’t about Visual Studio. Jeff’s post contained an intriguing link to Steve Yegge’s blog, where Steve goes over some of the new features in Emacs 22. And despite my being a long-time emacs user, I was pleasantly surprised to learn that you can use elisp with find-and-replace.

Now at first, this may not seem like a big deal. You can do a lot with a plain vanilla find-and-replace (M-x replace-string and M-x query-replace (also bound to M-%)), and regex find-and-replaces (M-x replace-regexp and M-x query-replace-regexp (also bound to C-M-%)) are damn powerful. But sometimes, when a sed script won’t do, an elisp find-and-replace can save you a lot of pain.

To do an elisp find-and-replace, do a regular replace-regexp, and set the replacement expression to \, (backslash-comma) followed by an elisp expression. You can use backreferences \1 through \9 as string variables, and you can use \# as an integer variable that is the total number of replacements made so far.

Steve has a number of great examples which I’m not going to repeat here, so I encourage you to go over there and eat ‘em up.

I was eager to try them out, and seeing as how Emacs 22 is over two and half years old, I figured my current Emacs install would be up-to-date. Not so – my MacBook was still running Emacs 21.2.1, which came installed when I bought it in 2006. Fortunately, with MacPorts installed (HIGHLY recommended for anyone running OS X), upgrading was almost as easy as running

sudo port install emacs

I did install instead of upgrade because my emacs install was the default one that came installed and I hadn’t migrated it into MacPorts yet. I said it was almost that easy because after it installed and I went to run it, the old Emacs 21 ran instead, even though the MacPorts binaries directory /opt/local/bin precedes /usr/bin in my $PATH. It turns out that bash uses a hash table, of which I was previously unaware, to cache where frequently used commands are located to avoid searching your $PATH frequently. To fix this, just run hash -d emacs to delete its binding for emacs (or hash -r to clear the entire table), and you’re good to go!

Comments Off

The Infamous Red Ring of Death

November 28, 2008

About two and half weeks ago, my Xbox 360 gave me a Red Ring of Death, indicative of a general hardware failure.

Red Ring of Death

It’s about two years old now, and there weren’t really any warning signs.  I went to turn it on, and….it didn’t.  Most RRoDs are caused by overheating; I generally keep my 360 well-ventilated, and I definitely don’t leave it running for long periods of time when I’m not playing it.  I’m going to chalk this one up to poor hardware design and workmanship.

I immediately called 1-800-4MYXBOX.  Boy were they unhelpful.  The automated voice-activated menus were a pain to work through, and I had to repeat myself several times to get what I wanted.  Why can’t we just have a plain old “Press 1″ instead of say “Three flashing red lights”?  It’s easier for everyone.

After wasting my time with that, I instead went to xbox.com/support and had a much easier time.  It took me less than five minutes to file a support ticket and print out a pre-paid shipping label (I also had the option of getting a box shipped to me, but that would have taken longer obviously).  No human interaction required.

The next morning I brought my 360 down to the UPS Store and had it shipped off to the repair center in Mesquite, Texas.  It took about a week to get there, a couple days to get fixed, and another week to come home.

Now it’s back to Mega Man 9!  I’ve completed all 12/12 achievements (200 points) and 34/38 challenges.  All I have left are “Beat the game without getting hit”, “beat the game while picking up only 8 energy capsules”, “beat the game 30 times”, and “beat every boss with 1 hit point left”.

The Green Ring of Life is back, but for how long?

10

Slashdot Easter Egg

October 11, 2008

Did you know that every time you view a page on slashdot, you’re given a random Futurama quote? Most people don’t, since they’re hidden away in the HTTP headers, so you’ll never see them via normal web browsing. I discovered this one time when I was playing around with cURL. Here’s a sample HTTP trace:

adam-rosenfields-computer ~$ curl -I slashdot.org
HTTP/1.1 200 OK
Date: Sat, 11 Oct 2008 04:16:23 GMT
Server: Apache/1.3.41 (Unix) mod_perl/1.31-rc4
SLASH_LOG_DATA: shtml
X-Powered-By: Slash 2.005001224
X-Bender: Boy, were we suckers!
Cache-Control: private
Pragma: private
Connection: close
Content-Type: text/html; charset=iso-8859-1

-I is the option for doing a HEAD request instead of a normal GET. So, a quick and dirty script to generate a random Futurama quote is:

curl -I slashdot.org 2>/dev/null | grep '^X-' | grep -v '^X-Powered-By'

This works since all of the quotes are under a header name beginning with X-, e.g. X-Bender, X-Fry, or X-Leela. I’m not sure how many total quotes there are in the database, but you could probably get a good estimate by sampling a large number of times and counting how many unique quotes and how many duplicates you get, and then extrapolating.

Comments Off

Even Sony uses Free Software

September 28, 2008

I just purchased a new 46″ HDTV, the Sony Bravia KDL-46V4100, and boy is it sweet. But I’m not here today to advertise TVs to you. I was reading through the various documentation that came in the box, and I came across a copy of the GNU General Public License and the Lesser General Public License. Even Sony uses Free Software in their televisions.

The 46V4100 includes the following GPL’ed software: Linux Kernel (no version number mentioned), busybox, and pump (no idea what this is). Under the LGPL, it contains glibc. Other software listed includes Independent JPEG Group Software, Software Developed by the OpenSSL Project for Use in the SSL-Toolkit (SSLeay License), Freetype2, Expat, cURL, and Popt.

Comments Off

Brothers in Arms: Double Time

September 26, 2008

After a long wait, Brothers in Arms: Double Time finally came out this past Tuesday on the Wii. I’m not really a fan of war games or of first person shooters, so why do I care? Well, it’s my first game credit — I was a developer on it during the summer of 2007 when I was an intern at Demiurge Studios. It sure is exciting to see a game on sale on GameStop that, when you go to watch the credits, has my name in it.

Brothers in Arms: Double Time box art

And if you do so, you’ll notice that the programming team at Demiurge is listed alphabetically by first name, except for me. I was added to the project midway through development. The credits had already been (mostly) done before I joined the team, and then they slapped my name onto the end of the list; nobody ever bothered to resort it afterwards. Was it intern bias? Nah, I think they just didn’t think to resort it.

Double Time is a port of the two games Brothers in Arms: Road to Hill 30 and Brothers in Arms: Earned in Blood to the Wii. The two games were originally made by Gearbox Software for the Xbox in 2005; they had been previously ported to the PS2 and Windows. Gearbox contracted Demiurge to do the Wii ports. If you’re into war games, you’d probably enjoy Double Time, since it’s not your typical run-and-gun shooter — you (gasp) have to use tactics to beat it.

You should all go down to your friendly neighborhood video game store and buy Brothers in Arms: Double Time! Two great games for the low price of $50!

Comments Off

Mega Man 9

September 23, 2008

Mega Man 9 just came out yesterday for the Wii Virtual Console. It’s an old-school 2D platformer in the style of the original Mega Man series (MM1-6), with 8-bit graphics and sounds. The developers even made some promotional box art, reminiscent of the original Mega Man box art. Unfortunately, since the game can only be downloaded, only a select few will be able to get their hands on the boxes.

Mega Man 9 will be coming out for the Xbox Live Arcade and the PlayStation Network in the near future; I’m going to wait until it does so to get it. Not only is the Xbox 360 controller far superior to the Wiimote for platformers, but the XBLA version comes with some of the most hardcore achievements of almost any Xbox 360 title to date.

Being an XBLA title, it’s already at a disadvantage compared to regular Xbox 360 games — only 200 achievement points instead of 1000. In most games, you can often get about 1/4 to 1/2 of the achievement points by playing through the game and beating it once. Some games, though, especially the ones that came out early in the 360′s life, are pathetically easy – if you pick the right games, you can get 6000 points without really trying.

But Mega Man 9 is different. Beat the game, and you get a paltry 5 points out of 200. Scoring all 200 points is worth some serious bragging rights, but you’re playing the wrong game if you’re a Gamerscore whore.

Comments Off

Digital Restrictions Management

September 12, 2008

A topic that has come under a lot of scrutiny recently is that of Digital Rights Management (DRM) in PC games, also referred to by some as Digital Restrictions Management. The most prominent titles featuring DRM are BioShock, Mass Effect, and, most recently, Spore.

The sad thing is, DRM hinders the legitimate users without stopping the pirates at all. In the case of Spore, the DRM was cracked and the game was torrented a day before it released. Countless people have complained over the overly Draconian policies, such as you’re only allowed to install the game a total of 3 times anywhere (even if you uninstall it), and you have to have the CD-ROM in the drive to play.

The fan backlash to this has been incredible. So incredible, in fact, that over 2000 people have given Spore a review of 1 star out of 5 on Amazon. As of this writing, 2005 out of 2202 reviews are 1 star.

Spore reviews on Amazon.com

I hope this really sends a message to EA: we don’t want Digital Restrictions Management, and we’re going to hit you in the wallet for it. A small number of people boycotting the game for DRM will hardly make a dent in EA’s bottom lime, but a loud presence on Amazon certainly will. I, for one, am not buying Spore because of its DRM.

Here are two polls about DRM:

The ZDNet poll is obviously very biased, since the article in which it appears is strongly critical of DRM. On the other hand, I think the GameFAQs poll paints a very good picture of the situation: most PC gamers have been somewhat inconvenienced by DRM or outright hate it. Where do you stand?

1

Happy 10th birthday, Google!

September 7, 2008

On September 7, 1998, Google was first incorporated as a privately held company. Happy 10th birthday! What a decade it has been for Google. If you haven’t read it already, I highly recommend reading The Anatomy of a Search Engine, the original paper published by Larry Page and Sergey Brin in 1998 while they were developing the first version of Google at Stanford.

Some other papers about other Google technologies which I also recommend reading:

  • MapReduce: a framework for scaling data processing to thousands of computers, based on the functional programming primitives map and reduce.
  • BigTable: a database which scales to petabytes of data. Conventional relational databases scale to reasonably large sizes, but not the enormous amount of data that Google needs to work with.

(What, you thought this post was going to be about Chrome?)

Comments Off

Pizza Party

September 6, 2008

Domino\'s Pizza
Domino’s Pizza allows you to order pizza over the Internet. For Unix geeks like Cory Arcangel, the natural extension to that is ordering pizza from the command line. Why bother bother dealing with a web browser and all those messy flash applications when you can just type

pizza_party -pmx 2 medium regular

to get two medium regular-crust pizzas with (p)epperoni, (m)ushroom, and e(x)tra cheese? pizza_party is a Perl script which parses the various options and login info and generates a few HTTP requests to the right places, complete with a man page. I’m particularly amused by the line from the README:

if you don’t know how to install Perl modules, you’re clearly not hard enough to be ordering pizza at the command line.

I haven’t tried it out yet, mostly because I don’t have a Domino’s account and I’m not a huge fan of theirs, but I’ll give it a shot next time I’m in the mood. pizza_party requires your username and password, either on the command line or from the .pizza_partyrc file (stored in plaintext), so if you use it, don’t use a password you use for anything else. No credit card information is involved at all, you pay on delivery as usual.

Enjoy!

Comments Off

Wireless tools for Mac OS X

September 1, 2008

I’ve been having some trouble with my MacBook on a certain wireless network. OS X has some pretty good GUI tools for configuring the wireless Airport, but sometimes you need a good command line tool for debugging. Linux has a pretty good set of tools for this: Wireless tools for Linux. Despite OS X’s being built on Unix, no such tools are available.

Upon googling for command line wireless tools os x, the first hit was exactly what I was looking for. At the moment that site is down, but Google’s cache saves the day.

It turns out that OS X comes with a nifty little tool called airport, but it’s not on the default path and buried deep inside the file system. I added to my path:

% sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport

To print a list of wireless networks currently in range:

% airport -s

To print the current wireless status:

% airport -I

To connect to a specific network SSID:

% airport -A<SSID>
2