Category Archives: Technology

Rust Command-Line Utilities

I’ve been learning (or maybe beginning to learn) the Rust programming language. (It was a toss-up between that and Go, and I probably picked wrong, but I won’t know until I know a lot more than I do now.)

  • Tokei (for counting source code lines) and
  • diffr as an alternative to colordiff
  • ripgrep as an alternative to ack (etc.)
  • just as a command runner (think “make”)
  • lsd and exa as replacements for ls
  • pastel for working with colors on the command line
  • skim (not to be confused with the excellent Skim) as a fuzzy finder
  • dust, dutree, and dua-cli as replacements for du
  • bat (“better cat”) and mdcat (cat for markdown)
  • starship (prompt)

I’m only beginning to play with these. But I was surprised to see so much activity developing command line utilities. There is some misunderstanding of the Unix philosophy, but it’s understandable (cat isn’t for viewing files, but of course that’s how most of us use it). Yay open source!

Duplicate Files

I’ve been hoarding data for more than 20 years. For backups, I used to burn a CD periodically, but I long since ran over those limits. Today, my backups are hard drives. One reason is that I’ve moved between computers several times during that period, and when I do, I find stuff I don’t know what to do with. So I copy all that data into a new folder, typically called something like temp/backup/that-system-name/tmp/old/save/keep/t.files/save.d.

After 20 years, that starts to add up. So I’ve been looking at programs to help me find and get rid of duplicates. (I’ve been using rsync -n, and occasionally diff -qr, to compare folders. But the problem is deciding what folders, at what places in the directory structure, to compare.)

So I’ve been looking to see what kind of tools are available to help. At this point, I looked at duff, jdupes, and dupd.

So far, I’ve focused on dupd. It does what I was thinking needed to be done: crawl the entire hierarchy and save the result as a database.

MacPorts revisited

I’m setting up my new (old) iMac and I thought I’d give MacPorts another try. I used it since the late 2000s. (I forget why I moved from Fink to MacPorts.) For the last five (?) years or so I’ve used Homebrew, but I’ve always been uneasy about making /usr/local writable, and never convinced by the blandishments on the Homebrew site. I heard about Nix, but before I tried something really different, I thought I’d give MacPorts another look.

