A social networking site: Snapbase. Snapbase is a social site that shows you what’s going on in your city or anywhere in the world as pictures are uploaded by your friends and neighbors. The application extracts location information from the EXIF data embedded in images and displays recent images taken near your present location.

A trouble-ticketing system for an IT help desk or technical support center. It’s really pretty extensive, with asset management, user accounts, salted encrypted passwords, and all sorts of nifty things. I really must write a full description of it at some point, but until then, the documentation is the next best thing.

An update to the above download protection script to protect multiple downloads, generate batches of keys, leave notes about who received the key, the ability to specify per-key the allowable number of downloads and age, and some basic reporting.

An HTML auction template generator called Simple Auction Wizard. It helps you create HTML auction templates for eBay, and uses SWFUpload and tinyMCE.

I have another project in the works that promises to be more financially viable, but the most clever thing on that list is Snapbase. It’s in something akin to alpha right now; barely usable. I really wish I had the time to pursue it.

Because the page at http://www.nullsoft.com/free/netmon/ has been down every time I’ve tried to visit it lately, I’ve decided to reproduce it here, along with the download of the NetMon application. Below is the content of the page, with the link updated to the file hosted at ardamis.com.

introduction

This is a slightly useful network monitor graphing thing for Win32.
It just sits in its own window, pinging a host, and giving you a
graph of how long it takes each time.

Because all great (err) things should be free, this should be too.
Not only that, we’re pretty much giving away all rights to it, giving
you the source, and letting you do what you want with it (see the
license below).

features

Host configuration

Hops configuration

Refresh rate configuration

Graph scale configuration

Configurable text for window

Automatic start-on-system-start

Static window size (120×40)

Small memory footprint

license

Copyright (C) 1999-2000 Nullsoft, Inc.

This software is provided ‘as-is’, without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.

Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:

1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

Compressing PHP files

If your Apache server does not have mod_gzip or mod_deflate enabled (Godaddy and JustHost shared hosting, for example), you can use PHP to compress pages on-the-fly. This is still preferable to sending uncompressed files to the browser, so don’t worry about the additional work the server has to do to compress the files at each request.

Option 1: PHP.INI using zlib.output_compression

The zlib extension can be used to transparently compress PHP pages on-the-fly if the browser sends an “Accept-Encoding: gzip” or “deflate” header. Compression with zlib.output_compression seems to be disabled on most hosts by default, but can be enabled with a custom php.ini file:

For WordPress or other CMS sites, an advantage of zlib.output_compression over the ob_gzhandler method is that all of the .php pages served will be compressed, not just those that contain the global include (eg.: header.php, etc.).

Running both ob_gzhandler and zlib.output_compression at the same time will throw a warning, similar to:

Compressing CSS and JavaScript files

Because the on-the-fly methods above only work for PHP pages, you’ll need something else to compress CSS and JavaScript files. Furthermore, these files typically don’t change, so there isn’t a need to compress them at each request. A better method is to serve pre-compressed versions of these files. I’ll describe a few different ways to do this, but in both cases, you’ll need to add some lines to your .htaccess file to send user agents the gzipped versions if they support the encoding. This requires that Apache’s mod_rewrite be enabled (and I think it’s almost universally enabled).

Option 1: Compress locally and upload

CSS and JavaScript files can be gzipped on the workstation, then uploaded along with the uncompressed files. Use a utility like 7-Zip (quite possibly the best compression software around, and it’s free) to compress the CSS and JavaScript files using the gzip format (with extension *.gz), then upload them to your server.

For Windows users, here is a handy command to compress all the .css and .js files in the current directory and all sub directories (adjust the path to the 7-Zip executable, 7z.exe, as necessary):

This may be a bit too technical for many people, but is also much more convenient. It is particularly useful when you need to compress a large number of files (as in the case of a WordPress installation with multiple plugins). Remember to run it every time you automatically update WordPress, your theme, or any plugins, so as to replace the gzip’d versions of any updated CSS and JavaScript files.

The .htaccess (for both options)

Add the following lines to your .htaccess file to identify the user agents that can accept the gzip encoded versions of these files.

By default, the Adobe Updater application that is installed along side various Adobe products like Acrobat and Photoshop is set to check for updates automatically. Specifically, it’s set to check for updates to all installed Adobe products every week, and to download all updates and then notify you when they are ready to be installed. In this post, I’ll explain how to disable this feature by editing a settings file while avoiding the GUI.

