Bulk Convert .doc to .rtf in Apple’s macOS or OS X Finder

At work I am archiving a large, very old collection of Microsoft Word documents. Some of the files are actually even older WordPerfect files that I converted to .doc files several years ago.

Yes, .doc is practically a standard, but I have come across several situations where these files get corrupted as they get moved from storage drive to server to other server. I find .rtf files to be much more resilient while also being an actual standard (or at least an open format that anything can read and write).

Reasons aside, I wanted a bulk script or tool for converting lots of .doc files to .rtf files. I couldn’t find what I was looking for* so I created my own solution: a macOS/OS X Services workflow that gives the Finder the power to convert any selected .doc files into .rtf files.

It looks like this in Automator:

Screen Shot 2016-06-27 at 7.21.44 PM

Here’s how to install this Convert .doc to .rtf workflow:

  1. In the Finder navigate to /Users/yourname/Library/Services/
    [if “Services” doesn’t exist, create a new folder and name it likewise]
  2. Download the Convert-DOC-to-RTF.zip, extract the contents onto your desktop (double-click in OSX)  and copy the file “Convert .doc to .rtf.workflow” to the previously mentioned “Services” folder.
  3. Open a Finder window with multiple files. Select all of the files. Right-click on the selected files. At the bottom of the contextual menu you will find an option titled “Convert .doc to .rtf”. (It may take a minute or two for this new option to become available on your contextual menu.)

This Looks Familiar

This solution and Services workflow is very similar to my Bulk File Rename workflow, which is now redundant because Apple finally used their previously unused features to provide a built-in bulk file rename functionality in Finder on versions of macOS/OS X 10.10 or newer.

*Though I didn’t find the complete solution to my needs, I did find the pieces of what I was looking for.

Mac Issues has a post about the OS X Terminal and the amazing commandline utility textutil that makes all of the above possible. How Apple manages to create amazing and powerful scripts and Automator features without using them to make macOS/OS X more amazing and powerful out of the box is baffling.

For Mac Eyes Only has a post about writing an Automator script to convert .docx files to .doc files. This gave me the missing “$@” variable that I needed to make my slightly different workflow actually work.

Export an Address Spreadsheet to Avery Labels with LibreOffice

This is meant to be a straightforward and clear description of the process of exporting a spreadsheet of contacts out to the proper format for pre-cut address label sheets using LibreOffice. Sometimes this process is called “mail merge”.

1. Create a Spreadsheet of Addresses

You may already have your spreadsheet ready to go, but I am trying to avoid making assumptions about whoever is reading this. You gotta have your information saved in a spreadsheet.

Generally, for mailing addresses in the USA, this involves using the first row of the spreadsheet to identify the column headers such as:

  • First Name
  • Last Name
  • Address 1
  • Address 2
  • City
  • State
  • Zipcode

You can even have additional columns for data that you might not be using on the labels – such as email addresses and phone numbers. You will be able to specify which fields of data will be included on the labels later in the process.

Save this spreadsheet in a location that is easy to find.

2. Tell LibreOffice That Your Spreadsheet is a Data Source

  1. With LibreOffice open, go to FILE > NEW > TEXT DOCUMENT
  2. With the new Text Document active, go to EDIT > EXCHANGE DATABASE…
  3. From the resulting “Exchange Databases” dialog window, click the BROWSE… button.
  4. Navigate to the spreadsheet of addresses that you just saved and click OPEN.
  5. Click CLOSE.

3. Create a Label Template

  1. With LibreOffice open, go to FILE > NEW > LABELS
    The resulting dialog window has 3 tabs/sections: Labels, Format, Options
  2. Under LABELS, set DATABASE to your  spreadsheet file.
  3. Under LABELS, set TABLE to your spreadsheet file or the specific table in your file.
  4. Under LABELS, set DATABASE FIELD to FIRST NAME and click the LEFT-POINTING ARROW BUTTON to place that field into the label template.
  5. Repeat STEP 4 with all desired DATABASE FIELDS.
  6. Under LABELS, set FORMAT to SHEET.
  7. Under LABELS, set BRAND to the brand of your pre-cut paper label stock.
  8. Under LABELS, set TYPE to the label type of your pre-cut paper label stock.
  9. Under FORMAT, do nothing.
  12. Click NEW DOCUMENT.

4. Customize Text Characteristics and Formatting of Label Template

  1. If you would like to change the typeface, font size or rearrange any of the data variables in your new label template, MAKE THE CHANGES TO THE TOP-LEFT LABEL ONLY.
  2. When you are done making changes, click the SYNCHRONIZE LABELS button in the SYNCHRONIZE palette-window. You should see all of the labels on the template update to match your changes.

5. Print Labels or Save Labels to New Document

  1. With the new Label Template Document open, go to FILE > PRINT.
  2. The resulting dialog window will ask “Your document contains address database fields. Do you want to print a form letter?” Click YES.

In the resulting MAIL MERGE dialog window:

  1. Under RECORDS select ALL.
  2. Under OUTPUT select PRINTER or FILE – I recommend FILE so that you can review the output and go back, make adjustments and repeat the previous steps without wasting paper.
  3. Click OK. Name and save the document in the usual way.

6. Congratulations, You Did It

Most likely you will have to repeat the process a few times to get everything just right. However, this should get you through the basic process. Let me know if anything needs to be more clearly described or explained.

Sublime Text 2: Find and Replace with Regular Expressions for Idiots


Hello there! I am an HTML and CSS expert that also hacks on server-side (PHP) and client-side (JavaScript) scripting languages. I am surprisingly productive at working with these elements even though I do not have a degree in Computer Science.

I like to use Sublime Text 2 – or whatever version – to work on my code. I want to work faster and Sublime Text’s multiple-cursor/multiple-file editing and fancy search tools are like training wheels for a person that never attempted to learn how to use Vi or Emacs.

With all of that out of the way, I’d like to say that REGULAR EXPRESSIONS ARE AWESOME. However, everyone online that tries to explain how to use them seems to think that they are talking to people that already know how to use them. It’s baffling and frustrating when you don’t have the foundation in text editing skills that everyone online assumes is common knowledge. And it’s not like you have to be a wizard to use regular expressions. If you can understand a few basic mechanisms, the rest is just vocabulary.

Find and Replace Basics

Find and Replace is a simple mechanism available in any serious text editor and also word processors and design layout applications.

Find and Replace at its most basic has two fields:

  1. FIND – A set and arrangement of text characters that you are specifically looking for within a defined range of text or a document.
  2. REPLACE – A set and arrangement of text characters with which you want to overwrite the contents of the FIND field.

In Sublime Text 2 there are four buttons associated with the Find and Replace panel:

  1. FIND – Visually highlight the first instance of text that matches the contents of the FIND field.
  2. FIND ALL – Visually highlight all instances of text that match the contents of the FIND field.
  3. REPLACE – Overwrite the first instance of text that matches the contents of the FIND field with the contents of the REPLACE field.
  4. REPLACE ALL – Overwrite all instances of text that match the contents of the FIND field with the contents of the REPLACE field.

In general, I only use REPLACE ALL since Sublime Text 2 pretty much does the FIND ALL functionality automatically as you type into the FIND field.

To bring up the Find and Replace panel, press CMD + Option + F or go the the menu > Find > Replace.

I’m not going to give an example of simple text find and replace. If you understand how CSS styles apply to specific HTML elements by way of element or class names and varying levels of inheritance, you most likely grok how basic find and replace works.

