Windows only: Free home movie organizer Eric’s Movie Database (EMDb) is a fast and simple solution for those looking to keep tabs on their DVDs, VHS tapes, or other home movies. Using IMDb as its primary data gatherer, you simply type in the name of your film, confirm which flick it is, and you’ve got all the standard information filled out. There’s a powerful seach function for truly substantial collections, and a button to track who you’ve got your flicks loaned out to. Mac users looking to organize more than just DVDs should try Delicious Library; for Windows users just looking to give their friends a list of what they’ve got, EMDb is probably the most time-efficient solution. Eric’s Movie Database is a free download for Windows systems only.
Monthly Archives: September 2008
Eric’s Movie Database Whips Your Collection into Shape with IMDb [Featured Windows Download]
StairCASE Stepladder Bookcase [Stuff We Like]

Conceptual designer Danny Kuo has prototyped an ingenious solution for getting to the topmost levels of a tall bookshelf with his StairCASE design. The bookshelf combines the functionality of drawers to make steps to reach the high shelves, as shown. For small apartments with high ceilings, this is a pretty ingenious space-saver. For similar storage as ladder, see how to turn your steps into drawers. The StairCASE doesn’t appear to be available for purchase, but a DIY version wouldn’t be too hard for someone out to build a new bookshelf.
SpeedFan Monitors Your Hardware, Controls Fans [Featured Windows Download]
Windows only: Free application SpeedFan monitors the fan speed, temperature, voltage, and more of the components inside your computer. That’s all fine and dandy, but the marquee feature of SpeedFan is that you can actually adjust the speed of your fans by tweaking the desired temperatures on supported systems. Keep in mind that SpeedFan is a power-users tool, and the temp inside your computer isn’t to be taken lightly. However, if you’re comfortable tweaking hardware settings, an app like SpeedFan can help keep your computer running quieter and give you a little more control about what’s happening with your computer’s innards. If you’ve used SpeedFan in the past, share you experience in the comments. Mac users, check out previously mentioned smcFanControl.
November Preview: Dirt-Simple Router Tricks Video
The November issue of Popular Woodworking mails to subscribers later this week.
To whet your appetite, Senior Editor Glen D. Huey and I shot this short video showcasing
three uses of the versatile Square Platform Jig. This jig, as well as others, will
all be featured in his forthcoming cover story, “Dirt-simple Router Jigs.”
So keep watching your mailbox for your November issue, and until then watch this video
for a taste of what’s to come.
MZ Ultimate Tweaker Modifies and Optimizes System Settings [Featured Windows Download]

Windows only: Free application MZ Ultimate Tweaker is a system modification tool that covers the gamut of system tweaks, putting everything from performance to display tweaks just a few clicks away. The application is very similar to the TweakUI Windows XP PowerToy. But apart from all the minor modifications it can make to your system, it also comes loaded with several useful utilities worth checking out.

Those utilities include an advanced shutdown scheduler, startup manager, services manager, and registry backup tool.

All of the utilities are available as separate downloads from the MZ Ultimate Tweaker web site, so if you just want an à la carte utility, you can grab it as a standalone. Utlimate Tweaker also includes a few snake-oil utilities promising to speed up your computer, so stick with the useful ones. Regardless, MZ Ultimate Tweaker gives quick and easy access to tons of worthwhile Windows modifications, so if you’re a junkie for a good tweak, give it a look.
Giftag Simplifies Wishlists [Wishlists]

Giftag is a free, web-based wishlist creation service that supports products all over the web. Unlike Amazon’s Universal Wish List, Giftag is based on an open data format, hProduct. Armed with a Firefox add-on, at any site you visit that uses the hProduct format, you can add the item with all the product details to your wishlist in one click. If the web site doesn’t have hProduct data, you can just as easily lasso the item on the screen, save a screenshot and manually enter the details. A nice feature is multiple wishlist support; when you send an item to Giftag, you can select which list it should go to. Keeping one list for your private purchases, one for gift ideas for friends and family, another for gift ideas for your significant other or kids, etc. is extremely easy. Share your wishlists with people outside of the Giftag service via email, and there is a Facebook application in addition to the Firefox add-on.
Moo0 RightClicker Adds Key Features to Windows’ Right-Click Menu [Featured Windows Download]
Windows only: Free right-click enhancer Moo0 RightClicker adds contextual images and a host of useful features to your standard right-click menu in Windows. Copying and moving files and folders to bookmarked or standard system folders is made easy with quick-collapsing menus. Perma-deleting items (as opposed to merely "recycling" them) is added to your options, and intelligent copying—the name, path, or contents of an actual file—is a nice touch. Best of all, Moo0 doesn't eliminate any customizations you've already made, and lets you customize what you see on right-clicking, so it works nicely with any other utilities you may have installed. Moo0 RightClicker is a free download for Windows systems only.
Wood Movement – Question of the Week
This week’s question comes from Martin. Let’s see what he has to say: I’m a relative newcomer to woodworking and have been watching your podcasts for a month or so now and am finding them very interesting. One major point I have picked up on is how much attention needs to be paid to the way in which wood moves over time as this never really occurred to me before. I am currently working on my 2nd ever project which is a jewelry box which will hopefully be made out of a nice piece of cherry.
I have attached a couple images of what I’ve designed so far.
The problem I am stuck on is with regards to the top of the box. I have designed the box to have the top made out of two bits of cherry butted up against each other which will then sit in a rabbit around the top of the side pieces. From what I have seen online recently it looks like this could result in the top expanding and “popping” the dovetails out, or cracking the top piece. I’m pretty much at a loss as to how I could get around this and was wondering if you had any pointers.

