Monthly Archives: April 2009

30-Second DVR Tweak Speeds Up Commercial Skipping [DVR]

DVRs have revolutionized the way people watch TV, but if you’ve always wished your DVR were a little better at skipping commercials, this classic 30-second skip hack is a must.

For what it’s worth, we realize that these tricks aren’t new by any means. Still, we’ve never featured them here, and the aim of this post is to collect as many of them as possible. Right now, we’re aware of two hacks of this kind: one for the TiVo, the other for Comcast DVR.

First the TiVo trick, first pointed out to us by reader schulman:

While playing a recorded show, hit select-play-select-3-0-select. You’ll hear 3 chimes if you did it right. You’ll need to redo this whenever the Tivo reboots.

Reader robkonz81 writes in with how he enables the same 30-second commercial skipping on his Comcast DVR:

1) Press the “Cable” button at the top of the remote to put it into Cable Box control mode.
2) Press and hold the “Setup” button until the “Cable” button blinks twice.
3) Type in the code 994. The “Cable” button will blink twice.
4) Press (do not hold) the “Setup” button.
5) Type in the code 00173 (for 30 second Skip).
6) Press whatever button you want to map the skip. (I use the fav button—next to mute.)

Update: Commenter ThickSkinned points out this tip for DirecTV’s DVRs:

1. Make sure you have the (latest) upgrade
2. Go to Menu > Search for Shows > Keyword
3. Enter in “30SKIP” in the search area and hit “Continue”
4. That’s it. Now go to a recording, and hit play and try the old SLIP button out.
5. If you want to go back, do the same thing as above but put “30SLIP” instead.

If you’ve got your DVR service through a different cable or satellite company and you know of a similar trick, let’s hear it in the comments. Thanks robkonz81!





Gantter Does Project Management in Your Browser [Project Management]

Web-based project management tool Gantter has an interface that looks remarkably similar to Microsoft Project—and even lets you import and export your Project files.

Using the application is fairly simple—just start adding tasks and resources just like you would on the desktop version of Microsoft Project. Once you've finished, you can download the project as an XML file, which can then be imported back into Project. You can import projects, open saved files, and use the wide array of keyboard shortcuts all from a web-based interface that works anywhere and requires no account to use—making this worth a look for anybody dealing with project plans and TPS reports.

Gantter is free to use, available in your web browser. For more, read about project management in a nutshell, check out free hosted project management with Clocking IT, or replace Microsoft Project with the open-source OpenProj. Thanks, Climbup!





Planing a Dovetailed Box

There are lots of people who will show you how to handplane the edge of a board. A
few less who will show you how to really flatten the wide face of a board. A smaller
number will show you how to flatten a glued-up panel (stay tuned – that tutorial is
already written) and even fewer who will demonstrate how to plane an assembled carcase.

After lunch I dressed a small dovetailed box I’m building and took some photos along
the way. Have a minute? Get the alcohol!

Really, get the alcohol. A dovetailed carcase has a lot of end grain, so moistening
the end grain with denatured alcohol will make the work easier.

Set up a planing platform for your carcase. Big carcasses can be sleeved over the
end of your bench. Small carcasses and drawers can be worked on a platform that’s
clamped to your bench.

As with all aspects of hand work, everything begins with stock selection. I try to
pick boards with the straightest grain so I can plane them in both directions – from
the ends and into the middle of the carcase. This avoids blowing out the end grain
of the pins and tails.

If the board has a pronounced grain direction (which stops me from planing both directions) 
I’ll use a plane with a high pitch to do all the smoothing work – this also allows
me to work from the ends and into the middle. High-angle planes can ignore grain direction.
And, despite what you’ve read, you can plane end grain with them. Sharpness fixes
almost anything.

Trim the Pins

I trim the pins with a sharp block plane. The reason I prefer a block plane is that
it’s quite narrow, so I can work in small areas without planing away stuff I want
to keep. You can skew the blade to make the cut easier. And don’t forget the alcohol.
Work from the end toward the middle – but just trim the end grain, not the face grain.

