My own market direction speculation from GDC 2011

My own market direction speculation from GDC 2011

Here’s are my guesses/market trends based just on what I’ve been seeing/hearing/guessing:

  • Mobile computing (i.e. smartphones) is a powerful new force that is here to stay and is really pushing computing and gaming in new directions.  Since mobile is now entering into its ‘teenage’ years, there is still a lot of rushing around and ‘land-grabbing’ going on trying to align markets, business models, programming models, distribution, and revenue streams.  There is very good money to be made for the savvy, but it’s also more risky.  Those software companies that enter and establish a good name/brand will likely do very well, but almost certainly will be smaller, more nimble companies.  Nobody is making a killing on phone apps and very few can quit their day jobs and live off what they make solely from that revenue stream until things settle more.
  • Consoles will continue to be developers’ target platform because they have a stable user base, known revenue stream/model – but are in severe danger of being rendered impotent.  They need to solve:
    • Aging graphics.  With no new consoles in the works for a few years, things are already looking dated and it will only get worse.  There was absolutely no talk of any new consoles – which means it’s at least 2+ years away.  Microsoft appears to be trying to figure out it’s own strategy as there was no info for a new version of DirectX and a lot of effort clearly trying to get Winphone 7 adoption/features/devs going.
    • Terrible loading times, frequent updates, etc are all a terrible experience and hindrance to keeping people using their consoles.  I already know several people to whom their XBox 360 is really just a Netflix box.  And with the advent of all those features in smart TV’s coming – that selling point will soon disappear.
    • There were a number of rants about 40+ hour games and how people simply don’t finish them or want to play one game that long anymore (except for AAA titles like Call of Duty/etc).
    • Not as solid of a digital distribution of whole games like on PC/Mac where you can get whole games online (Steam/etc)
    • Higher entry bar for indie developers to develop for vs PC/Mac
    • No instant on/off features like every laptop and phone has.  Waiting 5 minutes to boot your console and scan past splashes/intro crap/etc is intolerable in an age they will be competing against smartphone games.
  • Smaller, faster casual games will grow like wildfire but generating a sustainable (and livable) revenue stream from them will still be getting hammered out for the next few years.  Studios that develop them will stay smaller and live leaner – but likely deliver a lot of the innovative new gameplay for casual markets.  We’re in the exuberant pre-teen days of this movement, so it’s direction is still very malleable.  Yet, there will be a point at time at which the limitations are felt out and they get their stride.  It’s already happening and the signs are very positive.
  • The indie developers will continue to come out with buckets of games.  Following the 80/20 rule, 80% of them will be garbage, but 20% will do well.  The top 1-5% will be phenomenons (i.e. Minecraft) and those 1-5% will really move gaming in a newer direction. That direction being:
    • Game developers will develop with off-the-shelf engines and middleware, not programming stuff themselves.
    • Games will focus on simpler and more creative elements.
    • It will keep the industry from going into stagnation and death, but take it in a new direction very different than the old guard.
  • Big houses will become fewer, but get more powerful and likely be lonelier at the top (ala movie studios).  As the cost of AAA games rises each year, consolidation and shake-out will happen.  Which means they’ll likely be more and more conservative and get more entrenched in their franchises – which probably means less innovation on the IP front, but they will be cutting-edge beautiful.
  • PSP’s and handheld gaming will just about disappear in the next 5 years as smart-phones will become so ubiquitous and be just as powerful with many more options.  Nobody will pay for two wireless plans to connect their PSP’s/DS’s.  This is bad news for Nintendo, and somewhat Sony, who have a large portion of their revenue stream from their handheld gaming devices.  It’s unclear whether they see this threat – but Sony appears to be seeing this threat with a ‘certification’ program for mobile devices.
GDC 2011 Trip report

GDC 2011 Trip report

It’s been about 4 years since I last attended GDC, but some interesting trendlines seem to have solidified/gone away since last time I was there.  Winning mobile developers was THE topic for the show. Sessions continued to be very good – but I noticed that almost (if not more than) half of them are now related to art, gameplay, or business concerns (not technical).  The Indie game scene appears to be moving beyond just closet developers and becoming a big and energetic movement in the industry.    Hiring appears to be back judging by the energy and sheer number of interviewing/companies interviewing on the show floor.  Attendance seemed to be at record levels at 19,000 attendees.

 Details:

  • Attended Wednesday thru mid-Friday sessions on my own accord – so no booth duty/official duties on that front.
  • Notable sessions I attended:

1.       Data Management For Modern Game Pipelines – Two fellows from Autodesk/Maya went over the state of current content pipelines from Maya to game engine.  They are apparently hard at work at Autodesk trying to make these converters and content back-and-forth between engine and Maya easier with a project called DNA.  It is a system of metadata and a database that, once integrated into your engine, allows you to quickly get assets out of Maya into your game engine, and back into Maya quickly.  It was likely too cumbersome for most game developers, but it was a good recognition on their part of the needs of the industry. 

2.       Noon poster sessions.  Real-time music generation was well done (for what it was) and the ’10 things to know about usability testing’ was a good list of resources for those trying to understand what doing usability testing was.

3.       One hour 10 speakers talk had a lot of great ideas.  One of best was why consoles are failing: 1. In age of instant-on mobile/PSP-type devices, waiting 15 minutes to get into a game is intolerable.  2. Too many cutscenes, license agreements, booting, etc.  Want instant-on wake-from-sleep into my game just like a laptop.  3. Wants no more 40+ hour games – they’re just too long. 4. Update sizes and frequency are just ridiculous – you only should have 1 update per quarter.  Period.  Many other good thoughts if we ever want to go into that realm.

4.       Multicore Memory management in Mortal Kombat.  EXCELLLENT talk on a multi-threaded memory manager.  Takeaway is that it took them 11 months to get it done (3 months of that was just to get the multi-threaded/lockfree library built they needed), but it’s a really fantastic system they are using in all their games going forward and shows some amazing speed, efficiency, and debugging features.

5.       Dice talk about Data Oriented Design.  Very good talk with good analysis and results.  Takeaway: throw away all your fancy data structures and line up your data for SSE manipulation.  It’s much more performant than non-cache friendly data structures, orders faster, and can easily be threaded.

6.       Kinect skeletal tracking deep Dive.  Very interesting talk on the problems (and solutions) unique to skeletal tracking/Kinect given by Microsoft AE.  Some good general solutions for multi-threaded timing issues.

7.       Halo Reach Effects. Excellent talk on the special effects in Halo Reach.  Excellent new way to do dynamic particle systems that interact with geometry in the real world, shield effects, and a few other really visually stunning, and very realtime, techniques. 

8.       Mega-Meshes – modeling/rendering worlds of 100 billion polygons.  Very interesting talk that seems to be along the lines of last year’s ID siggraph talk on streaming massive geometry.  The second half had to do with getting pretty decent spherical harmonic lighting techniques on Xbox and other consoles.  Lots to digest in the talk – so I’ll likely look at the slides when published.

9.       Experimental gameplay – 10 or so people positing or showing interesting gameplay techniques and ideas.  This session really showed what the Indie scene is about – trying to create unique experiences.

10.    Marble Madness, Pitfall, and Doom postmortems
       

  • Trend speculations based on what I saw:

1.       Mobile – the real energy this year was clearly behind winning developers into each camp’s mobile and tablets.  Unity showed extensively.  Free hardware galore, tons of sessions, and big parties were being thrown.   With years left to go before another console refresh – it was mostly just quiet, incremental changes from the big players like Xbox, Sony, and Nintendo.  With smartphones getting such sophisticated graphics hardware, it does make me seriously wonder if the days of PSP or DS-like gaming devices are limited, which could spell big problems for console companies that see such large revenue streams from them.

2.       Monitizing – Lots of financial companies on the show floor and session talks focused on micropayments and new revenue streams.  The fact there were old-school financial and credit card companies on the show floor was a real shock.

3.       Indie culture – The indie area of the show floor was packed every time I went by it.  Lots of young energy and it’s more than just hype judging by the awards Minecraft won.  Attended 2 classic game post-mortems which really clarified in my own mind the shift in game dev culture.  Used to be programmers ruled the roost in developing games, but now I think we’re seeing that most of the current game developers in the indie scene are content with using off-the-shelf engines/tools and focus 90% their attention on the gameplay and creating unique experiences as opposed to focusing on the newest/greatest tech. 

4.       Hard-core technical talks seemed to be diminishing in number, but not quality.  Still excellent work being done, but I wonder if this large trend towards younger developers just using more off-the-shelf engines and simpler mechanics will create a two-tiered system in which the majority of smaller Indie games will use low-end/runs on just about anything techniques, while AAA titles will always continue but just get more technically impressive, but (with fewer studios able to afford it) smaller in quantity and more insular.  Do we turn into a world where there are a few engine makers and game houses are primarily programmers that write games in scripts on top of them?

