2011
09.23

So I’m trying the i3 window manager once again. Version 4 has some nice new features.
The bar that shows which workspace you’re on at the bottom of the screen is drawn by an application called i3bar. If it’s started with the parameter -m, it will only be displayed while the Mod4-key (Windows key) is pressed.

Edit: Although i3bar is started differently now, the mod described here still works.

Unfortunately I use the Alt-key to control my window manager, so this feature is only semi-useful to me.

Here’s how to change the behaviour of i3bar -m so that it’s displayed when the Alt key is pressed:

Step 1: Grab the source code of i3 (Version 4.0.2 is the current version right now).
Step 2: Open the file i3bar/src/xcb.c
Step 3: Change “Mod4Mask” to “Mod1Mask“. In 4.0.2, this is in line 458.
Afterwards, the line should read:
modstate = mods & Mod1Mask;
Step 4: Go to the i3bar directory, run make there, then run make install.
Step 5: Restart i3bar.

2011
07.06

Wer Firefox benutzt, dem ist vermutlich aufgefallen, dass auf meiner “Landing Page” der große Schriftzug in der Mitte bis gestern in einem helleren Balken stand.
Screenshot Landing Page mit dem Farbfehler
Das war so nicht geplant, denn in der CSS hatte ich als Hintergrundfarbe für die Seite #121212 eingetragen, was die gleiche Farbe wie der Hintergrund der PNG-Dateien, die den Schriftzug darstellen ist.
In der Firefox-Version, die ich damals benutzt habe, sah das auch sauber aus, genau wie in der aktuellen Chromium-Version. In neueren Fireföxen jedoch wurde das PNG zu hell, nämlich mit der Farbe #191919, dargestellt, das Umschalten des gfx.color_management.mode änderte daran auch nichts.
Eine schnelle Internetsuche brachte mich zunächst zu einem Artikel, der erklärt, dass in PNG-Dateien Gamma-Korrektur-Informationen gespeichert werden, und ein Windows-Tool empfiehlt, was diese entfernen kann. Ein Windows-Tool war nicht ganz das, was ich gesucht hatte, und so landete ich schließlich auf dieser Seite.
Dort wird ein Programm namens pngcrush erwähnt, zusammen mit einer Kommandozeile dafür, die sowohl die Gamma-Information als auch sämtlichen anderen Informationen, die Firefox benutzt, um die Farben in einem Bild anzupassen, aus der PNG-Datei entfernt, und ihn so dazu zwingt, die Farbwerte genau so anzuzeigen wie sie im Bild enthalten sind.

2011
07.01

It’s time to blog about my .vimrc — maybe someone finds some useful lines in it. It has grown over the years, aggregated from various sources all over the nets, and also includes some stuff I figured out myself.

The first few lines adjust some default settings like line numbering, etc.

set number
set lbr
set fdc=0
set vb
set expandtab
set shiftwidth=2
set tabstop=2
set linespace=0
set autoindent
set smartindent
set mouse=a
set cursorline
syntax on
set showcmd

set autowrite
set noautochdir

The more interesting options are autowrite and autochdir. autowrite automatically saves everyting when you do a :make, and autochdir automatically sets the working directory to the directory where the file in the current buffer is. I disabled this though, because I got used to manually changing directories again.
Yes, I use space indentation where I have the choice.
Next are some key mappings:

nmap <silent> <c-n> :NERDTreeToggle<CR>

set hlsearch
map <silent> <c-k> :nohlsearch<CR>

map j gj
map k gk

The first mapping is for the NERDTree-Plugin, a little file browser for vim.
The hlsearch option activates the highlighting of all hits when you search for something with / or do a search and replace. When I press Ctrl-K, the highlighting is disabled. It automatically re-activates the next time I search for something though.
I mapped j and k to gj and gk respectively, so the cursor always goes straight up or down when I press k or j, even when I’m going through long lines which wrap at the right end of the screen.
The next part is commented out, but I’m including it anyway because I still think it’s a useful feature:

