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.
  10. Under OPTIONS, set DISTRIBUTE to ENTIRE PAGE.
  11. Under OPTIONS, set SYNCHRONIZE CONTENTS to CHECKED.
  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.

White Unibody MacBook Bottom Case Fix: Upholstery

In 2009 Apple introduced a new polycarbonate unibody white MacBook to replace their older white MacBook body style. This new body was a plastic version of the aluminum unibody design earlier introduced in the MacBook Pro line.

Apple-MacBook-White-mid-2010Apart from being white plastic/polycarbonate, it looked more consistent with the MacBook Pro line and also got a one-big-button multi-touch trackpad, similar to the Pro models. It received a single hardware revision in 2010 before being phased out sometime in 2011 and replaced by the lower-cost 10-inch MacBook Air.

This is a great MacBook even in 2014/2015 and will run OS X 10.10 Yosemite just fine – especially if you replace its original hard drive with an SSD and have more than the introductory 2 GB of RAM.

However, the one catch for this MacBook body style is the rubber-covered bottom. I have yet to see one that doesn’t at least have some of the rubber layer being loose around the edges. Often people just tear the rubber layer off completely, leaving a bare steel bottom with holes in it and screw heads that don’t sit flush with the surface.

Apple-MacBook-White-mid-2010-bare-bottomTo Apple’s credit, somewhere along the line they started offering to replace this bottom piece for free with their MacBook Bottom Case Replacement Program. But it doesn’t seem like many plastic unibody MacBook owners were notified about this. If you own one of these, call Apple. They might still replace your bottom case depending on when your MacBook was originally purchased. But the one I recently bought (USED!) missed the cut-off date by a month or so. Apple said they would sell me the bottom case piece for about $100 – a bit too much for a 5-year-old laptop in my humble opinion.

There are people selling new bottom cases on Amazon and elsewhere for much better prices. I tried to buy one but it never arrived. I am currently awaiting a refund, but the seller is not responding to my messages.

Which is why I had to get creative.

Finding a New Covering for MacBook Bottom Case

Turns out that replacing the faulty rubber covering on your plastic unibody MacBook’s “bottom case” isn’t that difficult. A few months ago I helped a friend buy one of these and I used packing tape to attach a cut-to-fit piece of 5/16-inch-thick masonite to its bottom case. I did pretty clean work and the masonite protected the user’s lap from the high heat generated by the MacBook and the packing tape covered up the screw heads that could get caught on clothes or scrape the finish off of your table top. But it looked … a bit low rent, to say the least.

More recently I purchased another one of these for a family member. That’s where me ordering a new bottom case from Amazon comes into play.

But out of this frustration with a failed purchase and a faulty product design came a brilliant new, better-than-tape-and-masonite solution: use the upholstery off of an old couch as a replacement for the original rubber covering!

I simply cut a piece of upholstery from the dump-destined old couch, bought some E-6000 Craft Adhesive, detached the bottom case from the MacBook and spent way too much time patiently fitting and adhering the upholstery onto the bottom case.

I used a 1/4-inch margin to wrap over the edge of the bottom case, ensuring a nice, rounded edge. With a flat scraper razor I removed the soft, fuzzy threads from that wrap-over margin to make sure the newly-covered bottom case fit as tightly onto the MacBook as possible. Those little screws are not even an 1/8-inch long, so there wasn’t much room for additional spacing.

The final result is thick enough on the outside that the screw heads are now more or less flush with the upholstery material. It also provides a cushioned bottom for the laptop, similar to the original rubber material.

It’s frugal. It’s functional. It looks friggin’ awesome.

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

Preface

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:

</td>
</tr>
<tr>
    <td>

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:

\1</td><td>\2

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.

https://addons.mozilla.org/en-us/firefox/addon/adwaita/

Reading Digital Magazines via Text-to-Speech with NOOK app on iPad or iPhone

If you would like to read a digital magazine with text-to-speech, this is how to do it on an iPad or iPhone using  iOS’s built-in Voice Over features.

Since this is Apple technology, I’m pretty sure this will work for Apple’s Newsstand magazines as well, but I think it depends on magazine publishers and how they choose to deliver their magazines.

For the purposes of this how-to, I will describe how this works with Barnes and Noble’s NOOK app on the iPad or iPhone. The magazines that I have read with this app include a text-mode that the NOOK app refers to as their “Article View”.