So far, so good. I prefer to need sudo to install software. The only real problem I’ve encountered is that the MacPorts version of Pandoc is so old it can’t read docx files. (#sad!) But Pandoc has its own installer, so I’m trying that out too.

What I did after installing Linux

I had a hard drive fail on my laptop, so I put the best parts of several broken machines together into a sum-greater-than-the-whole new machine. Right now, I’m installing Ubuntu Linux 19.04. And, since it’s been a long time since I blogged what I do afterward, here is the mid-2019 edition.

References: the usual “what to do” blog posts, e.g., this, this, and this.

Start by installing updates:

$ sudo apt update && sudo apt dist-upgrade

Then gnome tweaks, to make your GUI act less lobotomized:

$ sudo apt install gnome-tweaks

The specific tweaks I want are left-side buttons, static workspaces, desktop icons for home but not trash, the size of the monospace font, and (since this is a 13″ laptop) the scaling factor. I also add a percentage to the battery indicator and weekday to the clock. While I’m monkeying around with my settings, I set up night mode. And then I make sure that Alt-Tab behaves correctly. (See here.)

Then I install the usual assortment of web browsers:

$ sudo apt install chromium-browser

(I also install Google Chrome from a .deb I download from their website.)

Then a whole bunch of things I need:

$ sudo apt install caffeine
$ sudo apt install vim

Then, before I forget, I install libreadline for other things to use:

$ sudo apt install libreadline-dev

Next, I finish installing the usual software subjects:

$ sudo apt install imagemagick colordiff jhead wv pandoc abiword antiword eyed3

Stuff from other systems

Then I’m ready to start pulling things from other machines. The easiest way to do that is to go over there and rsync them to me. So:

$ sudo apt install openssh-server
$ ssh-keygen  # hitting ENTER at each prompt
$ ssh-copy-id {whatever the other machines are}

Then I pop over to those machines and send the appropriate contents back here.

Ruby

Then I install ruby so I can use all the ruby tools I’ve developed over the years:

$ sudo apt install libssl-dev zlib1g-dev
$ git clone git://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone git://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ cd ~/.rbenv/plugins/ruby-build
$ hash -r  # might not be necessary
$ rbenv install ( --list | some-version )
$ gem install coderay csv fileutils kramdown mini_magick optimist pericope pry tty-color tty-command tty-screen tty-table zxcvbn-ruby

More Software

Also Telegram, if this machine will be used for your private messaging.

And Dropbox.

Linux Setup

For about two months, I’ve been thinking about migrating to Arch and using i3wm. I’m not doing it today, but I’m making a note here so that, when I finally do, I’ll know how long I thought about it before doing it.

Replacing a 27″ iMac Hard Drive

I picked up a gorgeous 27″ iMac at the last UAA Surplus sale. But the fans run. A lot. I think someone put a new hard drive in it without considering how Apple makes everything as hard as it can possibly be.

Here’s some details on the problem. Apple has its own way of sensing the temperature on the hard drive. Because of course they do. And unless you get an Apple branded hard drive, or want to short the pins on Apple’s HD cable, you have to get a thermal sensor cable from OWC. It only costs $40, plus another $10 to ship to Alaska. (Or you could check first, like I should have, and find out it’s cheaper on Amazon, and you get free Prime shipping too. Sigh.)

Sigh. But! If get it working properly again … I’m telling you, this machine is gorgeous:

The dim monitor on the left is a perfectly adequate HD display from Dell.

Linux on Old Macs

I was recently given a second 20″ iMac 2007 to go along with the first. They’re beautiful machines, but Apple doesn’t want me to keep using it, so they’re making all their software not work on it anymore. So I’ve been wondering how they’d do as Linux machines.

Apparently, it isn’t very easy to get an old iMac to boot a Linux system. I don’t think I have a Firewire cable, much less a HDD enclosure with a Firewire interface.

Mojave Finder Misfeature

MacOS X has a feature that nobody else has: Miller Columns. (There were evidently once a few Linux file managers that implemented it, but I’ve never seen it, and I’m too lazy to track them down. OpenStep did, which was where I first encountered them, but that was a straight knockoff of NeXTSTEP. Besides, nobody uses a bare Window Manager any more. The hipsters these days are all about desktop environments and— Hey! You kids! Get off my lawn, you kids.)

Miller Columns, we were talking about. Neat feature. It’s been there forever. Since before it was MacOS X.

So of course, in Mojave, Apple screwed it up. Behold:

The preview (right-most) panel used to provide some useful information. Now it has a button that enables you to see some useful information. THANK YOU SO MUCH, APPLE.

Issues with printing PDF from Preview since updating to Mojave

Mojave removed the ability of Apple’s apps (preview, pages, etc.) to print using the Konica Print drivers. There’s a Konica driver, but Apple’s “Library Validation” means that Apple’s apps won’t use it. (I assume they enforce the same rules for software from the App Store, but I haven’t checked.) In order to get the full use of a driver, you have to use a 3rd party. Do that and you have access to all the features in the Konica print drivers.

I imagine that other vendors of fancy printers with non-basic features provide their own client software, like the weird little apps that come with inkjets and scanners. Those apps can use the full feature set of their vendors’ libraries. But nobody else can, if they’re using library validation.

So the solution is to NOT USE APPLE APPS (or presumably App Store Apps) to do your printing. Use 3rd party apps like Chrome or Acrobat, so you can get access to the print driver’s feature set. See more in this post.

This strategy works, if you think of computers as basically glorified iPhones with a walled garden of curated apps that your grandmother can safely use on the internet. But if you think of them as general purpose devices, with a huge ecosystem of applications to leverage to create value, well, good luck with that. “It just works” has been grayed out. You can learn more at the Apple developer forums (from this link: https://www.google.com/search?q=10.14+library+validation). See also this from Xerox.

Cross posted from the Apple Support Forum, in case it disappears there.

UPDATE. I saw this too late. Try creating “presets” in the 3rd party app, and then using that from within the crippled Apple app.

Cool MacOSX feature

I’ve found it increasingly hard to approve of Apple for the last while (like seven or eight years) so I wanted to point out something I like. I don’t know when it appeared, but I only just noticed it myself.

You may have noticed that MacOSX apps are good at tracking changes to the filesystem. You can be editing a document in one app, and you change it’s name in the Finder (or the Terminal) and the first app notices that and doesn’t try to save it under the original name. Good job, Apple. All the OSes should do that.

But here’s the feature I just noticed. I’m downloading a file (using a non-Safari browser) and I notice that it looks like this in the Finder:

Notice the grey progress meter next to the file? Pretty slick. I don’t know what the API requires on the part of the web browser, but it’s nice that the rest of the OS can be aware the file is open (easy enough) and it’s 85% done (pretty impressive).