With the pins trimmed on both ends of one face of my carcase, I need to make a decision.
If I’m going to attach moulding to the carcase, I want to ensure those areas are dead
flat. (Bending moulding = no fun.) I’m attaching base moulding around this box so
I trued its lower section with a jointer plane. Note that I start the plane at the
end, work into the middle and lift off in the middle.

Check your work with a straightedge to make sure you’re not creating a hill in the
middle of your panel. If you are, work the center only until you get it flat.

Smooth the Face

Then use a smoothing plane to dress the face. Start from the ends and work to the
middle, lifting at the end of the stroke. At the moment your joints’ baselines disappear,
you’re done.

One difficulty people have here is with boards that have a pronounced grain direction.
Here’s how I deal with it: Plane “with the grain” on the carcase face for the majority
of the panel. Lift off only at the very end.

Then come back and dress the other direction with a high-angle plane, working only
a short distance. That way if you have to scrape, it will only be a small area. Now
plane the other side of the carcase using these same techniques.

Trim the Tails

Now trim the end grain of the tail boards. Moisten the end grain with alcohol and
work from top to bottom (or bottom to top). This prevents you from having any blowout
on your tailboards. When the tails have been trimmed, grab the jointer plane and smoothing
plane and work from the ends and into the middle again, just like you did on the other
two faces.

Note: There are other ways to tackle this job. You can plane a small chamfer on all
four corners and plane straight through on all four faces of your carcase. This is
faster but risky. If your chamfer isn’t big enough, you’re toast. You also can fetch
the belt sander or random-orbit sander. But you wouldn’t be reading this blog entry
if you sleep with your sander.

— Christopher Schwarz

Looking for More Woodworking Information?

• Sign up for our newsletters to get free plans, techniques and reviews HERE.
• Looking for free articles from Woodworking Magazine? Click HERE.
• Like hand tools? Read all our online articles on hand work HERE.
• Want to subscribe to Woodworking Magazine? It’s $19.96/year. Click HERE.

Know What to Ask Before Hiring a Financial Planner [Personal Finance]

Money’s tight right now, but just because we’re in a recession doesn’t mean you can’t benefit from the advice of a solid financial planner.

Photo by __Dori__.

At personal finance weblog Get Rich Slowly, financial planner Jeff Rose discusses eight questions you should ask before hiring a financial planner to ensure that you’re getting your money’s worth. For example:

What will I find on your U4?

Remember when you were younger and you could always hide your grades from your parents? That was until the report card was sent home. The U4 is the “report card” of your financial planner’s background. That means if he’s done anything wrong and a complaint has been filed against him, it will be shown here.

As much as I hate to admit it, this editor has never had a serious sit-down with a financial planner, so if you've got experience hiring a pro, let's hear how you found your financial planner—and what questions you asked before diving in—in the comments.





SiteShoter Takes Web Site Screenshots Over Time [Downloads]

Windows only: Portable freeware application SiteShoter takes screenshots of web sites with a powerful array of features.

Using the utility, which (like all of the excelllent NirSoft applications) requires no installation, is easy—just add the URL to the web site you want to capture, choose a filename to save the image to, and click Start to save the screenshot. What makes this utility great is the wide range of powerful options, including a full-featured command line—you can place special formatting codes in the filename to specify a timestamp or add the URL to the filename, which becomes very useful if you wanted to save screenshots for multiple sites at once.

You can choose how often you want the screenshots to be taken—the default is every 5 minutes, but you could take a screenshot every few hours instead. Rounding out the great feature list is the ability to save your configurations for later re-use—you could use the GUI to save the options and create a command-line shortcut to run that configuration on demand.

SiteShoter is a free download for Windows only. For more great utilities, check out how to customize your right-click menu with ShellExView, or just look through our top 10 tiny & awesome Windows utilities.

SiteShoter [NirSoft via gHacks]





Six Ways You Should Be Using Twitter (that Don’t Involve Breakfast) [Twitter]

