Shooting An Iceray

So I am working on learning a few things, all at the same time. The coolest thing is Go, the “programming environment that makes it easy to build simple, reliable, and efficient software” from Google. But I’m also playing with GitHub, as the whole environment can be tightly integrated with it. And so, by extension, I’m playing with Git. More on all of those at a later, probably over on my Daemon Dancing In The Dark more generalized Linux blog.

Anyway, I’m working on a program I call Iceray. It is a command line application that will send MP3 files to an Icecast / Shoutcast server, like my Vehement Flame radio station. I wanted something I could run that would just feed the server without me handholding it.

So I went to work on packaging it up and finally got a PKGBUILD to work. I spent way too much time working on it, especially when it turned out the Go Packing Guidelines wiki page is pretty good. The sample PKGBUILDs should have worked better for me, but I got a few of my streams crossed which took me out of my game for a bit.

The first thing was actually in my Go program. I changed all the package declarations to be ‘package iceray’, not realizing that if it isn’t ‘package main’ it will build a library and not an application. And I also had the _gourl in my PKGBUILD wrong, in that I originally created it as a Git package, so I had the git: protocol in there.

And the page is still a little confusing, in that I needed to use a combination of the sample PKGBUILDs. While iceray in the end boils down to an application, I still found it necessary to use ‘go get‘ in the build() routine, because I don’t think ‘go build‘ pulls in the necessary remote libraries (I use go-libshout, gcfg, and go-id3). And the application ones use the path “$srcdir/$pkgname-$pkgdir”, but “$srcdir” worked just fine for me. So here’s the final PKGBUILD:

# Contributor: Jonathan Arnold <jdarnold@buddydog.org>

pkgname=iceray
pkgver=0.2
pkgrel=2
pkgdesc="Icecast/Shoutcast commandline client"
arch=('i686' 'x86_64')
url="https://github.com/jdarnold/iceray"
license=('MIT')
depends=('libshout')
makedepends=('go')
conflicts=('iceray')
provides=('iceray')
options=('!strip' '!emptydirs')
_gourl="github.com/jdarnold/iceray"
install=${pkgname}.install

build() {
    cd "$srcdir"
    GOPATH="$srcdir" go get -v -x ${_gourl}/...
}

package() {
    install -Dm755 "$srcdir/bin/$pkgname" "$pkgdir/usr/bin/$pkgname"
    install -Dm644 "$srcdir/src/$_gourl/iceray.gcfg.sample" "$pkgdir/usr/share/$pkgname/iceray.gcfg.sample"
    #install -D -m644 iceray.1 $(DESTDIR)$(MANPREFIX)/man1/iceray.1
}

So, in the end, the PKGBUILD was pretty simple, despite my flailing about. Hope this helps someone else!

AUR (en) – iceray.

gcc-libs / gcc-libs-multilib conflict

My morning updating ritual was interrupted by an annoying question from pacman:

$ packer -Syu
:: Synchronizing package databases...
core 106.7 KiB 650K/s 00:00 [######################] 100%
extra 1422.5 KiB 1151K/s 00:01 [######################] 100%
community 1786.4 KiB 927K/s 00:02 [######################] 100%
multilib is up to date
:: Starting full system upgrade...
resolving dependencies...
looking for inter-conflicts...
:: gcc-libs and gcc-libs-multilib are in conflict. Remove gcc-libs-multilib? [y/N] ^C

That’s no fun. I can’t be removing gcc-libs or things will be blowing up. But why is it asking me to remove gcc-libs-multilib anyway? As a multilib dependent 64bit OS user, I can’t replace that. Luckily, I happened to check the forums this morning and someone else ran into this same problem. Turns out that for me, anyway, I had a tool that still relied on gcc-libs, as I hadn’t replaced it with its -multilib doppleganger. In my case, I had libtool and I should have had libtool-multilib. Not sure exactly how I got in that state. You wouldn’t think it would let me replace gcc-libs with gcc-libs-multitool if there were things that depended on it. But I guess it says it provides ‘gcc-libs’, so libtool was happy. But when it came time to upgrade, it wanted to use gcc-libs.

So to fix it I merely installed libtool-multilib, allowing it to replace libtool. Then my upgrade went as planned, as there wasn’t anything asking for gcc-libs any more.

Here’s the list brain0 posted in the forums, saying if you replace one of them with its multilib compatriot, you need to replace them all:

inutils-multilib
gcc-ada-multilib
gcc-fortran-multilib
gcc-go-multilib
gcc-libs-multilib
gcc-multilib
gcc-objc-multilib
libtool-multilib

conflict between gcc-libs / gcc-libs-multilib (gcc-objc related) (Page 1) / Pacman & Package Upgrade Issues / Arch Linux Forums.

iedit for Emacs

Just added a new package to the AUR for iedit, which is a pretty cool mode for Emacs to edit in place a bunch of regions containing the same text. See this post by Mastering Emacs for some usage and a nice little defun to narrow the changes to the current defun:

IEDIT: INTERACTIVE, MULTI-OCCURRENCE EDITING IN YOUR BUFFER

AUR (en) – emacs-iedit-git.

New Desktop

I decided to try a new window manager [1], just because I hadn’t wasted enough time on just fiddling with Conky [2]. I’m not really into a tiling window managers, even though I have plenty of display space (2 1920×1080 monitors). I had been reading in the Arch forums about GOOMWWM [3] (Get Out Of My Way Window Manager) and looking at the goomwwm web page for it[4] made me think that despite its newness, it looked relatively complete, especially with Xinerama [5] support for my dual monitor setup. So I decided to give it a try.

Trying a new window manager isn’t really that big a deal, especially if you are like me and are lazy hardcore enough to not bother to install a login manager like SLiM and just log in to a text terminal and type startx to bring up X. You just change the window manager that gets exec’d at the end of your .xinitc script to be the one you want. So I changed

exec ck-launch-session dbus-launch openbox-session

to be

exec ck-launch-session dbus-launch `which goomwwm`

and off I went! To be honest, I’m not really sure (a) what the “ck-launch-session dbus-launch” part of the command does or (b) if I really need it (as I just copied it from the openbox Arch wiki page), but I left it in there for safety’s sake.

But with nothing set up, it merely brings you to a blank, black screen. And, as I didn’t have ‘dmenu‘ [6] installed (it should be, I think, at least an optional dependency, as it is prominently featured in the GOOMWWM tutorial [7]), I couldn’t really do anything!

So I went back to the command line and installed dmenu and followed the tutorial, and lo, it was good. Window control is a little more painful with the mouse as you have to hold down the Mod key (left Windows key by default) but is a snap with the keyboard, so that’s okay. The concept of tags for windows that correspond to desktops in other window managers again takes some getting used to but works very well in practice. It’s especially nice to be able to bring up a window on another “desktop” by merely clicking on it.

So then I spent way too much time getting things somewhat customized. I still like blue for a desktop color, so I went over to The Paper Wall to find a few interesting wallpapers and settled on a blue forest [8] as my left desktop and a nice waterfront view of Boston [9] as my right desktop.

Then I went a Conky customizing, which is an endless time sink if there ever was one. Luckily, I discovered this great Conky customizing script called ‘conky-colors‘ [10]. Basically, you pass in a few (or more!) parameters and it creates a stock Conky config file with support scripts and everything. I eventually settled on this for a conky-colors command line:

$ conky-colors –cputemp –theme=human –arch –cpu=4 –proc=5 –clementine=vinyl –calendar –nvidia –hd=default –weather=USMA0245 –photord –network –unit=F –clock=modern –side=left

And then I modified away, mostly to just get the right colors (more blue!). That’s the panel on the left side of the right hand screen. It shows system info, a calendar and clock, a random picture from a folder, what my media player (Clementine) is currently playing, and some more system stats.

The I finally found a script that generated a good Conky weather forecast pane in conkywx[11]. There were a few bumps in the road, but I got them ironed out with the help of the author in the Arch forums and now I have a nice weather panel in the lower right.

So now I just need to get used to goomwwm. I like being able to quickly and easily use the keyboard to move and resize the windows, and even fill the blank space. It can behave a little like a tiling window manager, with commands for windows to swap position, share a position, etc, which I haven’t played with much.

It also has a unique idea about “desktops”. You can tag any window with a number between 1 and 9 and then hit Alt-F[1-9] to bring all those windows with that tag number to the front. The others are still there but just behind. So it is easy to assign windows to different tags and swap between them, but you can also use very easily use windows with other tags by just clicking on them. And goomwwm tells other tools (like Conky) that the tag selected is the “desktop”. Works pretty well.

[1] http://xwinman.org/intro.php
[2] http://conky.sourceforge.net/
[3] https://bbs.archlinux.org/viewtopic.php?id=144038
[4] http://aerosuidae.net/goomwwm/
[5] http://en.wikipedia.org/wiki/Xinerama
[6] http://www.archlinux.org/packages/community/x86_64/dmenu/
[7] http://aerosuidae.net/goomwwm/tutorial
[8] http://thepaperwall.com/wallpaper.php?view=5cddb00435b4ffd1a4d7a08d351723dcee9a3f7d&fol=nature
[9] http://thepaperwall.com/wallpaper.php?view=3b66596749f5d2b44356207bc05a9be32eaa9219&fol=cityscape
[10] https://github.com/helmuthdu/conky_colors
[11] https://bitbucket.org/plikhari/conkywx_pub/overview

My October screenshots. Click to embiggen.

Clean:
Dirty:

Pacman info

I have really become addicted to using the -Qo flag of pacman. This is especially true with the various times I have had to do the painful /usr/lib move, as you need to figure out which package owns the files that are left in /lib. It’s pretty easy, really

$ pacman -Qo /usr/lib/libQtCore.so
/usr/lib/libQtCore.so is owned by qt 4.8.2-3

Very nice. And, even better, I found out you can just omit the full path if it is an executable in your path:

$ pacman -Qo hostname
/usr/bin/hostname is owned by inetutils 1.9.1-4

Nice.

/lib -> /usr/lib fiasco, more

I just updated an ArchBang VM I have and I ran into, once again, the:

News: The /lib directory becomes a symlink

debacle. Yes, it’s been awhile since I tried updating. My main machine actually updated without a problem (at least until the hard drive died). The “easy way” failed. The “hard way” failed. Finally I just did the verboten -f and broke everything.

But I’m glad to report that not only did the process mentioned below work, it completely cleaned up my VM and now we’re on the straight and narrow, vis-a-vis /usr/lib:

/lib exists in filesystem when installing testing/glibc 2.16.0-2 (Page 1) / [testing] Repo Forum / Arch Linux Forums.

archlinux(7)

Thanks to Allan McCrae’s blog post on his switch to systemd, I found out about the archlinux(7) man page, which is quite useful:

NAME
archlinux – basic configuration

SYNOPSIS
Overview of the basic configuration of Arch Linux.

DESCRIPTION
Arch Linux exposes the user to the system without hiding any details. This manpage
gives a brief overview of the configuration files that should be set up on a fresh
install.

Give it a try!

Monitoring

So I got my new monitor today. I have been kind of annoyed since I got this 1920×1080 monitor from work (2 years ago maybe?) that the other monitor I had was 1680×1050. Not that the width mismatch is noticeable but the height one sure is. Without a true rectangular surface, some things are either lost off the bottom, or the mouse doesn’t move smooth across it. So I have been dying to get a 1920×1080 monitor to match it

So Best Buy had a sale the other day and they had a 24″ TV on sale that supposedly did 1920×1080. And that would be perfect. I would hook the PC connections up for my 2 work machines and then plug in the HDMI from the home theater PC to get both video and sound from it. So I bought it and brought it home and hooked it up.

Oops, didn’t work. Turns out, you only get 1920×1080 if you hook it up via HDMI and I needed to use the VGA plug to use with my KVM switch that allows me to share my 4 (!) computers with one keyboard, mouse and one set of dual monitors. You only got some weird screen resolution with the VGA adapter (something like 1300×768 or something like that).

So back it went. Too bad, because I really liked the idea of a remote even. So I decided to think about it some more, as I didn’t see anything at Best Buy that had what I wanted:

  1. 1920 x 1080 via the VGA
  2.  builtin speakers (so I can watch a movie with my home theater PC – my 5.1 Logitech speakers are hooked up to my main personal system).
  3. HDMI input (I didn’t want to be bothered with a DVI->HDMI adapter, as my home theater PC display card has an HDMI connection right on it)
  4. At least 23″ in size

Then I got an email from Newegg, bragging about some monitors. While none of the ones in the advert were what I was looking for, they have a very shopping website that easily allows you to focus in on the features you want (unlike Amazon or, even worse, Best Buy). And I saw this ASUS monitor on sale for $180, with a $10 rebate. Seemed like a nice with all the features I was looking for. So I took the plunge.

And after just 2 days (free shipping even), it arrived today, so I hooked it up. And I am impressed. In fact, the biggest problem with the monitor is that it puts my other 1920×1080 monitor (by Sceptre?) to shame. It is bright, crisp, sharp, really nice. And it worked very well with my home theater PC even. This Asus VH238H Black 23″ monitor is really nice and now I’m thinking I should buy another one, even though I probably can’t get the rebate again.

So now I have a very nice desktop. Two side by side 1920×1080 monitors makes for a pretty sweet layout.

The only real drawback to it is that it is a bit finicky to swap the input. It would have been nice to have a remote to do it. I have to press a front panel button, hit it a few times, select Input, then down arrow a few times to select the HDMI. But I won’t be doing that all too often, so it isn’t too bad. But like I said, I really would like to get another one just like it.

Works great with my Openbox installation on ArchBang. I had to reboot to get the nVidia config to notice I had changed my monitors, but that’s all I had to do. I tell you, rag all you want on the binary nVidia drivers, but they just work.

Android adb problems

If you try to connect to an Android device in Eclipse and get a weird entry for your USB-connected hardware device that has a name that looks something like ‘?????????’, you’re not alone. I guess there is some kind of permission problem and there are a few ways you can find on the web, mostly having to do with a udev rule file. But I found the easiest fix was to just restart the adb server as root:

$ sudo adb kill-server
$ sudo adb start-server

Now when you connect to your device via the Run command, you have your standard device name. Not sure why it works, but I don’t have time right now to figure that out!

Mars Needs New Video Card

I have the Witcher 2 on pre-order at GOG.com and it is the first game where the “minimu” video card exceeds my nVidia 8600gt (it wants at least an 8800). As I have somehow survived for 2 or 3 years with this card, I think I have gotten my monies worth.

I used to be a big ATI fan boi but for lo these many days, I have been using nVidia. The proprietary Linux drivers “just work”, especially with my dual monitor set up. I am a little hestitant to go with the ATI, especially due to the KMS business, which I have never had to bother with using the nVidia card.

But Newegg has the 6870 for only U$167 or the 6950 for US$199 with a sale and a rebate, which is hard to pass up. Both seem to get pretty good reviews for what I’ll be doing – mostly just Linux work, with the occasional boot into Windows to play some (usually trailing edge) games.

Anyone have any feedback on these cards? Is the 6950 worth the extra US$30 (about 20%)? As I keep a card for several years, it’s probalby a good idea to max it out while I can, right?

Newegg.com – XFX HD-695X-ZNFC Radeon HD 6950 1GB 256-bit GDDR5 PCI Express 2.1 x16 HDCP Ready CrossFireX Support Video Card with Eyefinity
Newegg.com – XFX HD-687A-ZNFC Radeon HD 6870 1GB 256-bit DDR5 PCI Express 2.1 x16 HDCP Ready CrossFireX Support Video Card with Eyefinity.