Montag, Dezember 24, 2007

Algorithmen - Teil 1: Quicksort

Neulich hab ich versucht, den Unterschied zwischen funktionalen und imperativen Programmiersprachen zu erklären und dabei festgestellt, dass man das am besten anhand von Beispielcode machen kann. Darum habe ich angefangen Quicksort in drei Programmiersprachen (C, Python, Haskell) zu implementieren. Da Perl und Ruby populäre Sprachen sind, die mich schon länger interessieren, sind die heute auch gleich dazugekommen - eine willkommene Gelegenheit für mich, diese beiden Sprachen näher kennenzulernen und gleichzeitig die Unterschiede und Gemeinsamkeiten der einzelnen Sprachen aufzuzeigen.

Bevor's losgeht noch ein paar kurze Bemerkungen:
Die Aufgabe ist mit Hilfe von Quicksort ein Integer-Array aufsteigend zu sortieren. Dabei habe ich nur in C eine In-Place Sortierung implementiert.
Als Pivot-Element wird das erste Element gewählt und mit 'p' bezeichnet. 'a' bezeichnet das Array und 'l' und 'r' stehen für den "linken" (kleineren) sowie den "rechten" (größeren) Teil des Arrays.
Die gezählten verwendeten Codezeilen beziehen sich nur auf die Funktion selber - zusätzliche Zeilen, die zur Ausführung benötigt werden (main()-Funktion, etc.) werden nicht gezählt.
Also, los gehts:

C

  • LOC: 16
  • Bemerkungen: In-Place Sortierung, längste Implementierung

#include <stdio.h>
void qsort(int a[], int len) {
if (len == 0) return;
int p = a[0];
int l = 0;
int r = len-1;
while (l < r) {
if (a[l] > a[r]) {
int tmp = a[l];
a[l] = a[r];
a[r] = tmp;
}
(a[l] == p) ? r-- : l++;
}
qsort(a, l);
qsort(&a[l+1], len-l-1);
}

int main(int argc, char** argv) {
int i = 0;
int test[10] = {6, 4, 9, 1, 2, 5, 3, 8, 7, 0};
qsort(test, 10);
printf("[");
for (i = 0; i < 9; i++) {
printf("%d, ", test[i]);
}
printf("%d]\n", test[9]);
}


Python

  • LOC: 9
  • Bemerkungen: Verständlicher Ternary-Operator

def qsort(a):
if (a == []):
return []
p = a.pop()
l = []
r = []
for e in a:
l.append(e) if (e < p) else r.append(e)
return qsort(l) + [p] + qsort(r)


Haskell

  • LOC: 3
  • Bemerkungen: Kürzeste Implementierung

qsort :: Ord a => [a] -> [a]
qsort [] = []
qsort (p:xs) = qsort([l | l <- xs, l < p]) \\
++ [p] ++ qsort([r | r <- xs, r > p])

(letzte Zeile zur Lesbarkeit umgebrochen)

Perl

  • LOC: 11
  • Bemerkungen: Abgefahrenste Syntax