Adobe Updater Preferences

In a managed environment, an administrator may not want any software to update itself for any number of reasons. The automatic check can be switched off in the Adobe Updater preferences, but it can be a nuisance to find and requires as many as 9 clicks.

Adobe Updater can be launched from within Adobe products by clicking Help | Check for Updates (note that in some products, the path is Help | Updates, but in either case, you can use the keystroke Alt+H, U). Click Preferences, then uncheck the box next to Automatically check for Adobe updates and click OK, then close the Adobe Updater window. You may have to click Quit in a subsequent window before the application closes.

All of the configurable settings are saved to a file named AdobeUpdaterPrefs.dat in the user profile, rather than as registry keys. The .dat file extension suggests a binary file, but it’s actually just an XML document that can be opened in any text editor.

The preferences file resides atC:\Users\[USERNAME]\AppData\Local\Adobe\Updater6\AdobeUpdaterPrefs.dat on a 64-bit Windows 7 machine, and atC:\Documents and Settings\[USERNAME]\Local Settings\Application Data\Adobe\Updater6\AdobeUpdaterPrefs.dat on a 32-bit Windows XP machine.

The minimum lines that need to exist for the file to be valid and for “Automatically check for Adobe updates” to be disabled are:

To disable the auto update check programmatically, this file can be saved as AdobeUpdaterPrefs.dat and a script used to later overwrite the file in the user profile. A rather geekier approach would be to use a batch file to rename AdobeUpdaterPrefs.dat and then write a new file. I prefer the latter method because it requires only a single file and because it could be easily modified to insert lines that would change other settings, such as the location of the aum.log log file or the download directory, which are located in the user profile by default.

A batch file to back-up and then remake the file might look like this:

:: A batch file for writing a new Adobe Updater settings file "AdobeUpdaterPrefs.dat"
:: If an AdobeUpdaterPrefs.dat exists, it is edited and then the next next location is checked, until the script has iterated through all locations
@echo off
%SystemDrive%
cd\
SETLOCAL EnableDelayedExpansion
:: Check each location and if the file is found, pass the directory and a label (to the next path to be searched or to an EXIT command) to the function
:XPUpdater6
@echo.
echo Checking for "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater6\AdobeUpdaterPrefs.dat"
if exist "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater6\AdobeUpdaterPrefs.dat" (call:REWRITE "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater6",XPUpdater5) else (@echo The AdobeUpdaterPrefs.dat file was not found.)
:XPUpdater5
@echo.
echo Checking for "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater5\AdobeUpdaterPrefs.dat"
if exist "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater5\AdobeUpdaterPrefs.dat" (call:REWRITE "%USERPROFILE%\Local Settings\Application Data\Adobe\Updater5",OUT) else (@echo The AdobeUpdaterPrefs.dat file was not found.)
:OUT
@pause
exit
:REWRITE
:: Configure Adobe Update to not check for updates
:: Move to the correct directory
cd %~1
:: Delete any temp file that this script may have created in the past
if exist AdobeUpdaterPrefs.dat.temp del AdobeUpdaterPrefs.dat.temp
:: Backup the old file
rename AdobeUpdaterPrefs.dat AdobeUpdaterPrefs.dat.temp
:: Write a new minimum settings file (the other data will be filled in when Auto Updater runs)
echo ^<?xml version="1.0" encoding="UTF-8" ?^> >> AdobeUpdaterPrefs.txt
echo ^<AdobeUpdater^> >> AdobeUpdaterPrefs.txt
echo ^<AutoCheck^>0^</AutoCheck^> >> AdobeUpdaterPrefs.txt
echo ^</AdobeUpdater^> >> AdobeUpdaterPrefs.txt
:: Rename the new file
rename AdobeUpdaterPrefs.txt AdobeUpdaterPrefs.dat
@echo The AdobeUpdaterPrefs.dat file was found and modified.
:: Go to the next location in the list
goto :%~2
goto :EOF

File locations in Windows 7

Note that in Windows 7, “%USERPROFILE%\AppData\Local\” and “%USERPROFILE%\Local Settings\Application Data\” contain the same data. A file added to a subdirectory in one location will appear in the corresponding subdirectory in the other location. So this script will work on Windows 7 because of 7’s backwards compatibility.

