Saturday, October 20, 2012

Ubuntu 12.10 Notes

The Ubuntu 12.10 upgrade  has so far been rather uneventful, in large part probably due to me using XFCE. Some small things I noticed so far:
  • Firefox bugs you with wanting to install Webapp stuff 
  • the separators in the XFCE panels collapsed and needed reexpanding
  • fullscreen seems a bit bugged in combination with multiple monitors, as the fullscreened app will fall into the background when the mouse goes to the second monitor
  • notify-osd still conflicts with the XFCE notification stuff, so it has to be removed
  • Amazon advertising in Unity is rather obscene, as it's right in the launcher
  • no more Linux version number in Grub, it's now just "Ubuntu" 
  • subpixel rendering in Cairo seems fixed
  • automounting works a little different, things now end up in /media//... instead of directly in media
 Other then that, nothing noticeable so far, my graphics driver survived and everything else also seems to continue to work as expected.

Wednesday, September 26, 2012

OpenGL Viewer for 3D models

Resurrected some decade old source code of a simple OpenGL modelviewer along with a Blender export script and started hacking around with GLSL shaders a bit. Very basic stuff, but the results are still kind neat. Doesn't take much to make pretty graphics with OpenGL these days. Anaglyph 3D is provided by the viewer as well:

Source is available at:

Thursday, September 20, 2012

Pulseaudio Fun

One of the really nice thing that Pulseaudio offers is the ability to treat sound output as sound input. For each audio device Pulseaudio has an input device which ends in .monitor that can be used for input. This allows basic things such as recording audio for screencasting, but also more fun things such as quick&dirty sound forwarding over the network via:

parec -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor | aplay -f S16_LE -c 2 -r 44.1

Combined with another ability of Pulseaudio, the null-sink, things become even more interesting. The null-sink is essentially a virtual sound card and can be loaded from command line via:

pactl load-module module-null-sink

Each load-module will create another virtual soundcard. The name of the soundcard can be given via sink_name=myname. One can unload them again via:

pactl unload-module INT

Where INT is the number returned by the initial load-module command. A list of all of Pulseaudios current state, including loaded modules, available soundcards and such can be optained via:

pactl list

Back to the null-sink, everything that goes to the null-sink gets discarded by default, but just like any real soundcard, the null-sink does also have a monitor device. So it is possible to record the sound that goes to a null device via something like:

parec -d null.monitor

Which can be useful when trying to record something non-interactively or without blocking the soundcard.

With the help of pavucontrol, a GUI volume control for Pulseaudio, one can even redirect application audio streams at runtime, thus one can send the sound of an application that is currently playing on the regular soundcard to another soundcard or even the virtual null device. Same is true for currently running recordings.

There are plenty  more modules to play around with, the Pulseaudio Wiki has a list.

Friday, July 06, 2012

clockgr - A simple fullscreen clock for Gtk+

Wrote myself a little quick&dirty fullscreen clock application in Python/Gtk+. The glorious spaghetti code can be found at:

Sunday, July 01, 2012

ZFS on Linux

Quick notes on ZFS on Linux

  • due to license issues, it's not in the kernel, but available as fuse module
  • package is named zfs-fuse in Ubuntu
  • it supports compression and deduplication
  • the open source version does not support encryption, only the newer closed source one does
  • deduplication comes with a heavy performance penality, write speed goes down by a factor of 5 or more, so it's not good for active storage, but still great for backup devices
  • everything is checksummed, so hardware failures will not go unnoticed
  • shrinking a pool is not supported
  • compression and deduplication can be enabled or disabled on a running file system, thus gaining the space saving on a initial copy without the later running cost
  • no more /etc/fstab, zfs has a background daemon that handles mounting
  • manual/legacy mounting does not seem to be supported with zfs-fuse
  • no support for full copy-on-write clones, as clones always carry a dependency to their parent
  • fast snapshots are supported
  • no fsck, but zfs scrub
  • a pool automatically resizes to the underlying block device, restart the zfs-fuse daemon to force it
  • zfs destroy is really slow, taking minutes or hours, not seconds

Quick guide on using ZFS on Linux

Creating a zpool:

sudo zpool create poolname /dev/sdaX

A pool is a collection of physical devices, similar to a volume group in LVM. Pools can be mirrored or RAID'ed, but also just be single partitions.