How to Activate iOS’s Voice Over

  1. Go to SETTINGS > GENERAL > ACCESSIBILITY
  2. Turn Voice Over ON
  3. Be sure to read the text below the main Voice Over switch.

With Voice Over on, the way you interact with the iPad/iPhone will change. Keep in mind that Voice Over is predominantly intended for the visually impaired. Having Voice Over on all the time might be frustrating. If that’s the case, apply the following setting to make it easy to enable and disable Voice Over as you need it:

Set Triple-click of the Home Button to Enable/Disable Voice Over

  1. Go to SETTINGS > GENERAL > ACCESSIBILITY > TRIPLE-CLICK
  2. Select VOICE OVER for the Triple-click feature.

Finally, launch the NOOK app and open a given issue of a magazine. When looking at any page of that magazine you should see a button in the top-right that says “Article View”.

Tell Voice Over to Read Your Magazine

  1.  Click “Article View” to switch from the “Layout View” that resembles the actual magazine to a layout that is more like a web page with “real” text and an image or two.
  2. If necessary, triple-click the home button to enable Voice Over.
  3. With Voice Over enabled, touch the first line of text that you would like to have read for you.
  4. Swipe downward with two fingers. Voice Over will begin reading the text.
  5. Tap with two fingers to pause reading. Tap with two fingers again to continue reading.

Good luck. I hope this is helpful

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

NOW SIT BACK AND PATIENTLY WAIT TO SEE IF IT WORKS

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
    ICON=$2
    MESSAGE=$1
    if [ "$DISTRIB_RELEASE" = "9.10" ]; then
      DISPLAY=:0.0 notify-send --hint int:transient:1 -i $ICON -t 1500 "$MESSAGE" 2>/dev/null
    else
      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"
        fi
      else
        if [ ! "$USERCNT" -lt 1 ]; then
          notify-send --hint int:transient:1 -i $ICON -t 700 "$MESSAGE" 2>/dev/null
        fi
      fi
    fi
  fi
}

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:

http://simanek.us/downloads/SimpleInvoices_template_Nebraska_v1.2.zip

Notes:

Installation

  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.

Layout

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.

Lenovo B570: Ruined by Keyboard Layout

Look at this thing:

It’s an awesome laptop. Especially for the money. I bought mine off of Lenovo’s Refurb/Outlet store for a bit over $400. With a Core i3 processor, 4 GB of RAM, SD card reader, DVD/CD Write/Read, big touchpad with two-finger scrolling, a decent 15″ display, lots of USB ports, HDMI port and a full number pad on the keyboard, this is a great machine.

The build quality is good. It’s at its worst when it’s folded up and you’re carrying it around. There’s a lot of flex in the screen and it feels pretty chintzy. But when it’s open and running, the keyboard keys are very responsive and the keyboard is very firm itself.

There’s just one problem: they cheated the right-shift key by squashing full-sized arrow keys into the rectangular outline of the keyboard.

This serious problem is easy to overlook when you are shopping, ogling all of the goodies mentioned above at such an amazing price. Unfortunately, if you are a touch-typist the last key you want to press while touch-typing – and not looking at your screen or fingers – is the UP arrow key. And due to the idiocy of this damned cheapskate tradeoff I spend way too much time considering the purchase of a Thinkpad – which all have a similarly great keyboard but with a non-compromised right shift key – to replace it with. Every time I have to type anything longer than a few words I am sending the cursor up, up and constantly not where I want it to be.

I bet this machine could have been made for the same price with arrow keys in the style of the Thinkpad keyboards. Is Lenovo intentionally doing this to push certain people into buying a Thinkpad instead of one of these Essential-line and IdeaPad machines?

Also, it runs Linux like a dream. Everything but the fingerprint reader is working. Though I do wish it had dedicated volume and brightness keys.

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:

/usr/share/pixmaps

or here:

/usr/share/icons/your_icon_themes_name/

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

/home/your_username/.local/share/icons/

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:

/home/your_username/.local/share/applications/wine/Programs

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.

NeXT

“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.

iPod

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

    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.

How to Switch from Unity to Gnome 3 on Ubuntu 11.10

