Saturday, September 22, 2012

Software project estimation: A little hands-on experience goes a long way

Earlier this month I attended a one-day Agile software development class at The Forge by Pillar in Ann Arbor.  A few of my teammates from work attended the class with me; the class ended up having around 25 attendees total, with maybe a third of those being developers.

On the morning of the class, we learned that as part of the activities of the day, we would be implementing a functional clone of a classic arcade game of our choice (Pac-Man, Space Invaders, Centipede, etc.), using a tool called Scratch, in 3 20-minute development sprints.

This initially struck me as aggressive -- a new game, complete with graphics, written starting from scratch, done in not a day, but in 60 minutes?  I suggested to my team that we do an implementation of Frogger, as that struck me as being relatively straightforward to implement.

The instructor then went on to ask if we had any "spikes" (unknowns that would merit taking time to do a proof-of-concept, if this were a real project) regarding the Scratch tool that we'd be using for development that he could answer for us prior to the first development sprint.  Not having been familiar with Scratch prior to taking this class, I found it difficult to come up with any questions more specific than "Um, what exactly is Scratch, and how does it work?"  (I did come up with some better questions such as "How does sprite collision detection work in Scratch?" but the point here is that it was hard to even ask questions about a framework that I wasn't familiar with.)

After writing up user stories (requirements) with my team, the class instructor did a quick demo of the Scratch tool; then, the first development sprint started, and I was able to get hands-on with the Scratch tool for the first time.  Within just the first couple of minutes of that first development sprint, I had a far better idea of what Scratch was, what it could do, and how long it would take to do things with it.  In short, Scratch allows you to set up sprites (characters, objects) on a playing field, and then manipulate them via a simple "drag-and-drop" event-driven programing framework.

AgileFrog-Scratch

This experience was striking as an illustration of the additional accuracy with which a project can be estimated, and how much better specific "unknowns" about an implementation can be identified, after there has been an opportunity for the development team to get some hands-on engagement on the project – particularly in projects involving a language or framework that is new to the development team prior to the project.

Wednesday, September 12, 2012

Loving my iPad Pocket / $0-Monthly-Fee iPhone

What’s my favorite technology purchase that I’ve made in the past 2 years?  It’s my iPad Pocket Edition; I also like to call it my $0-monthly-fee iPhone.

That is, my iPod Touch.

ipod_touch_4th_gen

My iPod Touch (or “iTouch” for 33% less syllables) has become one of the items that are always in my pants pockets when I leave the house in the morning, along with my keys, wallet, and phone. 

Why do I like the iTouch so much?  When I’m in a wi-fi zone – which in a typical day for me, I am in much more often than not – it can do essentially everything an iPhone can do except make phone calls.  It’s amazing to have the following readily available from a device I carry my pocket, almost all of which are free or very inexpensive:

  • Web browser
  • Calendar with cloud sync
  • Music (mp3 player, Pandora), Podcasts
  • To-do list with cloud sync (Appigo Todo)
  • Clock / stopwatch /countdown timer
  • Games (tons of great, inexpensive options)
  • Physical game aids like 7 Wonders Scorer
  • Support for 99% of iPhone apps in the App Store

Insofar as they affect me, there are only three real major “missing features” affecting the iPod Touch as compared to an iPhone:

Can’t make or receive phone calls.  I work around this by carrying, in addition to the iTouch, a nice compact “dumbphone,” the Samsung Hue, for which I have a prepaid plan with Verizon that gets me phone service for a grand total of $7.50/month.  I get very few minutes for that price, but since I only use this phone for quick calls to home and for emergency purposes, I’ve never come close to running out of minutes.

No Internet access outside of wi-fi zones.  This is occasionally bothersome, but only very occasionally; typically a couple of times per month when waiting to pick up a pizza or to get a haircut.  For the significant cost savings vs. a full phone and data plan – more on that below – it’s certainly something that I can live with.  And many apps have good “offline mode” support – implemented mostly to cater to iPhone users on airplanes, but working just fine for iPod Touch owners too.

No GPS.  When I take an occasional long trip alone to an unfamiliar place, I do notice the lack of GPS capability, but it’s nothing that can’t be worked around “the old fashioned way” by just printing directions off the Internet before leaving.  (How did people find their way around before the Internet?)  On vacations, I’m pretty much always travelling with my wife, and we do spring for a smartphone for her – as a so-called “stay at home mom” she’s actually out and about on a daily basis far more than I am – so we just use her phone’s GPS.  If I travelled alone more often, I’d make a one-time purchase of a standalone GPS device for the car.

The cost savings vs. an iPhone are, to me, well worth the minor drawbacks:

  iPod Touch 4th Gen (32 GB) + Prepaid dumbphone iPhone 4S (32 GB)
