/* BeejBlog */

[SOLVED!] Photoshop CS5 – Detected Video Card: Blank

Just go into Help > System Info before you do anything else, that’s it.

Unbelievable but this works 100% of the time on my current rig running Photoshop CS5 on Windows 7 with an ATI x1300 Pro graphics card (yeah yeah it’s far from a graphics superstar but honestly it does everything I need, including Photoshop 3D mode just fine thank you :). 

Anyway, the area under Edit > Preferences > Performance > GPU Settings > Detected Video Card would always come up blank.  This was absolutely driving me nuts because I want all the 3D mode stuff that only comes when Photoshop is happy with your OpenGL bits.  There are several forum posts about Photoshop being sensitive to what your video card spits out when PS does an OpenGL “capability scan”.

Sure is cool to have such an easy fix… found it totally by chance.  Obviously it would be nice if Adobe could find it in their hearts to run the video detect code through the System Info code but I’m sure they’ve got a ton of bigger fish to fry.

[Update: 01 Feb 2011] Photoshop CS5 on the Mac side has no such issues recognizing this card.

[Update: 04 May 2011] Photoshop CS5 64bit on Win7 seems to find the card straight away, nice.

**Note: I had to install the ATI Catalyst drivers, the default Windows WDDM drivers didn’t provide the right kind of OpenGL support… for this old card Catalyst v10.2 seems to be the “legacy” cutoff point.

More keywords for Google to bring home other wayward souls: Photoshop, CS5, No Detected Video Card, Enable OpenGL Drawing, Enable Graphics Hardware Acceleration is unavailable, GPU Settings

Before

 

After

image   image

Self-hosting Zenphoto on Windows 7 (IIS7, PHP & MySQL)

I really like ZenPhoto - it's a solid photo gallery with an easy point and click web admin GUI.
The main thing I dig is that i can point it at my main photos folder on my hard drive (via a quick symbolic link) and it goes to town dynamically publishing whatever I drop there without any other fiddling… that's photo sharing nirvana if you ask me.

[Update: 25 Oct 2010] After running the gallery for a couple days I’d have to say Apache did a better job at popping the pages back than what I’ve got setup under IIS so far… maybe Apache just deals with these more CGI oriented modules better than IIS can for some fundamental reason… I do have PHP “FastCGI” enabled for IIS… any performance tips would be greatly appreciated :) I’ll have to go find some trace tools to see where it’s spending most of its time.  I guess it could still be caching images since ZenPhoto pulls a new random image for the album cover each time you refresh the page and I did wipe the cache when I migrated over to IIS.

[Update: 29 Oct 2010] Setting Admin Options > Image subtab > Full image protection = Unprotected - yields a noticeable speed boost presumably because it skips a bunch of file I/O… now it feels back on par with what I was seeing in Apache… unfortunately, I just don’t remember how I had that setting under Apache.