Creating a ZFS:

sudo zfs create poolname/filesystemname

Unlike LVM where each logical volume is separate, all ZFS file systems in a pool share the same free space, thus no more running out of diskspace before the disk is truly full. Quotas can be used to restrict filesystems to a specific size.

Enabling compression and deduplication:

sudo zfs set dedup=on filesystemname
sudo zfs set compress=on filesystemname

Compression and deduplication can be enabled at any point.

Getting info on the ZFS on the system:

sudo zpool list
sudo zpool status
sudo zfs list
sudo zfs get all

Manually mounting a ZFS:

sudo zfs set canmount=noauto filesystem
sudo zfs set mountpoint=mountpoint filesystem
sudo zfs mount filesystem

Mounting is completely done by the zfs-fuse daemon, not by /etc/fstab, this can be a little confusing at first, but turns out is much easier to use then constantly making sure fstab is up to date. By default ZFS will mount all created file systems to /poolname/filesytem, this can be adjusted via the mountpoint property. Each file system can have it's own mountpoint and doesn't need to be a child of the pool file system. The root file system of the pool should probably be set to mountpoint=none in most cases.

First Impressions after a week

  • checksumming does detect broken hardware as advertised, something that other FS don't do
  • dedup and compression can save a lot of diskspace on space (~50% here)
  • dedup is extremely slow (one fifth the speed or worse)
  • tools are easy to use and well documented
  • mounting is confusing, but works very well once understood 
  • zfs-fuse is very unstable, I had numerous crashes so far (doing copy with dedup of a few gigs of data), filesystems however seem to have survived all of those

Saturday, March 03, 2012

Windows 8 impressions

  • can't be installed on a logical partition, gives “We couldn't create a new partition or locate an existing one”, must use a primary one (primary on second HDD is however fine)
  • install procedure is a bit messy, doesn't have a back button, thus quiting and restarting is the only way to correct a wrong choice in a dialog, which means reentering the product key (had to do that three times before I got it right)
  • start menu is gone, replaced with Metro stuff
  • Metro is very tablety
  • closing Metro apps is complicated and weird, top/left corner, hover, right click
  • shutdown now hides in the Settings dialog, rather weird place for that
  • VVVVVV, MeetBoy doesn't start (might be issue with lack of soundcard drivers, works fine on another computer)
  • Windows 8 boot manager is weird, it gets configured automatically and can boot into my old Vista and Windows8, but it does so not by directly booting into Vista after selecting it from the list, but by rebooting after having made the selection and only then booting into them on the next startup, this makes things very confusing in combination with Grub, also the bootloader is started from the Vista partition (which is on the first HDD), not from the Windows8 partition
  • the way that Metro apps are completely separate apps from regular apps instead of just a special mode is weird and it's not clear what, if anything is shared between regular and Metro apps (i.e. you have IE and you have Metro-IE)

Ubuntu 12.04 impressions

Some quick impressions of Ubuntu 12.04:

  • dist-upgrade went smoothly, no issues
  • xubuntu/xfce seems to have survived so far without noticeable changes
  • bluetooth.h is broken, it's using GNU extension typeof which conflicts with -ansi switch
  • libusb-1.0 stopped working in xboxdrv (might be xboxdrv bug)
  • Emacs ignores things set in .Xdefaults, had to use (set-default-font "Inconsolata-10.5") to get my old font back
  • have some anti-aliasing problems after playing around with Gnome3, KDE and Unity
  • BGR font subpixel rendering is still broken, you get RGB instead (patch is available)
  • volume control in XFCE4 is still broken, but fixable
  • lots of crash dialogs pop up due to some background thing crashing
  • default gtk3 theme under XFCE4 still looks like crap and there isn't a proper way to fix that via GUI, only via a workaround, haven't yet found a Gtk-3.0 theme that replicates the Clearlooks theme

Tuesday, January 24, 2012

xboxdrv 0.8.4 released

  • readded man-page that had gone missing
  • added documentation for --dbus and --ff-device
  • added --dbus option to switch between system and session bus
  • added sequence-key, same as cycle-key but doesn't wrap around
  • added workaround for libudev older then v150
  • added --ff-device DEV to select force-feedback device
  • fixed force feedback getting on the wrong evdev
  • fixed Xbox360 wireless LED not getting properly set on late plugin