Mango Wine Summer 2017

For this wine, I’m trying out “Vintner’s Best Mango Fruit Wine Base” which cost $38.99 at my local winemaking supply store – All Seasons Gardening & Brewing Supply Co. near downtown Nashville.

It’s just a big 1 gallon jug of syrup. Much less fanfare than the boxed wine kits, though those seem very targeted towards beginners or people that want to have everything pre-determined for them.

This could be a nice, simple, less expensive wine or could at least be simple way to embellish fresh fruit wines. This is a test run. Yeast: Lalvin K1-V1116.

Continue reading “Mango Wine Summer 2017”

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 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/

Crabapple Wine Spring 2013

This batch was made from the very limited amount of crabapples I picked in August 2012  and several pounds of wild apples courtesy Anne-Marie Fournier. All of these apples have been frozen since end of the summer. I mostly followed my previous crabapple recipe, plus 2 cans of frozen white grape juice – plus whatever other juice we had in the freezer since I was short on sugar – 1 can of blended Cranberry juice, 1 can of Orange juice, crushed apples in a nylon bag, 9 pounds of sugar, pectic enzyme, acid blend, yeast nutrient, grape tannin and campden tablets. Yeast: Lalvin K1-V1116.

Continue reading “Crabapple Wine Spring 2013”

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.

Wild Apple Wine

This batch was made from several pounds of wild apples courtesy Anne-Marie Fournier. I followed my previous crabapple recipe, plus 3 cans of frozen white grape juice, crushed apples in a nylon bag, 12 pounds of sugar, pectic enzyme, acid blend, yeast nutrient, grape tannin and campden tablets. Yeast: Lalvin ICV-D47.

I don’t know how many pounds of apples I used. I think Anne-Marie picked enough apples for two batches of wine. I make a judgment call while crushing the apples. I put the mesh bag in the primary fermenter and I slowly build a large pile of mashed apples inside of the bag.

The grape juice was added because last year’s wine from these same apples was missing a little something. It was drinkable, but I’d like to make a better wine this year. For starters, this year I am going to the trouble of cutting all of the apples into wedges and as a result cutting out any overripe parts and the seeds and core. Last year I did as I do with the crabapples: threw the apples in a bucket, crushed ’em, threw ’em in a nylon bag and made a wine must. Since these apples apparently have a more subtle flavor than the crabapples, I’m hoping that this extra level of effort to get just the good fruit will make a huge difference.

Also, since cutting the apples like that takes time I had to freeze the cut apples as I went along. This turned out to be very beneficial. The frozen apples – once thawed – were very easy to crush. So freeze the apples if you plan to crush the apples like I do. If you have a fruit press, then this advice doesn’t really apply.

Continue reading “Wild Apple Wine”

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.