Write id3 tags based on filename with Mac OS

Throughout my various backup schemes, my id3 tags get clobbered. I wrote a script to rewrite the tags based on the filename and directory structure of an mp3 collection:

ID3 Tag Namer Script

As the comment in the script says:

 * Music needs to be in /Users/username/Music/
 * in format Artist/Album/00 Title.mp3
 * id3lib required

You can get id3lib with homebrew: `brew install id3lib`

Tiling App for Mac OS

Coming from Windows and Linux distros, I was used to using a tiling application with my desktop. This is a program that allows you to move windows to fill certain portions of your display with keyboard shortcuts. For example, in Windows 7+, holding down the windows key and pressing left or right will fill the left or right half of the screen with that window.

If you’re looking for this on Mac OS, check out Spectacle. It works great and it’s very customizable.

Update June 8, 2020: Spectacle is no longer supported so I have switched to Rectangle.

Raspberry Pi Keeps Rebooting

For a while now, I’ve had issues with my Raspberry Pi rebooting by itself. At first I thought I was drawing too much power with the items I had plugged into the USB ports. So I unplugged them both (an external hard drive and a USB WiFi dongle), but the Pi kept rebooting. Finally, I remembered that I had traded the power supply out to use as my phone charger a while back. It turns out that the new power supply I was using is only rated at 550 milliamps. That’s a lot less than the old supply I was using, which was 1 amp or 1,000 milliamps.

It turns out the recommended power supply should provide at least 1.8 amps for my Raspberry Pi Model B+. So 550 mA was just not going to cut it.

Even though the Pi uses micro USB for power, you can’t just plug in any charger or power supply that will fit. Look for a 2 amp supply, like this one: EasyAcc 5V 2A Micro USB Charger. Or check out other options on Amazon.

My Raspberry Pi set up, for reference:

  1. Raspberry Pi Model B
  2. Toshiba 1 TB External Hard Driv
  3. Edimax WiFi Dongle

Check out more posts about the Raspberry Pi here: Raspberry Pi Posts

How to Stream Videos from a Raspberry Pi to a Smart TV


Install and configure minidlna on your Raspberry Pi and make sure it’s on the same network as your Smart TV. Your TV’s media playing application should see the Pi on the network and let you browse and play videos on the Pi.

More In-Depth Guide

First you need to install minidlna on your Raspberry Pi:

sudo apt-get install minidlna

minidlna’s configuration file is located at /etc/minidlna. We want to edit this to point to our video files:

sudo nano /etc/minidlna

Around line 25, your media folder is set:


You can either change that to something like


or link your video folder there with this command:

sudo ln -s /home/username/videos /var/lib/minidlna

Finally, restart the minidlna service:

sudo service minidlna restart

Now you’re Smart TV’s media application should be able to find your Pi if they are on the same network.

Check out more posts about the Raspberry Pi here: Raspberry Pi Posts

Remove Desktop GUI from Raspbian

If you’re looking to save some space on your Raspberry Pi (mine runs on a 4 GB SD card), run these commands to remove all desktop/gui-related programs:

sudo su

apt-get install deborphan -y

apt-get autoremove --purge \
libx11-.* lxde-.* raspberrypi-artwork \
xkb-data omxplayer penguinspuzzle \
sgml-base xml-core alsa-.* cifs-.* \
samba-.* fonts-.* desktop-* gnome-.* -y

apt-get autoremove --purge $(deborphan)

apt-get autoremove --purge

apt-get autoclean

That will remove the desktop programs and any orphan programs left behind.

Check out more posts about the Raspberry Pi here: Raspberry Pi Posts

The Random Information Post

This is a sort of catch-all post that will house random coding/sysadmin things I don’t use enough to memorize.

Network Drives

Mount a volume over SSH

sshfs -p 2345 -o IdentityFile=~/.ssh/id_rsa user@domain.com:/remote/path /target/path


Compress a mysqldump

mysqldump -u user -p -B database_name | gzip > ~/backups/backup1.gz;


Merging AVI files

mencoder -noskip -oac copy -ovc copy `ls 20150203*avi` -o digest.avi

add -mc for audio sync

Renaming files using regular expressions

