Every now and then I find something that blows my mind at how awesome the Internet is. The first mind-blowing experience for me was more than 15 years ago, when I discovered the Future Crew’s home BBS in Helsinki, Metropoli, was online, and I wouldn’t have to wait months to get the latest demos out of Finland anymore.
Today it was finding 360º panoramas of the moon. Check it out right now. I’ve always wondered what it would be like to stand on a foreign world. And yes, I’ve seen the movie Moon, but it didn’t quite do it for me. These panoramas were really amazing for me, though, probably the closest I’ll ever get to standing on the moon myself.
The Apollo 17 panorama is probably my favourite due to the geography of the area, the boulders and “mountains”. The Apollo 12 panorama is nice just to appreciate how ghetto the lander was and how incredible it is that NASA was able to pull the missions off so well given the technology of the time.
Today’s xkcd is so validating. I first stumbled across the GNU manifesto probably in 1996, when I was in high school. I wanted to teach myself C and a good way to do that was to use the DJGPP compiler, which led me to GNU. I didn’t really think much of it at the time except that these “Free Software Foundation” people took software way too seriously, but I was happy to have a free compiler to play with.
I’ll make a research-oriented entry before long; I promise. I’m starting to get towards writing up some of the cool stuff in my thesis.
I’ve started writing an Itanium tutorial. That document will magically update every now and then as I write more. On the one hand it’s slightly embarrassing how much I’ve written — it’s almost half as much as I’ve written for my thesis so far — but it’s an entirely different kind of writing. There’s really no rigour at all to it. I don’t have to worry about proving things or citing things; I’ve never proofread any of it. I just write whatever pops into my head, which makes it very quick and easy. Primarily it’s for my benefit, so I don’t forget anything and so that it forces me to figure things out more concretely than I would otherwise.
This is a follow-up to this post. Mark was magnanimously amazing and bought an Itanium machine for “the lab”. It’s currently sitting in my apartment. I’ll make another post tomorrow, I expect, where I actually get to play with it properly, but I thought at the very least I’d make a post about the headaches of actually getting it working.
Go through the pictures and read the running commentary because I’m not going to repeat the pictures here.
Sadly the machine is noisy and relatedly probably quite a power sucker. It’s in the corner of the living room, not far from where Jasna’s office is so I’m not going to be able to leave it on very often, I don’t think. The noise would probably drive Jasna crazy.
I should say I still haven’t got a chance to really sit down and play with it — namely play with the assembler — like I planned because HP-UX needs so much more setting up. I’m going to have to install pretty well the entire GNU userland because HP’s userland is absolute garbage.
Don’t worry: I haven’t actually lost my cat. A year ago I did temporarily — for about a day. I made up a flyer and was going to get it printed in the morning, but thankfully she came back during the night.
I just stumbled upon this flyer and thought maybe it could be some use to someone. A quick Google search shows there isn’t much out there for lost pet flyer templates specific to iWork’s Pages application. Maybe this template could save someone a few minutes of work; who knows.
I’ve provided a PDF preview of the template, as well. The flyer was designed to have very little information — only the important information — and to be highly visible. I think it should work well in black and white, though I haven’t tried it. I’m not a graphic artist and I can’t claim it’s good, but in my opinion it’s at least not terrible.
I’ve probably talked before about my serious man-crush on Gisle Martens Meyer. Mostly I just really like his music. Following his blog there’s a lot I can identify with, too. He’s one of the few musicians to do his best to give an explicit “fuck you and thanks for dying” to the music industry at every opportunity. He’s embraced the new reality of music distribution with open arms. Plus he seems very gung-ho about the robot future in contrast to all those losers who throw around words like “apocalypse”.
The reason I like the future is because you can change it.
That sums up a lot about me and why I get so frustrated with friends my age — or usually quite a bit younger! — who are already starting to slip into the conservative “things which are new suck” mentality. It might take me a bit of extra effort to “get” some of the new changes to the world: Twitter is a good example. It would be easy for me to stick to how things were and shake my cane and say “in my day, we wrote blog posts with more than 140 characters!” but I think in the end it’s worth it.
I’m pretty psyched about the future and I want to be a part of it and, I guess most importantly, I want to change it.
Yes, I’m a computer architecture nerd. I expect this won’t surprise anyone.
The recent story on Microsoft ending support for Itanium (side note: this is hardly news. No one ran Windows on Itanium in the first place) rekindled my love affair with the Itanium architecture. Every six to twelve months I become infatuated with it all over again.
My infatuation usually dies down when I realize the Itanium is out of reach for mere mortals. Sometimes I day dream about when I’ve accidentally stumbled into money and I’m able to afford one. It’s hard to find a new Itanium server for under $30k and playing around with the online configurators it’s not hard to run yourself into the half a million dollar range.
Today’s different, though: today I decided to check out Ebay. Used Itanium servers are actually very cheap. Here’s one for $340. It’s only about 6 or 7 years out-of-date, too. Being out-of-date with Itanium isn’t such a big deal since they were never in-date to begin with. The prospect that I might be able to buy myself one as a graduation present — when I have time to play with it — is exciting.
I won’t bore you with the details of Itanium and why it failed in its promise to be the next big saviour, the one computer architecture to bind them all. I was actually going to write about why I love the Itanium so much, but before I knew it I’d written six paragraphs about how beautiful the architecture is and realized no one but me would ever care to read it. Suffice it to say it’s the nicest architecture I’ve ever seen, from the perspective of someone who truly enjoys writing assembly code, the perfect balance between exposing the architecture and hiding away the mundane details that sometime plagued RISC architectures. Whenever someone foolishly asks me about Itanium — don’t worry, I’m usually able to restrain myself — I describe it as “everything SPARC should have been”, SPARC being one of the more elegant RISC architectures to date.
For my purposes it doesn’t matter if Itanium is practical or popular or well-fabricated or none of the above since it’s just for my own enjoyment. One of the biggest problems is that no one’s managed to write a suitable compiler for it. That suits me just fine since I’d rather be writing assembly code by hand or writing my own compiler for it. I’m actually half convinced that if anyone actually is going to write a brilliant compiler for Itanium, one that intelligently takes advantage of all its speculative loads and rotating register windows and similar toys that I like to drool over, it’s going to be a compiler that has a serious leg up in static analysis, maybe for a language that’s been seriously restricted, for which my research would be appropriate.
Well I’m not so arrogant as to think that I can write a compiler for Itanium where so some of the world’s top back-end developers have failed before. Even if failure is nigh guaranteed, it would be a really fun challenge, and it’s always more fun when the challenge is inherent in the beauty of what you’re working with. I think I may have to seriously put aside a few hundred dollars for after graduation so I have this to play with.
This is an addendum to this post where I was trying to make NHL ’94 more challenging.
I’ve all but given up on trying to give the computer an extra useful player in shootout mode. Giving the computer an extra player who stands and does nothing is trivial. Unfortunately, the “AI” for shootout mode is — maybe not surprisingly — hard-coded — it doesn’t even take into consideration the position of the goalie — and rewriting the AI in 65C816 assembly is beyond the scope of my free time. This is easy to show by watching the differing behaviour between when the computer gets a breakaway (in regular mode) compared to how it behaves in shootout mode.
So I play in regular mode with a 3-man handicap. E.g., we play 5-on-2. If you watched the first video from my last post, you’ll notice that handicapping yourself makes the game beep constantly. It’s very very irritating. Fixing this is actually not completely trivial. For those that are impatient, here are the memory addresses I’m using:
Address
Description
Example value
7E17A6
Number of players for the home team
3
7E18BA
Good question! See below
12
7E1864
Number of seconds left in the penalty
40
Using the values above will stop the incessant beeping.
I haven’t had time to fully explore the implications of 7E18BA. Just from observation, it seems that that the 7E1860 – 7E18C0 range is an array of player state and 7E18BA is an offset into that array which pertains to the penalty. By setting 7E18BA to 0x12, it seems, you indicate which element of the array from which to draw penalty-time-remaining information. I only use the value of 0x12 and the associated address 7E1864 because those are what came up for me during debugging (Mike Gartner, if you’re curious). I haven’t found any rhyme or reason to the number 0x12 yet, but I don’t really care too much at this point.
As a side note, someone really needs to come up with a better tool for “RAM cheating”. For those unfamiliar, the general procedure for this style of black-box debugging — usually used for cheating, though in my case I guess it’s anti-cheating — is to snapshot RAM at various stages of play. You then compare the RAM images according to what state you’re looking for. E.g., if you want to know where the numbers of players on the ice is stored in RAM, you snapshot when you have 6 players on the ice a few times and again when you have 5 players on the ice and look for the numbers “6” and “5” to consistently appear in RAM.
If you have a hacker mentality, this way of doing things can be productive, but it’s pretty crude. Generally the tools available don’t allow you to compare bit-values, only byte-values, and comparison operators are pretty limited. After half-heartedly trying to follow along with Jasna’s AI assignments, I’d be surprised if this problem hasn’t been solved generally and properly in the AI academic community. Oh well.
For the past year or so, I’ve been timing how long it takes for me to go through the checkouts at our grocery store to see which is faster.
The methodology is quite simple. Once I’ve got all my groceries, I go to the same spot near the checkouts. To avoid biasing myself, I check my cell phone to determine whether to go through the self checkouts or the normal checkouts. Because my cell phone lacks a random number generator, I check the last digit of the time: an even digit means I go through the normal checkout and an odd digit means I go through self checkout. I then start the stopwatch and time how long it takes for me to go through the checkout and leave the store.
I’ve got 31 data points and have finally decided that if one type of checkout is faster than the other, the difference is small enough to not really matter. Here’s the scatterplot:
A sample size of 31 is unimpressive, to be sure, but it’s large enough that I can finally rest easy knowing it would be a waste of time to collect more data. Trying to get out of the grocery store in the fastest way possible seems to have more important factors, such as the number of jerks ahead of you in line.
As a side note on how that scatterplot is presented, it probably would have made a lot more sense to measure the time taken as a function of how many items I bought, rather than the cash value of the items I bought. I’m far too lazy to count things, though.
So, from now on I’ll be deciding on self checkout versus normal checkout based on how social I’m feeling. I suspect that means I’ll be using the self checkout a lot.
As anyone born around 1980 would know, gaming reached absolute perfection with the release of NHL ’94. It’s great if you want a 10-minute diversion and I’ve been playing a few minutes of here and there for the past few months.
There’s one serious problem with NHL ’94, however: the AI is absolutely terrible. Playing in single-player mode is way too easy. Playing as the worst team (either Florida Panthers or Ottawa Senators) against the best team (All Stars East) I can win 5 – 0 without much effort.
In shootout mode the AI is even worse. If you put the goalie on automatic mode (the computer controls your goalie) then the opposing team does alright, but it’s no fun. If you put the goalie on manual mode (you control your goalie) I’m not convinced it’s actually physically possible for the computer to score on you.
I had the brilliant idea that maybe the game would be more fun if the human player were handicapped. Maybe shootout mode would be more fun if the computer had 2 players instead of just 1? I have my doubts, but it got me thinking.
So one idea was to disassemble NHL ’94, add in some 2-on-1 shootout code and reassemble it. Fortunately there are people out there who take hacking the Super Nintendo more seriously than any sane person should, so there are some tools available. Learning 65C816 assembly code, disassembling the game and then tracing through and debugging sounded like the sort of thing that one does after they’ve finished writing their thesis, so I filed that under “plan B”.
Plan A became to track down where certain delicious global variables, such as the number of players on the ice, were being stored in memory and modify them as the game was being played. After about 20 minutes of toying around, I got something to work.
Here’s me in regular hockey mode, but with only 1 skater instead of 5:
The constant beeping (sorry) is due to NHL ’94 foolishly thinking that since I’m down 4 men, the other team is on a power play which is ending soon, in 0 seconds to be exact. Note the game mistakenly gives credit for the goal to Zhitnik and Hrudey of the LA Kings instead of Schneider and Roy of the Montreal Canadiens. Weird.
Here’s me in shootout mode:
Unfortunately I accidentally gave myself an extra player instead of the computer, but it still demonstrates that my idea won’t work without a lot more fiddling. The extra player just stands there doing nothing. Sigh.