"set list
"set listchars=tab:»·,trail:·
"hi SpecialKey ctermfg=cyan

This shows little arrows for tabs and dots at the end of lines with trailing spaces.
The next part makes the status line at the bottom of the windows a bit more populated:

set laststatus=2    "make a status line above the command line. otherwise this won't work
set statusline=     "clear statusline
" set statusline+=%#comment#           "make the statusline comment-color
set statusline+=%-3.3n\                      " buffer number
set statusline+=%f\                          " file name
set statusline+=%h%m%r%w                     " flags
set statusline+=[%{strlen(&ft)?&ft:'none'},  " filetype
set statusline+=%{strlen(&fenc)?&fenc:&enc}, " encoding
set statusline+=%{&fileformat}]              " file format
set statusline+=%=                           " right align
set statusline+=%{synIDattr(synID(line('.'),col('.'),1),'name')}\  " highlight
set statusline+=%b,0x%-8B\                   " current char
set statusline+=%-14.(%l,%c%V%)\ %<%P        " offset

Here is my tabline:

function! MyTabLine()
  let s = ''
  let wn = ''
  let t = tabpagenr()
  let i = 1
  while i <= tabpagenr('$')
    let buflist = tabpagebuflist(i)
    let winnr = tabpagewinnr(i)
    let s .= '%' . i . 'T'
    let s .= (i == t ? '%1*' : '%2*')
    let s .= ' '
    let wn = tabpagewinnr(i,'$')

    let s .= (i== t ? '%#TabNumSel#' : '%#TabNum#')
    let s .= i
    if tabpagewinnr(i,'$') > 1
        let s .= '.'
        let s .= (i== t ? '%#TabWinNumSel#' : '%#TabWinNum#')
        let s .= (tabpagewinnr(i,'$') > 1 ? wn : '')
    end

    for j in range(tabpagewinnr(i,'$'))  " show a + if the tab contains modified buffers
      let bufmodified = getbufvar(buflist[j], "&mod")
      if bufmodified
        let s .= '+'
      endif
    endfor

    let s .= '%*'
    let s .= (i == t ? '%#TabLineSel#' : '%#TabLine#')
    let bufnr = buflist[winnr - 1]
    let file = bufname(bufnr)
    let buftype = getbufvar(bufnr, 'buftype')
    if buftype == 'nofile'
        if file =~ '\/.'
            let file = substitute(file, '.*\/\ze.', '', '')
        endif
    else
        if i != t
          let file = fnamemodify(file, ':p:~:.:gs?\([^\/]\)[^\/]*\/?\1/?') " shorten path name to first letter of each directory
        else
          let file = fnamemodify(file, ':p:~:.')
        endif
    endif
    if file == ''
        let file = '[none]'
    endif
    let s .= file
    " let s .= (i == t ? '%m' : '')
    let i = i + 1
  endwhile
  let s .= '%T%#TabLineFill#%='
  return s
endfunction

set showtabline=2 " always show tab line
set tabline=%!MyTabLine()

Most of the code for the tabline is from http://www.offensivethinking.org/data/dotfiles/vimrc.
It shows a nice tab line which shows tab numbers and the number of windows in a tab. I added the display of a path name which is shortened to the first letter of each directory when the tab is inactive. A also added the code that shows a little + in front of a tab name for each window in the tab which contains a modified buffer.
Next is more commented out code.

"set colorcolumn=80,120
"hi colorcolumn ctermbg=NONE ctermfg=red cterm=bold guibg=NONE guifg=red gui=bold

This highlights the 80th and 120th column of each line.
Since I'm mostly using gvim, except for quickly editing some config files, I also have a .gvimrc which sets guioptions=a.
I'm synchronizing these files on my netbook and desktop PC via Unison. Because I want to use different fonts and colorschemes on each computer, my .gvimrc ends with the line source ~/.gvimrc-local, and the .gvimrc-local, which is not synchronized, contains the font and colorscheme settings.