I had a bunch of backed up files with names like:

* 201506.pdf_2015_10_08_160622
* 201507.pdf_2015_10_08_160622

To remove the timestamp suffix, I used the rename utility. I had to install it with homebrew in Mac OS, but it works great:

rename 's/_2015_[0-9]{2}_[0-9]{2}_[0-9]{6}//' 2015*

ran in the above directory will give files named

* 201506.pdf
* 201507.pdf

Securely Wipe Drive

dd if=/dev/zero of=/dev/sdX iflag=nocache oflag=direct bs=4096

Convert all mkv files to mp4 in folder

for f in *.mkv; do avconv -i "$f" -codec copy "${f%.mkv}.mp4"; done

How to Fix the “VT-x is not available” in VirtualBox

I recently ran across this error when moving a VM to a different machine. To fix it:

  • Close VirtualBox
  • Go into the VM folder (usually inside a folder like VirtualBox VMs) and open the text file ending in .vbox.
  • Look for a line like <HardwareVirtEx enabled="true"/> and change it to <HardwareVirtEx enabled="false"/>.

That should fix the “VT-x is not available” error.

Rsync, Mac OS, Debian, and Modified Times. Oh My.

While writing a backup script to back up my data from Mac OS to a Raspberry Pi, I ran into an issue with relative modification times of the files being transferred: rsync thought every file on the Mac side was always more recently updated than on the Debian side.

I was using the -a flag for archive mode, which includes, along with a few other things, rsync’s default behavior of comparing file size and last modification time. The two OS’s weren’t agreeing on the times, however, so each file was copied over every time I ran the backup command.

To avoid this, I started using the -c flag, which compares the checksum of each file on both systems. This resulted in what I wanted: if I changed only one file, then only one file was sent to the backup and it is now very fast. So if you’re having this problem, use the -c flag for faster backups. Here’s my rsync command and flags in case you’re curious:

rsync -rc --progress --delete --exclude-from 'backup_exclude.txt' \
/home/myuser/ /media/treddell/backup_folder/

Installing a Printer in a Windows 7 Virtual Machine with an Ubuntu Host

I recently needed to print a document using a website that wanted to run a Java applet on a Windows machine. After a bit of work I had a Windows 7 virtual machine guest printing to a printer connected to the Ubuntu host machine. I’ll go through the steps to do this here in case I need to do it again or someone else is stuck trying to accomplish the same thing.

Install VirtualBox from Oracle

In the past I was fine using the VirtualBox version from Ubuntu’s repository. This works great if all you need is encapsulated in the VM you’re working with. However, once you want to interface the VM more closely with the host OS, you can run into trouble. Apparently there is some functionality missing when it comes to passing USB devices through to the guest machine using the open-source VirtualBox version. So make sure you go to Oracle’s VirtualBox download page and get the Oracle version: Download VirtualBox.

Install Guest Additions

Next install guest additions. After your guest OS (Windows 7) is installed, boot it up and click on the “Install Guest Additions” option in the “Devices” menu of the VirtualBox window running the OS.

Install the Extension Pack

Now you need to install the “Oracle VM VirtualBox Extension Pack”, also found on the Oracle VirtualBox download page. After downloading it, simply double click on it in your file manager. At this point I got an error saying

The installer failed with exit code 127: Error creating textual authentication agent: Error opening current controlling terminal for the process (`/dev/tty’): No such device or address.

It seems that VirtualBox needs different permissions to install the extension pack, so I closed VirtualBox, opened my file manager as root (sudo thunar or sudo nautilus) and double-clicked it again.

Add user to vboxusers

Add your user to the vboxusers group that VirtualBox should have created upon installation. Do this with the following command:

sudo usermod -aG vboxusers yourusername

Select the printer as a USB device

At this point I recommend shutting down the Windows 7 guest and rebooting your Ubuntu host, just to as superstitious way to make everything “kosher”. Now, after booting the VM again, you should be able to select your printer in the Devices>USB Devices menu. Once you select it, there will be check mark beside it and Windows 7 should see it and start installing drivers for the printer.

After that has completed, you should be able to print using your printer as if the VM were physically connected to it.