#!/usr/bin/env perl
sub qsort {
my @l = ();
my @r = ();
my @a = @_;
return () if (@a == 0);
my $p = shift @a;
foreach (@a) {
($_ < $p) ? (@l[++$#l] = $_) : (@r[++$#r] = $_);
}
return (qsort(@l), $p, qsort(@r));
}

print qsort(1, 4, 3, 5, 2, 9, 8, 0, 6, 7);
print "\n"


Ruby

  • LOC: 13
  • Bemerkungen: Python nicht unähnlich

#!/usr/bin/env ruby
def qsort(a)
if !a.empty?
p = a.shift
l = Array.new
r = Array.new
a.each do |e|
e < p ? l.push(e) : r.push(e)
end
(qsort(l) << p) + qsort(r)
else
Array.new
end
end

puts qsort([4, 1, 6, 3, 8, 7, 2, 5, 9, 0])

Die Python- und Haskell-Module habe ich im jeweiligen Interpreter (Hugs bzw. die Python-Konsole) geladen.
Bemerkenswert: C hat die längste Implementierung, ist aber dafür In-Place. Haskell schießt dafür am entgegengesetzten Ende den Vogel ab, mit nur drei Zeilen (von denen die erste noch nicht einmal dringend nötig ist). Und das Perl-Statement
($_ < $p) ? (@l[++$#l] = $_) : (@r[++$#r] = $_);
finde ich dermaßen abgefahren, dass ich mir überlege das auszudrucken und an die Wand zu hängen. Ich habe selten dermaßen viele Sonderzeichen in einer Codezeile gesehen!
Wenn ich Zeit habe, werd ich auch noch Java-Code schreiben. Ansonsten überleg ich mir, was der nächste Algorithmus wird. Dijkstra vielleicht...


Weiterlesen / Read more

Freitag, September 28, 2007

Review - Ubuntu 7.10 Beta

Ubuntu 7.10 Beta Review

Sep 28, 2007 by Andreas Fischer★★★☆☆

Einleitung

Nachdem gestern Ubuntu 7.10 als Beta veröffentlicht wurde, konnte ich nicht widerstehen die neue Version zu testen. Folglich habe ich meinen Rechner noch am selben Abend aktualisiert.

Die Spezifikationen:
  • CPU: 700MHz Athlon
  • RAM: 512 MB
  • Grafikkarte: NVidia GeForce 2 MX
  • Vorheriges Betriebssystem: Ubuntu 7.04

Kurz mit "update-manager -d" das Update erzwungen, ein paar Dialoge durchgeklickt, und dann hieß es erst mal warten. Genauer: 6 Stunden. Allein der Download hat beträchtliche Zeit in Anspruch genommen und beim installieren und einrichten hat sich das Alter meiner Kiste doch deutlich bemerkbar gemacht. Folgendes ist mir dabei positiv/negativ aufgefallen:

Cons

Leider wurde der NVidia-Binärtreiber bei der Installation nicht mitinstalliert, was mir zwar hier die Möglichkeit gab, den neuen Fail-Save Grafikmodus zu begutachten, im Allgemeinen aber trotzdem ärgerlich ist, insbesondere, weil Fail-Save in diesem Fall wirklich nur Fail-Save war: Mein 19" Monitor war auf eine Auflösung von 800x600 bei 60Hz beschränkt. Auch nach der Neuinstallation des NVidia-Treibers brauchte es einen manuellen Eingriff in die xorg.conf, um die Auflösung auf brauchbare 1280x1024 Pixel bei 85Hz anzuheben. Hier versagt leider die neue Autokonfiguration des X-Servers - möglicherweise wegen fehlerhafter EDID-Informationen meines Monitors?
Weitaus unangenehmer war aber das anfänglich recht instabile Verhalten: Einige Programme stürzten ab, der Rechner stand dauerhaft unter Vollast und die Konsole wurde mit Fehlermeldungen zugemüllt. Zudem wurde mein externes Home-Verzeichnis nicht eingebunden. Gut - da hatte ich fast mit Problemen gerechnet, da es verschlüsselt ist. Es dauerte ein wenig, bis ich die Ursache dieser Fehler auf einen bereits bekannten Bug zurückführen konnte. Und in der Tat: nach der Deinstallation des evms-Pakets waren die Probleme gelöst - auch das fehlende Home-Verzeichnis - die Verschlüsselung war anscheinend kein Problem. Ich hoffe allerdings stark, dass obiger Fehler bis zum Erscheinen der offiziellen Version behoben wird.
Vom neuen Hintergrundbild war ich nicht so begeistert - das alte hat mir besser gefallen... aber das ist ja sowieso Geschmackssache.
Jedenfalls waren die Probleme nach einer weiteren Stunde behoben und ich konnte somit nach sieben Stunden anfangen, die Vorzüge des neuen Systems zu genießen:

Pros

Gut gefallen hat mir der neue Fail-Save Modus: auch wenn 800x600 etwas mickrig sind - für den unbedarften Nutzer auf jeden Fall besser, als ihn vor eine Textkonsole zu setzen.
Regelrecht begeistert war ich von der Einrichtung von Compiz-Fusion. Einerseits finde ich die 3D-Effekte angenehm dezent, andererseits lief ein 3D-Desktop auf dieser Kiste noch nie so problemlos: mit Ubuntu 7.04 und Beryl musste ich erst einen experimentellen NVidia-Treiber aus einem externen Repository installieren. Allerdings würde ich mir noch mehr Einstellungsmöglichkeiten wünschen (wo ist meine Expose-Funktion?).
Was auch sehr schön - aber meinerseits eigentlich schon in der letzten Version erwartet - war, war die vollständige Integration von Beagle bzw. Tracker in Nautilus. Jetzt fehlt nur noch eine einfache Möglichkeit, um Such-Anfragen als Bookmarks bzw. virtuelle Ordner zu speichern.
Ein kleines Schmankerl war der geänderte Text beim Sudo-Passwortprompt. Statt einfach "password:" auf die Konsole zu knallen, wird hier darauf hingewiesen, dass an dieser Stelle Sudo nach einem Passwort fragt. Bei verschachtelter Nutzung von ssh, sudo und/oder anderen Passwort-geschützten Programmen konnte da schon einmal Verwirrung herrschen.

Fazit

Alles in allem sieht dies nach einem runden Update aus. Spektakulär wird auf neue Nutzer wohl der standardmäßig aktivierte 3D-Desktop wirken - allerdings gabs den für versierte Nutzer auch vorher schon. Ansonsten sind die Neuerungen teils einfach fällig (Nautilus + Tracker), teils beschränken sie sich auf kleinere Annehmlichkeiten (der kombinierte Erscheinungsbild-Dialog).
Wegen des groben Fehlers beim Update, der doch etwas Hintergrundwissen verlangte (remote über ssh einloggen, apt-get remove auf der Konsole), gibts nur 3 Punkte. Aber bis zum finalen Release ändert sich das hoffentlich noch.


Weiterlesen / Read more

Montag, September 24, 2007

Wilder Kaiser - Teil 3


So, jetzt hab ich endlich auch Michis Fotos hochgeladen (das dauert vielleicht...).

Da gibt's jetzt noch mehr Fotos aus der steinernen Rinne. Die fehlen bei mir, weil ich zu dem Zeitpunkt den Fotoapparat weggepackt hatte.

Die Filme hab ich jetzt nochmal weggelassen... mal schaun, was daraus wird.

Was mir Sorgen macht: Der Speicherverbrauch in Picasa steigt beunruhigend schnell. Hab schon bald die Hälfte des verfügbaren Speichers aufgebraucht. Kann sein, dass ich die Auflösung der Fotos demnächst ein wenig eindampfen muss, um Platz für neue zu schaffen.

Auf alle Fälle geht's hier zu den neuen Fotos.


Weiterlesen / Read more

Sonntag, September 23, 2007

Spam-Blog

Da hat mich Google doch glatt letztens als Spam-Blog identifiziert.
Muss an dem OOXML-Post liegen - da hatte ich ja haufenweise "nichtssagende" Links im Text...

Naja jedenfalls bin ich jetzt wieder freigeschaltet und im Google-Index tauch ich auch wieder auf :)


Weiterlesen / Read more

Donnerstag, September 06, 2007

Wilder Kaiser - Teil 2


So - hier gibt's den zweiten Teil der Fotos.

Leider hab ich keine Fotos aus der Steinrinne, da ich wegen des steilen Wegs die Kamera eingepackt hatte.

Ein paar der Fotos sind eigentlich als Vorlagen für kleine Panoramen gedacht - wenn ich Zeit habe und meine Platte ein wenig freischaufeln kann, werd ich mich mal dransetzen und sie zusammenstitchen.

In der Zwischenzeit - viel Spass mit dem vorhandenen Material.

Hier geht's zur zweiten Fotostrecke.
Und hier nochmal der Link zu den ersten Fotos.


Weiterlesen / Read more

Mittwoch, September 05, 2007

Layout überarbeitet

Hab ein paar kleine Änderungen am Layout vorgenommen um das Blog etwas personalisierter zu machen.


Weiterlesen / Read more

Dienstag, September 04, 2007

OOXML Roundup

The results are coming in, and ISO already announced the outcome of the vote on OOXML. As was predicted here (and elsewhere), the OOXML vote failed - though by quite a narrow margin.



I hope I could provide a valuable service here, allowing everyone to keep track on published votes.

This started out as a private checklist on paper, but as soon as I went online with this, information quickly was added faster than I could have done it myself - partly to better informed sources, partly to my language barriers. So at least for me it has been a valuable experience and I want to express my thanks to all those participating in the process and providing me with the necessary information to fill up the gaps in my list. This would have been nothing without you.



The vote is over, the results are public - so where do we stand now?

Things are lining up for the BRM in February and the situation remains tense. I have seen some interesting ideas about OOXML, notably the proposition of France, effectively splitting the standard into two parts - one basic document part and one extension part - and merging it with ODF. Allowing vendors then to provide backwards compatibility via an ODF-extension would IMHO truly improve customer experience. Alas - that's probably not in the best interest of Microsoft.

So I sincerely hope each country that provided comments will take these comments seriously in February and will not allow itself to be soothed by an half-hearted attempt to solve the problems, but will insist on clean and proper resolution of them.



Let's hope the best for the future.

Greetings

Andreas Fischer (balanceofcowards)


Weiterlesen / Read more

Montag, September 03, 2007

Bergtour im wilden Kaiser - Teil 1


Gestern haben Michi, Sigi, Wolfgang und ich eine Bergtour im Wilden Kaiser in Angriff genommen.



Losgegangen sind wir mittem im Kaisergebirge vom Kaiserbachtal aus. Schon da war der Anblick der zackigen Felsen um uns herum beeindruckend.



Ziel war es, die hintere Goinger Halt durch den Aufstieg durch die Steinerne Rinne zum Ellmauer Tor zu erreichen. Der Aufstieg gestaltete sich dabei als überaus sehenswerte, aber auch anstrengende Tour. Schwindelfreiheit ist hier definitiv ein Muss.



Ich lade heute nur einen Teil der Fotos online - der Rest folgt später in einem zweiten Posting.



Fotos (Teil 1)


Weiterlesen / Read more

Freitag, August 31, 2007

Tracking the status of Office Open XML


UPDATE: OOXML has failed!

Final roundup here.

nilesh has created a google-map that shows the voting status.

See below for further info on the voting.

Update2: The official result has leaked by now. Lots of approval from non-P-Members, but not enough from P-Members.

Results are available here.



The submission of the OOXML document file format by Microsoft to ISO for fast-track acceptance as a worldwide standard, has created a heated discussion. Many (including me) view this >6000 page specification as being incomplete and severly bugridden. Nevertheless, only a few days short of the dead-line, many countries seem to either go for approve ("Yes"/"Yes with comments") or abstain - sometimes under very dubious circumstances - as can be read on noooxml.org.



Here I will try to keep track of votes, as published by each country, trying to allow estimations on whether the standard will be approved or not.





I am working mostly with noooxml.org as a source here. List of P-Members is taken straight from the iso.org website.
A word about me beforehand: I am just an interested individual - I have no insight into any official standards procedures nor am I affiliated with any of the involved parties. So - take my information with a grain of salt.


This is the list, then:



Participating Countries (JTC1 and/or JTC1/SC34)


  • Australia ( JTC1 ): abstain

  • Azerbaijan ( JTC1 ): ?

  • Belgium ( JTC1 ): ?

  • Brazil ( SC34 ): no

  • Bulgaria ( SC34 ): ?

  • Canada ( JTC1 & SC34 ): ?

  • Chile ( SC34 ): abstain

  • China ( JTC1 & SC34 ): no

  • Colombia ( SC34 ): yes

  • Cyprus ( JTC1 & SC34 ): ?

  • Czech Republic ( JTC1 & SC34 ): no

  • Côte-d'Ivoire ( JTC1 & SC34 ): ?

  • Denmark ( JTC1 & SC34 ): no

  • Egypt ( SC34 ): ?

  • Ecuador ( JTC1 ): no

  • Finland ( JTC1 & SC34 ): abstain

  • France ( JTC1 & SC34 ): no

  • Germany ( JTC1 & SC34 ): yes

  • India ( JTC1 & SC34 ): no

  • Iran ( JTC1 ): no

  • Ireland ( JTC1 ): no

  • Italy ( JTC1 & SC34 ): abstain

  • Jamaica ( JTC1 ): ?

  • Japan ( JTC1 & SC34 ): ?

  • Kazakhstan ( JTC1 & SC34 ): ?

  • Kenya ( JTC1 & SC34 ): yes

  • Korea, Republic of ( JTC1 & SC34 ): no

  • Lebanon ( JTC1 & SC34 ): ?

  • Malaysia ( JTC1 ): ?

  • Malta ( JTC1 & SC34 ): yes

  • Netherlands ( JTC1 & SC34 ): abstain

  • New Zealand ( JTC1 ): no

  • Norway ( JTC1 & SC34 ): no

  • Pakistan ( JTC1 & SC34 ): ?

  • Poland ( SC34 ): yes

  • Romania ( SC34 ): yes

  • Saudi Arabia ( JTC1 ): ?

  • Singapore ( JTC1 ): yes

  • Slovenia ( JTC1 ): ?

  • South Africa ( JTC1 ): no

  • Spain ( JTC1 ): abstain

  • Sri Lanka ( SC34 ): ?

  • Sweden ( SC34 ): abstain

  • Switzerland ( JTC1 & SC34 ): yes

  • Thailand ( SC34 ): ?

  • Trinidad and Tobago ( JTC1 & SC34 ): ?

  • Turkey ( JTC1 & SC34 ): ?

  • USA ( JTC1 & SC34 ): yes

  • United Kingdom ( JTC1 & SC34 ): no

  • Uruguay ( JTC1 ): yes

  • Venezuela ( JTC1 & SC34 ): ?



Other countries




Some countries seem to be missing from that list - I wonder about the state of New Zealand, South Africa, Palestine and Portugal now?!

I think I finally understood the voting rules. I'll add another column to the table for countries, who are not P- or O-Members, but generally members of ISO.


Edit: Completely reordered the list. Now both P-Members of JTC1 and JTC1/SC34 are appearing.



Unfortunately there are still quite a lot of '?'s - would be great, if somebody could provide additional information.



Summary:







Votes P-M JTC1 (41)P-M SC34 (36)OthersTotal
yes 7 8 1 11
no 13 9 1 15
abstain 5 5 2 9
unclear 16 14 0 20




A note on the P-Members: the iso website says that there are 41 members, however only 40 are listed - perhaps the list is not up to date.
Edit: missed the USA at the top. Updated list accordingly



Up to now, nothing seems to be decided yet... discounting my possible lack of information, of course.



UPDATE:
According to this information, the vote for OOXML has failed. It did not reach the 2/3rds majority required by the P-Members of JTC1, as 13 members have been reported, voting "no" and 5 members are abstaining, with a total of 41 members. To get the 2/3rds majority, 19 members would have to vote "yes" on top of the 7 members that did already. However, only 16 members are remaining without a vote.



I will continue to fill in the gaps as more information gets public, until the official outcome is revealed. Meanwhile a great thanks goes to all those providing me with the necessary information - I could not have done it alone.



(End Update)






I'll try to link sources for each confirmed vote soon. Please contact me, if you have better (more accurate) information.





--Edit--
Sources updated


Combined result into table for better readability





--Edit--
List of members was flawed - relevant list is: JTC 1/SC 34


Weiterlesen / Read more

Mittwoch, August 29, 2007


Nachtrag zur Trebuchet: Ein neues Bild von Irmi, welches die Trebuchet während eines Abschusses zeigt.

Habs zu den anderen Fotos geklatscht...


Weiterlesen / Read more

Dienstag, August 28, 2007

Panorama - Cafe Blaas



Vor kurzem warn wir mal im Cafe Blaas (gegenüber der Passauer Ortsspitze, bereits in Österreich) und da so schönes Wetter war, haben wir die Gelegenheit genutzt und ein Panoramafoto gemacht.

Hat ein wenig gedauert, das am Rechner dann zu erstellen. Dafür bin ich jetzt bezüglich der möglichen Optionen wieder ein wenig schlauer :)

Wen's interessiert: Als Software hab ich dabei Hugin verwendet. Auf Enblend hab ich verzichtet, da mir das Ergebnis nicht sonderlich gefallen hat. Stattdessen hab ich die Fotos mit Gimp manuell überblendet. Leider ist, da ein Teil der Photos gegen die Sonne fotografiert wurde, der linke Teil des Bildes etwas dunkler als der rechte Teil. Dagegen hab ich noch kein gutes Mittel gefunden :/

Allgemein sind die neueren Fotos die besseren. Das letzte ist in voller Auflösung - alle anderen herunterskaliert.

Hier geht's zu den Fotos.
Das große Bild musste ich leider wieder als .jpg komprimieren, da das .png für picasaweb zu groß war (Achtung: ca. 12000 Pixel breit)...

--Edit--
Link korrigiert


Weiterlesen / Read more

Montag, August 27, 2007

Avahi-patch for bash_completion

I wrote a small patch to allow the programmable bash-completion to complete hosts found via Avahi for commands like ping, ssh, scp, etc.

Reactiontime suffers somewhat - but that seems to be the fault of avahi-browse, which takes a while to return all recognized hosts.

Requirements: avahi-daemon has to be running and avahi-browse has to be available via $PATH. And of course, the programmable bash-completion by Ian MacDonald has to be installed :)

Patch follows in clear text. Usage:
(as user root)
cd /etc/
patch < /pfad/zu/avahi-hosts.patch

That should do it. Please tell me if there are any problems :)