Free on your birthday!

Free on your birthday!

As someone who’s recently experienced the event, here’s a couple great sites with free stuff you can get on your birthday:

Portland specific stuff: http://portlandonthecheap.com/birthday_perks.html
More universal: http://www.heyitsfree.net/2006/10/03/birthday-freebies/

Even though DisneyLand isn’t doing their ‘free ticket on your birthday’ thing anymore, there are plenty of other great deals.  Some of the better ones:

  • Black Angus Steakhouse Free steak dinner.  Join the BA Prime Club and they’ll send you a free dessert just for joining and then you’ll receive a coupon good for a free steak dinner.  The free steak dinner birthday offer is good from two weeks before recipient’s birthday to two weeks after recipient’s birthday.  Birthday offer requires the purchase of 2nd entrée of equal or greater value.
  • Medieval Times – Sign up in advance and they’ll send you a free ticket (worth $53!) to one of their feast and tournaments.
  • Benihana Sign up for the “Chef’s Table” and you’ll also get a complimentary Benihana Birthday Dinner certificate, maximum value of $30 (excludes alcoholic beverages, gratuity and tax) that will be emailed to you for use during the month of your birthday.
  • Claim Jumper Join the Claim Jumper E-club and they’ll send you a coupon via email for a complimentary entree for your birthday.  Offer valid up to a $18 value.  Dine-in only, not valid on liquor, gift card purchases, tax or gratuity.  Expires 14 days from date sent
  • Red Robin Sign up for the E-club and get a free burger during your birthday month.
  • Ruby Tuesday Join the ‘So Connected’ club and they’ll send you coupon good for a free handcrafted birthday burger!  Must  present valid ID and printed copy of the coupon.  Expires 14 days from date sent.
  • Noodles & Company Free entree.  Join the Noodlegram E-Club and they’ll send you a free dish voucher good for your birthday.  This is not a buy-one, get-one free, this is truly a birthday freebie that is good for one week before and one week after your birthday.
  • Moe’s Southwest Grill Free entree.  Sign up for the e-club and they’ll send you a coupon on your birthday for a free menu item.  The only Oregon location is in Wilsonville.
  • IHOP -Free Rooty Tooty Fresh and Fruity or menu item of equal or lesser value.  Must join the “Pancake Revolution” online and you’ll receive a free menu offer on just for signing up, as well as on your birthday AND on the anniversary of your sign up.
  • Home Town / Old Country Buffet – Sign up for their eClub and you’ll get a buy one adult buffet meal, get one free coupon.  Good for one week before and one week after your birthday.  Coupon is not valid on holidays or on Sundays.
  • Fuddruckers Free 1/3 pound burger or other Fudds entree of equal or lesser value.  You must sign up for the Fudds Club online and a few days before your birthday you’ll receive the email coupon.  Offer expires 14 days from date sent.
  • Chang’s Mongolian Grill – Free meal on your birthday (as long as you bring another dining patron).  Bring your ID

Sweet!  Let the birthday fun begin.

SQLite on iPhone is byte compatible with Windows

SQLite on iPhone is byte compatible with Windows

I was working on a good write-up on how to use SQLite in C# (since the most popular package install for SQLite on C# is kinda broken in Visual Studio 2010), but thought this might be a good data point for folks.

So, the short answer?  Yes, you can build SQLite databases on Windows, copy them across to your Mac, and then use them in iPhone applications without any issues.
You should open the database with the proper character formatting  ( sqlite3_open([dbPath UTF8String], &database)),
but other than that the SQL files can be just copied straight across the devices from Win 7->Mac->iPhone and the same select/delete/etc commands work like a champ.

How do I know?  I did it last night. 🙂

Mazamas

Mazamas

Was just accepted into the Mazamas Basic Mountaineering course.  It’s about half classroom training to learn about outdoor survival and safety; and the other half training and hiking to get you in shape for mountain climbing.  I must admit that I’m looking forward (with some anticipation) to the idea of climbing Mount Hood at the end of the course…

Snowstorm 2011!!! OMG were going to die!!! = 1.5 inches

Snowstorm 2011!!! OMG were going to die!!! = 1.5 inches

