Games, Programming, Web
chrisdanford
I'm a computer programmer specializing in games and fitness applications.
Homepage: http://www.chrisdanford.com
Posts by chrisdanford
Tools for creating MacOS installer .dmgs
Aug 2nd
I spent some time updating the StepMania MacOS installer. There are many features that you probably will want in an installer dmg:
- an “Applications” link or alias
- a custom background image
- custom placement of icons
- .dmg compression
- a way to script building of an installer dmg
Here’s how you’ll want to achieve the above in your installer build script
- Create a temporary directory and copy into it all files you’ll want in your final .dmg (typically a .app or 1 directory, and maybe a documentation file)
- Create a symbolic link (ln -s /Applications $your_temp_dir) or manually make an alias to /Applications and then copy the alias to your temp directory.
- Use the yoursway create dmg script and pass in your temp directory, background image, icon locations, and it will spit out a compressed dmg. Something like: create-dmg –window-size 500 300 –background background.png –icon-size 96 –volname “StepMania4″ –icon “Applications” 380 205 –icon “StepMania” 110 205 StepMania.dmg ../$temp.dir. Their script is based on the Adium installer applescript + wrapper.
You can see exactly how StepMania does it by checking out our scripts: https://svn.stepmania.com/svn/branches/4.0/stepmania/PBProject
Useful, free tools for .Net app memory profiling
Jun 8th
In the process of trying to slim down ChartPT‘s memory usage, I settled on these free tools:

VMMap – http://technet.microsoft.com/en-us/sysinternals/dd535533.aspx
Skip the many tutorials out there for the command line “vadump.exe” and use VMMap instead. The GUI presents information in a much more useful format (filterable, sortable).
First, check the list of loaded modules – some are explicit References in your project, others are dependencies of your references – and eliminate dependencies that you can do without. Next, check the “Private” and “Private Working Set” columns to identify areas that you may have some control over.
CLR 2.0 Profiler – http://www.microsoft.com/downloads/details.aspx?familyid=a362781c-3870-43be-8926-862b40aa0cd0&displaylang=en
Be sure to grab the “2.0″ flavor of the profiler. Many tutorials are old and link to the CLR 1 version of the .Net Profiler – that version won’t work with your app that builds against .Net 2.0 or newer.
Use this app to take a snapshot of your memory usage, then view allocations by object type and view allocations in a call graph.
Tutorial: http://msdn.microsoft.com/en-us/library/ff650691.aspx
My biggest culprit: WCF
System.ServiceModel and System.Web grab 5.5MB of private memory (14+MB of private WS on my machine) as soon as I instantiate a client proxy object. The same things happens using built-in HTTP bindings in a skeleton console app or in the WCF test client. The System.Web allocation could probably be eliminated by changing to TcpTransport.
Intel RAID5: pretty much worthless
Jun 2nd
I have a co-located server with a 3-disk RAID5 array (Intel ICH8 controller). Things seemed fine when I was setting up the server – pull a disk drive, re-insert, volume rebuilds, everything keeps working.
What I didn’t test though is how degraded the performance is while rebuilding. A disk array that was getting 100MB/s reads during normal operation is now getting < 1MB/s reads while rebuilding, and my database application can’t complete requests at that speed. To add insult to injury, the completely idle server with all disks healthy takes over 100 hours to rebuild a 2TB volume (~5.8MB/s).
Googling reveals dozens of similar horror stories with Intel RAID5 rebuilding. Do yourself a favor and rule out Intel’s RAID5 if you care about usable uptime.
Edit: I’ve changed to a 2-disk software RAID1 and am getting 80MB/s read during rebuilds.
Edit files directly over SFTP in Eclipse (Remote System Explorer)
May 19th
I typically edit PHP and Python using VI over SSH in multiple Putty windows. Arranging the windows is a pain, you lose all of your open shells if your connection hiccups, none of the machines I connect to provide color terminals, and I’m often fight VI’s indenting (and am too lazy to fix it on every machine).
I’ve now switched over to editing files on the server using Eclipse and the Repose System Explorer add-on. It solves all of the problems mentioned above.
- From Eclipse: Help -> Install New Software. “Work with: -All available sites-”. In the search box type “remote system”. Check “Remote System Explorer End-User Runtime”, click Next to proceed with the install.
- After the wizard completed, click Window -> Open Perspective -> Remote System Explorer. Right-click in Remote Systems, choose New Connection, type in your details. After you connect, expand “Sftp Files” and you’ll be able to open remote files in the editor.
Thanks Ikool’s Blogbed.
Cross-posting between WordPress, Facebook fan pages, and Twitter
May 18th
I tried several different desktop clients, Facebook apps, WordPress plug-ins, and status relay services. This is system I ended up using:
- Sign up for a Ping.fm account. Add your Facebook account, fan pages, and Twitter account.
- From WordPress: Download, install, and activate the Shorten2ping plug-in. In Shorten2ping’s settings page, set “Send Notification to Ping.fm”.
- Go to the Ping.fm Dashboard, click “Application Keys”, copy your API key, go to and paste it into Shorten2ping’s settings page and paste it into “Ping.fm API Key”.
WordPress now cross-posts to Facebook and Twitter, but you’re also free to do smaller status updates that bypass WordPress by initiating it on the Ping.fm site or directly on a particular service.
Automatic installations from WordPress hosted on Pair Networks
May 17th
If you run WordPress on Pair Networks, automatic installations probably prompt you for FTP connection info. The problem is that WP wants to modify files as the owner of the WP directory. Follow Pair’s instructions to set up php-cgiwrap, and WordPress automatic installations will work.
cp /usr/www/cgi-bin/php5.cgi ~/public_html/cgi-bin/
chmod 755 ~/public_html/cgi-bin/php5.cgi
Edit .htaccess in your WordPress directory:
Action application/x-pair-sphp5 /cgi-sys/php-cgiwrap/USERNAME/php5.cgi
AddType application/x-pair-sphp5 .php
Dell Studio XPS 16 mini-review
May 13th
+ Speakers are good compared to the horrendous Dell Studio 15 speakers.
+ Solid feel compared to the creaky Studio 15.
- Significantly wider than the Studio 15 (speakers are on the sides of the keyboard).
- The painted faux-metal on the edges is already chipping. Looks cheap.
- The Studio 15′s rubberized top and matte hand rests are better than everything glossy on the XPS 16.
= The capacitive touch buttons are lit even when keyboard backlighting is off. This compares to the Studio 15′s equally stupid “capacitive buttons are always unlit even if the keyboard backlight is on”.