----8< Cut and save as avahi-hosts.patch >8----

--- bash_completion 2006-03-01 17:20:18.000000000 +0100
+++ bash_completion_patched 2007-08-26 17:24:12.000000000 +0200
@@ -2410,7 +2410,7 @@
_known_hosts()
{
local cur curd ocur user suffix aliases global_kh user_kh hosts i host
- local -a kh khd config
+ local -a kh khd config avahi_hosts avahi_available avahi_browse

COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
@@ -2522,6 +2522,24 @@
COMPREPLY=( $( compgen -A hostname -S "$suffix" -- $cur ) )
fi

+ # append recognized avahi hosts
+ # Check, whether avahi is running and avahi-browse is available
+ avahi_available=`pidof avahi-daemon`
+ avahi_browse=`which avahi-browse`
+ if [[ -n "$avahi_available" && -n "$avahi_browse" ]]; then
+ avahi_hosts=`avahi-browse -t _workstation._tcp -r | grep hostname | sed -e 's/.*\[//' | sed -e 's/\].*//'`
+ # convert to lower case to get unique hostnames
+ cur=`echo "$cur" | tr [:upper:] [:lower:]`
+ avahi_hosts=`echo "$avahi_hosts" | tr [:upper:] [:lower:]`
+ # Filter relevant results
+ avahi_hosts=`echo "$avahi_hosts" | grep $cur`
+ COMPREPLY=( ${COMPREPLY[@]} $avahi_hosts )
+ fi
+ # apply suffix
+ for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
+ COMPREPLY[i]=$user${COMPREPLY[i]}$suffix
+ done
+
return 0
}
complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 \