If you wanted to the script to run using Windows 7’s native C:\Users\… directory structure and did not care about the loss of compatibility with XP, you could use the following script instead.

:: A batch file for writing a new Adobe Updater settings file "AdobeUpdaterPrefs.dat"
:: If an AdobeUpdaterPrefs.dat exists, it is edited and then the next next location is checked, until the script has iterated through all locations
@echo off
%SystemDrive%
cd\
SETLOCAL EnableDelayedExpansion
:: Check each location and if the file is found, pass the directory and a label (to the next path to be searched or to an EXIT command) to the function
:WIN7Updater6
@echo.
echo Checking for "%USERPROFILE%\AppData\Local\Adobe\Updater6\AdobeUpdaterPrefs.dat"
if exist "%USERPROFILE%\AppData\Local\Adobe\Updater6\AdobeUpdaterPrefs.dat" (call:REWRITE "%USERPROFILE%\AppData\Local\Adobe\Updater6",WIN7Updater5) else (@echo The AdobeUpdaterPrefs.dat file was not found.)
:WIN7Updater5
@echo.
echo Checking for "%USERPROFILE%\AppData\Local\Adobe\Updater5\AdobeUpdaterPrefs.dat"
if exist "%USERPROFILE%\AppData\Local\Adobe\Updater5\AdobeUpdaterPrefs.dat" (call:REWRITE "%USERPROFILE%\AppData\Local\Adobe\Updater5",OUT) else (@echo The AdobeUpdaterPrefs.dat file was not found.)
:OUT
@pause
exit
:REWRITE
:: Configure Adobe Update to not check for updates
:: Move to the correct directory
cd %~1
:: Delete any temp file that this script may have created in the past
if exist AdobeUpdaterPrefs.dat.temp del AdobeUpdaterPrefs.dat.temp
:: Backup the old file
rename AdobeUpdaterPrefs.dat AdobeUpdaterPrefs.dat.temp
:: Write a new minimum settings file (the other data will be filled in when Auto Updater runs)
echo ^<?xml version="1.0" encoding="UTF-8" ?^> >> AdobeUpdaterPrefs.txt
echo ^<AdobeUpdater^> >> AdobeUpdaterPrefs.txt
echo ^<AutoCheck^>0^</AutoCheck^> >> AdobeUpdaterPrefs.txt
echo ^</AdobeUpdater^> >> AdobeUpdaterPrefs.txt
:: Rename the new file
rename AdobeUpdaterPrefs.txt AdobeUpdaterPrefs.dat
@echo The AdobeUpdaterPrefs.dat file was found and modified.
:: Go to the next location in the list
goto :%~2
goto :EOF

Additional benefits

Modifying the preferences file could have other benefits as well. Imagine the time and disk space that could saved by having all of those incremental Adobe updates saved to a network location, rather than downloading them to each workstation.

Distribute Adobe Flash Player

You may post Adobe Flash Player on company intranet sites or local networks.
The Adobe Flash Player is available for for distribution and use beyond single-user installations. This includes, for example, distributing to workstations within your department or organization, or on fixed media with your software product or multimedia experience.

Adobe Flash Player Settings Manager

The Settings Manager is a special control panel that runs on your local computer but is displayed within and accessed from the Adobe website. Adobe does not have access to the settings that you see in the Settings Manager or to personal information on your computer.

To change your settings, click the tabs to see different panels, then click the options in the Settings Manager panels that you see on the web page.

How to disable notification of Flash Player updates

Flash Player is notoriously insecure, so I’d recommend keeping it up-to-date.

Right-click on any Flash content, select Global Settings, and click the Global Notifications Settings panel link in the Flash Player Settings Manager.

Note: The Settings Manager is a Flash application that displays Flash Player settings which are stored on your computer only. Adobe does not store or track this information on its servers nor does it pass this information to third parties.

Deselect the “Notify me When an Update to Adobe Flash Player is available.” option to stop receiving notifications.

Close the Settings Manager browser window. Flash Player automatically remembers the new settings.

Error messages in Internet Explorer

“Internet Explorer has encountered a problem with an add-on and needs to close. The following add-on was running when this problem occurred: Flash10a.ocx”

I wanted to connect a non-wireless device (an Xbox 360) to a spare AirPort Extreme Base Station (AEBS) via ethernet cable, then join the Airport Extreme to an existing wireless network created by a non-Apple (D-Link) wireless router. After much searching, it appears that the ethernet ports on the AEBS will not function when the AWD is connected to a wireless network created by a non-Apple device, such as a D-Link wireless router.

