Viewing Category: Tricks
Buddy Sean asked me about choosing fonts for software development. "What is a good legible font for software? Where do you find out more information about this? Is there a developer kit you can buy or download?"
When it comes to software font use, you should look for fonts that are designed for the screen. They are heavily "hinted" to display well at various common sizes like 9pt through 14pt. An ordinary font purchased for print work will not look consistently good at small size in a GUI application. You want either a bitmapped screen font (somewhat rare these days), or a "new media" font designed for screen use in TrueType or OpenType format. Bitstream has an example of the difference.
Now you have two options:
Option 1. Use What's Already Installed
If you're designing for Windows software development, you can rely on the built-in high-quality screen fonts such as Arial, Tahoma, Georgia, Trebuchet MS, Verdana, Courier New, and Times New Roman. Not all of them are installed depending on your version of Windows, so you may have to track down the original vendors. You can double-click the font list in the Windows Fonts Control Panel...Arial, for example, is licensed from AgfaMonotype.
The Microsoft Typography site has a listing of what fonts are included with what Microsoft products.
If you're designing for both Macintosh and Windows, many of the fonts above are already installed because Microsoft Internet Explorer for Mac has been installed by default in Mac OS 9 through Mac OS 10.3. For advanced users who have chosen not to install Internet Explorer, those fonts may not be available. It's also possible that Internet Explorer will go away from future versions of the Mac OS.
Option 2. License Fonts and Include with your Installer
You also have the option of licensing fonts for your applications, and including them as part of the install. I've not gone this route personally, but there are developer resources at AgfaMonotype. ...check out the ISV (Independent Software Developer) fonts. Another competitor is Bitstream, which offers similar solutions for developers.
Miscellania
If you're designing for internationalization, you need to look a little deeper into which fonts offer unicode support. This is the kind of thing that a developer needs to go after... in general, you'll lose typographic control because your options are limited in the other languages. Internationalization is a whole 'nother ball of wax.
I'm curious whether fonts optimized for Flash, are also suitable for general application development. A lot of these are designed to be precise at 5 to 12 pixels in height, which is really small on a modern screen. They might be OK for labeling, applications that "look cool" like games, or devices that run at 800x600 or smaller. Legibility would be difficult at higher resolutions.
There are also old font formats that are completely converted for screen use at a specific size...Mac users may remember "screen fonts". It's been a long time since I've seen any, but I know applications like Photoshop and specialized software like terminal emulators use them.
If you want to get extra fancy, there's a technology called Saffron you can license from Mitsubishi, that promises excellent legibility without a lot of hinting and kerning BS. The next version of Flash Player (version 8) apparently uses this. This is a more specialized application though, than your typical windows app. Would be interesting for games or bitmapped screen devices.
This is interesting... a concise cheat sheet for Google searching. I consider myself a pretty good search engine jockey, but there were several tricks that I wasn't aware of, like date (searches within X months), define (shows definitions of a word found around the web), ~ (also searches for synonyms of the word, like ~car will find automobile, etc), and so forth. Via John Dowdell.
I came across 60Hz is the Holy Grail in a Game Development Algorithms List archive posting. There's a lot of very interesting information about frame rate and visual perception, posted by people you may even have heard of.
I love things that move at 60+ fps...as a child, I was drawn to video games because of the mesmerizing effect it had on me. So smooth and otherworldly...
A friend of mine has a problem with his images getting linked by bulletin board groupies looking for cool avatar images. Rather than provide their own bandwidth, they deep-link into his site and use his bandwidth. Punks!
He now has his web server restrict images from being served unless they're referred to from a local page, but I never knew how to set it up. I just happened to come across the how-to here. The .htaccess changes look like:
SetEnvIfNoCase Referer "^http://my.host.com/" local_ref=1
<FilesMatch ".(gif|jpg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch>
Haven't tried it myself yet, but made a note.

This is a somewhat technical article about the device manager in Windows XP and (gasp!) BIOS settings and how they impacted installing an Adaptec Firewire interface. You have been warned!
I had some hardware conflicts installing the card (sleepy yet?) into my (yawn) Athlon 2000+ rig. If you're still awake...
The Problem
My Athlon 2000+ is my gaming rig, or rather was my gaming rig until my primary notebook computer developed intermittent hard drive failures. So now, the 2000+ is my temporary production machine, except I've rather grown to like it now that I have it set up in my upstairs livingroom / studio.
Upon installing the card and attaching my firewire backup drive, I immediately started getting delayed write errors. This is very bad, because it means data is being corrupted by not being written completely back to the device. This leads to hard drive corruption: files no longer open or disappear, the system starts "acting up" as important program files are damaged. Bad bad bad!
The Investigation
A quick search on the net revealed the usual pitter patter of "mine sucks too!" among the hardware forums. It's apparently a common problem. I was at first suspicious that it was, again, the p.o.s. Via chipset on my motherboard, but three credible courses of action (COA) presented themselves:
- Disable the write caching for the drive in the Device Manager
- Set PCI Latency to 0
- Set the packet size for hard disk data transfers to 1K
COA1 is a matter of choosing "Optimize for Quick Detachment" for the particular drive. This disables write caching, so data is written immediately to the drive. This means you wait longer while saving occurs, but it also means that you can unplug the device quicker because the operating system isn't spooling data in the background.
In my case, the setting was already set, but I hadn't rebooted the machine. Rebooting is always a good idea when installing hardware and finishing up with the device driver install. You're not always prompted to reboot, but you should.
COA2 is something you set in your PC's BIOS, which is the "Basic Input and Ouput System". It's your PC's primordial hind-brain, performing the most naked and humble of digital functions. You might not have even been aware of it, as modern operating systems like Windows and Linux build on top of it. But rest assured, beneath that shiny GUI throbs a primitive digital computer that still thinks like an 4.77MHz 8088.
The BIOS has, of course, been updated regularly since 1981 to handle new system devices: the plug-in card architecture, for example, has changed several times as newer, faster technologies have been blessed by the industry. As with any evolving system, this has lead to conflicts. The particular conflict that concerned me was the AGP video card versus the PCI bus.
COA2 called for reducing the PCI latency, which is the amount of time any one device can "hog the computer". There are easily a dozen devices that must share; if any one hogs too much, then another device might starve and throw a fit...or crash. Imagine that there is one dish of mashed potatoes being passed around the dinner table, and the "latency" is the amount of time that each person is allowed to hold and partake of servings. If the latency is half a second, there's no time for the person to grab a meaningful portion, or even try. If the latency is 10 minutes, then no one else gets to eat. So there's a balancing that needs to occur for optimum eating pleasure, and you could achieve that by choosing a latency of maybe 15 seconds. But I digress.
Anyway, my computer's BIOS doesn't have a lower PCI Latency setting of 32. However, it does have AGP performance settings. AGP is the special data connection used for video cards, which have to process vast amounts of data very quickly, otherwise your games will have slow, sucky frame rates. It's particularly important in 3D games that use a lot of textures, but I won't get into that. Anyway, to squeeze that last drop of speed out of the video card, you can set the computer system to let the AGP connection have priority. This means that it probably will stomp over other devices...say the PCI device that is responsible for saving my data back to a firewire hard drive?
The Solution
So long story short, I disabled the performance settings for the AGP slot and the write problems went away.
So the moral of the story is: optimizing for game performance may detract from data i/o performance. If you can afford it, use a dedicated pc for games and keep its # of drives and devices to a minimum.
P.S. I never got around to doing COA#3. It's specific to your hard drive manufacturer, and I was too lazy to open up the firewire drive enclosure to figure out who it was.