----8< Cut and save as avahi-hosts.patch >8----

Have fun :)


Weiterlesen / Read more

Avahi-Patch für bash_completion

(This post is also available in english)

Hab einen kleinen Patch geschrieben, um der programmierbaren Bash-Vervollständigung beizubringen, bei Kommandos wie ping, ssh, scp, etc. auf Hosts zu vervollständigen, die via Avahi gefunden wurden.

Die Reaktionszeit steigt dabei ein wenig - das liegt aber an avahi-browse, welches sich ein bisschen Zeit läßt mit der Angabe der gefundenen Hosts.

Voraussetzungen: avahi-daemon muss laufen und avahi-browse muss via $PATH verfügbar sein. Und die programmierbare Bash-Vervollständigung von Ian MacDonald muss natürlich installiert sein :)

Patch folgt im Klartext. Benutzung:
(als Benutzer root)
cd /etc/
patch < /pfad/zu/avahi-hosts.patch

Das sollte es tun. Bei Problemen bitte melden :)

----8< Ausschneiden und als avahi-hosts.patch speichern >8----

--- bash_completion 2006-03-01 17:20:18.000000000 +0100
+++ bash_completion_patched 2007-08-26 17:24:12.000000000 +0200
@@ -2410,7 +2410,7 @@
_known_hosts()
{
local cur curd ocur user suffix aliases global_kh user_kh hosts i host
- local -a kh khd config
+ local -a kh khd config avahi_hosts avahi_available avahi_browse

COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
@@ -2522,6 +2522,24 @@
COMPREPLY=( $( compgen -A hostname -S "$suffix" -- $cur ) )
fi

+ # append recognized avahi hosts
+ # Check, whether avahi is running and avahi-browse is available
+ avahi_available=`pidof avahi-daemon`
+ avahi_browse=`which avahi-browse`
+ if [[ -n "$avahi_available" && -n "$avahi_browse" ]]; then
+ avahi_hosts=`avahi-browse -t _workstation._tcp -r | grep hostname | sed -e 's/.*\[//' | sed -e 's/\].*//'`
+ # convert to lower case to get unique hostnames
+ cur=`echo "$cur" | tr [:upper:] [:lower:]`
+ avahi_hosts=`echo "$avahi_hosts" | tr [:upper:] [:lower:]`
+ # Filter relevant results
+ avahi_hosts=`echo "$avahi_hosts" | grep $cur`
+ COMPREPLY=( ${COMPREPLY[@]} $avahi_hosts )
+ fi
+ # apply suffix
+ for (( i=0; i < ${#COMPREPLY[@]}; i++ )); do
+ COMPREPLY[i]=$user${COMPREPLY[i]}$suffix
+ done
+
return 0
}
complete -F _known_hosts traceroute traceroute6 tracepath tracepath6 \

----8< Ausschneiden und als avahi-hosts.patch speichern >8----

Viel Spass :)


Weiterlesen / Read more

PGP Key

Da ich den PGP-Key im Profil leider nicht angeben kann, folgt er eben hier in einem Posting.

Ich empfehle allerdings sich Key-ID und zugehörigen Key zumindest aus zwei unterschiedlichen Quellen zu besorgen (Key-Server z.B. - da sollte sich mein Key irgendwo finden).

Der Key ist von Heise signiert - also wer denen traut, traut auch mir :)

Bin gerne bereit bei persönlichem Kontakt Fingerprints zu verifizieren und Keys zu unterschreiben.

Aber hier nun der Keyblock:


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux)