I’ve been begrudgingly using Ubuntu Unity as my desktop environment since upgrading to Ubuntu 11.10 shortly after it was released. At the time of the upgrade I had hoped to jump into the shiny new world of Gnome 3 from the recently-near-perfected Gnome 2. The Gnome Shell looked very polished and sophisticated next to Unity. Especially the Unity Launcher and Application/Window switcher… every icon is highlighted with a border or background color… I frequently mistake which icon is active/highlighted.

Images above are from other sites:
Gnome 3 from gnomeshell.wordpress.com , Ubuntu Unity from ubuntuvibes.com

However, there were a few small details with Gnome 3 that I found frustrating and ultimately unacceptable:

  1. Adwaita, the default theme, had excessive amounts of chrome and seemed excessively bright. The default theme of this new version of Gnome was not all that bad, but it certainly wasn’t exciting or a massive step forward from Gnome 2. Ubuntu’s default theme seemed much more refined and distinct.
  2. The Shutdown Option was not available unless you pressed the Alt (or Shift?) key. If you didn’t realize this secret, you would only be able to put your computer in Suspend mode. Apparently the Gnome developers didn’t read any of the articles about how much power we are wasting with gadgets in standby mode. Way to be green.
  3. The top panel is too tall, the panel and Shell text is too big and, confusingly, the panel icons are too small.
  4. Wasted Screen Real Estate. Maximized windows have a too-tall title bar smashed up against a too-tall top panel. Next to Ubuntu Unity, which employs a global menu and a somewhat quirky but very efficient maximized title bar that merges with the top panel, this felt like a step back.
  5. No Application Menu. Launching an application went from taking two clicks to taking 4 or 5 clicks via Gnome Shell.
  6. No Native Appearance Adjustment. If I wanted a desktop environment that only gave me the option to use blue or graphite highlights, I’d go back to using OSX. At the moment the only way in Gnome 3 that an ordinary user can change their theme, font and font settings is via a hack called Gnome Tweak. It works well, but it’s interface is pretty raw and it’s not integrated with the new Gnome Systems Settings.
  7. No Custom Mouse Buttons. This is probably due to the fact that the Gnome developers are imagining that their interface is for computers with touch screens. (sarcasm) Most likely the functionality simply hasn’t been created yet, but it seems like customizing mouse buttons on Linux should be baseline functionality.

Many of these problems were due to Gnome 3’s relative immaturity. These details need to be carefully worked out. And the only way to get a lot of developers and users involved enough to care and get excited is to flip the switch and migrate everybody to the new environment. At least the early adopters, anyway.

The Rise of Shell Extensions

The good news is that Gnome has not been standing still. A new capability was recently enabled that has allowed hackers to correct some of the above problems. This new capability is called Gnome Shell Extensions. These Extensions make it possible to alter the way Gnome Shell looks and works. The available set of extensions is not very large at the moment, but a handful of good ones suggests just how powerful this new feature is. Shell Extensions are actually not new, but being able to install them easily IS. Check it out: https://extensions.gnome.org/

In a nut, Shell Extensions are now as easy to install as Firefox Addons via the above website. Actually, the Gnome folks have made something much better thanks to the fact that Gnome is a desktop environment. The website functions more like your very own Shell Extensions Control Panel. No downloading, just two clicks and the extension is enabled. Here’s a handful that I just installed:

  • Alternative Status Menu (adds “Power Off” and “Hibernate” options)
  • Jump Lists (advanced contextual menus for the Gnome Shell Launcher for recent docs, bookmarks, etc.)
  • Music Integration (an Ubuntu Unity-esque sound menu with music player controls)
  • No a11y (removes the accessibility settings icon from the top panel)

Now, after installing at least the above list of Shell Extensions, there are a few more small tweaks that I think really make Gnome 3 sing. Well, singing with a few missed notes here and there.

Remove Title Bar from Maximized Windows

Sure, you could set the top panel to autohide, but I personally like having the clock and system status indicators visible at all times unless I’m watching a video. Ubuntu Unity does a great job at this and since the usefulness of the title bar is completely diminished once there’s only one mostly-full-screen window, why not simply remove it on maximized windows?