And here was my response:
Hey Martin. I too was very surprised when I first learned that we have to account for wood movement. I remember thinking at the time, “Oh great! Something else to worry about!” lol. The interesting thing is there are always exceptions to the rules and there are nearly always workarounds. Depending on the size of this box, you may never really have a problem. Obviously the smaller it is, the less it will move. And with small jewelry boxes, you can usually break a lot of the movement rules. Now if this is a reasonably good size, you certainly might have issues, but then again, you might not. How much of a gambler are you? If you want to get a little more scientific about it, check out The Shrinkulator.
Now the safe thing to do would be to redesign the top a little. And by re-designing, you might turn this dilemma into a design opportunity. The most obvious option would be to make the top more like a frame and panel. So the two cherry pieces would be set into a groove that goes all the way around the inside perimeter of the lid. The panel would essentially float, and thus be allowed to move. But of course, this changes the look.
Now if you absolutely do not want a frame and panel look, then your only other “safe” option is plywood. You can fully surround a piece of ply in that situation and have no adverse effects. And based on this design, the ply edges would be completely concealed and no one would have any idea that it was a piece of plywood. In fact, that would be the way I would do it if I wanted to adhere to that specific design. Good luck!
Dynamic Data – Experimenting with YUI’s DataTable and DataSource Controls
I spent a few hours putting together a Dynamic Data web site using the YUI DataTable and DataSource components. I mostly just did this out of curiosity to see how easy or difficult it would be to use the DD API with other components besides the GridView and DetailsView controls. So I created a DD web site that provides read-only access to Northwind's Customer, Employee and Supplier tables, but I am not using ASP.NET's GridView, DataSource and UpdatePanel controls to render the grid. Instead I have replaced these components with YUI's client side DataTable and DataSource and serve the data using a web service (paging included!). Below are a few of the highlights, and don't forget to download the sample and try it out for yourself. Its experimental, but if you are new to DD or YUI you might find it interesting.
[Update: 9/21/2008]: Added live demo link
The List Page Template
The markup for my List page template is pretty simple and fairly similar to the DD sites I have blogged about previously. I use the table's DisplayName and Description attributes to render the title bar. But, for this sample I am also including three extra DIV's – #paging-top, #grid and #paging-bottom. These three DIV's will be used as the containers for the YUI pager and grid widgets.
After the markup is added, I included a bit of JavaScript for configuring the YUI DataTable and DataSource components. The source for the script is below. There is quite a bit going on so right after the source is a line-by-line guide of what it is doing …
1: // render the YUI script ...
2: YAHOO.util.Event.addListener(window, "load", function() {
3:
4: // create the datasource and point it at the webservice's FetchAll method
5: var myDataSource = new YAHOO.util.DataSource('/dd_yui/NorthwindService.asmx/FetchAll', { connMethodPost: true });
6:
7: // set the content-type to JSON
8: myDataSource.connMgr = YAHOO.util.Connect;
9: myDataSource.connMgr.initHeader('Content-Type', 'application/json; charset=utf-8', true);
10: myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
11:
12: // setup the response schema
13: myDataSource.responseSchema =
14: {
15: resultsList : 'd.records',
16: fields: <%= this.FetchDataFields() %>,
17: metaFields : { totalRecords: 'd.totalRecords' }
18: };
19:
20: // configure the data pager
21: var myPaginator = new YAHOO.widget.Paginator({
22: // 2 data pagers - both top and bottom
23: containers : ['paging-top', 'paging-bottom'],
24: pageLinks : 5,
25: rowsPerPage : 15,
26: template : "{PreviousPageLink} {PageLinks} {NextPageLink}"
27: });
28:
29: // setup the table settings
30: var myTableConfig = {
31: // JSON object that maps to the parameters of my WebMethod
32: initialRequest : '{startIndex:0, pageSize:15, tableName:"<%= this.table.Name %>"}',
33: // A custom function to translate the js paging request into a JSON
34: generateRequest : function(state, dt){
35: return '{startIndex:' + state.pagination.recordOffset + ', pageSize:' + state.pagination.rowsPerPage + ', tableName:"<%= this.table.Name %>"}'
36: },
37: paginator : myPaginator,
38: paginationEventHandler : YAHOO.widget.DataTable.handleDataSourcePagination
39: };
40:
41: // create the datatable
42: this.myDataTable = new YAHOO.widget.DataTable("grid", <%= this.FetchColumnDefinitions() %>, myDataSource, myTableConfig);
43: });
- Line 5 – 10: Create the YUI DataSource.
- The YUI DataSource can grab data from just about anywhere – an XML DOM object, JavaScript array, an HTML Table, or from a remote server. For this example I created a FetchAll web method that will serve the Northwind data so I have configured the DataSource to use this web method.
- Lines 13 – 18: Describe what the response is going to look like.
- You need to tell the DataSource what the elements returned from your data look like. In lines 15 – 17 I am letting the DataSource know what it can expect to be returned from my web service. If you notice the fields array is dynamically created by invoking the FetchDataFields method on my List.aspx template page. FetchDataFields queries the MetaTable for the current request and includes the names of all of the columns that need to be scaffolded. Here is the source for this method.
- Notice that I am retrieving the reference to the MetaTable from the DynamicDataRouteHandler – keeping my template unaware of the entity type the page is being requested for (line 4)
1: public string FetchDataFields()
2: {
3: // get a reference to the MetaTable for the current route/request
4: MetaTable table = DynamicDataRouteHandler.GetRequestMetaTable(HttpContext.Current);
5:
6: var columns =
7: from c in table.Columns
8: where c.Scaffold
9: select c.Name;
10:
11: return new JavaScriptSerializer().Serialize(columns.ToArray());
12: }
- Lines 21 – 27: Initialize the data pager controls.
- I wanted to use 2 pagers – one above the grid and another below it so I added DIV's to the List template for both of these items. When I create the Paginator widget I supply YUI with the ID's of the DIV's that should contain the paging controls.
- Lines 30 – 39: Setup the config options for the table.
- Line 42: Create the DataTable.
- I need to tell the DataTable about some basic metadata regarding the grids columns. For this example I have included only the most basic information – the mapping between my column headers and the fields from the object returned from my web method that fills the grid …
1: public string FetchColumnDefinitions()
2: {
3: // get a reference to the MetaTable for the current route/request
4: MetaTable table = DynamicDataRouteHandler.GetRequestMetaTable(HttpContext.Current);
5:
6: // grab the names of the columns we are scaffolding.
7: // YUI uses the key/label to map the fields returned
8: // by our web method to the columns in the DataTable
9: var columns =
10: from c in table.Columns
11: where c.Scaffold
12: select new
13: {
14: key = c.Name,
15: label = c.DisplayName,
16: resizable = true
17: };
18:
19: return new JavaScriptSerializer().Serialize(columns.ToArray());
20: }
- Finally, I use all of the settings and objects created previously to initialize a new DataTable instance – pointing it to the #grid DIV that I have already added to the page
The FetchAll Web Method
Finally, here is the source listing for my FetchAll web method. I have configured the YUI DataSource to pass through the name of the table to retrieve the data for. This is what is allowing me to use the same web method for all of the tables. So this is the first parameter, the second and third parameters are the paging arguments. Other than that the method is pretty simple …
- Line 6 – 8: Use the tableName argument to get the MetaTable its corresponding IQuerable objects
- Line 11: We need to total row count for our paging math – so execute a count(*)
- Line 14: We only need to retrieve the columns we are scaffolding, so get the list of columns we want to include in the select
- Line 20 – 26: Create the object that we will return to the YUI DataSource
- Include the total row count
- Use Skip and Take to handling the paging parameters
- Use Select to make sure only the columns we are using are being returned
1: [WebMethod]
2: [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
3: public object FetchAll(string tableName, int startIndex, int pageSize)
4: {
5: // get the MetaTable for this table
6: MetaTable table = MetaModel.GetModel(typeof(NorthwindDataContext)).GetTable(tableName, typeof(NorthwindDataContext));
7: // get the query
8: IQueryable query = table.GetQuery();
9:
10: // total row count - used for the paging controls
11: int rowCount = query.Count();
12:
13: // only pull back the columns we are scaffolding
14: var columns =
15: from c in table.Columns
16: where c.Scaffold
17: select c.Name;
18:
19: // return the collection
20: return new
21: {
22: // include the total row count
23: totalRecords = rowCount,
24: // get the current page
25: records = query.Skip(startIndex).Take(pageSize).Select(string.Format("new({0})", string.Join(",", columns.ToArray())))
26: };
27: }
Conclusion
Well, like I said it was just an experiment. Probably not ready for production and I haven't quite worked out how the edit/delete scenarios are going to work, but I thought it was interesting enough to write up a quick post about. And DiscountASP is upgrading to .NET 3.5 SP1 sometime this week, so I should have the demo’s up for my DD posts soon.
That's it. Enjoy!
Switch Between Outlook Modules with Keyboard Shortcuts [Microsoft Outlook]
If you spend your day in Microsoft Outlook and you’re still using the mouse to click between your Mail, Calendar, and To-do List, there’s a better way. Train your typing fingers the Ctrl+1 through Ctrl+8 keyboard combos to switch between modules quickly. For more Outlook shortcut fun, see how to tweak Microsoft Outlook to empty your inbox faster with custom shortcuts. [via]