Employing Regular Expressions Within Find and Replace

What I am primarily interested in is leveraging Regular Expressions within the Find and Replace mechanism to achieve magical, time-saving actions.

Regular Expressions make it possible to automate what would otherwise be grueling manual-insertion tasks. For example, you need to convert tabulated data from a text file into tabulated data in an HTML table. Usually the only thing separating the values are varying numbers of spaces. Like this:

    1   478 John Doe              48 M      6:20 
    2   472 Eddie Murphy           17 M        6:29 
    3   440 Indiana Jones      49 M       6:46

Basic Find and Replace would work fine in this scenario if a single, unique character were used to separate the different values – like the comma in a comma-delimited/comma-separated file. But when all you have is varying numbers of spaces, a more sophisticated tool like Regular Expressions is needed.

Actually, we could insert the table row and initial table data tags by leveraging the invisible line-break character in the data above. To get the necessary invisible characters use click-and-drag to select the line-break at the end of one line like this:

Screen Shot 2014-08-10 at 4.04.41 PM

and Copy/Paste that into the FIND field. Then, in the REPLACE field type:


and click REPLACE ALL to get the following:

But after that, we’re looking at a lot of manual select-and-paste work.

Let’s first use Regular Expressions to isolate the first and last name values. They are unique in this file in that the are two words separated by only one single space.

Screen Shot 2014-08-10 at 5.04.17 PMBefore we start employing Regular Expressions in the Find and Replace panel, we need to enable Regular Expressions by clicking a button by that name, which is the left-most top button in the Find and Replace panel:


With the Regular Expressions mode activated, this is what I put in the FIND field to isolate that space in that particular location:

([a-z]) ([A-Z])

Which should make Sublime Text 2 look like this:

Screen Shot 2014-08-10 at 4.19.31 PM

So, that works in this instance! But why and how? Let’s break it down:

  • [ ]   Whatever expression is inside these brackets will match ONE character.
  • [a-z]   This expression means “ONE character that is any lowercase letter, a through z.”
  • [A-Z]   This expression means “ONE character that is any uppercase letter, A through Z.”
  • The “space” in between these two expressions is a literal “space” character.
  • ( )   Parenthesis surrounding an expression make a “group”. Groups can be referred to by variables. In this case we defined two groups. Without any effort on your part, these groups are numbered, starting with variable “1” on the left-most group and counting upward to the right. This will come in handy when we fill in the REPLACE field.

In summary: The FIND field includes regular expressions that identify any single lowercase letter followed by a space and then any single uppercase letter.

Now, in the REPLACE field I will type the following:


and after clicking REPLACE ALL will result in the following text:

Screen Shot 2014-08-10 at 4.39.15 PM

That also worked! But why and how? Let’s break it down:

  • \  is the “backslash” character, which “escapes” the character that follows it. I don’t completely understand this usage, but in the case of Sublime Text 2’s REPLACE field this means “leave whatever text that matched our regular expression in the group (identified by it’s variable number) where it was, do not replace”.
  • In this example, we are telling Sublime Text 2 to leave the single lowercase letter associated with the variable “1” where it is, followed by the literal text  “</td><td>” and then leave the single uppercase letter associated with the variable “2” where it is.

The next target is between the Last Name data and the number to the right of it. I will put the following text into the FIND field:

([a-z]) *([0-9])

This actually ends up working better than I had anticipated. It selects the desired text as well as another series of spaces between data points:

Screen Shot 2014-08-10 at 5.12.44 PM

Since the first character is clearly supposed to be “lowercase only,” why is this second space between data points matching our search? Let’s break it down!

  • [a-z]   This expression means “ONE character that is any lowercase letter, a through z.”
  • Turns out I had the  “Case sensitive” feature (right next to the Regular Expressions button) disabled and as a result ignoring the case-sensitive aspects of my regular expressions! 🙂 Happy accident. Just something to be aware of if you are ever seeing confusing results.
  •  *   A literal “space” followed by an asterisk. The asterisk directly following another character means “match 0 or more of the preceding character” so this is quite useful for selecting spaces between data points that are made up of varying numbers of spaces.
  • ([0-9])   This expression means “ONE character that is any integer 0 through 9 (zero through nine).”

Since this lack of case-sensitivity actually worked for me, I went ahead with the same text in the REPLACE field as before and produced this result:

Screen Shot 2014-08-10 at 5.20.07 PM

With those two examples I feel I’ve covered some very useful basics of Regular Expressions within the context of Sublime Text 2’s Find and Replace panel.

A good resource for learning more about regular expressions: http://www.zytrax.com/tech/web/regex.htm#simple


Discovering Clay Shirky via Mr. Alan Cooper Quoting Him On the Perils of Categorizing Things In Advance

I keep wanting to refer back to this truly insightful tweet from Alan Cooper. Twitter is not a great place to keep things that will be useful for a long time. It can be grueling work to find a specific old tweet. As a result, here is the content of his tweet about the challenges of categorizing things in advance for documentation purposes:

“categorizing things in advance forces the categorizer to take on 2 jobs that are quite hard: mind reading, and fortune telling.”

and here is a screenshot of the tweet as well:

Screen Shot 2014-03-30 at 10.34.43 AM

 Thank you Mr. Alan Cooper for this wonderful little statement. As a result of wanting to frequently bring this quote to people’s attention I wanted to post this on my site. And after assembling the above it occurred to me that HE had put this in quotes himself. I didn’t notice that before! This was apparently not an original thought of his own but something somebody else said that he was sharing.

Naturally, the next thing to do was to sick Google on the quote and see what popped up.

Maybe I’m not smart enough to be following Alan Cooper on Twitter since I totally missed that the above tweet was quoting Mr. Clay Shirky from some talks that he gave in 2005 collectively titled, “Ontology is Overrated: Categories, Links, and Tags”. I am guessing these “talks” are well known in certain circles.

I wanted to share this little revelation about discovering the work of Clay Shirky. This is how I have learned throughout my whole life. This is how I know what I know. Looks like I have some reading to do!

Follow these guys on Twitter: @MrAlanCooper and @CShirky

Make Firefox Look At Home On a Gnome 3 Desktop

Firefox-theme-AdwaitaIf you are using the Adwaita theme in your Gnome 3 desktop environment – either I have grown to like it or it has been tweaked into something I like lately – the “Gnome 3” Firefox add-on will make Firefox look at home on your Gnome 3 system.

The default icons in Firefox on Ubuntu Gnome are kind of weird: light gray arrows with subtle outline or dropshadow. And these light gray icons are sitting on a bunch of light gray chrome. They are visible, but they are not ideal.

The following Add-on/Theme gives Firefox an appearance consistent with the Adwaita theme, including nice dark-silhouette icons.


WordPress Multisite and Domain Mapping on 1and1.com Shared Hosting

These are just some notes about how I got WordPress Multisite and Domain Mapping running on a 1and1.com shared hosting account.

WordPress Multisite Setup

  1. Follow instructions on this page: WordPress Codex – Create a Network
  2. If you are planning to map independent domains to the various sites on your network, I recommend using the sub-directories for addresses of network sites. As far as I know, wildcard DNS isn’t an option on 1and1.com shared hosting packages.
  3. Ignore the bit about the WordPress files needing to be installed in the root directory/folder of your hosting file-space. It merely needs to be in the root folder of whatever directory/folder your primary network domain name is assigned to.

