Archive for November, 2007

Nov 19 2007

Detecting the presence of a given font in .NET

Published by Jonathan Wise under Code Snippets

Maybe this seems obvious to other people, but I couldn’t find anything in Google on it. Maybe I didn’t know the right keywords to search for.

At any rate, lets say you have an application that’s optimized for a specific font — but you can’t guarantee that font is installed. You might want to, as a contingency, fall-back to a different font — maybe one that isn’t quite as attractive, but that you know for sure will be present. This other font might have slightly different sizing, so in the case where you fall back, you might want to tweak your UI widgets, or alignment margins and widths, to look better if the fall-back is used. Here’s my solution (C#)…

Font fnt = new Font("GoodLookinFont", 10);
if (fnt.FontFamily.Name != "GoodLookinFont")
{
//adjust display for fall-back font
}

What happens is simple: .Net attempts to create a Font object using your preferred font. If it can’t find that font on the local system, it will instead create the Font object using “Microsoft Sans Serif.” If the Font object’s FontFamily Name is not what you expect, you know you’ll have to adjust your display.

No responses yet

Nov 18 2007

Tomato QoS on a Linksys WRT-54G v.2

Published by Jonathan Wise under Articles

Kudos to anyone who creates their own Linux based firmware and turns a $40 consumer router, into a high-end piece of kit. Truly, they all are awesome achievements. But I’ve got to say, DDR-WRT has nothing on the Tomato firmware. After hearing how happy SuperJason was with his flashed firmware, I decided to take the plunge myself and re-flash my router.

I’d first flashed my box over a year ago to the DDR-WRT firmware and was impressed, but it definitely had a few bugs. I wanted it for DHCP reservations and QoS. DHCP reservations worked, but internal name resolution did not. And the QoS implementation made my network flaky. Tomato changed everything.

First of all, the UI isn’t as nice as DDR-WRT — which does its best to duplicate the Linksys firmware. Tomato’s is a little uglier and a lot harder to find things until you get used to it. But its so much more powerful. After reading around the Internet, I think I’ve finally settled on these QoS classifications…

A note to newbs, before I launch into my explanation: make sure you turn off “Prioritize ACK” so that you don’t get flooded with BitTorrent ACK requests.

As you can see here, I place high priority on BitTorrent traffic. That’s because it drives our TV watching. Each of the things that gets higher priority than torrent downloading has a good reason:

DNS - Normal DNS requests are tiny and should get handled right away — even if the webpage itself loads slower, you don’t want to be hanging during name resolution wondering if your Internet is down.

SMTP - Outgoing mail should go when I hit send. Maybe this is odd of me, but I like hearing the “swoosh” sound in Mail.app as soon as I hit the button.

FTP - I rarely use FTP any more, unless I’m working on a website or uploading something important. On the occasion that I do need it, I want it out of the way as fast as possible.

VNC - If I need VNC its because I’m helping someone else with their computer, or I’m connecting into mine to troubleshoot a problem. In either case, I don’t want to wait for screen refreshes.

On par with BitTorrent traffic are small HTTP requests — loading the Google homepage, or even Digg, comes in at less than 50kb, so lets just get it out of the way.

Large HTTP requests — for a download, or streaming some Flash, can frankly wait a few seconds longer. Similarly, receiving mail isn’t that urgent — it only gets checked every 15 minutes, so if it takes 16 minutes instead, who’s going to notice?

Below this is essentially everything else. If a website isn’t tight enough to get in under 50kb, but not big enough that it might be interesting enough to warrant the higher priority, it gets tucked in with bulk traffic.

The effect is immediate when you turn QoS on. My WordPress admin page, with its IFrames, takes a little bit longer to load, but never looks like its hung. My homepage and Digg come up instantly. And none of our normal use has any significant impact on my BitTorrent downloads. I’m relatively new at this QoS stuff, but having watched the Chart view and studied the Detail view, I think I’ve already learned a lot. Any suggestions from anyone with more experience?

9 responses so far

Nov 05 2007

Leopard doesn’t quite stack up

Published by Jonathan Wise under Articles

I’m a Mac fan boy, and I’m very tolerant of change. When the Mac using world screamed when they replaced OS 9 with OS X, killing a lot of the nice functionality in OS 9 in favor of a brand new OS, I drank the kool-aid and made the change as soon as I could.

And I’ve been a big fan of each major revision of X — and have run all of them right out of the gate, warts and all. But I’m not sold on Leopard.

The loudest touted features are either useless, or already existed in 3rd party apps for 10.4.
- Spaces is just VirtuDesktops — and a concept I never had any use for. I’d much rather have multiple monitors then multiple “virtual” screens.
- TimeMachine is just a back-up app — granted its well integrated and looks pretty. But the method I have in place now is much less intrusive (not to mention more fire-proof) and doesn’t require me to be tethered to a local external hard drive.

But nothing bugs me more than Stacks…
Stacks kills a feature I’ve used and loved in OS X since they killed the Apple menu’s hierarchical app-launching capabilities from OS 9.

It used to be, in OS X 10.2-10.4, that you could drop any folder onto the right side of the Dock and turn it into a menu by right clicking on it. In this way I could add my very organized Applications folder to my Dock and use it to find applications in a very simple manor (I’ll admit, its kind of like a Start Menu, but come on — its a good way to organize your apps).

In 10.5 that great feature was replaced with either a silly, and surprisingly static, curved list, or a box full of icons. Now that box can contain subfolders — but if you click on them, it opens a window. That’s a window you have to close after you find your application. Unacceptably stupid.

Know what else is stupid? Apparently there’s a massive data loss bug in the new Finder. For years — literally, we’ve been complaining about how awful the Finder is (even compared to its OS 9 grandparent) and this is the fix they offer us?

Damage to the Dock and a bad upgrade for the Finder aside (I do like the new sidebar, btw) Stacks are not what they were supposed to be. A “Stack” was designed as a replacement for (or addition to) the folder concept. It was an organizational item that existed in the Finder, had a single icon that could be dragged around like a file, but expanded when clicked to show a collection of items. There are plenty of UI prototype videos on the web showing what Stacks meant to us before Apple polluted the term.

I’m ditching Leopard for the time being. The only feature I really wanted was the improved Front Row… maybe there’s a way I can run it in 10.4. If not, I’ll just hold out hope that Apple gets their crap together with upcoming updates.

Update: Yay! It looks like they fixed stacks… a little bit!

4 responses so far

Nov 05 2007

Experiments in Virtualization

Published by Jonathan Wise under Articles

Virtualization is so hot right now… (although it can’t be that hot, because my spell-checker doesn’t even recognize it as a word.)

The concept is that as hardware gets faster and faster, we’ve actually reached the point of diminishing returns on all but the most grueling of tasks (HD Video rendering is the only other thing I’ve seen that really taxes a modern PC.) Now we’ve got hardware that can support not just one environment without breaking a sweat, but 2 or 3.

At work we have a server running VMWare’s ESX Server that’s currently running 16 “virtual” computers at once. None of this is that new — what is new is the way processors are being built with this kind of thing in mind. Intel’s Core2Duo is made for virtualization, and nothing proved this to me faster than Parallels Workstation.

I have a fairly recent Dell Laptop, based on a the Centrino chipset — essentially a P4, at 1.3GHz with 2GB of RAM. It runs Windows and VisualStudio adequately. For awhile, I was given the use of a MacBook Pro, running a CoreDuo. The thing screamed running its native OS — OS X 10.4, but when I booted up Windows XP inside a Parallels virtual machine, I was astonished to find that Windows actually ran faster virtualized on my MacBook then it did on my Dell. I used it for my day-to-day development, rendering video in one machine, while compiling code in another. And I was sold.

A colleague of mine has taken this concept to its logical extreme, and I won’t pretend to have his knowledge on the subject. Rather, if you’re interested, you should read his posts.

  • Build Machine Virtualization discusses how he eliminated the need for frequent hardware replacement and streamlined our company’s build process using VMWare.
  • Development Machine Virtualization discusses how he’s created specific environments for different development tasks, while still adhering to our I.T. departments onerous rules.

The latter article is the one I’d like to build on with my own thoughts here. My set-up, briefly…

I’m using a desktop computer — not a laptop, as my afore-mentioned Dell left a bad taste in my mouth. The desktop is a Dell as well, since I.T. gives us no other choices, but despite being as ugly as sin cosmetically, its a very nice machine:

Processor: Intel Core2Duo @ 2.4Ghz with a 1Ghz FSB
RAM: 4GB @ 800Mhz (although Windows XP only recognizes 3GB)
Hard Drive: 250GB SATA II 7200RPM
Operating System: Windows XP SP2 - I.T. Core Load

The real beauty of this set-up is that the OS referred to above, which I consider to be less than satisfactory (at the least, they should have used Windows XP 64-Bit), really doesn’t matter — it could even be Ubuntu. Its only the host OS. As Shawn recommends, I’m running a very light-weight collection of apps, that I’m happy to let I.T. manage for me. I’ve got Windows and Office, plus a messaging client and FireFox, and various Remote Desktop/VNC clients. That’s it. Add VMWare, and from here, I can have the world…

Currently I’m running two “virtual” computers running Windows XP, one running Windows Server 2003, and one running Mac OS X…

My Development VM gets 1GB of RAM, and has a 50GB pre-allocated virtual hard drive. I took a snap-shot when I started, but I realised later I could have achieved the same thing, just by copying the VM directory off to an external archive hard drive. Either way, if anything gets messed up in Windows (which, lets admit, happens fairly frequently) I can just revert the whole system to a working state with a couple mouse clicks.

My Test VM gets 512MB of RAM, more if it needs it, and a 15GB growable hard drive. This is a “clean” install of Windows XP, updated with nothing installed on it. I run the latest version of the software I’m developing on this.
Whenever I want to test how a specific build of my software behaves when installed on a customer’s computer, I can snapshot back to its “clean” state, and run the Setup program.

My Server VM is a machine I took from our Green Bay office while there. They had a virtual server configured with a replica of a customer’s configuration, and all I had to do was copy it to a portable hard drive and carry it with me. It has a pre-allocated hard drive, and gets 512MB of RAM — more if needed.

My OS X VM lets me run Mail.app (my preferred mail client), PhotoShop and other nice programs that only Mac has to offer. It should be noted that performance on this machine is not stellar — but that’s only due to a lack of driver support, since Virtualizing Mac OS X is not supported.

The coolest of these virtual machines is the Development VM — it was made from an actual physical computer. A little app called VMWare Converter can run on a machine, and create a VM out of it. So doing, I was able to switch from my old computer to my new one in a matter of hours, instead of the day or two it normally takes to get Windows, VisualStudio + Orcas, SQL Client Tools, .NET 1.0-3.0, and TortoiseSVN up and running on a fresh box.

The performance on any 3 of these machines running at the same time is equal-to, or better-than a physical computer only a year or two old. With two monitors, and an RDP connection to another headless server I have running behind me, I can juggle 5 computers at once, (6 if you count the host) with more than adequate performance.

I’ll point you again to Shawn’s articles if the benefits of this set-up aren’t self-evident. I was initially a little unsure that the VMs would be responsive enough for my daily use, but VMWare and the Core2Duo have proven to be a stellar team…

6 responses so far