The Digital Inspiration blog points out that new-browser-on-the-block Google Chrome shares one thing with Firefox 3 not mentioned in many press reports—a history-aware address bar, or "Awesome Bar," that can create some red-faced moments on a shared computer. If more than one person on your system is switching to Chrome, and you don't feel like staying in Incognito Mode all the time, creating a new profile in Chrome requires manually creating a folder in Chrome's application data folder, but that's all there is to it. Vista and XP users, hit the link below for help finding your Chrome profiles folder, and then creating a custom shortcut to launch your own Chrome without leaving tracks behind on others.
I loaded one of my test Ubuntu virtual machines today (one that I hadn't used for a month) and, surprise, I had forgotten the password. This sort of thing happens from time to time, and if you're new to Linux, it can be a little disconcerting.
Loosing your root password isn't the end of the world, though. You'll just need to reboot into single user mode to reset it. Here's how to do it on a typical Ubuntu machine with the GRUB bootloader:
Boot Linux into single-user mode
Change the admin password
The system should load into single user mode and you'll be left at the command line automatically logged in as root. Type 'passwd' to change the root password or 'passwd someuser' to change the password for your "someuser" admin account.
Reboot
Once your done, give the three finger salute, or enter 'reboot' to restart into your machine's normal configuration.
That's all there is to it. Now just make sure to write your password down on a post-it and shove it somewhere safe like under your keyboard. :)
Windows only: Free application Startup Delayer staggers the applications that launch when you log in to Windows by user-defined increments. The reason: To mitigate the common startup bottleneck caused by all of your startup applications fighting to run at the same time. You'd never try launching eight different applications simultaneously under normal circumstances and expect your computer to handle it well, so why should your startup apps be any different? To use it, just drag applications to the delay bar at the bottom of the window. You can visualize the time between the launch of different apps and drag-and-drop the delays until you've got the perfect spacing.
Though you'll likely be delaying app launches by seconds, you can delay a launch for up to 24 hours (though we're not sure why you would). If Startup Delayer sounds familiar, that's probably because we featured an identically named application a while back. This Startup Delayer, however, makes the process much simpler and more manageable. Startup Delayer is freeware, Windows only.
So I am still playing around with building a Northwind Dynamic Data web site. Tonight I thought it would be interesting to see what it would take to create a menu for navigating the tables in the site. I was particularly interested in seeing if I could get some grouping or categorization to the metadata so I could create a multi-leveled menu. It turns out it wasn't too difficult at all (see the screen shot below - the menu is on the left). I have my tables organized into 4 categories: Sales, People, Products and Reports. And the cool thing is that this menu is completely dynamic. You can add, remove or reorganize the categories without touching the UI. And depending where you are keeping your metadata you could even do this without recompiling your app. The grouping is automatically discovered from the metadata and the menu is built solely off the it so everything 'just works'.
Besides adding the grouping information, I also tagged each of my tables with a custom description that I am displaying under the grids title. Nothing too complicated, but still interesting. Read on if you are curious how I did this and don't forget to check out the download.
When MetaTable objects are created, the Dynamic Data components automatically populate the the MetaTable's DisplayName property from the DisplayNameAttribute that is hanging off the metadata class (if you are using the default metadata provider). This is why you see the nice 'Products By Category' title in the screen shot above. I have specifically told Dynamic Data to use this value because I tagged my metadata class with the DisplayName attribute and given it a value of 'Products By Category'. Below this metadata ...
To add a category and description to the metadata, I just used the existing Category and Description attributes and added them to the metadata class as well. So now we have ...
The Category and Description attributes don't directly map to any properties on the MetaTable type. But, any extra custom attributes that are applied to in the metadata are passed through to the Attribute collection that hangs off the MetaTable class. So with a couple of pretty simple extensions methods I can add them myself (ignoring error handling for now) ...
... and now to get at the MetaTable's description or category I can just go through these methods. So I updated the List template and added a little bit of code that generates a simple title bar generated from the MetaTables DisplayName and Description attributes.
and now our List pages have a nice dynamic title bar ...
To build the menu, I am using a ListView tied to a LinqDataSource that uses a Linq query to create a 2 level object structure that I can bind to. First, I wired the LinqDataSource's Selecting event to the following bit of code that groups my tables by their category ...
Then I bound this data source to my ListView ...
And that's all it took to build my 2 level menu. Awesome!
Can Dynamic Data be used for more than admin screens and prototyping? I think it might. What about you?
That's it. Enjoy!