Twitter has become a nationwide phenomenon, and like any phenom, all the Twitter talk grows quickly tiresome. But despite what you may think, Twitter isn’t just for narcissists; it’s actually insanely useful.

So let's assume that you already know about the navel-gazing uses of Twitter—the aspects of Twitter that most people criticize when they complain about the site. Discounting Twitter altogether because you think it’s ridiculous that people tweet about what they had for breakfast is like claiming that email is useless because of forward chains. It’s a mistake, and you’d be missing out on a great tool if you let that put you off Twitter completely.

Twitter is as useful as you make it. In fact, Twitter does several very worthwhile things better than any other tool.

1. Instant, Real-Time Search Results

Search is hands down the most useful feature of Twitter—whether or not you actually participate by posting anything to the site. Consider, for example, a very trivial example: I live on the West coast, so when the American Idol results show ends every Wednesday on the East coast, it's only 7pm here. I could wait two hours, then suffer through another hour of the Wednesday night, up-with-people variety show, but I really just want to know who was voted off. News sites move too slowly, and at one point blogs had aimed to fill this instant-answers void, but guess what: When you want to find out who was voted off Idol as soon as the results are available, Twitter is the quickest and easiest way to get this answer. Try it sometime. Within seconds of the announcement on Idol, Twitter fills with hundreds of posts answering this question for me.

The real-time search applies to so much more. If the signal on my cell phone goes out, I check Twitter to see if there's some sort of AT&T outage in my area. If I want to know what people are saying about something important to me, I hit up Twitter. What you get is like a centralized, searchable, real-time comment-thread for everything. Yes, like all comment threads, you'll find a good amount of crap. But that doesn't render the entire thread worthless. Bookmark Twitter Search now and use it next time Google or your favorite blog search engine fails you.

2. Monitoring Something You Care About

Virtually every company has a Twitter account these days, which means if there’s a product you really care about, following them on Twitter is often the easiest way to stay up to date with the latest developments. But more often than not (in the context of Twitter, at least), the thing we care about most is ourselves. We’ve already shown you how to create an ego search to monitor what’s being said about you on the web, but now Twitter is another must-use tool for getting your ego fix.

Still, even if you’re not an ego-maniac, surely there’s something that you care about that you could monitor on Twitter. Do yourself a favor and download one of the free desktop Twitter clients to help you create persistent Twitter searches so you can keep track of whatever your want without always hitting up the main Twitter search page. We’d recommend checking out TweetDeck or Seesmic Desktop.

3. News Updates

We've been using newsreaders to subscribe to RSS feeds for years now, but newsreaders still haven't completely caught on with the world at large. It seems less manageable to us, but many people are perfectly happy using Twitter as a tool to keep up with the latest news—which is partly why CNN has over 1 million followers. Likewise, re-tweeting (the process of copying and re-posting someone else's tweet) spreads news like wildfire—so breaking news can reach you on Twitter a million times faster than through any of the old methods. (For what it's worth, here at Lifehacker we have our own Twitter feed that pushes out all of our top stories.)

4. Instant Communication with Friends

This is closer to what people think about when they think Twitter. But, as I said above, Twitter communication doesn't have to be a cesspool of "what I ate this morning" and "just flushed the toilet." You can choose whose updates you want to be notified of and how you get those updates. Upshot: If you and your pals use Twitter well, it can be a fantastic communication tool. If not, of course it's useless—but that's not really Twitter's fault. Also, if privacy is a concern, you can always protect your updates.

5. Twitter as a Productivity Command Line

Whether you want to add a new event to Google Calendar, a new to-do to Remember the Milk, or a new note to Evernote, you can do it all via Twitter. It took us a while to warm up to Twitter from a productivity angle, but this kind of integration made us admit that Twitter may yet boost your productivity, too.

6. Ask Questions, Get Answers

Provided you have enough followers (with enough knowledge), Twitter is also a powerful place to ask questions and get answers. Before I started writing this post, for example, I asked my followers what they think Twitter’s best uses are—the answers to which helped inform this entire post.


