Getting the Most from your iPod

An iPod is a pocket computer, a portable hard drive, photowallet, and oh yeah, a music player.  Music player better than everything else.

But, something that the iPod does better than everything else is store data.  My thumb drive is both too slow and too small to hold serious amounts of data.  My iPod can hold virtual machines like VMWare, VPC, Moka and semi-virtual machines like Mojopac.  All of these require the user to have administrative rights on the host machine, so they make more sense for someone who wants to maintain a constant computing environment between home and the office, but doesn’t want to lug the laptop.

The iPod is a good place for holding portable applications.  Portable applications let you take your documents and applications with you, and often do not require you to have administrator rights on the host computer. I like the launcher, since it is very easy to plug things into it, even if it doesn’t have a “paf” installer.

And rather than suffering from iPhone envy, I put the Ventrilo client onto my iPod, so now, when connected to a computer with a microphone, it can function as a phone.  (If I want to be ironic, I can do the same thing with my Windows Mobile phone, which can act as a 2 GB USB drive)

And should you have an entire encrypted movie file, you can fit it on the drive (well, up to about 10 movies, at 6GB each) and watch it in perfectly good resolution.  This strategy wouldn’t let you play the movie on the TV without the help of a host computer, though.  It is a good place to put large video files should your laptop be unable to hold that much data, or if the laptop is a work machine and you don’t want to clutter it with public domain and free full length films.

In conclusion, computing can be done on a continuum, from an application rooted to one desk, to a computer than can move from desk to desk, an application that can move from desk to desk, and an application that runs untethered on a laptop, pocket computer or Mp3 player. The convergence device hasn’t arrived and I think it never will, because there is a better computing experience to be had by switching to the best form of the same app depeding on your special circumstances.

When to use an Object Database (Or ASP.NET Personalization)

ASP.NET personalization takes your Profile object and serializes it and dumps the binary goo into a SQL table. This breaks the normal rules of normalization. You’re supposed to create a normalized table with one column for each property of your profile object, something like

PrimaryKey Int,
PreferredTheme Varchar(50),
PreferredBackgroundColor Varchar(50),

However, the ASP.NET 2.0 framework doesn’t know in advance what thousand of developers are going to think important enough to set up as a property of the profile. Worse, you can have collections as properties, which should be relationally represented as separate tables. To keep relational, the ASP.NET team would have had to issued ALTER TABLE, ADD COLUMN, DROP COLUMN, CREATE TABLE, etc. commands as the web.config file was updated. So we can see that random website personalization bits like PreferredTheme should be serialized and put into the database as a binary, non-relational object. How about putting orders, addresses, payment histories and the like into the Profile? No! That is a crime against Codd.

So here are some suggested rules about when it is okay to serialize an object and dump it into a table without do proper relational modeling:

  1. The object is mostly standalone and has few if any foreign key relationships with other tables. E.g. a Profile has a user relationship and that is it.
  2. The object will not queried in a fashion that returns collections of objects. E.g. we only fetch one Profile at a time, so we aren’t really returning a table’s worth of data.
  3. We don’t have the data in the Profile replicated anywhere else. (That is, if we have a customer table, don’t put customer name into the Profile, or you will have to do two updates to update one entity)
  4. We never will need to aggregate the Profile data. Actually this could happen with some Profile data. Finding out if the YellowOnWhite theme is being used more than WhiteOnBlue maybe be useful in deciding which theme to kill or expand. Extracting that data would require a VB.NET program instead of a simple TSQL statement. On the otherhand, last page visited, we probably will never aggregate.

Parental Controls

Windows Vista will have parental controls, but I’m not upgrading anytime soon, not for anything mission critical like my Halo server.

So how to limit my kid’s mischief on the computer? In my household, the issue is playing more hours of computer games than I think prudent. Games reduce time available for reading, exercise and real life socializing. I don’t mind the games so long as they don’t squeeze out time for these other activities. Ideally, a computer would be used for a hour or two gaming and maybe an hour or two doing useful stuff, like writing, learning something, reading wikipedia. So can technology help me or must I stand behind my son all the time?

- KidsWatch Time Contorl- This either prohibits an application or says it can only be played for a set amount of time depending on the schedule and user.

-LUA, aka, limited account- It is good for preventing accidental installation of spyware. Many legitimate games still require administrative rights.

-Keystroke loggers, screen recorders- Too much information, Big brother isn’t exactly a good idea for adults or children.

-Firewalls- Some firewalls can open ports for particular time schedules, this might help for a limited range of applications. NetNanny and the like can block some, but not all sites with naked people and foul language. Besides, the more you restrict that kind of content because it isn’t suitable for children, the louder the message is that the content is suitable for adults.

-USB keys- These applications turn off the computer when the keys aren’t in place. I don’t mind excessive computer usage for good (reading wikipedia, learning to program), so turning the whole thing off just means the first budgeted hours on the computer will be used for gaming, then the computer gets turned off. Hardly the desired outcome.

Here’s the delicious tag with links (my parental control links) (everyone’s parental control links)

Reporting Services and Dynamic Columns

If a field is not in a result set, then you can still define it manually. The report will not raise an error if that field is not in the executed result set. HOWEVER, there appears to be no way to test for that condition. IsNothing(Field!MyField.value) doesn’t appear to return anything, although some one on Experts Exchange thought so. I tried many variations on it. Aparently, if the expression tries to evaluate an expression with missing column, the whole expression evaluates to a blank or zero or sometimes ERROR#, depeding on the partiucular expression.

Other sites recommend dealing with dynamic columns by referencing a parameter, which knows which columns are appearing:


This is like trying to embed the result set’s meta data into the parameter set. Ugh.

Dual Monitors and SLI Woes

Ok, listen to this. If you want to run dual monitors, you can’t use SLI mode, and worse to switch to dual monitors, you have to reboot.

The intresting post above seems to say that if you want SLI and dual monitor output without reboot and plug/unplug/plug/unplug misery, you have to get a third video card for the second monitor, interestingly enough, the configuration seems to work better when the 3rd card is not Nvidia!

To make matters worse, my water cooling device gets in the way of the plugs so not all 4 of them are exposed. And of course every time I change modes, Nvidia wants to make the least accessible plug the main monitor.

And if I plug a monitor into the digital slot, it doesn’t always detect it or is seemingly random about how it detects it.

Grumble, grumble.