It started with predictions of Snow-pocalypse.  Portland was going to get creamed with snow – mountains of it.  Multiple days of snow and ice that would result in stranded people, folks without heat or power, etc.  Newcasters went on and on and on about how terrible it was going to be.  4-6 inches overnight with another solid 24 hours of more snow.  Then it was 2-4 inches, then day before it was 1-2 inches.  Then the night began, and the snow that was supposed to start at 3pm was still unseen as I walked home from a night of free-play at Ground Kontrol around 9pm. Queue sleep and wake the next morning:

 
So, we did actually get snow on Thursday morning, and untouched side streets that the sun wasn’t shining on were slippery, but by 10am it was all melted anywhere you went.  Still, the local news crews were out doing hard-hitting, on the scene reporting in the 1.5″ official of snow laying around on the streets despite the fact there was a palpable air of desperation in their tone as they tried to play up what was clearly no snow-pocalypse.  And the snow that was supposed to fall all day and night of Thursday?  Well, it’s sunny right now on Friday and there was absolutely no snow yesterday or overnight.  None.

Don’t get me wrong, up in the mountain passes and some of the local hills snow can turn the steep, unsalted/un-deiced streets into a real hazard you don’t want to drive on without studded tires.  And if you’d gotten ALL the normal drivers out on these roads, it probably would have been a never-ending string of pileups due to drivers unaccustomed to driving in snow (I saw 2 cars off the road on a 1/2 mile stretch of icy pavement due to folks still driving like they are on dry pavement).

All this I could forgive if it was an isolated instance.  But this seems to happen any time the hint of snow is predicted for our area.  So if there’s one take-away I’ve learned from Oregon weather forecasters in the last 10 years – it’s this: don’t believe them when they predict snow-pocolypses *days* in advance.  Check out weather.com yourself and watch the changing predictions there up to the day it’s supposed to happen.  Till then, don’t change any of your plans.

O’Reilly book list contest

O’Reilly book list contest

O’Reilly publishes a lot of nerdy books, and right now they’re having a contest to win up to $500 of their books.  You register on their website and publish your wish list to your blog (like this), and you get entered into a chance to win those books!

Here’s my list (which adds up to $497.83) 🙂  I sure hope I win!

  • Programming Interactivity, 1Ed
  • Intel Threading Building Blocks, 1Ed
  • The Art of Concurrency, 1Ed
  • Building Embedded Linux Systems, 2Ed
  • Designing BSD Rootkits, 1Ed
  • Linux System Administration, 1Ed
  • Linux Kernel in a Nutshell, 1Ed
  • Unicode Explained, 1Ed
  • flex & bison, 1Ed
  • Learning SQL, 2Ed
  • Getting Started with Arduino, 1Ed
  • Mastering Regular Expressions, 3Ed
  • Regular Expression Pocket Reference, 2Ed
Fedora Core 14 on VMWare

Fedora Core 14 on VMWare

Error during Install:
If you try to install Fedora Core 14 on VMWare and use the wizard which automatically sets up the VMWare settings, shortly after booting the install DVD, you’ll get a fatal error:

Section does not end with %%end

Go to VMWare, and for the Fedora list VM:
Go to settings -> CD’s and DVD’s->  (here will be two CD/DVD setup) delete or unset the cd/dvd whose disc image is autoinst.iso

Reboot the install, and all should go as expected.

VMTools

Also, VMWare Tools (VMTools) won’t install correctly by default.  You’ll need to follow this procedure:
http://www.sysprobs.com/fedora-14-vmware-install-vmware-tools-fedora-14

How to debug a Bluescreen minidump

How to debug a Bluescreen minidump