But, I was able to find lots of useful links, which I’ve posted here for future reference.

To download and install any available firmwares on your AWD, simply open AirPort Utility. An alert indicates that an update is available (if one is). Click the Update button. If you are updating more than one base station, click Show Details to select the base stations you want to update.

Update 2013.1.3: I’ve received a DMCA takedown notice about this page, and so I’ve removed the links to the torrents, which were out-of-date anyway.

Update 2011.5.31: ISOs of updated versions of Windows 7 with SP1 have been made available to Microsoft TechNet and MSDN subscribers. I’ve posted a link to the torrent in my post about the Windows 7 with SP1 (media refresh).

This article explains how to obtain leaked, legitimate ISOs of Windows 7 (both x86 and x64 versions), and create a bootable USB drive that can install any edition (though only Home Premium through Ultimate are recommended). It wraps up with a neat trick to extend the 30-day pre-activation ‘evaluation period’ to 120 days. This article assumes that you intend to purchase your software eventually. It does not tell you how to obtain a product activation key or circumvent activation.

Step 1: Get the RTM Windows 7 release

Windows 7 RTM is build version 6.1.7600.16385. This version was released to Microsoft TechNet and MSDN subscribers in the summer of 2009 and quickly made its way onto BitTorrent.

As a general rule, don’t download just any torrent that you come across, and do use a hash calculator (like HashCalc) to verify that the hash of the file you’ve downloaded matches that posted by a trusted source. Download the file, calculate the hash, copy it, find a trustworthy web site (like microsoft.com) that displays the hash, and then do a Find in your browser on that page for the hash you’ve copied. If the hash you calculated matches the hash displayed on the web site, you can trust the file is legit.

Step 2: Prepare the USB drive

You’ll need a 4 GB flash drive to hold the installation files. Microsoft offers a neat little program that will extract the ISO to a USB drive and make it bootable. It can also burn the ISO to a DVD. Download the Windows 7 USB/DVD Download Tool.

If you’re currently using a 32-bit version of Windows XP or Vista and want to create a bootable USB drive containing the 64-bit (x64) version of Windows 7, you’ll need to obtain the bootsect.exe file from the 32-bit (x86) version of Windows 7.

If you want to get this file yourself, first download the 32-bit ISO. You can use any number of applications to open the ISO, but I recommend 7-Zip because it’s a great free alternative to WinZip. Open the ISO and then copy the /boot/bootsect.exe file into the same folder as the Windows7-USB-DVD-Download-Tool.exe (e.g. %USERNAME%\AppData\Local\Apps\Windows 7 USB DVD Download Tool).

Run the tool (%USERNAME%\AppData\Local\Apps\Windows 7 USB DVD Download Tool\Windows7-USB-DVD-Download-Tool.exe) and follow the prompts. After Windows 7 has been loaded on the USB drive, you will be able to boot from it and install Windows 7 Ultimate. (You may have to change the boot order in the BIOS to boot from USB Storage Device.)

Step 3: Configure the installer

What if you want to install an edition other than Ultimate?

Both the 32-bit and 64-bit ISOs contain all the different editions of Windows. The edition you actually install is determined by a tiny text file named ei.cfg in the /sources/ directory of the install media. If you want to install a different edition of Windows, you just need to browse the USB drive and open the /sources/ directory. Open the ei.cfg file in Notepad and change the EditionID to whatever edition you wish to install. The contents of the file will look like this:

[EditionID]
Ultimate
[Channel]
Retail
[VL]
0

The options for the EditionID are:

Starter

HomeBasic

HomePremium

Professional

Ultimate

In the alternative, if you delete ei.cfg, you’ll be asked to choose which edition of Windows to install during the installation process, which is probably much more useful.

I would strongly recommend installing the edition that you intend to purchase, as you cannot enter a Home Premium product activation key on a system running Ultimate. You’d have to do a clean install of the edition that matches the key you bought.

Step 4: Extend your pre-activation trial for 120 days

Microsoft allows anyone to install and use any version of Windows 7 for 30 days without having to enter a product activation key. This 30-day trial period can be extended three times for a total of 120 days before the installation must be activated to continue functioning. This extension is done using a Microsoft utility called the Software License Manager (slmgr) that ships with Windows.

