Registering DLLs on 64-bit Windows systems

Here’s a bit of nerd knowledge I’d like to post, both for helping others and as a reminder for me when I run into this again later.

Trying to use regsvr32 to load DLLs you’ve dropped into the \Windows\System32 folder, but keep getting an error? If the error is:

The module xx.xxx failed to load. Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. The specified module could not be found.

then try dropping the affected files into the SysWOW64 folder and registering them there instead. Apparently on x64 systems, the System32 folder is for 64-bit files only.

Why didn’t they call it System64 in that case?

Getting Flag Comments working in WordPress 2.8

Time for one of my occasional tech nerd posts.

It took me a couple of hours, but I managed to get comment flagging to work on the Homer Tribune website, using Flag Comments and WordPress 2.8.4. Following the instructions included in the Flag Comments documentation does not work. Starting with a post on the WordPress support forum (those instructions are incomplete as well), and then pulling bits and pieces out of the comments-template.php file, I managed to get it working.

flagging

First, install the Flag Comments plugin. Next, there are three files to modify in your theme: functions.php, comments.php, and style.css (or whatever your theme’s style sheet is named).

1. functions.php: add this batch of code after the end bracket (}) of the first function. The lines are longer than my post width, so download a text file of this code.

function mytheme_comment($comment, $args, $depth) {
      $GLOBALS['comment'] = $comment; ?>
      <li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
      <div id="comment-<?php comment_ID(); ?>">
      <div class="comment-author vcard">
      <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>
      <?php printf(__('<cite class="fn">%s <span class="says">says:</span>'), get_comment_author_link()) ?>
      </div>
      <?php if ($comment->comment_approved == '0') : ?>
      <?php _e('<p class="mod-mesg">Your comment is awaiting moderation.</p>') ?>
      <?php endif; ?>
      <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>"><?php printf(__('%1$s at %2$s'), get_comment_date(), get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),' ','') ?><br /><?php do_action("flag_comment_link"); ?></div>
<p class="comment-p">
      <?php comment_text() ?>
</p>
		<div class="reply">
		<?php comment_reply_link(array_merge( $args, array('add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
		</div>
		<?php if ( 'ul' == $args['style'] ) : ?>
		</div>
		<?php endif; ?>
		<?php
}

2. comments.php: replace the line <?php wp_list_comments(); ?> with
<?php wp_list_comments(‘type=comment&callback=mytheme_comment’); ?>

3. style.css: this is how I modified my css, but you’re welcome to make it look like however you want. I’ll describe each style below.

li div.comment-meta div.flag-comment a {
	color:#BF0112;
	}

.mod-mesg {
	color:#BF0112;
	}
	
.comment-p {
	padding-top:6px;
	}
  • li div.comment-meta div.flag-comment a: this controls the color (or more) of the Flag text. My particular theme has an overarching style for links, so that’s why I had to dig down and grab the exact div to override.
  • .mod-mesg: this controls the color (or more) of the “Your comment is awaiting moderation” message that’s displayed after a message hits the flagging threshold you’ve set in the admin panel.
  • .comment-p: this allows me to push the comment text a little further down, so longer comments don’t overlap with the added flagging line.

Getting an HP Color LaserJet CP1215 working on a Mac

Introduction
Installation
Color Management
Uninstall

Updates
11/30/2010: As of now, I no longer have the CP1215 and cannot do any further testing or troubleshooting beyond what is on this post and in the comments. The process works for most people, and should continue to do so into the future, at least for Tiger, Leopard and Snow Leopard. I can’t make any promises about Lion next year.

07/19/2010: On the advice of a commenter, added an additional keystroke to the $PATH section for Mac OS 10.4.x that solves the mystery of why some were getting “Ghostscript not installed” errors even after following the instructions.

12/31/2009: Added a section on uninstalling the drivers.

11/23/2009: Added a section detailing how to get around some errors people have been encountering during the process.

09/27/2009: After numerous reports of no printing, I tracked the problem to the new version of the drivers. Updated link to old version until compatibility can be worked out. Added boldface to the code bits to help differentiate them better, and added a donation button for fun and profit.

09/21/2009: Changed some information about downloading XCode, depending on your OS version.

09/07/2009: I received Snow Leopard, and the printer works fine after upgrading. Once I finish downloading XCode for Snow Leopard, I’ll redo the installation process and see if anything has changed.

02/11/2009: A new version of one of the software installs used here causes some printing problems, so I’ve updated to link to the last working version. I’ve also enabled comment RSS, so you can subscribe if you have a question instead of having to check back here to see if I’ve answered.

02/01/2009: I’ve added another section on getting better color management from the printer. This is by far the most popular post I’ve ever made, garnering several thousand hits in the past month, so HP really messed up with this one!
End updates

Introduction
When I moved to Alaska, I bought a bunch of technology equipment for my little home office: an iMac, an Epson scanner, and a little HP Color Laserjet CP1215. I eagerly unpacked it all and set it up after FedEx and UPS delivered everything to my door. I was particularly excited to have my own color laser printer, especially having found a great deal on it from HP. Imagine my dismay when, upon trying to add it to Mac OS X, I could not find any sort of driver for it on my computer. The printer install CD was only for Windows computers. HP’s website only listed Windows driver downloads.

Having spent the last 10+ years of my life working almost exclusively with HP LaserJets and Macs, I was surprised to find that this particular printer was not and would not ever be compatible with a Mac, according to HP. I apparently overlooked that little tidbit of information in the 3 days I spent researching it vs. the other cheap inexpensive color printers out there, assuming HP would have to be crazy to release a laser printer without Mac compatibility.

Much cursing ensued.

Since then, I’ve been saving everything I want to print as a PDF, opening Windows XP in a Parallels VM, and printing from there. It’s a hassle, and today I reached a breaking point. I created a nifty little business flyer in Pages (I’ll post it later), and the resulting PDF looked totally different than my original design! I needed to print directly from Pages, so I decided to see what Google would bring me. The news was good, if complicated. I’ll post my steps here, with links, for the betterment of humanity.

How to do it:
Note: I’ve only tested this on OS X 10.5 and 10.6 (Leopard and Snow Leopard), so I can’t guarantee this will work if you are on a different version of OS X.

You’ll be installing some Unix-based software, so say hello to the command line!

  1. Install Apple’s Developer Tools, if you haven’t already. It’s a free download (about 1GB!), but you’ll have to create an account on the Apple Developer site to get to it. Once you have your account and are logged in, go to Downloads, then Developer Tools, then click on whatever version of XCode Developer Tools (disk image) they list for your OS. For Snow Leopard (10.6.x), 3.2 is the latest; Leopard (10.5.x), 3.1.4 is the latest; and for Tiger (10.4.x), 2.5 is what you want. If you already have an ADC account and are running Snow Leopard, you can go straight to the XCode download site.

    After it downloads, it will open up and you’ll have to double-click the XCode Tools package installer to start the process. No restart is required.

  2. Download GhostScript, just click on the latest version I’ve updated this to link to a specific working version, 8.63. The 8.64 version disables color printing for some reason. I’ll file a bug report and update this when it’s fixed. It’s okay to use the linked version.
  3. Download foomatic-filters.
  4. Download foo2hp. The download link is a little ways down the page, and the downloaded file is actually called foo2zjs. I’ve updated the link to point to the last working version of the drivers, until I can work out some issues with the latest version.
  5. Compile the software you just downloaded. To do so, open Terminal in your /Applications/Utilities folder
  6. Navigate to wherever your downloads are stored. In 10.4 it’s usually on the Desktop (unless you’ve changed it), and in 10.5 it’s usually in the Downloads folder. Just type:
    cd Desktop or cd Downloads and hit Enter.
  7. The bits of software you downloaded should have automatically unarchived, so you should be able to go directly into their folders:
    cd ghostscript (after typing a few characters of the folder name, you can hit the Tab key and it will fill in the rest of the folder name)
    • If your computer didn’t automatically unarchive the downloads, type tar -zxf nameofdownloadedfile.tar.gz to unarchive them (replace nameofdownloadedfile.tar.gz with the names of the actual files you downloaded).
  8. Next, type: ./configure and hit enter. A lot of text will scroll by. It will eventually stop and hopefully there won’t be any errors.
  9. When you can type again, type in make and hit enter. More text, hopefully no errors.
  10. Finally, type sudo make install and hit enter. It will ask for your password. Enter it. If you don’t have a password set on your account, and you’re running Mac OS X 10.5, you’ll need to set a password in System Preferences: Accounts before this will work.
  11. Now we have to do almost the same for the next piece of the puzzle, the foomatic-filters. Type cd .. to go back one folder, then cd foomatic-filters-3.0.2 into the foomatic-filters folder.
    • Note: if you have trouble getting Terminal to get the full folder name after hitting Tab, that’s due to having two items that start with similar letters (eg. the downloaded file “foomatic-filters-3.0-current.tar” and the unarchived folder “foomatic-filters-3.0.2”).

      There are many ways to solve this. You can delete the downloaded tar.gz files after you’re sure the folders have been unarchived, you can type out more of the folder name until it is differentiated from the tar.gz file, or as Roger notes in the comments, you can type cd in the Terminal, then drag the folder icon to the Terminal window and it will fill in the correct path.

  12. Repeat the “./configure,” “make,” and “sudo make install” steps from before, hopefully receiving no errors!
  13. Now, navigate into the foo2zjs folder (cd .. then cd foo2zjs)
  14. This time, you start by typing make.
    • Note: Some people have reported receiving an error about ghostscript not being installed during this step. If this happens to you, please skip down to the Adding To Your $PATH section, then return here when you’ve completed those steps.
  15. Next, you’ll need to download the actual drivers for your printer. Since I have a 1215, I typed ./getweb 1215 and it downloaded the drivers.
  16. sudo make install one last time, and you’re almost ready to go.
  17. Restart your printer software with sudo make cups. An alternative to this is to just restart your computer.
  18. Open up your Printer Utility (10.4) or Print and Fax PreferencePane (10.5), and add the printer. OS X will see the 1215 attached via USB, and after searching for drivers, will find the foo2hp for 1215 driver!

Color Management

Now, to get better colors on your prints, you’ll have to change around the color profile for the printer. To do this, print something and in the print dialog box that opens, select “Printer Features” from the third drop-down menu (you may need to click the blue arrow button beside the printer drop-down menu). Here’s what it will look like (click to enlarge):
Printer Dialog 1

This is where you can set whether to print in color or black and white, what sort of paper to use, etc. Click on the menu named “Feature Sets,” and select “Adjustments.” This is where you can change how the printer decides how to print colors. These .icm files all contain color management instructions for the printer, and most of them don’t work very well. It was pointed out in the comments that the ones that aren’t specifically labeled for the CP1215 actually work the best, which makes this even more awesome.

I found that the .icm file named “HP 1600/2600 – hpclj2600n-0.icm” gave me smoother gradients in the test photo, but the file named “HP 1600/2600 – ICCFactory1 (default) gave me more vivid colors. If only we could combine their powers and make a super .icm file! Anyway, select the one you want to use.
Printer Dialog 2

After you’ve set everything the way you want, you can save it as a preset, so you don’t have to go through and set it all again the next time you print. Just click on the second drop-down menu that probably says “Standard,” and Save As…
Printer Dialog 3

You can make a preset for each type of paper, color option, etc. so life will be even easier after all this hard work.
Printer Dialog 4

Finally, if you’re keen to get a custom color profile made specifically for your printer (even printers of the same production model will have slight variations in printing), you can buy a custom profile from this ebay vendor: fotojimbo’s Custom ICC Profiles.

In my short bit of testing, I have found a couple of caveats:

  • To print in color, you’ll need to set it to color in the print dialog box, under “Printer Features” in the drop-down menu.
  • In “Printer Features,” setting the Bits Per Plane to “2” will waste a lot of toner
  • Setting the paper type to HP Photo Paper and using HP Photo Paper is a disaster. All three of my test prints didn’t turn out: some of the toner didn’t get correctly applied, and spilled everywhere. I’ll still have to use Windows to print photos.
  • Color matching isn’t the greatest, I’ve had some trouble getting dark blues to turn out dark. But, it’s better than not being able to print from OS X at all.
  • See, Macs are simple!

    If you found this helpful, please consider encouraging me with a donation or even better, buy a photograph (everybody wins!).






    Adding To Your $PATH

    This section is specifically for people experiencing an error saying ghostscript isn’t installed during Step 14. Ghostscript is actually installed, but Terminal is dumb and can’t see where it is. Let’s correct that!

    • Mac OS X 10.5/10.6
      1. In the Terminal, type cd /etc/paths.d
      2. Type sudo pico local and enter your password.
      3. You’ll be given a mostly empty window where you can type. This is the pico text editor, one of the simplest command line text editors. Type /usr/local/bin and do not hit Enter or any other extra keys.
      4. Press and hold the Control key on the keyboard. While holding the Control key, press the ‘X’ key and then let go of both keys. Pico will ask you something like “Save modified buffer?” That’s nerd-speak for “Do you want to save your file?” Press the ‘Y’ key to save.
      5. Restart your computer
      6. Return to Step 14 and try again. Be sure you navigate back into the foo2zjs folder with the Terminal first!
    • Mac OS X 10.4
      1. In the Terminal, type cd (this puts the command line back in your home directory)
      2. Type pico .profile
      3. More than likely, you’ll be given a mostly blank window. If not, hit the Enter key once to make some space, then the Up arrow key to put the cursor in the space you just made.
      4. Type export PATH=/usr/local/bin:$PATH and do not hit Enter or any other extra keys.
      5. Press and hold the Control key on the keyboard. While holding the Control key, press the ‘X’ key and then let go of both keys. Pico will ask you something like “Save modified buffer?” That’s nerd-speak for “Do you want to save your file?” Press the ‘Y’ key and then the ‘Enter’ key to save.
      6. Restart your computer
      7. Return to Step 14 and try again. Be sure you navigate back into the foo2zjs folder with the Terminal first!

    Uninstalling

    If you need to delete the drivers, please copy and paste the following command in the Terminal:

    sudo rm -r /usr/local/bin/gs /usr/local/bin/foo* /usr/local/etc/foomatic /usr/local/share/ghostscript /usr/local/man/man1/foomatic* /usr/bin/foo2* /usr/share/foo2* /usr/libexec/cups/filter/foomatic*

AFP Delete .DS_Store storm

Here’s one for the sysadmins out there, in order to get this more exposure for easier searching:

If you’re using Mac OS X Server 10.4 and seeing a bunch of Delete .DS_Store -5000 0 0 errors show up in your AFP access logs, it probably means the .DS_Store file on the root level of your share is locked down to only owner privileges. Open it up (rw-rw–w-) and the errors will go away.

Here’s where I found the fix, hopefully they’ll keep the archived post for awhile: .DS_Store saturating the file server.