Thankfully, somebody at apathyonline.net described how to decrease the height of the title bar on maximized windows. They explain how to do this for the Adwaita theme. However, I wanted to do this same thing for Ubuntu’s Ambiance theme and unfortunately all Gnome 3 themes are not made in the same way. If you’re a fan of Ambiance, here’s how to do it:

  1. Open a Terminal
  2. Enter:
    sudo gedit /usr/share/themes/Ambiance/metacity-1/metacity-theme-1.xml

    and click ENTER.

  3. Search for
    <frame_geometry name="geometry_maximized"

    and add the attribute and value

    has_title="false"

    to the frame_geometry element.

  4. Then, as one of the distance elements within the frame_geometryelement, make sure one looks like this:
    <distance name="title_vertical_pad" value="1"/>
  5. Save the document and quit the text editor application. You might need to restart Gnome to see the change.

This seems like such an obvious enhancement. I’m curious why the Gnome 3 developers didn’t think of it or decided against it. However, they are discussing how to eliminate the menu bar, so that’s interesting.

Install an Applications Menu Extension and/or Gnome Do

Along with the shell extensions that I mentioned above, there are also two extensions available that add an Applications Menu back to the top-left of the top panel. Both seem to employ the same menu drop-down, but the way they are accessed from the top panel differ:

  • Applications Menu Adds a small Gnome-Foot icon to the right of “Activities” that summons the menu on click.
  • Frippery Applications Menu Replaces “Activities” with the word “Applications” and inserts the logo-icon of your system in the left corner the way the Gnome 2 applications menu traditionally did.

Again, since Gnome 3 is apparently designed for computers with touch screens (sarcasm, can’t help it) the functionality of hovering has been demoted. So this application menu involves 3 instead of 2 clicks to start an application (if you know which section the application is in to begin with). So it’s not quite business as usual, but it’s close. And maybe the Gnome team is showing a lot of foresight in removing any primary functionality from the “hover” state.

I guess I’ve embraced the brave new world of Gnome 3/Unity enough that the Applications Menu mentioned above feels out of place in Gnome 3. I was already a big fan of Gnome Do and Docky in the Gnome 2 world (and originally Quicksilver on OSX). Although Docky is obviously getting pushed aside by Gnome Shell’s and Unity’s built-in launcher bars, I find that the functionality, appearance and interface of Gnome Do is very consistent with both Gnome 3 and Unity. Actually, Gnome Do’s functionality is also being pushed aside by the built-in search-and-launch functionalities in Gnome 3 and Unity but, Gnome Do is still so much faster than either of these. So I am using Gnome Do as my primary launcher until something better comes along.

Good Enough

Let’s take another look at my list of show-stopping problems:

  1. A Better-Looking Theme – The Ambiance theme from Ubuntu is an improvement over Adwaita in my opinion, but with the know-how to remove the title bar from any given theme you can certainly switch to whatever theme you prefer. Just be prepared to discover that not all themes define the height of the title bar in the same way.
  2. Shutdown and Hibernation Options Restored – Shell Extensions save the day.
  3. Top Panel Is Still Too Tall, Shell UI Seems Oversized – Strike 1.
  4. Title Bar Removed from Maximized Windows – See #1.
  5. Application Menu Restored (or Replaced by Gnome Do) – Shell Extensions save the day again.
  6. No Native Appearance Adjustment – Well, Gnome Tweak does the job for now.
  7. No Custom Mouse Buttons – Strike 2. Custom Mouse Button via xdotool and easystroke!
    I’m on a roll this weekend. Read about how to set up custom mouse button shortcuts in my next post.

So with a few extensions, additional applications and tweaks Gnome 3 is good enough to get work done. The lack of a mouse button shortcut for summoning the Exposé-like Shell Window Overview will continue to interrupt the way I work. Though Compiz feels like a massive kludge, it is a relatively mature kludge that supports mouse shortcuts. Since Unity is a Compiz plugin it can take advantage of Compiz’s maturity. But Compiz will always be a sort of stopgap, a great temporary fix that probably help spawn some of the new thinking about user interfaces that we are being experimented with in Gnome Shell and Unity. I’m sure that the thought and design that went into the foundation of Gnome 3 will continue to bear fruit, resulting in a useful and well-integrated desktop environment. At least I hope that’s the case!

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.

THE FOLLOWING DESCRIBES HOW DRUPAL 6 WORKS.
THIS HAS CHANGED A BIT FOR DRUPAL 7.
(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]

and

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 
http://www.troyhunt.com/2011/08/im-sorry-but-were-you-actually-trying.html

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/