So, your machine is bluescreen-ing on a semi-regular basis.  It’s annoying the @#$% out of you, but you can’t find anything in the system logs that indicates what’s causing it.  Maybe (like in my case) the computer in question is your DVR box and sometime during the night Media Center is waking up, trying to update a program guide, and then blue-screening.  Nothing helpful is left in the logs, but you did get a minidump file.  If you get a minidump, my friend, you are in business!

  1. Make sure you have a minidump file with your bluescreen.  You should see a numbered file with the .dmp extension with the date/time for the bluescreen located in  C:\Windows\Minidump
  2. Download a handy free tool called BlueScreenView by Nirsoft.  This handy tool will automatically decipher a minidump file and you can verify that it matched what you saw on the blue-screen.  It won’t give you everything you need, but it will tell you if you have the right mini-dump for the crash you saw. It also shows you the codes thrown so you don’t have to write them down by hand at the bluescreen.  You’ll note that often BlueScreenView reports a source of the error (ntkrnl.exe in my case) but this is usually NOT the real root cause.  As we’ll soon find out, the high-level source it cites isn’t always the real problem, but was a module loaded BY that source or the module in which the source was loaded.
  3. Do these one-time setup steps.  In order to make sense of the minidumps, you need some tools provided by Microsoft:
    1. Download and install the Debugging Tools for Windows pack.  Make sure it gives you the right version for your OS (win7 x64, vista x32, etc).  This pack contains the kernel debugging tools you’ll need.
    2. windbg.exe will likely be installed in c:\program files\Debugging Tools for Windows (x64) (or whatever x32/x64 you have)
    3. Open a command prompt as administrator, CD to the windbg.exe directory
    4. run:
      windbg.exe -IA
      windbg will start up, and inform you that it is now the registered file association handler for all dump files. Close windbg.exe
    5. Restart windbg, and go to file->Symbol File Path
    6. Enter:
      SRV*C:\Development\SymCache*http://msdl.microsoft.com/download/symbols
      You can set the local directory ('C:\Development\symcache' in my case) to whatever you want, but everything following the rest must be exact.  This instructs windbg to load the needed symbols from Microsoft’s internet site (release modules usually don’t have symbols, and letting you recompile your own kernel by giving the source out isn’t something MS usually lets you do. :)) Whenever you debug something and windbg needs the symbols, it checks your cache location first and downloads the needed symbols if they are not found and stores them in the cache.  So the more you debug the more symbols you build up and faster future debugging will go.  Exit windbg and save the settings.
  4. Open windbg.exe (again), and do a file->open dump and open the minidump in c:\windows\minidump that corresponds to the bluescreen you’re trying to debug.  You might need to be administrator when starting windbg.
  5. Windbg will automatically start downloading symbols, and doing some basic analysis.  It may look like it’s done/just sitting there sometimes, but don’t do anything until you see it’s ‘diagnosis’.  Usually looking like this:
    Use !analyze -v to get detailed debugging information.
    BugCheck 9F, {3, fffffa800af7f440, fffff80000b9c4d8, fffffa800745f860}
    Probably caused by : usbhub.sys
  6. But don’t take this as the final word on the crash source and send nasty letters to the usbhub.sys driver writer!  Type !analyze -v as it suggest, and you’ll likely get a more detailed analysis, like this:
    DRIVER_POWER_STATE_FAILURE (9f)
    A driver is causing an inconsistent power state.
    Arguments:
    Arg1: 0000000000000003, A device object has been blocking an Irp for too long a time
    Arg2: fffffa800af7f440, Physical Device Object of the stack
    Arg3: fffff80000b9c4d8, Functional Device Object of the stack
    Arg4: fffffa800745f860, The blocked IRP
    Debugging Details:
    ------------------
    DRVPOWERSTATE_SUBCODE: 3 IMAGE_NAME: usbhub.sys
    DEBUG_FLR_IMAGE_TIMESTAMP: 4a5bcc2d
    MODULE_NAME: usbhub
    FAULTING_MODULE: fffff8800767a000 usbhub
    CUSTOMER_CRASH_COUNT: 1
    DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT
    BUGCHECK_STR: 0x9F
    PROCESS_NAME: System
    CURRENT_IRQL: 2


    STACK_TEXT:
    fffff800`00b9c488 fffff800`02ef3273 : 00000000`0000009f 00000000`00000003 fffffa80`0af7f440 fffff800`00b9c4d8 : nt!KeBugCheckEx
    fffff800`00b9c490 fffff800`02e9029e : fffff800`00b9c5c0 fffff800`00b9c5c0 00000000`00000001 00000000`00000000 : nt! ?? ::FNODOBFM::`string'+0x292b0
    fffff800`00b9c530 fffff800`02e8fdd6 : fffff800`03034700 00000000`00146bde 00000000`00000000 00000000`00000000 : nt!KiProcessTimerDpcTable+0x66
    fffff800`00b9c5a0 fffff800`02e904be : 00000030`9c591870 fffff800`00b9cc18 00000000`00146bde fffff800`03002e48 : nt!KiProcessExpiredTimerList+0xc6
    fffff800`00b9cbf0 fffff800`02e8fcb7 : 00000010`31b602c1 00000010`00146bde 00000010`31b602f2 00000000`000000de : nt!KiTimerExpiration+0x1be
    fffff800`00b9cc90 fffff800`02e8ceea : fffff800`02ffee80 fffff800`0300cc40 00000000`00000002 fffff880`00000000 : nt!KiRetireDpcList+0x277
    fffff800`00b9cd40 00000000`00000000 : fffff800`00b9d000 fffff800`00b97000 fffff800`00b9cd00 00000000`00000000 : nt!KiIdleLoop+0x5a

    STACK_COMMAND: kb
    FOLLOWUP_NAME: MachineOwner
    FAILURE_BUCKET_ID: X64_0x9F_3_AiCharger_IMAGE_usbhub.sys
    BUCKET_ID: X64_0x9F_3_AiCharger_IMAGE_usbhub.sys

Now we see the whole story.  We see that in the usbhub.sys device driver, something listed in it’s ‘DPC’ table failed to respond in time to some request the usbhub.sys made.  That process was put on the timer expiration list which threw the bluescreen.  Since usbhub.sys is a hub with many things plugged into it, odds are good that the DPC list is the list of device drivers for each device plugged into the hub, a list of events that need handling, or a list of devices themselves.  When we look at the ‘failure bucket’ we see the AiCharger_IMAGE_usbhub.sys device was the source of the failure.  Odds are good the usbhub.sys is loading ‘images’ that contain the device’s driver for each of the devices plugged into the hub; and the one that failed in this case has the name AiCharger.   If I look in my Device Manager in Windows, I find a driver called AiCharger.sys – under the USB devices.  Ah ha!  A quick Google reveals this is a driver that enables smart/high-speed USB charging of iPhone/iPod devices on my Asus motherboard. If I go one step further, I can speculate that the bug is in the portion of the driver that is supposed to respond to sleep/wake/power events and that somehow the call to wake up the iPhone I have plugged in isn’t responding.  Dang – Asus owes me a donut for doing all the work for them.

So, now you know who’s really responsible.  You send a bug note to Asus with the dump results and un-install the AiCharger tool/stop leaving your iPhone connected at night to the machine when it’s asleep until they get a fix for AiCharger.  You also find out that someone else already had the same problem…
There are many other debugging commands you can also use, and those are all outlined here.  Hopefully this will help YOU out the next time some crazy bluescreen you can’t figure out; and you won’t be re-installing the OS to get rid of it.

Protips: 99% of the time, bluescreens are usually a driver and not something in the actual Windows system.  Especially if they are repeatable.  Always get the latest drivers first.
When the crashes are wake/sleep/resume/power related, often you should go to the device driver in the Device Manager and uncheck any ‘allow system to turn off the power of this device’ as a second step if the latest driver doesn’t solve it.  This prevents Windows from making calls into possibly faulty driver code.  Power mangament issues are very common with drivers still.
If you get dumps and the crashes are different places every time or random in timing – then you might have bad memory or a bad motherboard that’s corrupting things.  Check heat sinks or temps and possibly change ram/mb’s.

Other resources:
-The official Microsoft list of bluescreen failure codes with documentation on each one:
http://msdn.microsoft.com/en-us/library/ff542347%28v=VS.85%29.aspx

-Another list of the various bluescreen failure codes and their plaintext sub-code descriptions with some notes from external folks:
http://www.faultwire.com/solutions_index/fatal_error-1.html#IssueList

-Microsoft Answers forum that has really responsive and informative threads on just about every blue-screen investigation ever done.  These guys chew up minidumps all day and can help you track down just about anything that’s going on (if just searching the forum doesn’t do it for you automatically):
http://social.answers.microsoft.com/Forums/en-US/w7repair/threads

-Another Microsoft forum that seems to do a fair amount of this kind of debug work:
http://social.technet.microsoft.com/Forums/en/w7itproperf/threads

Using TWAIN driver for your Canon CanoScan LIDE 25 on Windows 7 x64

Using TWAIN driver for your Canon CanoScan LIDE 25 on Windows 7 x64

Yeah, so you automatically got the newest driver for your Canoscan when upgrading to Windows 7.  However, when you go into Photoshop CS5, you no longer see TWAIN devices listed(!).  Unfortunately, in Adobe’s infinite wisdom, they have discontinued installing TWAIN support by default.  You need to go here:

http://www.adobe.com/support/downloads/detail.jsp?ftpID=4688

to download the ‘Photoshop CS5 Optional Plugins’ free download.

Edit: Note – this ONLY works with 32-bit version of Photoshop CS5.  There still is no TWAIN support on 64-bit Photoshop.

Unzip the file, then copy Twain_32.8BA from the zip’s
\PSCS5OptionalPlugins_Win_en_US\Optional Plug-Ins\Win32

directory, and copy it into your Photoshop CS5 32-bit plugins folder:

C:Program Files (x86)\Adobe\Adobe Photoshop CS5\Plug-ins\
directory.  Restart Photoshop and you should see your TWAIN capture option again.