mQGiBEIP+ukRBADhmPswO8aOMaYfox9v+re/pYIeD4rkPs1cnHrivEYvirN/edox
mY4lWp2m0xtWTdgTjMwgxMTlKsYEhof4t9+J/+ZMNl3jjviA1EuGjWXdoOCUG6Qf
SBzTbWcdkzOmILLMQPEJN5r9jPMvnVNhdpfEuCQPcJLnmI9680On3ViSxwCgtv11
d8inY/EaStGdAsTz19bLarMD/iwRa3EVVNZJqdaFqkL02N4zJbv7Xx/2XM1GoYJt
EPoPVGo7nWD0TmxprQkOjplP7YQlWS8jGLNVkqDG+hrCL74XvIsSTmtALsnrhXxW
qVIFDLr5q8xgE1oMgiYEsLJzJy7Zc0V6USNvCc4rwLFHizt6rzRAf1FjrgGmlDR1
hYjVA/9Tsz+qctXsPT89fwm03y43Qqi/2G9zyKfDu5JuDHbnFWnMH++d6vk3ob7i
H1welg5z5wsNw+MbA+LvI/L4IRGHKCa0j3p5EYtDx4R9KUvyzq02b8lNoX4mTONg
009lMSNEaY0ALIZ8pF9lxoCamGsqTE/UZAVgaOIm7etV3q+XzLQjQW5kcmVhcyBG
aXNjaGVyIDxjeWJlcmZyYWdAZ214Lm5ldD6IXgQTEQIAHgUCQg/66QIbAwYLCQgH
AwIDFQIDAxYCAQIeAQIXgAAKCRDkWXtNhlBjAcHBAJ9TvV6YFeetMNXkOBnH3dor
+t2JpgCdGLucm9UOzSnf3/PAuvRJvWTfd36IRgQTEQIABgUCRcraEgAKCRArrjz2
2v+wAHDkAJ4iO3WRaLh72JvmZyHmRt5/Qi8MuACggcTzR+LML0M7DwmA7GdAgB6w
PsuIRgQQEQIABgUCRthxWwAKCRClngHKTbu/U3q8AJ9R54NXaprv1K5nqwfnBVyX
AnOB/QCgp44TalF4eIqKJ7xpwaDPQwkmM9m5Ag0EQg/67BAIALY1fMErF8fefXkv
3N8OamcYGiDSEpVqgyVbQKBUQHux2HwPhR+eRVnEb2Fyz0lqHJsGmJpNbilXvi6Z
hDV+r1/37oIg3dqSW7utxq70orhkfQbPtRkylLwmUR6cQcm5NOATtiJQAJRYNvng
mubFSEj/s0ub8OgcOlEYkHOPLVHOmbNT/g6s2qmkk1HFwcXNBIRa14P45mYY1dB9
1Y1hcGF1JofZPCrZoW3BGYlJEFNoK8ILlVFB7Upo9lfNaUXeTKlw61c38wzIECt6
dPglhxVJ3m2uLFy5PIxW//Z6xWHrLNOtsaYhFMKaeAGX70ZlQvxAJu66cTf5XCxD
OOl58/MAAwYIAK1XM4HkSkfWWT4m+9HSEafc3rzK4tscG1vY4ZPvCt+HvT49GdJk
oqO0mdNpo7pakKKUfUl4l9yiIKzrXwlCYVr0Nh5hgMO/ve+QbvF9VIK6sZByXg2c
aOdm4G3f7FUElytEh3Zw+PyufTYjP2QL85q16eAAwJWoKt5BMzP+owILn0fSRwoG
N+Ili8gexsCuOFoUb3KrEQ0y2FsiBiLTZjjHbFxUQrxQUQPfeH0WC/ALqRaA3dOy
1V6wsLuPIYJfz3DP8gtYwVBVxTMJFHt3O1HEh52I+CyM8Df6V/H1LWK/Mjy+ekfj
NRlp+pUibjj4E5FbJQVbh8a3pSwcPyTWB12ISQQYEQIACQUCQg/67AIbDAAKCRDk
WXtNhlBjAcIDAJ9BE9Sqr9gyUyrbxhi2VuTI9scmVACfdoqwI6RmjtQMu6nO/ywo
lh21HbQ=
=vPXb
-----END PGP PUBLIC KEY BLOCK-----

