DeSmuME: Teaching programming skills by hacking Nintendo DS games...
I got my start in software development by picking up the resources I needed to solve the problems that were relevant to me. I figure the same will be necessary to capture my son’s interest.
Well, my son’s mainly interested in video games. So be it.
I spent a good part of my youth hacking NES games by re-writing small parts of the program via Game Genie. When I learned that the Nintendo DS emulator, DeSmuME, has a facility to search and write the game’s RAM to create new cheat codes, I sat down with Lenny for a hack session.
Here’s a video of him demonstrating our results, on New Super Mario Bros.
Almost everything in a video game’s code is controlled by numbers. Understand the numbers, and you begin to understand the program. We’re not there yet, but this is a great start…
Read more...Let's Play: Jay's ROM hacks!
When I realized kids were posting “Let’s Play…” videos of NES games on YouTube, I did a quick search… Yup! Someone did Ganon’s Revenge back in 2009. He slogs through 5 videos’ worth of the game, and at one point calls me a “jerk” for hiding the wooden sword. :) The whole series seems to have gotten about 200 viewers, too. I think he finally gave up after the fifth video, though. :( I was never proud of not being able to edit the dungeons, and it looks like he wasn’t impressed with that aspect. Ah, well.
So then I search for Metroid X…
Holy crap! A 12-video playlist!
With quotes like this in the comments!
Read more...it was the first time I ever played any metroid game so I thought that metroid X was a real NES game made by nintendo, like a sequel or something.
After the the long awkward first screen I got into it, and I think I liked it more than the original.
Zip + RSync = Easy to Maintain, Easy to Download Collections
Most people who’ve used a command line know about the existence of the “zip” utility. It’s basically a scriptable version of the archive tools we all use in our file browsers. Hopefully most people also know about RSync, which brings a directory structure into sync on two machines by creating, deleting, and updating files as necessary.
What people may not know, however, is that RSync will transmit only the updated portions of a file if it already exists on the remote side. That means you can easily maintain downloadable .zip archives, so your audience can retrieve whole collections of files at once. (Say, of your favorite Creative Commons-licensed music, which is the example we’ll use here.)
We start with a command line to add MP3s to a .zip file:
$ zip ~/Documents/media/cc_music.zip /Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3
The long music path is for convenience - that way I can just drag-and-drop files onto a terminal. It’s a nice touch that the full folder structure is preserved (though I will likely want to strike the “Users/jay” directory at some point):
$ unzip -l ~/Documents/media/cc_music.zip Archive: /Users/jay/Documents/media/cc_music.zip Length Date Time Name -------- ---- ---- ---- 3664924 06-26-11 00:58 Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3 ...
If we use &&
to add on an rsync command, the .zip file will automatically be sent to the remote server if compression is successful:
$ zip ~/Documents/media/cc_music.zip /Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3 && rsync --verbose --compress ~/Documents/media/cc_music.zip jay.mcgavren.com:files/cc_music.zip
In the output, we can see the file being zipped, followed by the rsync transmission info:
adding: Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3 (deflated 3%) cc_music.zip sent 3556109 bytes received 31 bytes 78156.92 bytes/sec total size is 3554835 speedup is 1.00
Keeping all this as one command allows automatic updates of the remote file as new MP3s are added:
$ zip ~/Documents/media/cc_music.zip /Users/jay/Music/iTunes/iTunes Music/DoKashiteru/ccMixter/Our Slanted Voices (ft. Colin Mutchler).mp3 && rsync --verbose --compress ~/Documents/media/cc_music.zip jay.mcgavren.com:files/cc_music.zip adding: Users/jay/Music/iTunes/iTunes Music/DoKashiteru/ccMixter/Our Slanted Voices (ft. Colin Mutchler).mp3 (deflated 1%) cc_music.zip sent 5043684 bytes received 11377 bytes 306367.33 bytes/sec total size is 8595106 speedup is 1.70
Those transmission sizes represent only the new MP3 that’s been added, not the whole archive. For example, if I add a small README.txt to the archive…
$ zip ~/Documents/media/cc_music.zip README.txt && rsync --verbose --compress ~/Documents/media/cc_music.zip jay.mcgavren.com:files/cc_music.zip adding: README.txt (deflated 36%) cc_music.zip sent 1288 bytes received 20521 bytes 3965.27 bytes/sec total size is 11636110 speedup is 533.55
…note that only 1KB (of the now-11MB file) is actually transmitted. Updates to files in the middle of the archive likewise cause the retransmission of only that file’s zipped content.
This can of course be converted to a shell script, but personally I think doing it all at the prompt lends itself to ad-hoc, on-the-fly alterations. (I wouldn’t want a script sitting around for every collection I could think to post.)
And I can certainly think of a lot of things to share this way - Project Gutenberg books, Creative Commons wallpapers, your own photos, basically anything that you can freely redistribute. Some care needs to be taken with variance in licenses (I had to add attribution ID3 tags to some of the MP3s, for example). But generally, it should be possible to include the needed documentation in the archive alongside the content. (I am not a lawyer, this is not legal advice, etc. etc.)
I view this as vastly preferable to clicking though dozens of archive.org pages to manually download individual files. If you agree, I hope you’ll use this technique to start sharing your own collections!
Read more...A Creative Commons Mixtape
Creative Commons (creativecommons.org) is a license you can apply to stuff you create that basically says “anyone can redistribute this as much as they want, they just have to give me credit”. I figured that would enable people to conveniently and legally share huge zip-files of their favorite Creative Commons music, but that hasn’t been the case so far. So, here’s my attempt to fix that:
Just download and unzip; it’s already sorted into folders for you. Drop the whole shebang on top of iTunes to import the tracks. Share with whoever you like; it’s totally legal to do so.
I discovered a couple clever tricks with Linux utilities that will let me easily update this file as I discover new CC music, so feel free to bookmark this URL. And don’t worry, I’m being selective; I know there’s a lot of crap out there. These are real gems, though. If you agree, most of the artists have other music for sale; visit the URLs in each MP3’s comment field to find it.
Read more...Calling to remind and remind and remind
Read more...Received: Tue, 16 Aug 2011 17:35:00 -0700 (PDT)
Subject: New voicemail from (602) 999-9999 at 5:35 PM
From: Google Voice
To: me@example.com
Transcript: The [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message. Please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office.
Play message:
https://www.google.com/voice/fm/9999999999999999 /loremipsumdolorsitametconsecteturadipisicingelitseddoeiusmod