We certainly haven’t exhausted all the options, but hopefully this gives you a more balanced look at how Twitter can be useful to you. Of all of these options, Twitter search is far and away the most powerful feature, and one we’d recommend you start using. If you’ve got something worthwhile you use Twitter for that we didn’t cover, let’s hear about it in the comments.



Recipe Puppy Chooses Meals Based on the Ingredients You Have [Recipes]

Recipe search engine Recipe Puppy finds meals by a list of ingredients or keywords, searching through more than 500,000 recipes across dozens of web sites.

Once you've searched using the list of ingredients you want to use, Recipe Puppy will suggest other similar ingredients that you might want to add to your search, a very nice feature to help pick an interesting meal. Since the search engine is powered by Google APIs, you can use some regular search operators to help—for instance, you can add a "-" in front of an ingredient you don't want to see. The popular web site AllRecipes provides a similar find-by-what-you-have feature, but Recipe Puppy’s ability to search many sites at once makes it worth a look for anybody trying to figure out what to make for dinner.

Recipe Puppy is a free website, works anywhere. For more, check out how to find recipes to satisfy your cravings, or make the most of what’s in your pantry with RecipeMatcher. Thanks, Kris!





Know How to Spot an ATM Skimmer [Security]

If you've seen warnings lately about ATM "skimmers"—data-reading devices added onto machines by thieves—you might be wondering how you could tell if one's been rigged up to where you're about to insert your card. The Consumerist blog hosts a PDF copy of a PowerPoint explainer from an Australian security firm (that still applies to U.S. machines). It might not cover what your specific bank's teller machines should look like, but it does point to warning signs to look out for—like the flashing lights on a card feeder being obscured. [Consumerist]





Use Taskbarn to Track and Manage Projects Online [Project Management]

Taskbarn is a web-based project collaboration tool with a focus on ease of use, transparency, and feed-friendly updates.

Taskbarn covers the basics of project management, including assigning due dates to tasks and marking parties responsible for completing them. In addition to the standard tools, each project is set up with a unique feed. Updates to the project can be published both within the Taskbarn feed and to an external Twitter account. Each feed update can be given a file attachment of up to 10MB—handy for tossing in pictures and voice messages to keep a group posted on progress.

In addition to task management and publication of project updates, there is a messaging system for keeping up with your fellow collaborators and a notes section for attaching notes and files that don’t quite fit into the task list. There is a 100MB limit on file storage, so if you’re working with bulky multimedia files, you’ll need some alternate storage space. If Taskbarn doesn’t quite fit your needs, you may want to check out another web-based project manager we’ve reviewed, HiTask. Taskbarn is a free web-based service.





Minimize Code by Using jQuery and Data Templates

I’m currently working on a heavily AJAX-oriented ASP.NET MVC web application for a business client and using jQuery to call controller actions, retrieve JSON data and then manipulate the DOM to display the data. Several of the pages have quite a bit of dynamic HTML that has to be generated once a JSON object is returned from an MVC controller action which generally leads to a lot of custom JavaScript.  After working through my first page on the project I realized that I was creating a maintenance nightmare due to the amount of JavaScript being written and decided to look into other options.

The first thing I looked for was some type of JavaScript template that would work much like GridView templates in ASP.NET.  I wanted to be able to define a template in HTML and then bind a JSON object against it.  That way I could easily tweak the template without having to actually touch my JavaScript code much.  I found several potential template solutions (and Microsoft will be releasing a nice option with ASP.NET 4.0 as well) that were nice but many were so CSS class centric that they ended up being a turn off since I felt like I had to learn yet another coding style just to use them.  I eventually came across one by John Resig (creator of jQuery and overall JavaScript genius) that was so small that I wasn’t sure it would even be viable.  I mean we’re talking tiny as far as code goes…so tiny that I figured it wouldn’t work well for what I needed.  After doing more searching and research I came across a post by my world famous buddy Rick Strahl (if you don’t currently follow his blog you won’t find a better one out there IMHO) that mentioned John’s micro template technique and had a few tweaks in it.  I tried it and was instantly hooked because it gave me the power to use templates yet still embed JavaScript to perform basic presentation logic (loops, conditionals, etc.) as needed.