--Edit--
Veralteten Key durch neuen ausgetauscht.


Weiterlesen / Read more

Sonntag, August 26, 2007

Lego Technik Trebuchet



Mein Bruder, ein Freund von mir und Ich haben dieses Wochenende eine Trebuchet aus Lego Technik gebaut.

Das war eigentlich schon länger ein Traum von uns, den wir uns jetzt endlich verwirklicht haben :)
Eigentlich wollten wir damit ja Zuckerstücke in unseren Kaffee schießen, aber dafür ist das Gerät inzwischen wohl etwas überdimensioniert - ausser für den Kaffee am übernächsten Tisch *g*

Kurz ein paar technische Daten:
Achshöhe: ~25cm
Gewicht (Gegengewicht): 857g
Gewicht (Geschoß): 4g
Fallhöhe d. Gegengewichts: ~10cm

Das Gerät erreicht bei dieser Achshöhe bereits eine Reichweite von 8-11m, was meiner Meinung nach doch recht beachtlich erscheint (auch wenn die Idealreichweite - i.e. ohne Reibungs- und andere Verluste - bei ca. 42m liegen würde).

Die komplette Fotostrecke gibt's hier.
Wenn ich Zeit hab, mach ich demnächst vielleicht noch ein kleines Video vom Abschußvorgang

--Edit--
Besseres Bild eingebaut


Weiterlesen / Read more