I hope my blog or your browser didn't eat too many of the angle brackets and other special characters in the code fragments.

2011
06.22

Ich benutze Conky, um mir am Bildschirmrand einige Informationen zum aktuellen Zustand meines Rechners anzeigen zu lassen.
Um das optisch ansprechender zu gestalten, habe ich ein paar Icons dazu gemalt: CPU1 CPU2 HDD Memory Plug Speaker Wireless
Wer damit was anfangen kann, kann sie gerne haben (CC-by). Hier sind alle in einer Tar-Datei.

2011
06.20

In den letzten Wochen hab ich, um mich mal wieder etwas warmzuprogrammieren, angefangen ein kleines Spiel zu schreiben. Wer mitspielen will findet es unter http://github.com/ebrnd/caveblobb.

2010
11.11

Unter Linux gibt es eine nette Möglichkeit, immer die Systemlast des Rechners im Blick zu haben, die mit einem netten Lichteffekt verbunden ist: Man kann die Power-LED als “Heartbeat” blinken lassen.

Auf meinem Thinkpad geht das so:
Zunächst muss man das Kernelmodul ledtrig-heartbeat laden, dann schreibt man “heartbeat” in die zur gewünschten LED gehördenden trigger-Datei in /sys/class/leds/, beispielsweise /sys/class/leds/tpacpi::power/trigger.

Die Power-LED blinkt nun bei leerlaufendem System recht langsam, und wird immer hektischer, wenn man den Rechner belastet. Das Grün der Thinkpad-Lämpchen ist dabei so dezent, dass man’s die meiste Zeit gar nicht merkt, aber was nettes zum Ankucken hat wenn man auf das Ergebnis einer Berechnung oder einen make-Durchlauf wartet.

Die Blinkfrequenz hängt übrigens von der durchschnittlichen Systemlast (load average) der letzten Minute ab.

Um das immer beim Systemstart (unter Arch Linux) zu tun, habe ich in meiner /etc/rc.conf in der Zeile MODULES das ledtrig-heartbeat-Modul hinzugefügt, und in der /etc/rc.local die Zeile echo heartbeat > /sys/class/leds/tpacpi::power/trigger.

2010
02.22

Das bei Ubuntu, und generell bei GNOME mitgelieferte Tool gnome-display-properties funktioniert nicht immer wie es soll. Will man beispielsweise einen externen Monitor anschließen und den internen deaktivieren, gehen viele Auflösungen nicht. Auch wenn die native Auflösung eingestellt wird, kriegt man oft die Fehlermeldung “OUT OF FREQUENCY” (sic) vom Monitor. Lässt man den internen Monitor einfach an und schaltet auf Clone, geht’s zwar meist, aber Videos werden nur auf dem internen Monitor angezeigt, wenn man nicht die fies langsame Videoanzeige über X11-ohne-alles benutzt.

Glück: Viele Grafiktreiber können trotzdem was sie sollen, nur das GNOME-Tool schafft es nicht. Hier hilft das Kommandozeilentool xrandr. Gibt man einfach nur xrandr ein, erhält man eine Übersicht über alle erkannten Monitore und deren unterstützte Auflösungen.

Jedem Monitor ist ein “Output” zugeordnet, beispielsweise DVI-0 und, VGA-0 (die beiden Ausgänge meines Laptop) oder LVDS (der integrierte Bildschirm).
Unser Ziel ist hier, den internen Monitor abzuschalten, und den am VGA-Anschluss hängenden externen Monitor auf seiner nativen Auflösung zu betrieben.
xrandr --output VGA-0 --auto schaltet den externen Monitor an, aber nicht zwangsläufig auf die richtige Auflösung. Nun schalte ich per xrandr --ouput LVDS --off den internen Monitor ab. Zum Schluss wird mit xrandr -s 1680x1050 der externe Monitor auf die richtige Auflösung geschaltet.