WordPress MU Domain Mapping – Installation

  1. Install the WordPress MU Domain Mapping plugin in the usual way.
  2. Once the plugin is installed, some manual configuration is necessary. Follow instructions here: wordpress-mu-domain-mapping/installation/

WordPress MU Domain Mapping – Map Domain Name to Network Site

  1. Create new network-child site (examplenetwork.com/newsite)
  2. Log in to 1and1.com admin > Domains
  3. Click the checkbox of domain name (mynewsite.com) > Destination > Edit Destination
  4. Set “Destination” to “Home Directory”
  5. Set “Home Directory” to the root folder of the network site “/examplenetwork/”
  6. Click OK
  7. Return to examplenetwork.com/wp-admin
  8. Go to the top navigation “My Sites” > “Network Admin” > “Dashboard”
  9. Go to “Settings” > “Domain Mapping”
  10. Set “Server CNAME domain” to “examplenetwork.com”
  11. Under “Domain Options” check
    • Remote Login
    • Permanent Redirect
    • User Domain Mapping Page
    • Redirect administration pages to site’s original domain
  12. Click SAVE
  13. Go to “Sites” > “All Sites”
  14. Hover on “/newsite/” and click “Dashboard”
  15. Go to “Tools” > “Domain Mapping”
  16. Under “Add New Domain” enter “mynewsite.com”
  17. Check “Primary domain for this blog”
  18. Click ADD


Gnome 3 Shell and Gratuitous Jupiter Notifications

I’ve been mostly enjoying running Ubuntu 12.10 with Gnome 3 Shell on my ThinkPad T530. The essential Gnome Shell Extensions were available pretty quick after 12.10’s release and Gnome 3 continues to get better and more polished. I even think the new Nautilus is pretty great. Much faster than the old Nautilus even though it’s missing some awesome features that had been recently introduced to the old version.

However, I like to install the Jupiter Applet to (I believe) improve my laptop’s battery life. And that applet has been flooding my Gnome Shell notifications panel with little lightning bolt notification icons. A new one is added every suspend/resume-from-suspend cycle. How to fix this? Is it possible to tell Jupiter to tell me less?

Ask Ubuntu To the Rescue

Today I found a fix for this problem. I’m making a post here in case an update erases my changes and I have to do it again. But this specific answer to the question “How do I clear all Gnome Shell notifications?” by user jtaillon does exactly what I wanted: Tells Jupiter to take it easy on the notifications.

The special text that needs to be added is this:

--hint int:transient:1

Here’s how to open the right file with sudo: Open a terminal and copy/paste the following and hit ENTER.

sudo gedit /usr/lib/jupiter/scripts/notify

Before proceeding, select all, copy and paste this file’s contents into a backup text file somewhere. Just in case you make a mistake.

Now compare the following example to your own file and add “–hint int:transient:1” as needed – should be 3 places where that is needed. You should be able to leave alone any other variations between my example and your file.