If you haven’t entered a product activation key, you can click Start, then right-click Computer and choose Properties to see how many days are left before activation is required. When that number approaches 0, click Start | All Programs | Accessories. Right-click Command Prompt and choose Run As Administrator. Enter your administrator password, if asked.

Type the following command and press Enter:

slmgr -rearm

Be sure to include the space after slmgr and the hyphen in front of rearm.

Restart Windows 7.

In Summary

The last days of Windows 7 RC are approaching, and I’m probably going to end up buying Home Premium. Professional would be my first choice, but it’s probably not really necessary. However, after using Ultimate for so long, I want to know that I’ll be able to get by with a reduced feature set, so I definitely want to test-drive Professional and then Home Premium before I buy.

I thought it would be handy to have some direct downloads to the Citrix XenApp web client software for Windows, particularly as the Citrix people can’t settle on a name for their product and the web site changes every 15 minutes.

I completely hosed a few SanDisk Cruzer Micro USB 2.0 2 GB Flash Drives at work when I deleted the original contents of the drives, installed the CruzerPro software that had shipped with some older Cruzer Professional drives, and then used the CruzerPro application to password protect the drives. This process rendered the drives completely unusable and unable to be formatted.

The problems

Clicking the drive letter in Windows Explorer returns the following error message:

Opening the Disk Management component of the Computer Management console shows that the drive is connected, but there is no unallocated space to partition or format.

Other things about the disk look normal. It shows up in the Device Manager as working correctly, without any warnings, for example.

I Googled around and found that many, many people were running into this problem where the drive starts reporting 0 bytes capacity and can not be formatted. Of the dozens of pages that I read, no one found a fix for the problem. The most common solution offered was to return the drive to the manufacturer for replacement. Well, I wasn’t going to publicize my mistake and return the drives, I was going to repair them.

Software that didn’t help

Feel free to skip this part if you’re not interested in reading about the many dead-ends I explored.

I knew of one nifty program that had helped me out a few times before, so I tried running the HP USB Disk Storage Format Tool v2.1.8, but attempting to format the drive with this utility returned the following error message:

There is no media in the specified device.

Someone suggested using this thing called “Apacer Repair v2.9.1.1” to reformat the drive, so I tried that, but the software only reported “USB Flash Disk not found!” when I ran it.

Someone else recommended FreeCommander, but that failed to open the drive, too.

I tried the free trial of the utility from http://www.flashmemorytoolkit.com/, but it reported the same information as Windows XP – that the device contained a disk with 0 bytes capacity. Maybe the full version could have done more, but I put that on the back burner.

A number of people suggested attacking it with partitioning software, which I wasn’t looking forward to doing, but was willing to try.

Another last resort was going to be using the Windows XP Recovery Console’s fixboot and fixmbr commands, which got me out of a pinch when I screwed up a partition.

What I should have tried to begin with

Then I had an idea. I had a clean drive that had escaped my earlier bungling. I plugged it in, copied the contents to my desktop and tried to run the U3 LaunchPad software. Nothing happened, so I started looking more closely at the files. One of the files was called SanDiskFormatExtension.dll, which sounded promising. Now I just needed to figure out how to run the SanDisk installer to reformat the drive. I tried all of the .exe’s and .msi’s that shipped with the drive, but nothing wanted to run from the folder on my desktop.

Just as I was running out of options, I opened the autorun.inf file and found a very interesting entry:

The fix

So, with nothing to lose, I pasted http://u3.sandisk.com/download/lp_installer.asp?custom=1.6.1.2&brand=PelicanBFG into Internet Explorer, thinking that it would at least get me some new files that might allow me to reformat the drive. I followed a few prompts and lo, the U3 Launchpad Installer software launched and restored the drive to its factory settings of 2 GB capacity formatted as FAT. It even replaced the original U3 files, making it truly good-as-new.

I’m astonished that this information isn’t more widely available, particularly on the SanDisk support site and forums, as this 0 capacity problem seems to affect a good number of drives and there are many threads where this issue remains unresolved.

Of course, if you’re not using a SanDisk drive, it’s rather unlikely that this software will fix your drive, but maybe your device’s manufacturer has something similar. There are also a number of good ideas in the comments below, so definitely read through them for more options.

If you’re trying to restore the drive’s contents or recover files, the all of the methods described on this page will format (erase) the drive and are not for you. Good luck.