Installs:
  • I installed them all to c:\Program Files because that's my speedy SSD and I want this site to be as performant as possible
    • then i simply SymLink my main photos folder (on a RAID1 volume elsewhere) over the top of c:\Program Files\zenphoto\albums
    • here's an awesome SymLink utility for Windows Explorer!!
  • IIS - I'm on Win7 so it's IIS7 - Apache's cool and all but i saw a note somewhere that gave me the impression that on Windows, IIS + PHP via FastCGI module is  going to be more performant than Apache... otherwise, I did previously run it all on Apache just fine via the nifty "XAMPP" stack that installs everything for you in minutes and it "just works" which was honestly much less trouble than getting it all to hang together under IIS7 myself.
  • PHP - there's a specific Windows/IIS “Fast CGI” version (current version: 5.3.3) (see this for Thread Safe vs Non Thread Safe binaries, non thread safe + IIS FastCGI is most performant)
  • MySQL - and their WorkBench tool is handy (current version: 5.1.51)
    • there's a lot of environmental tuning questions during the install wizard but i mostly selected default settings
    • I chose to go with a \MySQL_Data subfolder for the datafiles
    • configure for TCP/IP access (i don't yet know how to configure PHP to connect to MySQL over named pipes)
  • ZenPhoto - just an unzip (current version: 1.3.1.2)
  • zpGallerific theme (current version: 1.0)

FIREWALL!!! turn it completely off to begin with so you know whether it's your main problem or not
    • I had to add these two rules to BitDefender
    • image
    • THE ORDER OF THE RULES MATTERS... MOVE THESE TO THE VERY TOP of the list with the arrow buttons!!
    • helpful: http://forum.bitdefender.com/index.php?showtopic=12764
    • nutshell: to see what's blocked "Increase Verbosity" and "Show Log" on Activity tab 

Folder Permissions:
  • grant IUSR full permissions to root zenphoto folder (IIS_IUSRS group did NOT work)
    • it was also necessary on the true target of the symlinked albums folder
  • something happened on my win7 box where my albums folder was no longer accessible to zenPhoto/PHP… maybe a Windows Update closed a security loophole or something…

IIS Tweaks:
  • Enable 32bit PHP under IIS on 64bit Windows
    • install IIS6.0 script compatibily
    • cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnW
  • MOD_REWRITE
    • once I got everything fired up I realized that it’d be nice to support my old URLs that I’ve mailed out to everybody already
    • interesting thing was, Apache was doing something cool I didn’t realize… it was mod_rewrite’ing my php urls for me so they looked like pretty folders
    • actually zenphoto was kicking out the pretty urls and mod_rewrite was translating them back into /index.php?album=blah format behind the covers
    • IIS doesn’t do that right out of the box but they have a nice free URL Rewrite module you can drop in to do this very same thing (v2.0 currently)
    • you have to restart IIS Manager GUI after you install to see the “URL Rewrite” icon under the “IIS” section of your web site
    • it has a good wizard for the easy stuff which is all I needed to map “photos/(.*)/” to “photos/index.php?album={R:1}”
    • also under conditionals, input: {REQUEST_FILENAME} => “Is Not a File” & “Is Not a Folder” was crucial to allow the real URLs for direct downloading of images and such to continue working
    • Here' are all the rewrite rules I needed to apply:
web.config
  1. <?xml version="1.0"?>
  2. <configuration>
  3.     <system.webServer>
  4.  
  5.     <rewrite>
  6.             <rules>
  7.                 <clear/>
  8.                 <rule name="RewriteUserFriendlyURL6" enabled="true" stopProcessing="true">
  9.                     <match url="^page/search/archive/(.*)$"/>
  10.                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  11.                         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
  12.                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
  13.                     </conditions>
  14.                     <action type="Rewrite" url="index.php?p=search&amp;date={R:1}"/>
  15.                 </rule>
  16.                 <rule name="RewriteUserFriendlyURL5" enabled="true" stopProcessing="true">
  17.                     <match url="^page/([0-9]+)/?$"/>
  18.                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  19.                         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
  20.                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
  21.                     </conditions>
  22.                     <action type="Rewrite" url="index.php?page={R:1}"/>
  23.                 </rule>
  24.                 <rule name="RewriteUserFriendlyURL4" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
  25.                     <match url="^page/(.*?)$"/>
  26.                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  27.                         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
  28.                     </conditions>
  29.                     <action type="Rewrite" url="index.php?p={R:1}" appendQueryString="true"/>
  30.                 </rule>
  31.                 <rule name="RewriteUserFriendlyURL1" enabled="true" stopProcessing="true">
  32.                     <match url="^(.*?)/?$"/>
  33.                     <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
  34.                         <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
  35.                         <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
  36.                     </conditions>
  37.                     <action type="Rewrite" url="index.php?album={R:1}" appendQueryString="false"/>
  38.                 </rule>
  39.             </rules>
  40.         </rewrite>
  41.         <directoryBrowse enabled="true"/>
  42.     </system.webServer>
  43.  
  44.   <system.web>
  45.         <compilation targetFramework="4.0" debug="true"/>
  46.         <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/>
  47.   </system.web>
  48.  
  49. </configuration>

Create Self-Signed Cert IIS7


PHP Setup:
  • Map an IIS virtual directory to your zenphoto root
  • browse to http://{your domain}/{zenphoto virtual dir}/setup.php
  • it'll probably bark about a couple settings you have to make manually... no biggie hopefully
  • you'll have to reset "World Wide Web Publishing Service" to refresh any PHP settings it tells you to twiddle
  • I had to leave file/folder permissions as "loose (0777)"... all of the stricter settings blocked zenphoto subfolder permissions
  • MySQL settings:
    • root login & password
    • 127.0.0.1:3306 (localhost did NOT work!?!)
    • database name ("zenphoto")
    • table prefix = blank (i preferred to go with a separate database w/o table prefixes)
    • it'll create the zenphoto database for you with a simple click once you get a successful login to MySQL server working
    • *GO* :)
  • i went ahead and let it delete the "zp-core\setup*.php" files
  • set admin username & password
  • You're in!

