Mini Magick

I just discovered MiniMagick. It is exactly what I was looking for in a ruby-language wrapper for ImageMagick.

I’ve been using ImageMagick forever. Like, more than 20 years foreer. Maybe 30 years;  I don’t know when it was first developed, or how old it was when I discovered it.

Some of the time, I use ImageMagick from the command line: just convert a file or montage a couple of them, or whatever. But sometimes, I do the same three things to an image and expect to do it over and over again for multiple images, I’ll write a shell script.

Writing shell scripts is hard. (Like, do you use trap? Of course you don’t.)

Writing Ruby is easy. But the only Ruby wrapper for ImageMagick I knew about was RMagick, which is big and complex and the first couple of times I tried to use it I had build problems (this was back before gems and github).

So there I was. Use bash and keep it simple, or use ruby with some crazy backtick `convert foo.png foo.jpg` shell escape there instead of doing it right.

But MiniMagick is just a well-designed wrapper around those backticks. Kudos!

Pandoc for Word Document conversion

I just discovered pandoc. Well, I first bookmarked it in 2008, and again in 2016, so I guess I rediscovered it. But what I mean is that I finally discovered what to use it for: converting Word files to Markdown. It’s dead easy:

$ pandoc -f docx -t markdown sample.docx > sample.md

I’ve been using Antiword for years to convert Word 2006 (DOC) files to text, but it doesn’t do DOCX, and, instead of producing Markdown or something more neutral, it tries to recreate the DOC experience in text by centering lines, etc. Not complaining: it gets me plain text and I can take it from there, but Markdown is a big improvement. DOCX is even better, since, apart from pandoc, the only way I knew to read those at the command line was via Libre/OpenOffice:

$ libreoffice –headless –convert-to “txt:Text (encoded):UTF8” sample.docx > sample.txt

(I see — now, when it is too late — that there is also code to do this in ruby: antiword-xp-rb. I hope that’s an awesome tool, but it took me 9 years to figure out what to do with pandoc so don’t wait for me to tell you.)

Avocado News

The Smithsonian has news for market timers:

Americans devour 7 pounds of avocado per person each year, compared to 1 pound on average back in 1989. Per capita consumption of avocados has tripled since the early 2000s, according to the USDA. Yet nearly all of these avocados—some 95 percent in the U.S. and about 80 percent worldwide—are of a single variety: the ubiquitous Hass. That’s especially crazy because … the pebbly, black-skinned Hass didn’t even exist a century ago.

Also this, which makes me wince to consider:

…mammoths and giant ground sloths would gobble the fruit whole and then travel long distances, before pooping out the seed and thus dispersing the trees.

Dodged the XML bullet

Years ago, when XML was the new hotness, I kept meaning to learn it. (I mean, I learned it, except the headers and CDATA, but I never figured out how to use XPath or XQuery or XSLT or do anything useful with it. I learned just enough to write a toolchain that emits an RSS feed that iTunes is happy with and stopped there. Tidy is your friend.)

Maybe I dodged a bullet. The other day Manton Reece and Brent Simmons came up with JSON Feed, a replacement (or at least an alternative to) Atom and RSS. Suits me. I prefer YAML to JSON, but I’d take either one over XML even if I could only see them upside down in a mirror.

It’s not there any more, but in their first announcement (quoted here), Reese and Simmons committed a gaffe and said what they thought:

developers will often go out of their way to avoid XML. JSON is simpler to read and write, and it’s less prone to bugs.

Duh. But the rationale they state now is still true, if a little less transparent.

While I’m thinking about it: a pet peeve. RSS says that <pubDate> wants an RFC 822 compliant timestamp for feeds, but good luck if you’re in Alaska, which is part of the US not in the big four time zones. (Use Zulu -0900 instead.)

Updated. More brutal honesty:

Reece and Simmons decided the time was right to build an updated syndication format, as more and more developers are refusing to work with XML.

“I believe that developers (particularly Mac and iOS developers, the group I know best) are so loath to work with XML that they won’t even consider building software that needs an XML parser,” Simmons said. “Which says to me that JSON Feed is needed for the survival of syndication.”

Gosling on Electrical Engineers

James Gosling may use emacs, but apart from that, he’s clearly not stupid:

computers were showing up in all kinds of embedded devices, like TVs, VCRs, elevators, locomotives and cellphones and all that. But it was all being done by electrical engineers and they were all reinventing computer science in the most crazy, retro backward way…. They were inventing network protocols that were just laughably stupid.

iMac configuration

I mentioned previously how I’ve rehabilitated the 10-year old iMac. Today, I’ve been setting up the software environment.

First, I transferred my iTunes library over to the new computer.

Then I installed some non-Safari browsers: Chrome, Firefox, and Brave.

Then I set up Homebrew, and after that, ruby:

$ brew install openssl # various messages because Apple doesn’t like openssl
$ brew install sqlite pcre
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ rbenv install -l
$ rbenv install 2.4.1 # (as of May 19, 2017)
$ hash -r # rehash your environment

Setting Up Homebrew on my New Old Mac

I set up Homebrew on my iMac. (If you go to their site, the Homebrew project has documentation there, which explains the whole not-use-sudo philosophy and using /usr/local now that Apple makes it hard not to, but I don’t understand it, so it seems like an invitation to having your machine rooted. But I’m a greybeard and I quit understanding internet security back when we used uucp because we didn’t have a real internet. Hopefully someone has thought it through.)

Because I’m too lazy and ignorant (and possibly stupid) to RTFM, I found a set of color-by-number instructions handy, although I didn’t use anything after XCode (a mere 4GB download) and Homebrew.

$ brew doctor
$ brew update
$ brew doctor
$ brew install {lots of good stuff}

At some point I ran into keg-only and Cellar jabber jabber messages, but (see above) I don’t understand any of that. I just take whatever advice brew doctor gives me and move on from there.

Some of the things I always want on a new Mac (or even one that’s 10 years old) include:

$ brew install imagemagick --with-fontconfig
$ brew install colordiff pwgen tree wdiff pstree
$ brew install pngquant
$ brew install jhead antiword poppler
$ brew install sox lame eye-D3
$ brew install gnupg
$ brew install sqlite

Moving iTunes from one mac to another

The biggest single reason I wanted to fix my old iMac was to put a honkin’ big HD in it, and the reason for that was so I could have an iTunes library on the main hard drive instead of an external (USB 2.0) drive. My iTunes Media folder looks like this:

32 Books
60 Tones
740 Home Videos
6886 Mobile Applications
10791 TV Shows
53041 Movies
84845 Podcasts
95847 Music

Why iTunes doesn’t let us manage our storage intelligently is a mystery (especially given the ridiculously small storage options that Apple provides its Macs, and all their other devices for that matter). But now I’ve got plenty of room to store 250 GB of media in the iTunes folder as well as the different places I keep it for real. So there.

The only problem was getting it into the iTunes folder, in a way that iTunes understands. But this is a known problem, and Apple has a documented procedure.

Then I had to Authorize my computer (the “new” iMac) and Deauthorize the old one (the Mac Mini). I don’t know how Apple keeps track of what computers have been authorized, but they decided this one was already Authorized, from back when it was our main computer. I don’t know if I forgot to Deauthorize it or what, but now I’ve only got 2 of 5 Authorized computers.