Up-front hardware cost $275 + $50 = $325 $300
Monthly fee $0 + $7.50 = $7.50 $70
Total over 2 years $325 + ($7.50 * 24) = $505 $300 + ($70 * 24) = $1980

About $1500 to spend however I like, in return for a couple of (for me) minor drawbacks?  Yep. I’m in.

I like the iPod Touch enough that even though I’ve had my current 4th Gen iTouch for only about a year and a half, I’m also in for another $300 on the new iPod Touch 5th Gen that was announced earlier today.  To paraphrase a tip from @shanselman, it’s worth spending money on something that you’re going to get heavy use out of every day – and for me, the iPod Touch is that.  And at an amortized cost of under $13/month over the next two years, I consider it a bargain.

Saturday, August 18, 2012

Chrome Browser Deal-Breaker: Ctrl+Tab behavior

Depending on who you ask, Google Chrome is the world’s most popular browser here in mid-2012.  It’s fast, lightweight, and standards-compliant.  However, Chrome has one major (for me) issue that will prevent me from ever using it as my primary browser: The lack of any way to modify the behavior of the Ctrl+Tab keyboard shortcut to switch between tabs.

Like the other leading desktop web browsers Firefox and Internet Explorer, the default behavior of the Ctrl+Tab keyboard shortcut in Chrome is to switch between tabs in left-to-right order.  I’ve believed for years that this behavior is inefficient at best, and the default switch order for Ctrl+Tab should be most-recently-used (MRU) order. The default left-to-right Ctrl+Tab switch order makes it impossible to quickly use the keyboard to toggle back and forth between two tabs when there are multiple tabs open.  Left-to-right order is also inconsistent with the long-established MRU order for the keyboard shortcut for switching between open applications (Alt+Tab in Windows and many Linux distributions; Command+Tab in OSX).

Unlike Firefox and Internet Explorer, however, Chrome offers no way to change the default Ctrl+Tab behavior, even via add-ons / extensions.  To compare the three leading desktop browsers:

  • Firefox: Has an excellent addon called LastTab which has a great implementation of MRU Ctrl+Tab behavior (including an Alt+Tab-like preview window of the tabs arranged in MRU order);
  • Internet Explorer: Has a “Use most recent order when switching tabs with Ctrl+Tab” checkbox in its Advanced Options settings;
  • Chrome: There’s no configuration setting to change the Ctrl+Tab behavior.  The Ctrl+Tab key combination apparently is defined as “reserved,” so extensions can’t change its behavior either.

There’s a long-standing (2008) Chromium bug, Issue 5569, logged for Chrome’s Ctrl+Tab behavior; however, it was marked as “WontFix” shortly after it was opened.  Google does acknowledge the demand for MRU switching behavior in a brief statement on the Chromium project’s User Experience > Tabs page:

Ctrl+Tab, Ctrl+Shift+Tab, Ctrl+PgUp and Ctrl+PgDn can all be used to switch back and forth between tabs. While there is great demand for an MRU-ordered switcher, we've so far been unable to find an MRU switcher that makes sense beyond the first three most recent tabs, or one that works well with background-created tabs.

I’m somewhat bemused by this statement; there are many good reference implementations of MRU switching order available.  One specific example is the LastTab Firefox extension mentioned above; I’ve used that for years and have been very happy with it.

If you’d like to add your vote to this issue, feel free to head over to Chromium Issue 5569 and “star” the issue and/or leave a comment.

This issue is a deal-breaker for me to consider adopting Chrome as my primary desktop web browser – Chrome’s benefits don’t outweigh the potential several-times-per-day productivity hit of not being able to rapidly and easily toggle between two specific browser tabs.  In the meantime, I’m happy to continue using Firefox as my own primary browser. 

In occasional situations where I do need to use Chrome and have multiple web pages open, going old school and opening each web page in its own browser window (instead of using multiple tabs) is a tolerable workaround (since that lets me use the operating system’s MRU window switching behavior to rapidly toggle back and forth between two windows as needed).

Sunday, August 05, 2012

Comcast Internet subscribers can’t watch college football online via ESPN3 this fall?

Update 8/19/2012: I just tried again watching a couple of different live sporting events at home via espn3.com, and today, it worked fine -- I wasn't blocked. Barring any word on this from Comcast or ESPN, I guess we'll just need to wait until kickoff to see if watching college football on espn3.com this fall via an Internet-only Comcast subscription is going to work or not.