The Template Engine (chipmunk power)

So here’s how the template works.  The first thing I did was add the template function as a jQuery extension so that I could get to it using familiar jQuery syntax.  This isn't required at all, it’s just something I wanted to do.  I ended up going with Rick’s slightly tweaked version and I only changed how the error was reported.  I’m not going to go into how to extend jQuery in this post, but here’s what the extension function looks like:

$.fn.parseTemplate = function(data)
{
    var str = (this).html();
    var _tmplCache = {}
    var err = "";
    try
    {
        var func = _tmplCache[str];
        if (!func)
        {
            var strFunc =
            "var p=[],print=function(){p.push.apply(p,arguments);};" +
                        "with(obj){p.push('" +
            str.replace(/[rtn]/g, " ")
               .replace(/'(?=[^#]*#>)/g, "t")
               .split("'").join("\'")
               .split("t").join("'")
               .replace(/<#=(.+?)#>/g, "',$1,'")
               .split("<#").join("');")
               .split("#>").join("p.push('")
               + "');}return p.join('');";

            //alert(strFunc);
            func = new Function("obj", strFunc);
            _tmplCache[str] = func;
        }
        return func(data);
    } catch (e) { err = e.message; }
    return "< # ERROR: " + err.toString() + " # >";
}

That’s all the code for the template engine.  Unbelievable really…runs on chipmunk power.

Creating a Template

Once the extension function was ready I had to create a template in my MVC view (note that this works fine in any web application, not just ASP.NET MVC) that described how the JSON data should be presented.  Templates are placed inside of a script tag as shown next (I chopped out most of the template to keep it more concise). 

<script id="MenuSummaryTemplate" type="text/html">
     <table style="width:100%;">
        <tbody>
            <tr>
                <td class="OrderHeader">Totals:</td>
            </tr>
            <tr>
                <td style="font-size:12pt;">
                    <table style="width:400px;">
                        <tr>
                            <td style="width:50%;">Sub Total:</td>
                            <td>$<span id="FinalSubTotal"><#= FinalSubTotal #></span></td>
                        </tr>
                        <tr>
                            <td>Sales Tax:</td>
                            <td>$<span id="FinalSalesTax"><#= FinalSalesTax #></span></td>
                        </tr>
                        <# if (DeliveryFee > 0) { #>
                        <tr>
                            <td>Delivery Fee:</td>
                            <td>$<span id="DeliveryFee"><#= DeliveryFee #></span></td>
                        </tr>
                        <# } #>
                        <tr>
                            <td>Admin Fee:</td>
                            <td>$<span id="AdminFee"><#= AdminFee #></span></td>
                        </tr>
                        <tr style="border-top:1px solid black;">
                            <td>Total:</td>
                            <td>$<span id="FinalTotal"><#= FinalTotal #></span></td>
                        </tr>
                        <tr>
                            <td colspan="2">&nbsp;</td>
                        </tr>
                        <tr>
                            <td colspan="2">Will be charged to your credit card ending with <#= CreditCard #></td>
                        </tr>
                    </table>
                </td>
            </tr>           <!-- More of the template would follow -->
        </tbody>
    </table>
</script>

You can see that the script block template container has a type of text/html and that the template uses <#=  #> blocks to define placeholders for JSON properties that are bound to the template. The text/html type is a trick to hide the template from the browser and I suspect some may not like that…you’re call though…I’m just showing one option.  The template supports embedding JavaScript logic into it which is one of my favorite features. 

After a little thought you may wonder why I didn’t simply update the spans and divs using simple JavaScript and avoid the template completely.  By using a template my coding is cut-down to 2 lines of JavaScript code once the JSON object is created (which you’ll see in a moment) and this is only part of the template. Here’s another section of it that handles looping through menu items and creating rows:

 

<#
   if (MainItems == null || MainItems.length == 0)
   {
#>
    <tr>
        <td>No items selected</td>
    </tr>
<#
   }
   else
   {
       for(var i=0; i < MainItems.length; i++)
       {
         var mmi = MainItems[i];
#>
        <tr>
           <td>
                <#= mmi.Name #>:  <#= mmi.NumberOfPeople #> ordered at $<#= mmi.PricePerPerson #> per person
           </td>
        </tr>
<#
       }
   }
#>


Binding Data To a Template

To bind JSON data to the template I can call my jQuery extension named parseTemplate(), get back the final HTML as a string and then add that into the DOM.  Here’s an example of binding to the template shown above.  I went ahead and left the JSON data that’s being bound in so that you could see it, but jump to the bottom of LoadApprovalDiv() to see where I bind the JSON object to the template….it’s only 2 lines of code.

function LoadApprovalDiv()
{
    var subTotal = parseFloat($('#SubTotal').text());
    var salesTaxRate = parseFloat($('#SalesTaxRate').val()) / 100;
    var salesTaxAmount = subTotal * salesTaxRate;
    var deliveryFee = parseFloat($('#DeliveryFee').val());
    var adminFee = (subTotal + salesTaxAmount + deliveryFee) * .05;
    var total = subTotal + salesTaxAmount + deliveryFee + adminFee;
    var deliveryAddress = $('#Delivery_Street').val() + ' ' + $('#Delivery_City').val() +
                          " " + $('#Delivery_StateID option:selected').text() + ' ' + $('#Delivery_Zip').val();
    var creditCard = $('#Payment_CreditCardNumber').val();
    var abbrCreditCard = '*' + creditCard.substring(creditCard.length - 5);

    var json = {
                   'FinalSubTotal'  : subTotal.toFixed(2),
                   'FinalSalesTax'  : salesTaxAmount.toFixed(2),
                   'FinalTotal'     : total.toFixed(2),
                   'DeliveryFee'    : deliveryFee.toFixed(2),
                   'AdminFee'       : adminFee.toFixed(2),
                   'DeliveryName'   : $('#Delivery_Name').val(),
                   'DeliveryAddress': deliveryAddress,
                   'CreditCard'     : abbrCreditCard,
                   'DeliveryDate'   : $('#Delivery_DeliveryDate').val(),
                   'DeliveryTime'   : $('#Delivery_DeliveryTime option:selected').text(),
                   'MainItems'      : GenerateJson('Main'),
                   'SideItems'      : GenerateJson('Side'),
                   'DesertItems'    : GenerateJson('Desert'),
                   'DrinkItems'     : GenerateJson('Drink')
               };

       var s = $('#MenuSummaryTemplate').parseTemplate(json);
       $('#MenuSummaryOutput').html(s);
}


You can see that I call parseTemplate(), pass in the template to use and JSON object and then get back a string.  I then add the string into a div with an ID of MenuSummaryOutput using jQuery.  Here’s a sample of what the template generates:


 image


Going this route cut down my JavaScript code by at least 75% over what I had originally and makes it really easy to maintain.  If I need to add a new CSS style or modify how things are presented I can simply change the template and avoid writing custom JavaScript code.  By using the template and AJAX calls I’ve been able to significantly minimize the amount of server code being written and meet the client’s requirement of having an extremely fast and snappy end user experience.  If you’re writing a lot of custom JavaScript currently to generate DOM objects I’d highly recommend looking into this template or some of the other template solutions out there.  I can’t say I’ve tested performance but can say that I’m working with some fairly large templates which are loading in < 1 second.  I personally feel it’s the way to go especially if you want to minimize code and simplify maintenance.  I think Microsoft’s entry into this area with ASP.NET 4.0 further validates the usefulness of client-side templates.

 

Logo

For more information about onsite, online and video training, mentoring and consulting solutions for .NET, SharePoint or Silverlight please visit www.thewahlingroup.com/.

WP Like Button Plugin by Free WordPress Templates