ZenPhoto admin page settings:
  • just unzip zpGallerific folder into the \zenphoto\themes folder
  • Theme's tab - activate zpGallerific
  • Options tab
    • general subtab - Time zone = Europe/Berlin
    • gallery subtab
      • title = The Andersons
      • description = {blank} (set Gallerific subtitle next)
      • sorty by = filename - descending (works for me because i name all folders "yyyy-mm-dd {description}")
    • image subtab – Full image protection = Unprotected (as long as you don’t really care who gets access, this yields a MAJOR speed boost for page rendering times)
    • theme subtab
      • Albums per page = 9
      • Color = Blue
      • Tagline = Cassidy, Anne, BJ & Friends

iTunesControl

This thing totally rocks!… essentially flawless implementation of global hotkeys plugin to control iTunes and also sweet configurable heads-up-display functionality (example shot below)… if you’ve been looking for this kind of functionality, look no further! (waaaay more functional than the clunky Aqua-Soft mmKeys.dll plugin that’s out there)

Super bonus points: the developer Carson Morrow is a great guy… very responsive!

image

TortoiseSVN + Code.Google.com = development LOCATION nirvana

Over the last couple days I took a stab at throwing my source code up into a Google Code repository.

There are several options to choose from with regards to accessing your code base… “the Google” will host your code via either Mercurial or Subversion standards… quickly browsing for recommendations, I felt like Subversion was better represented. and then quickly landed on the much recommend TortoiseSVN.  TortoiseSVN adds Subversion related context menus to Windows Explorer (or whatever your preferred “Finder” equivalent is).

Now when I wake up in the middle of the night with an the itch to toss an idea into my current project, I don’t have to suffer through firing up my corporate Vista (ugh) laptop, waiting for a VPN connection, waiting for the remote desktop to open up… I can just pop into my VS2010 project on my main desktop (always running) and check in some code that will be right there ready to merge back into my project when I get back to my desk at work.

I’ve just started using it but I’ve been back and forth a couple times and its working.
I think that’s pretty cool.

Notes:

  • I was initially concerned about how peppy the interaction with a cloud hosted source library would be… after using it for about a year and a half now, I can confidently say that it’s not even an issue… you generally blast away on local work copies of your files so there’s no impact… then when you’re finally ready to send up some changes you hit “SVN Commit”… it does some obvious bit chugging over the wire for a few moments but not too bad and then you get a big list of what it plans on uploading to Google…then you hit OK and it chugs through that… so the time spent on source maintenance is well contained and makes sense… good time to take a breather Smile
  • I believe Subversion works on more of a branch and merge methodology vs. exclusive checkout locks like I’m used to with VSS so I’ll have to see how that goes in practice.
  • When you want to first connect your Google Code Repository with Tortoise, remember to simply select the “Checkout” context menu on your desired folder… it’ll prompt you for the SVN URL, login name (your Gmail address) & special password found via this URL.

Expression Blend 4 + SketchFlow is pretty dang cool

image

I’m just getting my feet wet with a silly little project… i wanted to create a high res icon for Windows Enabler in my ObjectDock… turned out decent:

image image

WPF .Net 4 LOB Application Framework

(Wikipedia: LOB)

Grepping for nuggets: (All the code is hosted in a Google Code SVN repository with “nugget:” comments to help me remember the highlights I’ve learned along the way this time around)

Highlights:

BackgroundWorkerEx.cs – “incremental search” -- ala Google (no “search” button to press)

  • ~100 lines of simple wrapper around .Net BackgroundWorker and DispatcherTimer classes
  • automatic WaitCursor handling (System.Windows.Input.Cursors.AppStarting is perfect UI for this purpose, it shows that something is going on with the wait spinner, but you also get a mouse pointer which tells the user they can still do stuff)
  • implemented as Generic class as an elegant way for the client to provide a “state” object that gets handed back to the caller’s async event handlers