Vor dem Abstecken nicht vergessen den internen Monitor wieder anzuschalten. Das geht bei meinem Laptop glücklicherweise wenn ich den Bildschirmumschaltknopf (Fn-F7) ein paar Mal drücke automatisch richtig.

2010
02.14

In meiner Computerumgebung hat sich in den letzten Wochen viel getan. Ich habe rausgefunden, dass ich mit einem Tiling Window Manager recht gut zurechtkomme. Bei GNOME hab ich ja immer recht viel Zeit damit verbraucht, meine Fenster hübsch anzuordnen: So dass ich alle sehen kann, dass sie sich möglichst wenig überschneiden, dass sie schön übereinander sind,…
Seit einiger Zeit nutze ich nun wmii, was mir genau diese Arbeit abnimmt. Das einzige, was ich dabei vermisse ist die Möglichkeit, wenn mir langweilig ist auf dem Desktop Icons zu markieren und leere Rahmen aufzuziehen.
Und als ob so ein Fenstermanager ohne Komfortfeatures in den Augen der meisten Ubuntu-Mäuschenschubser noch nicht schlimm genug wäre, hab ich auch noch Arch Linux installiert, denn Ubuntu ohne GNOME fühlt sich an wie die Schubkarre, auf dem normalerweise der GNOME-Kram rumliegt, leer vor sich herzuschieben. Wenn ich schon nur einen Rucksack trage, dann brauch ich auch keine Schubkarre mehr. Dass ich mit meiner Metapher spätestens jetzt an die Wand gefahren bin merke ich daran, dass ich nicht wirklich ausdrücken kann, was der Teil des Ubunterbaus, den ich weiter verwende (gnome-settings-daemon, pulseaudio, …) darstellen soll. Vielleicht die Kabel, die aus dem Rucksack raushängen (andere Geschichte).

Das erste Projekt um mir wmii schöner zu machen hat auch schon Früchte getragen, und zwar die hier.

2009
11.19
In Meta

Wenn ihr das hier lesen könnt, dann sind die DNS-Einträge umgestellt und ihr seht mein neues Blog. Ich habe den Hoster gewechselt, weil ich mittlerweile keinen Vserver mehr brauche und etwas Webspace für meine Zwecke ausreichend ist.

Außerdem läuft mein Blog jetzt auf WordPress und nicht mehr auf Serendipity. Mit Serendipity war ich nie unzufrieden, ich möchte nur mal was Neues testen. Bis jetzt scheint mir WordPress jedenfalls wesentlich komfortabler.

Ich habe versucht alle Einträge und Kommentare zu übernehmen, dem ersten Anschein nach scheint das geklappt zu haben. Auch die Feeds sollten unter den alten URLs weiterhin erreichbar sein, vorrausgesetzt ihr verwendet die Domain und nicht die IP meines alten Servers. Sollte doch was tot sein, bitte in den Kommentaren melden!

Ich hab mir vorgenommen, im neuen Blog Kategorien und Tags zu verwenden. Ob das bei der Flut an Einträgen die ich täglich generiere Sinn macht bezweifle ich noch immer, aber vielleicht hilfts ja den Suchmaschinen oder so.

2009
11.06

So, noch ein Eintrag über das Problem mit Liferea.

Ich habe mittlerweile auf Ubuntu 9.10 Karmic Koala ge-up-date-t. Und natürlich war erstmal wieder Liferea unbenutzbar. Dieses Mal hat der Fix, den ich gepostet habe, auch nicht wirklich funktioniert. Ich habe allerdings rausgefunden, dass das Problem nur mit ext4 auftritt.

“Lösung”: Eine kleine Datei (50MB) angelegt, mit ext3 formatiert und per loop eingebunden. Auf diesem Dateisystem liegt mein .liferea_1.6-Ordner. Fertig. Und nun läuft Liferea wieder vernünftig.