function notify {
  if [ ! "$NO_NOTIFY" = "1" ]; then
    if [ "$DISTRIB_RELEASE" = "9.10" ]; then
      DISPLAY=:0.0 notify-send --hint int:transient:1 -i $ICON -t 1500 "$MESSAGE" 2>/dev/null
      USER=$(who | sed -n '/ (:0[\.0]*)$\| :0 /{s/ .*//p;q}')
      USERCNT=$(who | wc -l)
      if [ ! "$(whoami)" = "$USER" ]; then
        if [ ! "$USERCNT" -lt 1 ]; then
          su $USER -l -c "DISPLAY=:0.0 notify-send --hint int:transient:1 -i $ICON -t 700 \"$MESSAGE\" 2>/dev/null"
        if [ ! "$USERCNT" -lt 1 ]; then
          notify-send --hint int:transient:1 -i $ICON -t 700 "$MESSAGE" 2>/dev/null

Save and close the file once you’ve made the changes.

In my experience you should see the result of the change immediately without restarting your system. Now at most I see one single notification from Jupiter at a time and it disappears a few minutes after I resume-from-suspend.

I hope you find this helpful.

Ubuntu Linux with Gnome Shell on Lenovo ThinkPad T530

I recently purchased a Lenovo ThinkPad T530 with the following specs:

  • 15.6″ FHD screen with 1920 x 1080 pixel dimensions (13.5 x 7.75″ physical dimensions)
  • Intel Core i5-3210M CPU @ 2.50GHz
  • Intel HD 4000 Graphics
  • 4 GB RAM (Max is 16 GB!) PC3-12800 DDR3
  • 120 GB SSD
  • Intel Centrino WL-N 2200 (dual-band wifi)
  • 9 cell battery (with WIFI on and dim screen I get about 8+ hours!)
  • Minutiae: backlit keyboard, bluetooth, HD webcam, 90W AC adapter, DVD-R optical drive, 320 GB 7200 HD with Windows 7 installed, I ordered a mini-displayport to HDMI adapter for $5 from Amazon

Though the machine feels pretty light for its size, it is a predictably durable-feeling machine. Very sturdy and the matte black finish is really great. The thing looks awesome once you get all of the stickers off of the palm rest. With the lid closed, the rigid body is comfortable to carry around. A considerable improvement over the squishy Lenovo Essential B570 that it replaced.

As many online reviews have stated, the battery doesn’t seem to latch into the main body in a very satisfying way. When holding the laptop you will notice a bit of play between the battery and laptop body. Not a show stopper by any means. The display hinges are very firm. The screen latches work well but don’t hold the screen as tight as I’d like. Also not a show stopper. Just picking nits.

The new island-style keyboard is just as good or better than the previous ThinkPad keyboard (I had a T42 once upon a time). It looks similar to the keyboard on the Lenovo IdeaPad and Essential laptops, but it feels much more firm and durable – a delightful surprise. I was perfectly happy with the feel of the B570 keyboard, but this ThinkPad keyboard is really awesome. One thing that will take some getting used to is the placement of the FUNCTION and CONTROL keys on the bottom-left of the keyboard. You can flip-flop which is which from the T530 BIOS and I did that which is great. Unfortunately they didn’t make the two keys the exact same size so that you could physically switch the keys to match the BIOS setting. But that’s a pretty nerdy problem to have (#nerdworldproblems).

Since I don’t use Windows, I removed the original HD and put it in a box where it will stay until the day I need to resell the T530. That way a fresh install of Windows 7 will be ready for the new owner, since nobody seems to include actual Windows install discs with these machines anymore. Turns out Lenovo is migrating to the newer 6mm HD form factor. There’s plenty of room for a 9mm drive but my 9mm SSD didn’t fit the rubber sleds that came with the machine. I ordered a 9mm sled from Amazon and installed the SSD without the sleds until that arrived.

Everything works with Ubuntu Linux 12.04. Special buttons for audio volume, screen brightness, play/pause/next/prev, the physical WIFI switch, the touchpad, the trackpoint, all of it. I highly recommend the Intel Centrino WL-N 2200 wifi upgrade. The dual-channel/radio feature (?) is a massive improvement for working over WIFI as opposed to just browsing the web. File transfers across my local network are nice and snappy. Plus there are Linux drivers for it, so no need for “restricted drivers”. It just works.

Contrary to some of the reviews, the speakers are nice though don’t have a lot of bass – is that really surprising though? Sometimes these laptop reviewers… I just don’t know what audience they are talking to. They don’t seem to be focused on what is important to me very often. The number of reviewers that think the Thinkpad hardware design is outdated and ugly are in the majority. They apparently like shiny hardware enough that they can overlook the idiocy of putting a too-small right-SHIFT key next to the UP key.

Linux on the T530 with 15″ FHD Screen

My existing Ubuntu Linux 12.04 system on the SSD had no trouble booting up on the T530. Everything was perfect if you didn’t mind really, really small text and interface elements. Also, the colors are all pretty saturated on this screen. It needs to be calibrated and if you are a graphic designer your tools need to support color management. Luckily, Gnome/Linux, Gimp, Inkscape, Scribus and Firefox all have some pretty good color management features. They are not always completely finished features, but serious work can be done if you know what you are trying to do. If thinking about color management makes your head spin, buy a Mac running OSX and buy Adobe’s Creative Suite.

This screen has an effective screen resolution of 142 PPI. Compare this to the ~210 PPI on the Retina MacBook Pro. And then compare it to the ~100 PPI of most 13/14/15″ laptop displays with 1366 pixels across. In a nut: if you can get your operating system to increase UI text and graphic sizes to the physical size you are used to working with on a 15″ screen you will have the luxury of a very sharp, high-resolution experience. I’ve been able to do just that for the most part, though it is a work in progress. The rest of this post will be a notebook of adjustments and tweaks that I’ve used to make the high resolution experience consistent throughout my Linux system on the T530.

Notes on T530 Linux Configuration

Gnome Text Scaling

Adjust Gnome 3 text scaling to get the Gnome interface to use more appropriately sized text. You will need to install the Gnome Tweak application for this.

Advanced Settings/Gnome Tweak (gnometweak) > Fonts (see screenshot for my settings)

Web Browsers: Default Zoom Value

Adjust web browsers to zoom websites to a default value.

  • Firefox: enter about:config in address bar, search for layout.css.devPixelsPerPx and set the value to your preference. I used 1.5.
  • Chrome/Chromium: Settings > Under the Hood > Web Content > Page zoom: > 150%
  • Opera: Settings > Preferences > Webpages > Page zoom > 150
  • Gnome Web Browser: Not a setting that is available as of version 3.4.1

This also works for Thunderbird! Preferences > Advanced > Config Editor … > search for layout.css.devPixelsPerPx and set to 1.5.

In general, browsing the web like this is a very good experience. Sure, the graphic images are being scaled up in many cases right now, but a lot of responsive sites actually look beautiful and in general everything that is text or drawn with CSS looks gorgeous. Most importantly, the way zooming in browsers works across all contemporary browsers preserves the layout and design of most sites.

Screen Calibration and Color Management

If you are running Ubuntu 12.04 or newer or any Linux with Gnome 3 a program that manages color management and screen calibration should already be installed. Go to System Settings > Color. From this application you can specify color profiles for your various devices: screen, printers, video cameras, any thing that records or displays visual color data can be calibrated and color managed.

The T530 and W530 can be equipped with a built-in display colorimeter. Which is a neat and unique idea, but the device is built in to the palmrest and so will only ever be able to monitor one specific spot on the screen. That and I’m sure the included Windows software does some special maneuvers to work while the laptop’s lid is closed… I figured that probably wouldn’t work under Linux so I didn’t buy it. Plus, I already own a Pantone Huey Pro. Either way, you’ll need some kind of colorimeter to calibrate your screen. If you don’t already own one, I recommend the Hughski ColorHug colorimeter by Richard Hughes, the guy that wrote the color management application for Gnome on Linux (there’s a version for KDE as well). Looks like a great device at a reasonable price.

Firefox Color Management

Even after calibrating my display this FHD screen shows pretty saturated colors in places. The Gnome colord calibration certainly improves the overall color of the screen, especially the white and black points. However, the applications you use also need to be color managed for the best possible experience. This screen seems to have a tendency to over saturate, making the lack of true color management very obvious to a designer like myself.

Fortunately Firefox has some great color management tools built in to the more recent versions. Unfortunately there is a certain amount of overhead involved in correcting colors, so Firefox comes preconfigured to only color manage images that include a color profile. You want to switch it to color manage everything. This can be done via the about:config method, but there’s a nice and simple addon that makes the setting more approachable: Firefox Addon: Color Management

Once its installed go to Tools > Addons > Color Management and set it to “All Images” and then identify your current display profile by using the “browse” feature to navigate to it. You should start seeing a better looking web right away!

Read more about color management in web browsers here: Gary G. Ballard’s Web Browser Color Management Tutorial (note that Firefox does color management the right way: color managing images as well as colors defined in CSS.) Gary G. Ballard is awesome.

Caps Lock / Num Lock Indication

The T530 does not have an LED light that indicates the state of Caps Lock or Num Lock. It’s an odd exclusion since there’s plenty of room next to the WIFI and HD activity lights. But OH WELL, there’s a Gnome Shell Extension called “Lock Keys” that adds a nice and simple indicator in the top panel.

Mouse Cursor Size

Struggling with this a bit right now. I am getting inconsistent results and so am hesitant to even share the tweaks that I’ve made so far. I hope to report back on this with a really good solution. The current state of adjustable mouse cursor sizes on Gnome 3 on Ubuntu 12.04 appears to be a bit of a hacked up mess.

SimpleInvoices: Invoice Template “Nebraska”

As someone who picks up a little freelance here and there, it can be handy to have some software that helps manage invoices and estimates. Software that isn’t Microsoft Excel which, while it will do the work, isn’t great for this purpose. Fortunately I discovered SimpleInvoices, a free and open source web-based invoice management program.

I was a bit disappointed that the default invoice style for SimpleInvoices didn’t resemble the illustration on the SimpleInvoices homepage. And, after seeing that the HTML template for the page was entirely constructed in tables, I went about creating a new, more contemporary HTML invoice template that mimics that template illustrated on the homepage.

(At least, the HTML-based print preview didn’t look that way. Maybe the export to PDF is a different story, but that functionality isn’t available to me.)

Since a template needs a name, I named this invoice template after my home state for now. I’m sure it’s not perfect, but it’s well-suited to my needs. Let me know if there are things that could be improved. You can download the files here:




  1. Extract files from ZIP archive after downloading the file.
  2. Copy the folder titled “Nebraska” to /templates/invoices in your SimpleInvoices installation.
  3. Log in to your SimpleInvoices program and navigation to Settings > System Preferences and edit the “Default Invoice Template” and select “Nebraska” from the list.
  4. If you have not yet specified your own logo image, upload your logo graphic (for printed and PDF’d invoices I recommend creating your logo in vector art and saving as an SVG file for use with SimpleInvoices) and navigate to People > Billers and click EDIT next to you name. Under “Logo file” you should be able to select your logo graphic.*
  5. Test template by opening an estimate or invoice and clicking the “Print Preview” option. Use your browsers printing functionality to print the invoice or save the output as a PDF.

* In order to use SVG files you will need to edit the following SimpleInvoices file: /include/functions.php – Open in text editor and look for “getLogoList” function and change the following line:

$ext = array("jpg", "png", "jpeg", "gif");

to include “svg”

$ext = array("jpg", "png", "jpeg", "gif","svg");

Save the file and now you can use the SVG version of your logo to get a crisp printed logo or a resolution-independent logo in your PDF file.

Firefox Tricks

There are limitations to relying on printing from web browsers to generate PDFs. One of the big limitations is that in general web browsers don’t print background colors or images. In the case of this template, that affects the gray background in the column heads and the yellow highlight behind the grand total. Fortunately Firefox (there might be other browsers that do this as well) gives the option to enable the printing of background colors and images in the Print dialog options.

The other aspect of printing from web browsers that is problematic is the automatic “Pages 1 of 2” and “the title of this webpage” headers and footers on the resulting print out. Firefox also allows you to customize or even turn these off entirely in the print dialog options. You’ll have to do this to get a good, clean invoice.


Originally I had tried to accommodate window envelopes by strictly formatting the Biller and Customer information sections. But with snail mail on the decline as a method for delivering invoices, version 1.2 discards that strict positioning in order to create a more flexible, robust and attractive layout.

Banshee Album Grid: Make Compilation Albums Display Only Once

I’m a pretty big fan of the Banshee Music Player. I don’t care which programming language it is written in. For my needs it’s the best Linux music player for a few reasons:

  1. Plays music
  2. Has a relatively intuitive and fast track search and sorting interface
  3. Automatically “watches” my music folder so that I can just copy music to my MUSIC folder and listen to it
  4. Great “Play Queue” functionality that allows me to quickly construct an ephemeral playlist
  5. Great podcast features: just paste the feed URL in and it’s easy to keep up with your favorite podcasts, whether you want to stream it or download it to listen to it later while offline (though a better indication of the “downloaded” status would be nice)
  6. Set it and forget it Last.fm scrobbling (I LOVE statistics!)
  7. Album art for podcasts … so much more personality
  8. Provides a useful album art view, allowing me to pick my music via my visual association with the albums that dates back to my days of being an avid music consumer. A long, faceless list of tracks unfortunately leaves me listening to a fairly limited subset of my massive music collection. I NEED that visual connection. I know what I want to HEAR when I SEE it. 😉

With all of that said, Banshee isn’t perfect. I can’t quite tell whether Banshee or Rhythmbox does a better job of transferring playlists and music to iPods. I would expect that they use the same library to accomplish those tasks, but they both seem to fail in different ways, especially with playlists.

Another thing that has really irritated me is the way compilation or Various Artist albums would represent every individual track in the Album Grid rather than be collected as one item. It looks like this:

Banshee repeating the Dark Was The Night album art for each individual track

This is frustrating. Especially after you add several compilation albums to your collection. After a while you’re trying to find the individual albums amidst a haystack of repeating album art. I was even spending time looking around online for a better Linux music player. One that might be smarter about compilation albums. Fortunately I stumbled upon some settings that – now that I am aware of them – are quite obvious. I was thinking that it had something to do with the album grid sort settings and the settings didn’t seem to exist. But it turned out to be a property of the individual tracks that compose the compilation album. This is the kind of situation in which iTunes (for example) will just work, but it’s not too difficult to fix in Banshee. (It would help if stores like Amazon would include the proper metadata with MP3 downloads.)

How to make compilation albums appear only once in Banshee’s Album Grid

  1. Banshee’s Edit Track Information dialog

    Find some way to select all of the individual tracks of a given compilation album.

  2. Right-click on the selected tracks and select Edit Track Information.
    1. OR go to the main menu > Edit > Edit Track Information
    2. OR press “E”
  3. Check the box next to “Compilation Album Artist:”.
  4. Type in “Various Artists” (or whatever you like)
  5. Click the “Set all compilation album artists to these values” button to apply the value to all of the tracks that you have selected.
  6. Click the “Save” button.

Once you do that the Album Grid view should update immediately to display only a single representation of that particular album in the Album Grid:

Banshee correctly displaying the Dark Was The Night compilation album

Now that I got that problem solved and the solution shared with the interwebs, I think I’ve finally run out of procrastination-assisting distractions. 😀

Replace Icons for Windows Applications on Linux via Wine

I recent pulled my old copy of Adobe Photoshop 7 for Windows out of mothballs and was delighted to discover that it now runs perfectly on Linux by the magical powers of Wine. I’ve been using the much more recent CS5 version on OSX at work, but Photoshop 7 has all of the features that I rely on except for layer groups. Which is not much of a problem, really.

The only problem was that the old 48-pixel icon that came with this version for Windows looked pretty hideous in my lovely new Gnome 3 Shell and Gnome Do menus. Customizing these icons means replacing whatever file the system is using for the default image. Conceptually, this is very straightforward. In reality, the location of these icon images is not always obvious. This post will explain how to replace icons for Windows applications running on Linux via Wine in as concise a manner as possible.

Find or Create New Icon Images

A quick search online gave me exactly what I was looking for: a 128-pixel PNG of the Photoshop 7 icon! It doesn’t always work out to be that easy. Or maybe you want to create your own, original icon. Whatever the case, you just need to create your icon as big as you need it or even a little larger, usually 128, 256, 512 or some other square dimensions that are divisible by 8.

Replace Default Icon Image File

Usually Linux systems will save icon image files somewhere around here:


or here:


but Wine saves these icons in a special place no doubt due to the “special” nature of running Windows applications on Linux:


In my specific case on Ubuntu 11.10 I found a folder titled “hicolor” in the “icons” folder. And inside of that I found the 48-pixel Photoshop 7 icon file in folders titled “48×48” and “apps”. So I created a new folder titled “128×128” as well as a folder titled “apps” inside of that.

And, finally, to correctly add a new icon image file navigate to that location and …

  1. Find the icon that you would like to replace.
  2. In another file browser window navigate to your new icon image file.
  3. Copy your new image file to … /icons/128×128/apps.
  4. Navigate back to … /icons/48×48/apps and copy the complete filename of the original image file.
  5. Return to …/icons/128×128/apps and update the filename of your new icon file by pasting in the copied filename.

In my case the filename was not as simple as “photoshop.png”. It had some arbitrary letters and numbers in it, so make sure the filename is the exact same otherwise it might not work.

Log out and log in to see if you are successful!

Update: July 7, 2013

So things have apparently changed for the worse regarding Wine applications and Gnome 3 Shell. Actually, it might be “better” and on the road to “great” but for now along with what you do above you also need to edit the .desktop file associated with your Windows application. Doing what I described above doesn’t inhibit Gnome from defaulting to the Wine Application Launcher icon.

The .desktop files are what tells your Linux system various details about a given application in order to list it in a system-wide application menu or even the contextual menu’s “Open With….” system. For Wine applications, these .desktop files are located here:


There is one small trick to these files: the Linux system (or at least Nautilus) sees these files as “application launchers”. As a result, right-clicking and opening with… mousepad or Gedit isn’t possible. You will have to start your text editor and then use its own open dialog to navigate to the location above and open your desired .desktop file from there.

Once you have the .desktop file open, we need to tell our Linux system to use a different icon than the one specified by default. So, open the file and look for the “Icon=” line. It will probably be associated with a long-ish filename that looks arbitrary and computer generated.

Simply replace that file name with the one used for your preferred icon files above and save the file. You might need to log in and log out to see the difference.

David H. Freedman’s Ridiculous Steve Jobs Editorial

I have been casually (sometimes painfully) reading through Discover magazines year-end issue featuring “100 Top Stories of 2011”. I read magazines in an illogical order, so it has taken a while for me to get to Top Story #8: “The Man Who Gave Us Less For More” by David H. Freeman. I’ve probably read Mr. Freedman’s work before, but I’m not overtly familiar with him. Regardless, if the top story from 2011 is referring to Steve Jobs’s death, the title alone is a pretty insulting way to reference it.

Read it for yourself, but here are some of the main points of this ridiculous rant that attempts to make Steve Jobs look like a man that sells snake oil:

Original Macintosh

“What did this pretty beige box offer that a hundred other computers didn’t already offer, besides a higher price, much less choice in software and no compatibility with the rest of the world’s devices?”

Well, for starters, it had the first really successful, useful, graphical user interface powered by a mouse. This change in UI was so good and apparently successful that Microsoft made a really bad copy of it. I’m sure in your list of features and bang-for-buck you aren’t giving this important accomplishment much value. I just don’t see how, as an honest technology journalist, you can brush off the Macintosh as overpriced crap. Are you still working sans mouse today?

Apple Lisa

“Who remembers the Apple Lisa, a chunky desktop that sold for $9,995 in1983?”

OK. So the Lisa was a financial failure and a technological dead end thanks to the success of the Macintosh (see above). The price? Well, nobody put a gun to your head. Besides, Steve Jobs was kicked off of the Lisa team and as a result worked on the Macintosh. (see above)

Apple Newton

“Who remembers the Newton, a $700 PDA/paperweight?”

Try doing some research. You are conflating Steve Jobs with Apple. Steve Jobs left Apple in 1985. The Newton project was started in 1987. One of the first things Jobs did after becoming the Apple CEO in 1997 was kill the Newton.


“Then there was the NeXT computer, to which Jobs devoted a decade of his life … starting at $6,500, Jobs sold only 50,000 units ever.”

Yes, the NeXT computers never sold well, but you make it sound like Jobs wasted a decade of his life on a complete failure. Maybe you didn’t know this – again, research – but the NeXT operating system was more highly regarded than the hardware. So much so that, when Apple was circling the drain after failing to build their own next-gen operating system, they purchased NeXT. This purchase is how Steve Jobs returned to Apple and also how Apple ended up with the operating system that it runs today. Without Steve Jobs’s return and that operating system – now called OSX – Apple wouldn’t exist today.


At this point you actually start giving Steve credit for creating something useful. But you still go on to piss and moan about paying higher prices for prettier things like Apple products have no real value above the competition. Never mind that you say this at a time when the rest of the consumer computer companies are struggling to build iPad and MacBook Air knock-offs at the same price point as Apple.

Discover magazine should be ashamed of themselves for publishing this misguided, lazy and factually incorrect editorial as though it were objective journalism. It makes me question everything else I read in their magazine.

Gnome 3: Activate Overlay and More by Mouse Button

I would like to activate the “Gnome 3/Shell Overlay” with the click of an otherwise-unused mouse button. As I posted earlier, Gnome 3 does not currently have any ability to assign actions/functions to mouse buttons. But there is a way to make it work using xdotool and xbindkeys. Thanks to AlphaLux (see comment below) I was able to replace my earlier easystroke solution with xbindkeys.

There’s also a program called easystroke that employs mouse gestures for executing shortcuts. The only reason I know this is because someone smarter than myself described the solution on the Ubuntu Forums. So, to “stinkeye” of the magical land of “Woop Woop”, I bequeath a laurel . . . and hearty handshake for answering this question about keyboard and mouse shortcuts in Gnome 3. Though I am including two solutions below, I recommend the xbindkeys solution.

First, descriptions of what  xdotool, xbindkeys and easystroke do:

  • xdotool
    This tool is invisible. You will not directly use it. But it will give you the ability to compose a commandline instruction for telling your computer that a button or group of buttons have been pressed. There is more to it than that, but for our purposes that’s all that matters.
  • xbindkeys
    This tool allows you to use bind keyboard and mouse keys to shell commands.
  • easystroke
    This tool allows you to use “mouse gestures” to submit commands to your computer. Mouse gestures are akin to the “touch gestures” that are an important part of newer touch interface computer systems like Apple’s iOS and even OSX via their ever-growing touchpads as well as Android, Windows Phone 7, etc. etc. The instructions below will be using this program to merely press a mouse button. I won’t be talking about gestures today.

Making a Mouse Button Make Things Happen with xbindkeys

As described above my only motivation for this functionality is to summon the Gnome Shell Overview. The directions below will describe how to do that. Feel free to substitute your own functionality as you see fit. Hopefully the instructions will be written in a clear enough way as to make that easy to do.

  1. AssignKeyboard Input to the Desired Functionality
    System Settings > Keyboard > Shortcuts
    In my case I set Show the activities overview to the Menu key, because I use the Super/Windows key for Third- and Fourth-level switching.
  2. Install xdotool and xbindkeys 
    You’ll have to figure out the best/easiest way to do this for your flavor of Linux. If you are running Ubuntu you can install them via the Software Center or:

    sudo apt-get install xbindkeys xdotool
  3. Determine Mouse Button Identity with xev
    Open a terminal and enter this command


    Xev will create a small, empty window. Hover your mouse over this window and click the various buttons on your mouse. After you click xev will tell you the identity of that button. Now that you know their identities we can use xbindkeys to associate them with shell commands.

  4. Configure xbindkeys
    Open a terminal and enter this command:

    gedit ~/.xbindkeysrc

    and press Enter. This will open the xbindkeys configuration file in Gedit. It should be a blank file. Add the following to the document and save.

    # Gnome Shell Mouse Button 8 to Overview
    "xdotool key Menu"
    release + b:8

    The above configuration sets the mouse button 8 to activate the Gnome Shell Overview. The first line is a comment to help you remember what this setting does. The second line defines the shell command to be enacted within double quotes. The third line defines the button action, in this case upon the release of the mouse button 8 the command will be executed.

  5. Set xbindkeys to autostart on login
    From the Gnome Shell Overview > Applications list, look for “Startup Applications” and start it. After the application window appears click the Addbutton. You can title the entry whatever you want, but “xbindkeys” is nice and concise. Most importantly though, enter the following into the Command input:

    xbindkeys &

    Once correctly entered, click OK and then Close. Now xbindkeys will automatically start upon logging in.

Making a Mouse Button Make Things Happen with easystroke

  1. Install xdotool and easystroke
    You’ll have to figure out the best/easiest way to do this for your flavor of Linux. If you are running Ubuntu you can install them via the Software Center or:

    sudo apt-get install easystroke xdotool
  2. Easystroke Preferences
    Start Easystroke. Go to the Preferences tab. Under the Behavior section, click the Gesture Button button. Move your cursor to the empty gray space in the resulting window and click the mouse button that you would like to associate to activating the Gnome Shell Activities Overlay (or whatever you are trying to do at the click of a mouse button). Once you click you should see a change in the settings at the bottom of the small window. In my case I have a Logitech laser mouse and I am using “Button 8”. Also under the Appearance section check the option “Autostart Easystroke”.
  3. Create New Easystroke Action
    Go to the Actions tab. Click the Add Action button. Name the action “Overlay via Mouse”. The Type should be “Command” and the Detailswill be:

    xdotool key Menu
  4. Associate Mouse Button to Easystroke Action
    In Easystroke highlight your new “Action” by clicking on it. Click the Record Stroke button. Move your cursor to the small resulting window and click the desired mouse button. Click the Yes button to confirm your mouse button input. Click the Hide button when you are finished.

Again, unless you specifically want to use mouse gestures, I think xbindkeys is a better, more responsive solution than easystroke. You should be able to test this fancy new functionality immediately. If not, try logging out and logging back in. Enjoy.

Drupal Webform Module: How To Customize the Subject Line

I can’t seem to find a lot of documentation on certain Drupal modules. Yet another thing about Drupal that is frustrating, especially considering how much crap people throw at WordPress. WordPress seems to be much more organized and JUST as capable as Drupal. Oh well. Haters gonna hate.

(See comments for info about Drupal 7.)

How to customize the subject line in an automated email generated by the Drupal webform module

Sometimes examples save a lot of descriptive verbiage…

field label “First Name” – field key “fname” –
webform email custom subject line “Message from %value[fname]


field label “Last Name” – field key “lname” –
webform email custom subject line “Message from Mr. %value[lname]

unless the field in question is contained in a fieldset element! If that’s the case:

field label “First Name” – field key “fname” – fieldset field key “contact_info” –
webform email custom subject line “Message from %value[contact_info][fname]

and then click “Save e-mail settings” and you’re done!

This information was derived from the last comment on this page: http://drupal.org/node/823408 after 45 minutes of looking through a bunch of dead ends. I hope this post is easier to find, digest and get back to what you were doing before you forget why.

Mark Housel asks, “I was wondering if you could tell me just where these few lines go?”

So, the above details do take for granted that you know where the text in question should be input into the Drupal system. I generally try to avoid doing that. So many great how-tos on the web are written by smart people that seem to be talking to other people that already know a great deal about the subject in question. So we should all try to account for folks that are not familiar with certain details.

Mark and anybody else that is a little lost: I assume you know how to create a webform node on your Drupal site. If you click to edit the webform node in question you should see something like this:

  1. From the Webform node > edit window, click the “Webform” tab (see A)
  2. Click on the “E-mails” sub-tab (or section … whatever you want to call it … see B)
  3. If there is an existing E-mail output setup, click “Edit”. If one does not exist click “Add”

Following steps 1 thru 3 will bring you to the following page:

Scroll down to the “E-mail header details” and the “E-mail subject > Custom”. This is the input that I am referring to above. Enter what you need to there to alter the subject line of the automated email output.

Let me know if there are any other questions.

Introducing the Heads-Up Grid

As a web designer and developer I use many tools to help me design and build a website. The initial design ideas are worked out on paper and within some kind of WYSIWYG graphics editor like Photoshop, Illustrator, Gimp or Inkscape.

Since reading Khoi Vinh’s Ordering Disorder: Grid Principles for Web Design I’ve been using grids – mostly just columns, really – to bring greater order to my designs. So far this new approach has been fruitful. A helpful tool in this regard is The Gridulator, which makes it easy to determine the dimensions of your grid and also download a graphic representation of the grid that you can use as an overlay in the above mentioned graphics programs while you are working out the details of a site design.

However, even if my idea is pretty nailed down in the sketching and graphic-editor stage, the act of actually building the site with HTML + CSS always presents new problems and solutions. Part of this is due to my clients not providing all of their content (or even knowing what it will be) until I’m at that stage. Another part of it is that laying out website designs in a static graphic state makes it easy to overlook some aspects of the site.

For these reasons and others I find myself doing a lot of actual designing from within the browser, either via Firebug or just a lot of trial and error with different properties in the code. Page structures in HTML + CSS can get complex fast and it can be tricky to stick to your grid if you aren’t always keeping it in mind. It would be helpful to have an easy way to overlay your grid over the web pages as they are built, adjusting the CSS properties until they are absolutely perfect. Or at least pretty damn close!

One recent weekend I had a freelance project that I wanted to avoid and so I determined that I would focus on this grid overlay problem and see if I could build it better and smarter. Figuring out this grid problem was a lot more important than working on a project that I would get paid to work on. I’m sure you can relate to the wacked-out sense of logic that leads to such decisions.

The result of that ridiculous procrastination was the initial version of what I am calling The Heads-Up Grid. It was actually looking good enough to share with others at that point. A friend suggested I post it on Hacker News to see if anybody would find it interesting. I did just that and got one comment from somebody that suggested I use JavaScript to generate the HTML elements, simplifying the necessary setup to get the grid working. They even gave me a bit of code to show how easy it is to do that with jquery. Once I saw that and understood how it worked, I really went to town!

The somewhat-final result is a fairly easy-to-use web page grid overlay. It has some nice features:

  • simple settings
  • vertical grid with columns and gutters
  • horizontal or baseline grid that can be vertically adjusted
  • on/off button displayed in top-right corner
  • set grid to be on or off on page load


Please give The Heads-Up Grid a try. I hope you find it useful. I would love to hear feedback about it being useful or if you have some ideas about how it could be better.

Managing Your Multitudes of Passwords

I found a funny comic about password complexity this weekend: http://xkcd.com/936/

It makes a good point. And I was actually taken to that comic by an article that breaks down the futility of how we all generally manage our passwords: 

“I’m sorry, but were you actually trying to remember your comical passwords?”
by Troy Hunt 

It’s some good food for thought. I’m certainly looking in to programs like

1Password http://agilebits.com/products/1Password

And the prominent cross-platform (Mac, Windows and Linux/*NIX) but not nearly as easy to look at …

KeePassX http://www.keepassx.org/

What’s Wrong With Gnome 3?

Just read and commented on Ars Technica’s review of Gnome 3, the latest release of the Gnome desktop environment for Linux. It was a long enough comment that I wanted to republish it here:

The worst thing I see, because the available screen typeface discussion is off-topic, is by the active application’s name in the top-left. That presentation of the application’s icon by the name is distracting and not helpful. The top bar is supposed to recede, but including the app icon there breaks with that goal. It would have looked much cleaner to replace “Activities” with the Gnome icon (or ubuntu logo or take your pic) and simply present the name of the application.

I prefer Unity’s approach in that regard except for the idiotic window-close-minimize-buttons being squashed into the main menu bar. That is awkward and I think they’ll find a lot of people, trying to click on the Ubuntu icon in the top-left, accidentally closing their application window. But we’ll see.

My other big gripe is the prominence and amount of work that has gone into workspaces/multiple desktops. Gnome claims that this system is focused on simplicity, but most users I know struggle to get their mind around using ONE desktop/workspace. The multiple workspace feature is purely for advanced users. It’s way too abstract of a concept for the basic user. I consider myself a VERY advanced user and workspaces are the first thing I turn off on a new Linux install. I am much better at organizing my workflow in terms of applications. Trying to break those applications up over workspaces is redundant and I don’t care where the window is if I can summon it when I need it and hide/minimize it when I’m working on something else.

They should be working harder to make workflow/task management even MORE organic. It should be so organic that I don’t have to be thinking about how to organize it. Right now I get along great with a basic Ubuntu install, simple keybinding to summon the Scale function (Expose) to switch between documents, Alt+Tab to quickly switch apps and Docky to open/switch apps. I think the problem is that Linux developers think in terms of Window management when they should be thinking about Application and Workflow management.

Supposedly these new desktop interface designs have been run by test groups, but I’m a little skeptical. With that said, there are a LOT of good and cool ideas in both Gnome 3 and Unity. When in doubt, try many things. And seeing these ideas being developed is refreshing. Neither Microsoft or Apple is attempting to make such dramatic changes to the way their desktop interfaces work.

One More Thought

After publishing the above comment it also occurred to me that the new Gnome desktop defines a specific functionality to the “Windows” key on most keyboards. I have been using my Windows key to summon a third-level (and fourth) keyboard to make it easy to enter larger group and “special characters”. [I wrote about this in detail here] It baffles me that making third and fourth levels of keyboard characters is not a bigger priority. This is a MAJOR advantage that Apple has over Microsoft in the world of desktop publishing. Every graphic designer knows it. And people like me that find Linux to be a good and soon to be great graphics platform would like to see some focus on these details.

I need to make time to get involved with the Gnome development community. I need to get in there and push for better keyboard functionality and, more importantly, better integration of color management. Granted, both of these area DO get a lot of love. It’s just that they have to be implemented manually. Neither of these two features are addressed by default installs of the major Linux distributions.

Do take a moment to check out the Gnome 3 features: http://www.gnome.org/gnome-3/ There’s still a lot of cool stuff coming to a Linux desktop near you.

20 Years of Linux

This video doesn’t have a lot of detail, but it’s a good review of the basic history. I’m only on my sixth or seventh year of using Linux myself. I can only imagine that if Wayne’s World 2 would have come out in 1996, instead of 1993, Garth’s soon-to-be girlfriend would probably have been reading a book on Linux rather than UNIX. But you might disagree with me on that.

The Basics of Using ZIP Archives

It’s recently come to my attention that the general public has never heard of .zip or any other type of compressed archive. The idea of a compressed archive has been around for many many years. It certainly was a very early part of computer science. This article is intended to help regular people understand why these types of files are useful and how to use them on a very basic level in Windows, Mac OSX and Linux.

This post is not a detailed review of the various types of archive file formats or how they compare to each other. I am talking about .zip because, like the MP3 file format for compressed music, regardless of it being superseded by newer and better technologies it is the most common type of file archive in use today.

What the hell is a ZIP archive?

Archive files, at their most basic, are something like the boxes we put things into for shipping them to other locations. You would never simply write a mailing address on the cover of a book or box of chocolates and drop them in the mail. At the very least you’d wrap them in some tough, opaque brown paper. For something that is soft or fragile you would probably put them in a big brown cardboard box with bubble wrap to protect them on their journey. Of course, you might not be shipping the item at all. You might simply want to put it in a box for safe, organized storage.

For basic purposes all of these uses of a cardboard box are a perfect analogy to an archive file.

Sounds simple. How do I create a ZIP archive?

When it comes to desktop/laptop computers or any computer with a screen, mouse and keyboard there are several different operating systems. In terms of dealing with ZIP archives, however, there’s pretty much only two categories:

  1. Some version of the Windows operating system
  2. Some version or type of UNIX-like operating system
    • Apple Mac OSX
    • UNIX (BSD, Solaris, etc.)
    • Linux (Ubuntu, Fedora, Suse, etc.)

I am making this grand over-simplification because basically every UNIX-like operating system for desktop/laptop use includes software for creating and manipulating .ZIP archives as well as other archive types. Winblows, I mean “Windows,” in my experience never comes with this type of software pre-installed. Okay, maybe sometimes it comes with a free trial version of WinZip, but I find that beginners don’t really understand how to use WinZip. It’s definitely more geared towards advanced users.


Don’t like my snarky comments about Windows, eh? Fine . . .

In order to bring Windows up to par with other computers you can install the free-and-open-source 7zip application. Go to http://www.7-zip.org and click on the top-most “Download” link to download the 7zip installer for Windows. Run the installer. Once installed continue reading.

Creating a ZIP Archive

  1. On your desktop create a new folder called “brownbox” (or whatever you want, there’s nothing magical about the title “brownbox”).
  2. Copy some photos or word processor files to this folder.
  3. Right-click on the folder and, from the resulting menu select one of the following:
    • Windows + 7zip: “Add to archive . . .”
    • Mac OSX: “Create Archive of . . . ”
      Note: If right-click is not enabled on your system you can click-and-hold or press the Control/Ctrl key + mouseclick to access the contextual menu.
    • UNIX/Linux: “Compress”
  4. An archive should be created on the desktop with the same name as your folder. Windows + 7zip and UNIX/Linux will probably ask you where you would like to save the archive while OSX automatically saves it to the same location as the original folder.

Opening a ZIP Archive

I’m using the term “open” pretty loosely here. I think that the general public, wanting to access the contents of an archive file, will most likely want to “Extract” or “Decompress” the contents of the archive into a standard “folder” on their desktop. To do that:

  1. Ask your archive software to extract/decompress the contents of the archive like this:
    • Windows + 7zip: Right-click and click “Extract here”
    • Mac OSX: Double-click on the archive
    • UNIX/Linux: Right-click and click “Extract here”

Again, OSX will automatically save the extracted files to the same location as the original file while Windows + 7zip and UNIX/Linux will generally present a Save As dialog.

So archive files aren’t just for nerds!

Exactly. Let me know if you have any questions.

Why GIMP Is NOT Inadequate

Troy Sobotka, who appears to be a very accomplished commercial artist working in video, illustration and photography, made a relatively brief list of problem areas for Gimp on his blog: http://troy-sobotka.blogspot.com/2011/01/why-gimp-is-inadequate.html

He makes some good points, but the last half of his post is a lot of alarmist speculation. The obvious answer to improving Gimp is to contribute to its development. Complaints about difficult developers sounds like a bunch of complaining. With any open source project you have to earn the respect of the senior developers through consistent work, usually the not-so-exciting kind. With any open source project there are more users than developers and certainly more users suggesting ideas than making any attempt to squash bugs, write documentation or provide objective and helpful feedback. Opinions and assholes.

Anyway, I left a LONG comment today and wanted to duplicate that comment here. The only thing I should have added is a need for Gimp to continue improving color management and that’s why I just said it. Anyway, here’s my comment:

I’m a professional graphic designer. I use Photoshop and Gimp at a very high level of proficiency. Just to point out where I’m coming from. I like Pshop and Gimp for their different strengths, but some of the above arguments are wrong. Gimp certainly has room for improvement, but anyone that actually used Photoshop in 1996 knows that Pshop itself has come a LONG way in 15 years.

I would like to point out something that needs to be understood about the importance of bit-depth. I am constantly working with hi-res jpegs from a wide variety of professional photographers every day. You know how many of those files use 32 bits/channel? None. You know how many of those files use 16 bits/channel? None. They are ALL in 8 bits/channel. It’s certainly great to have the higher bit-depth options, but the importance of that capability in terms of graphic design/manipulating images for press is greatly exaggerated.

Also, CMYK color space in Photoshop is misused by graphic designers because most of them know very little about color space and/or color management. Some of us know (I don’t mean to offend anyone) but the majority of designers I have worked with are completely oblivious. I’ve even seen creative directors explicitly instruct their designers to select “discard color profile” when confronted with the “What should I do?” dialog in Photoshop. The need for CMYK color space, though useful and great, is also greatly exaggerated.

I also think the complaints about the UX are very subjective and usually only illustrate how little effort the commenter put into learning about and using the Gimp.

Two things that would greatly improve Gimp and many people’s impressions of Gimp are:

  • better image scaling/anti-aliasing algorithms
  • layer groups and layer styles

Those two things are certainly complex, but if they were implemented, and it sounds like they will be soon, I would be extremely satisfied with Gimp’s capabilities.

I think it’s healthy to critique software, but the Gimp rarely receives praise for its remarkable capabilities.