Update 8/30/2012: ESPN has posted an WatchESPN / ESPN3 FAQ. In short, it sounds like ESPN3 now only carries "online-exclusive" content -- that is, minor games that aren't being shown on ESPN/ESPN2. To watch ESPN content that's being shown on TV online, you need "WatchESPN" -- and that requires a paid TV subscription to ESPN (on top of a broadband Internet subscription). So, Internet-only customers are out of luck this year, sounds like. :-( Maybe ESPN will sell their content directly to consumers in the future, like Major League Baseball has already figured out how to do. You can buy an entire season of MLB (thousands of games!) for $20 or $25, depending on type of device; I'd happily pay $25 for an entire season of college football.


For the last 3 years or so, I have not subscribed to any cable or satellite TV service, going instead with free over-the-air HD network television via a DIY antenna, and using AT&T DSL and (later) Comcast cable for Internet service.

I’m a college football fan, and in the fall, I have for the past couple of years used the very nice service at espn3.com (now rebranded as WatchESPN) via my HTPC to watch college football games that were shown on one of the ESPN network channels, but not shown on the ABC network (which I can watch in HD for free via antenna). 

Upon attempting to demonstrate this setup to a friend of mine this morning, though, I was surprised to be presented with a new error message when attempting to view a live event on espn3.com: “Access to this content requires a television subscription. Please contact your TV provider to subscribe.”

ESPN3_Comcast

:-(

Apparently something has changed in the arrangement between ESPN and Comcast Xfinity – without any notice to me, the customer – where it’s now not just checking to see if my ISP is supported by ESPN3; it’s now additionally checking to see if I have a television subscription through that same ISP (Comcast), which I do not.  If I did have a full television subscription, I wouldn’t be trying to use espn3.com; I’d just turn on my television!

Apparently this is the new trend, as I also found just last week that my family is not permitted to access any of the live 2012 Olympics coverage currently available in the United States via nbcolympics.com, for the same reason: I only have an Internet subscription through my ISP, not a full television subscription.

NBC_Comcast

From a standpoint of trying to be fiscally responsible, it isn’t worth it to me to pay an additional $200 to be able to watch 14 Saturdays’ worth of college football from home this fall (figuring about an additional $50/month for the duration of the 4-month college football season for a television package from Comcast that includes ESPN, above and beyond the Internet service that I’m already paying for).  So it looks like I’ll be visiting friends’ homes or going to sports bars to watch any college football game that aren’t being shown on the broadcast networks (ABC, CBS, and for Notre Dame home games, NBC) this fall.  Guys, if you’re reading this, I’ll bring the beverages!

This development is pretty disappointing, to say the least.  I’d consider switching ISPs – if Comcast didn’t have a local monopoly on high-speed Internet at my location.  Hopefully, in the future, ESPN and other content providers will figure out how to profitably provide their coverage directly to consumers via the Internet, regardless of ISP. Clearly, the technology is ready and available (it worked great for me for the last couple of college football seasons prior to this year); it’s just the business side of things that needs to be worked out.

Ah, well.  Ultimately, I’ll be very happy/thankful if this situation is the biggest problem that my family encounters this fall!  #firstworldproblems

Monday, July 02, 2012

What’s That Charge?

My brother Jeremy recently launched a new website, whatsthatcharge.com, with a simple-but-useful premise: An searchable online repository, with explanations, of those cryptic merchant ID strings representing particular businesses that appear on your monthly credit card statement, like PAYBYCASH(ULTIMATEG.C) 877-703-6339 OH.

The idea behind the site is that if you Google search for one of those strings, one of the results will (hopefully) be a page on the whatsthatcharge site with an explanation of what the charge is.  The site doesn’t index or collect any personal information at all – it simply has a list of those merchant ID strings from credit card statements, along with community-sourced explanations of what business each one represents.

It’s always a good idea to review your credit card statement to make sure the charges on it are legitimate, and hopefully this site will help a lot of people with doing that -- especially for those businesses that use very cryptic credit card merchant IDs

Tuesday, June 19, 2012

Tip: Copy fully-specified file path to clipboard in Windows Explorer

In Windows 7, if you ever have a file open in Windows Explorer that you know you’ll want to manipulate in another application, such as attaching the file to an email (or embedding an image in a blog post!), a quick way to copy the file’s fully-specified path and filename to the clipboard is to hold Shift and right-click the file, and select the Copy As Path option.

CopyAsPath

Then, you can just press Ctrl+V to paste the path into the Open File… dialog of the target application! No need to drill down through your filesystem’s folder structure to find the file.

It’s nice that this is included as native functionality in Windows 7.  In Windows XP, it was necessary to use a 3rd-party utility such as ClipPath to get this same functionality.

Wednesday, May 09, 2012

Workaround: Wireless connection fails on “Waiting for Association” on Thinkpad T520 laptop

My work PC, a Lenovo Thinkpad T520 laptop running Windows 7, normally seamlessly switches between the wired network connection when docked, and the wireless network when undocked.

A few days ago, though, the laptop (without me having made any relevant changes to the machine’s hardware/software configuration) started failing at the “Waiting for Association” step when connecting to the wireless network after undocking.

Rebooting (while undocked) would work to resolve the problem, but taking multiple minutes to reboot the machine and reopen all of the programs/documents that I had been working with prior to the reboot was obviously a significant hassle.

This morning, I found a better workaround: In Device Manager, if I disable and then re-enable the wireless network adapter (“Intel(R) Centrino(R) Advanced-N 6205”), and then re-attempt the wireless connection via the Thinkvantage Access Connections system tray icon, the wireless does connect successfully.

I’ll update this post and/or make a new post on this blog if I discover a full fix.

Monday, April 30, 2012

Workaround: Google Calendar: “Unable to reach Google Tasks” when trying to edit an event

While working with my Google Calendar just now, although I was able to view my calendar and create new events with no problem, when I tried to edit an existing event, I was getting an “Unable to reach Google Tasks” error displayed in the bottom-right corner, and the “edit event” page would not appear.

Logging out of my Google account and then back in again worked around this issue for me; editing events on my calendar works fine now for me after doing that.

Friday, March 02, 2012

Logitech MX500 mouse replacement: Logitech G400

Quite a while back, circa 2005, I purchased a Logitech MX500 mouse.  It served me very well for many years at my primary mouse, both at home and at work.  I first used the MX500 at home, then later decided to bring it into work; I purchased a Logitech MX518 mouse, the successor to the MX500, for use at home.

Finally, this past week, after 7+ years of quality service, my MX500 flaked out: When holding down the left mouse button to drag something, the mouse button would randomly start “releasing", even though I was firmly holding down the physical button.  This quickly started causing me lots of problems when selecting blocks of text, reordering items in lists, and performing other operations. I decided I needed to replace the mouse.

Now, in 2012, the model MX500 has been discontinued; its successor, the MX518, has also been discontinued.  The modern successor to the MX500, as I found after doing some research, is the Logitech G400 mouse

MX500 MX518 G400 mice

As you can see, the MX500, the MX518, and the G400 all have the same-shaped chassis.  Despite the G400 being marketed as a “gaming mouse,” I’ve found that it’s perfectly suitable for office use, and is a seamless replacement for my MX500.  Having used the new G400 for most of this week, I don’t even notice any difference while using the new mouse between it and my old MX500. 

So if you’re in the same position I am, and your Logitech MX500 (or MX518) has recently died, and you’re looking to replace it with something that works and feels the same, I can recommend the G400 as a solid replacement.

Friday, February 03, 2012

Possible Fix: On boot, blank screen after Windows 7 logo

This past week, my HTPC spontaneously started having a problem where, when booting, after the Windows logo was displayed, I would just get a blank (black) screen.  Windows apparently loaded ok – I just couldn’t see anything the screen.  One afternoon, things were working fine, but later that evening (not having manually made any changes to the PC), the problem started occurring.

In an attempt to keep this post brief, I’m going to omit the myriad of troubleshooting steps that I went through to try to correct this, and just provide the one that worked for me. If you’re having a similar issue, you can skip to the end of this post for my solution, although I’d suggest at least skimming the System Configuration and Symptoms to get a better idea of whether or not this solution might be applicable for your situation as well.

System Configuration

This problem occurred on a PC running Windows 7 Home Premium 64-bit, with an nVidia GeForce GT 430 video card, connected via HDMI cable to a TCL L40FHDF12TA LCD HDTV.

Prior to the problem occurring, the PC was successfully sending both video and sound to the HDTV via an HMDI cable, connected to the HDMI-out on the video card, and one of the HDMI-in ports on the TV, at the TV’s native resolution of 1920x1080 (1080p).

Symptoms

  • Upon a reboot, the PC would correctly display the text-mode POST information, followed by the graphical Windows 7 logo; but after that, the TV would just display a blank (black) screen.  The TV would report it was getting a 1280x720 signal from the PC. Also, the normal Windows boot sound did not play (even though I did have the volume up on the TV).
  • The problem would persist even after turning the TV off and back on, or changing channels on the PC and then changing back to the “HDMI 1” input, or when disconnecting and reconnecting the HDMI cable (without rebooting).
  • When booting into Safe Mode, the Windows desktop would display properly, and the system would be usable (albeit without sound, and at a reduced screen resolution). 
  • At one point midway though the troubleshooting process, I got things “partially fixed” such that the Windows desktop would come up when booting normally (not into Safe Mode).  (Unfortunately, I don’t recall exactly which specific troubleshooting step I took over the course of the multi-hour troubleshooting process to make this happen.)  When in the system was in this state, I observed multiple problems:
    • In the Screen Resolution dialog, Windows would only let me let me set the monitor to a maximum resolution of 1280x720 – not the full resolution of 1920x1080 supported by the TV.
    • Windows recognized the monitor as a “Generic non-PNP monitor”, not as the actual TCL TV model.
    • No sounds would play. In the Sound dialog (accessed from the Control Panel), there was an nVidia HDMI sound output listed, but it had a listed status of “Not plugged in” (even though the HDMI cable actually was plugged in).
    • The nVidia Control Panel software showed that the monitor was connected via DVI – not via HDMI as it actually was connected.  The software didn’t display a dropdown that would allow the connection type to be changed.
  • The same symptoms persisted when connecting the PC to the TV via the video card’s DVI-out port, the TV’s HDMI-in, and a DVI-HDMI adapter (and rebooting).

Solution

After trying many things to fix this, what eventually ended up working for me to fix the problem was to use Windows 7 System Restore to restore the system to a restore point a couple of weeks before the problem started happening.  Once this was done, all symptoms immediately went away; the TV once again successfully sent video and sound to the TV, Windows recognized the monitor as a TCL TV (not as a “generic non-PNP monitor”), and Windows allowed me to change the screen resolution to the TV’s native resolution of 1920x1080.

I’m still somewhat mystified as to the initial root cause of the problem; my best guess is that some Windows system file related to display output was (somehow) damaged, and that this was corrected by the System Restore.  The only thing listed on the System Restore dialog between the present time and the restore point that I selected (other than several manual video driver updates that I had applied during the troubleshooting process) was a series of automatically installed Windows Critical Updates. 

(The problem apparently wasn’t with one of the nVidia video driver files, as I tried installing multiple different versions of the display driver software to correct the problem, without success.  I even went so far as to use a “driver cleaner” utility to clean out all of the old nVidia files and registry entries before re-installing a new driver.)

If you’re having the same problem that I was, this solution may or may not work for you.  Still, it may be worth trying a System Restore as part of your troubleshooting process if other more obvious solutions (checking cables, reinstalling the video driver, etc.) aren’t working for you.  I hope this helps!

Wednesday, February 01, 2012

How to configure Windows 7 to natively launch applications via custom keyword shortcuts

This article describes a way to configure Windows 7 to launch applications and websites from the “Search programs and files” field in the Windows 7 Start menu using custom-defined shortcut keywords – without using the mouse at all.  This is similar to the functionality of 3rd-party utilities such as Slickrun, Launchy, and Quicksilver, but with this method, no 3rd-party software is required!

As an example, this technique could be used to set up the keyword “ff” as a shortcut for launching the Firefox browser.  You would be able to launch Firefox from anywhere in Windows simply by typing the following four keystrokes:

[Windows Key]
ff
[Enter]

Doing this would bring up the Windows start menu and enter “ff” into the “Search programs and files” field; after having followed the steps detailed in the remainder of this post, Windows will recognize “ff” as a “Program”, and therefore will give it the focus automatically; you can then just press Enter to launch “ff”, which is configured as a shortcut for launching Firefox.  This is shown in the highlighted portions of this screen capture of the Windows 7 Start menu:

ff_shortcut_highlighted

Step 1. Create a “Shortcuts” folder

Create a new folder named Shortcuts at location:

%appdata%\Roaming\Microsoft\Windows\Start Menu\Programs\

The folder doesn’t have to be named Shortcuts; you can use something else if you like. 

Note that because this folder is created under the Start Menu\Programs folder, this new folder and its contents will show up as a folder on your Start menu. 

Why does the folder need to be created at this location?  This needs to be done so that Windows will recognize shortcut files placed in that folder as “Programs” when the shortcut filename is keyed in to the “Search programs and files” field on the Start menu.

Step 2. Create a shortcut to the new Shortcuts folder

This step is optional, but to make things easier, I suggest that the first new shortcut you create is a shortcut to bring up the Shortcuts folder itself in a new Windows Explorer window. 

One way to do this is to manually open up an Explorer window (Shortcut key: [Windows Key] + e) and enter in that window’s address bar:

%appdata%\Roaming\Microsoft\Windows\Start Menu\Programs\Shortcuts

Then, drag the yellow folder icon from the left side of the address bar into the main area of the window to create a shortcut to that folder. 

Finally, rename the shortcut (Shortcut key: [F2]) from Shortcuts – Shortcut to just shortcuts

Once this is done, you can test the new shortcut by pressing [Windows Key] to open up the Start menu, typing in “shortcuts”, and pressing [Enter].  A new Windows Explorer window should open, showing the Shortcuts folder.

Step 3. Create Application Shortcuts

Now you’re ready to create some shortcuts to run applications!  To create a named shortcut to launch a particular application, just create a shortcut to that application in the Shortcuts folder you created, and name the shortcut file to whatever you want the keyword to launch the application to be.  Then, to test the shortcut, press [Windows Key], key in the shortcut name, and press [Enter]. 

One easy way to create a shortcut to a particular program is to use the right mouse button to drag and drop that program’s entry from the Start menu to a Windows Explorer window that’s open to the Shortcuts folder.  After dropping the item, select “Create Shortcuts Here” from the context menu that appears.

After keying in the shortcut name (and before pressing enter), you should see your custom shortcut appear immediately as the first item in the list of real-time search results that Windows generates under the “Programs” heading.  Since Windows considers the shortcut to be a “Program,” pressing enter causes Windows to run that program without you even needing to arrow key down to that search result in the Start menu – Windows selects it for you by default.  Nice!

One caveat: For me, for certain single-character shortcuts (such as “g”, but not “n”), Windows doesn’t recognize the shortcut file as a “Program” in the start menu. If a given single-character shortcut doesn’t work for you, I’d suggest trying a two (or more) character shortcut keyword instead; all two-or-more-character shortcut keywords that I’ve tried have worked for me.

To give you some ideas on getting started with creating your own shortcuts, here are just a few of the shortcuts that I currently have set up on my local PC:

ecl Eclipse IDE
ff Firefox
irfan IrfanView
n2 Notepad2
pdn Paint.NET
timer Orzeszek Timer
vs Visual Studio IDE
wmp Windows Media Player

These shortcuts even work with parameters, for example, with my configured “timer” shortcut, I can key in “timer 5m” to start Orzeszek Timer running with a 5-minute timer.

Step 4. Create Website Shortcuts

You can also set up shortcuts to launch a particular website in your default web browser.  To do this, just create a new shortcut from Windows Explorer in your Shortcuts folder (right-click | New | Shortcut), and in the item location field, paste the URL of the target website (such as “http://blog.jonschneider.com”, without the quotes).  Then, name the new shortcut with the keyword you’d like to type to launch that website, and that’s it!

Open Question: Websites with Parameters

One thing I have not yet figured out how to do using this technique is to elegantly set up a shortcut to launch a website with a particular parameter.   For example, I’d like to be able to key in “g search terms” to bring up Google in a new tab and the default browser, and run a search for search terms.  That is, a new browser tab would be opened with the url http://www.google.com/search?q=search term.  If anyone knows of an elegant way to do this (without resorting to the use of a 3rd-party background program like Slickrun), please leave a comment and let me know!

Monday, January 02, 2012

HTPC: Displaying the Windows Media Center actively recording program on an LCD Display

A project that I took on over this past Christmas break was to get my HTPC to display on an LCD display mounted in the PC’s case informaton about the TV program actively being recorded by the Windows Media Center DVR, so that I could see what was being recorded even when the attached TV was off.

The basic hardware/software setup for this project was:

  • LCD Display: An nMediaPC PRO-LCD-B display, which is a blue LCD display that can display 2 rows of 20 characters, and fits into a standard PC case 5 1/4” drive bay. 
  • A PC running Windows 7 64-bit, configured to act as a DVR using Windows Media Center.

This project turned out to be significantly more complex that I originally planned on it being, although after nearly a full day of tinkering, I did finally get it to work!  The remainder of this post is a set of instructions for what I did to get the LCD display working to display the active Windows Media Center recording (leaving out many of the missteps and dead ends I encountered along the way, although I do include a couple of the major ones as an appendix at the end of this post). 

WorksOnMyMachineI’m providing this information for my own future reference and in the hopes that it may be helpful to you, the reader; however, please note that this is in no way an “official” set of instructions.  It worked for me, but may not work for you.  Your mileage may vary.  I am awarding this post the official Jeff Atwood / Jon Galloway “It works on my machine!” seal of approval. 

These instructions assume that you already have Windows Media Center actively running as a DVR on your PC, and that you have a reasonable level of technical expertise, and patience – there are a lot of steps here, and quite a few “moving parts” to get working together!

Enough disclaimers; on with the show!

1. Purchase the nMedia PRO-LCD-B LCD Display

Purchase the nMediaPC PRO-LCD-B.  As I write this post, it’s available from newegg.com for US $38 shipped.

Other nmMdiaPC PRO-LCD models may work with these instructions as well, but I only tried them with the PRO-LCD-B.

2. Install the PRO-LCD-B hardware

Power off your PC, and install the PRO-LCD-B in an empty 5 1/4” drive bay. 

The install was fairly easy; the PRO-LCD-B has two connections: One to a standard disk drive power cable from the PC’s internal power supply, and one to a 4-pin USB connection on the motherboard.  My HTPC’s motherboard (a Gigabyte AMD GA-MA785GM-US2H) had several such 4-pin USB leads available on the motherboard, even with all of my case’s front and rear USB ports already hooked up.

(When I powered my PC back on, I *think* I saw some stock/default text on the LCD display, but I’m not 100% sure about this – and I’m not about to voluntarily revert my HTPC to that state at this point just to double-check.) :-)

3. Install the PRO-LCD-B driver software

Download and install the PRO-LCD-B driver software from the nMediaPC website:

http://www.nmediapc.com/LCD/download.htm

I also have a mirrored copy (current as of January 2012) in the event that the file ever becomes unavailable from the nMediaPC site:

http://jonschneider.com/jsblog/CDM20600.zip (1.8 MB)

(Although at this point my next step at this point was to install nMediaPC’s “M-Play Home Center (MHC)” software to drive the LCD display, this turned out to be a dead end, and I recommend you skip it if your goal is to get your LCD display to show the actively-recording Windows Media Center program.  See the “Dead Ends” appendix at the end of this post for more on this.)

4. Install LCDSmartie

LCDSmartie is a free open-source program for Windows that can drive the display of text on LCD display devices, including the PRO-LCD-B.

I downloaded and installed the 5.4.2.92 beta release (dated June 8, 2011).  LCDSmartie downloads are available from here:

http://lcdsmartie.sourceforge.net/smartied.htm

I mirrored the 5.4.2.92 beta release here:

http://jonschneider.com/jsblog/lcd_smartie_v5.4.2.92 Beta.zip (2 MB)

Uncompress the “lcd_smartie_v5.4.2.92 Beta” folder and its contents from that .zip archive.  I put this folder onto the root directory of my C: drive.

5. Install the lisvfd.dll display driver for LCDSmartie

None of the out-of-the-box drivers that come with the LCDSmartie 5.4.2.92 release work with the PRO-LCD-B.  However, there is another driver available on the LCDSmartie site that did work for me: the “L.I.S VFD” display driver.

It’s available on the LCDSmartie SourceForce site from here:

http://downloads.sourceforge.net/lcdsmartie/lisvfd.zip?download

If that link doesn’t work anymore, try looking for it on the LCDSmartie site download page under “Plugins”, or else download my mirrored copy:

http://jonschneider.com/jsblog/lisvfd.zip

After downloading that, place the lisvfd.dll file from the .zip archive into the “displays” folder under your LCDSmartie installation folder.

6. Configure the lisvfd.dll display driver in LCDSmartie

Run LCDSmartie (via the LCDSmartie.exe file in the extracted “lcd_smartie_v5.4.2.92 Beta” folder that you created in step 4 above).

When LCDSmartie comes up, it should show a small window showing the content that it is sending to the LCD display (although nothing will actually appear on the PRO-LCD-B until the steps in this section are completed).  Click the “Setup” button in the lower-left corner of the window to bring up the Setup window.

In the LCDSmartie setup window, in the “LCD Size” dropdown in the Display Size section in the top-right corner, select the “2x20” value (the display size of the PRO-LCD-B).

Next, still in the Display Size section, click the Plugin tab.  In the Display Plugin dropdown, select lisvfd.dll.  (This option will only appear if you copied the lisvfd.dll file into the LCDSmartie “displays” subfolder in the previous step.)

For the next step, you need to know what COM port your PRO-LCD-B is running on.  To determine this:

  • Bring up the Windows 7 “Devices and Printers” screen by opening the Windows Start menu, typing “devices” into the text field, and selecting the “Devices and Printers” option that appears.
  • On the “Devices and Printers” screen, in the “Unspecified” section, look for a device named “FT232R USB UART”.  Right-click on it and select Properties from the context menu.
  • On the Properties window, select the Hardware tab.
  • In the “Device Functions” table that appears, look for an entry like “USB Serial Port (COM4)”, where the “4” might be any number.  Make a note of that number.
  • Close the FT232R properties window and the “Devices and Printers” window.

Then, return to LCDSmartie.  (It doesn’t appear in the Alt+Tab list on my machine, so you may need to select it from the Windows taskbar).  In the LCDSmartie Setup dialog, in the Display Settings section, in the Plugin tab, in the Startup Parameters field, enter “COM4,38400” where “COM4” is the actual COM port value from the Devices and Printers section above.

  • If for whatever reason you couldn’t find the FT232R device in “Devices and Printers”, then an alternative here might just be to try entering different values for the COM port number in this field to see if you can get something to display on the PRO-LCD-B screen.

Once this is done, click OK on the LCDSmartie setup dialog.  You should now see some text from LCDSmartie (a scrolling LCDSmartie logo, and possibly some other information) appear on the PRO-LCD-B screen on your PC!

7. Install the “LCDSmartie dll to display Windows Media Center status”

Once LCDSmartie is successfully configured to display information on the PRO-LCD-B screen, the next step is to get it to display what’s currently recording in Windows Media Center.  A plug-in called “LCDSmartie dll to display Windows Media Center status” by Dave Perrow can be used to do this.

Download the “LCDSmartie dll to display Windows Media Center status” from its website, here:

http://mcedll.codeplex.com/

Or grab my mirrored version (current as of January 2012):

http://jonschneider.com/jsblog/MCE_DLL.zip

Extract the MCE_dll.dll, MCE_dll.cfg, and MCE_dll.ini files to the “plugins” folder under your LCDSmartie installation.

8. Install Windows Media Center TCP/IP Controller

The MCE_dll plugin relies on another piece of open-source for Windows called Windows Media Center TCP/IP Controller (or “TcpIpController”) to function.  TcpIpController publishes a “feed” of what Windows Media Center is currently doing (including what program it’s recording) to a particular TCP port on your PC, where it can be read by MCE_dll.

I installed the “Win7 64 and 32 bit Alpha - button command fix” release of TcpIpController.  (Note: This is not the default release of TcpIpController – I’m not sure whether or not the default release works with MCE_dll.)

Download the “Win7 64 and 32 bit Alpha - button command fix” release of TcpIpController from its codeplex.com website here:

http://vmccontroller.codeplex.com/releases/view/23251

Or get this version from my website:

https://jonschneider.com/jsblog/Setup%20x64.msi

Run the downloaded .msi file, and continue through the prompts to complete the installation wizard.

When the installation finishes, reboot – without a reboot, TcpIpController will not work properly.

9. Configure TV channel names

The MCE_dll plugin will display the name of the channel being recorded, along with the channel number and the name of the program being recorded.  It gets the channel number and program name from Windows Media Center (via the TcpIpStatus plugin), but we need to manually supply the channel names.

To do this, in a text editor, open the MCE_dll.ini file that you previously placed in the “plugins” folder under the LCDSmartie folder, and replace all of the values with the channel numbers and names for your local channels.

(You can skip this step if you happen to live in the same region of Scotland as the MCE_dll author.) :-)

10. Configure LCDSmartie to use the Windows Media Center status (MCE_dll) plugin

Now that we have the MCE_dll plugin and its TcpIpController dependency in place, we need to configure LCDSmartie to use them.

Bring up the LCDSmartie Setup dialog.  In the “Screens settings” section, make sure Screen 1 is selected (set the value of the Screen field to 1), and then replace the values in the two large fields in this section (which represent what LCDSmartie will display on the PRO-LCD-B screen):

Line 1: 

$dll(MCE_dll.dll,1,,)

Line 2:

$dll(MCE_dll.dll,2,,)

An explanation of what these values mean, along with some other values you can play with, can be found on the MCD_dll plugin site.

Finally, click OK.  If your Windows Media Center is actively recording something, you should now see the channel number, channel name, and show name on the PRO-LCD-B display!

The finished product on my HTPC (with the PRO-LCD-B installed just below the DVD drive):

PRO-LCD-B

(The actual LCD display image is far cleaner/sharper than it appears in the photo; my iPod camera refused to take a nice image of it.)

11. Configure LCDSmartie to run at Windows startup

In the LCDSmartie setup dialog, in the Startup/Shutdown tab, click the “Autostart hidden” radio button, then click OK.

Appendix: Dead ends

A couple of the things that I tried that didn’t work:

  • A piece of open-source software for Windows called LCDWriter by “andy vt” says that it will also get an LCD display to display what Windows Media Center is currently recording, among several other functions.  However, I couldn’t get the 64-bit version to successfully display anything to my PRO-LCD-B; and the 32-bit version (which can work with LCDSmartie display plugins via a wrapper dll) gave me a runtime error on my PC every time I tried to run it, so I eventually gave up on getting it to work on my PC.
  • The default PRO-LCD-B display software from nMedia has a lot of cool functions, and it was very easy to install and get initially working, but I was unable to successfully get it to display the recording program in Windows Media Center.  It also seemed to be slightly buggy in other ways (at least for me); for example, after exiting Windows Media Center, the PRO-LCD-B would continue to display “Channel Listing”, for example, instead of reverting back to the default date/time display.

Appendix: Thanks!

Thanks to the authors of LCDSmartie, the lisvfd.dll display driver, the “Windows Media Center status” plugin for LCDSmartie, and the Windows Media Center TCP/IP Controller.  Without all of those open source projects having been developed and made freely available, I wouldn’t have been able to complete this project – or at least, it would have taken me significantly longer to code up a solution myself!