hatte ich schon ganz vergessen…
Nun. Wir alle traeumen von einer Welt ohne ungebetene Mails oder irgendwelche Links zu Gluecksspielwebseiten in Gaestebuechern/Foren/Wikis. Doch ich glaube nicht daran, dass dieser Traum Wirklichkeit werden kann. Warum nicht?
Gucken wir uns das ganze mal von der Seite des ehrlichen Betreibers eines Blogs mit Gaestebuch an:
Massnahme:
Man fuegt also nun so lustige Bilder/Animationen ein, auf denen nur ein Mensch erkennen koennen soll, was da abgebildet seien soll.
Umgehung:
Sofern die ueblichen OCR-Programme auch trotz vorherigem Filtern eine lausige Rate haben sollten (dabei sind die schon so gut, dass es Firefox AddOns gibt die ganze Accounts fuer einen anlegen), gibt es immer noch die Moeglichkeit andere die Dinger loesen zu lassen.
by Tannek (nospam@example.com) at Mon, 16 Aug 2010 18:23:00 +0000
Korrupt verteilt hier Nerdstöcken. Ich bin zwar nich beworfen worden, werde das aber auch mal ausfüllen aus ganz trivialen Gründen: Ich schreib hier zu viel Nerdfoo :o. Dexter ist zwar wie immer ein Spielverderber und sagt das sei total 2006, aber was weiß der schon.
Geht los:
Nerd zu sein ist prima. An sich meistens, aber konkret
person.setVerbosityLevel(Verbosity.Debug)
erhöht, sondern durch gutes zureden und -hören.
Irgendwie ist bei mir mal so eine HDR-Erstellung nach hinten losgegangen ) :
Aber sieht doch ganz schick ;D
by Tannek (nospam@example.com) at Mon, 02 Aug 2010 14:16:53 +0000
Kai hatte letzten Woche ueber das RSNAPSHOT-script gebloggt, was mich jetzt dazu brachte das auch mal in Angriff zu nehmen.
Rsnapshot basiert (wie so viele) auf rsync und kann lokale, wie auch ferne (ssh,rsync) Quellen sichern. Die gesamte Konfiguration geschieht in der /etc/rsnapshot.conf und ist sehr uebersichtlich und schnell eingerichtet (nur die TABs als Trenner sind gewoehnungsbeduerftig).
Im folgenden: Tipps zur conf, sowie "tweaks" und natuerlich Performance-Werte ![]()
by Tannek (nospam@example.com) at Wed, 28 Jul 2010 14:56:33 +0000
Ich betreibe nun schon seit einiger Zeit, versteckt hinter einem htaccess Schutz und ordentlich verschlüsselt auf Port 443 auf meinem zuhause-immer-an-rechner einen Webaudioplayer, der mir meine Musiksammlung auf jeden beliebigen Rechner mit HTML5-fähigem Browser befördert. Zeit das Ganze doch einmal vorzustellen.
Das Projekt in seiner jetzigen Form entspringt einem für Informatiker ganz grundlegenden Bedürfnis: Programmiersprachen lernen. Konkret ging es hier um JavaScript, denn das hatte ich eh schonmal so halb gelernt, als ich 3D Scripting mit Unity gemacht habe und halbe Sachen sind ja per se sowieso und überhaupt total langweilig. Als dann eigentlich schon alles™ fertig war, kam auch noch das Bedürfnis hinzu etwas Python zu machen. Das ist aber eher nebensächlich gewesen.
Es leuchtet blau! Ein wenig zumindest.
Der Player soll eine einfache Oberfläche liefern für meine Musiksammlung zuhause. Also unterstützt die Software auch das grundlegende, was man so von einer Musiksoftware erwartet. Es listet Verzeichnisse mit Musik auf, zeigt Titelinformationen an und unterstützt manuelle Playlisten, die man auch abspeichern kann. Die Seite selbst lädt einmal, der Rest ist JavaScript. Ich mache kein Flash-Fallback, Browser die kein audio Element unterstützen oder nur unzureichend haben Pech; CSS3 ist ebenso Voraussetzung. Kurzum: Aktuell läuft das Ding quasi nur in Chrome/Chromium und wahrscheinlich noch in Safari, da ja beide WebKit nutzen.
Ganz einfach: da sitzt ein kleines Frontend und schickt per Ajax (eigentlich ist das ja kein Ajax -- Asynchronous JavaScript and XML -- sondern „Ajaj“ -- Asynchronous JavaScript and JSON -- was ich hier nutze) beständig Anfragen an ein Backend, das in Python realisiert ist. Das schickt seine Daten zurück und das wars. Die Pythonscripte selbst docken an einen Apache mittels mod_wsgi an. Man könnte allerdings auch relativ simpel eine neue index.py basteln, die CGI nutzt.
Klaro. Ne Demo gibt’s hier. Ein Vorschaubild soll auch nicht fehlen:

Klaro. Da das für mich ein Lernprojekt war, ist mir relativ Latte, was Leute damit machen. Allerdings interessiert mich was sie damit machen ;). Kurzum: Stellt mit dem Code an was ihr wollt, aber erzählt mal was ihr damit gemacht habt, wenn ihr was gemacht habt.
Änderungen lassen sich übers gitweb verfolgen, den Code selbst gibt’s im git.
Viel Spaß damit!
PS: Und ja, ein wenig buggy ist es noch z.T.
PPS: Übrigens bis zu diesem Commit, gabs noch ein PHP Backend (wer interessiert ist).
Ach und by the way… Man soll ja auch artig Credits geben, wenn man welche zu vergeben hat.
Die beiden waren wirklich motivierend beim Coden *gg*
Haskell has a powerful concurrency library which is surprisingly easy to use. The Control.Concurrent library is shipped with the standard installation of ghc and provides everything needed to get started.
As a small test I want to write a programme which reads numbers from stdin, spawns a new process to calculate the Fibonacci number for each input on a different CPU and prints the result to stdout.
First we need a function which is called when spawning a new process, which should calculate the result and print it to the console. In my case this is a simple IO Monad, which gets a MVar as it’s first argument. The function will wait for input from the MVar and then call the Fibonacci function.
This MVar can be thought of as a synchronised box where a thread can store a value and another thread can read from it. So MVars are just the poor men’s message channel which can hold one value at the time only. Of course there are also real channels in Haskell which act like the message queues in Scala or Erlang, see Control.Concurrent.Chan for more informations.
printResult mvar = do
value <- takeMVar mvar
print $ "fib(" ++ show value ++ ")=" ++ show (fib value)
fib 0 = 0
fib 1 = 1
fib n = fib (n - 1) + fib (n - 2)
Now we need to read the input from stdin, create a MVar object and invoke the printResult function. The cool thing about Haskell is the forkIO function which is really convenient. It takes an arbitrary IO expr and invokes it in a new thread:
import Control.Monad -- needed for "forever" import System.Exit -- needed for exitSuccess main = forever $ do line <- getLine when (line == "quit") exitSuccess mvar <- newEmptyMVar forkIO $ printResult mvar putMVar mvar (read line :: Integer)
Now we have to compile our programme with the “-threaded” flag:
ghc -threaded fib.hs -o fib
The RTS allows us now to define the number of processors the application runs on with the -Nnum flag. If I want to use three processors for parallelisation I can run the programme simply with:
./fib +RTS -N4

Also das neuere Programme mehr Arbeitsspeicher verbrauchen kann ich nachvollziehen - aber das hier ist nun echt nicht gebrauchbar:

...da werd ich doch gleichmal die alte Version installieren. ) ;
Oder doch ein anderer Client? *gruebel*
Bei der Gelegenheit: wir braeuchten mal einen Mailclient-BASH! ( seba tret )
by Tannek (nospam@example.com) at Tue, 27 Jul 2010 18:32:26 +0000
Solved what’s probably everbodys most neglected problem: backups (or better their absence).
It definitly was a very relaxing moment when I finished the first backup. Rsnapshot is certainly the tool to use for such home backup purposes. It allows you to have multiple virtual full snapshots of the system while only needing the space of the first full backup plus all your changes (it uses hardlinks for unchanged files). One thing I noticed: As I’m a bit of a paranoid, I set the disc encryption algorithm to AES256 in contrast to dmcrypts default AES128 setting. Now it seems like that takes up a considerable amount of CPU cycles more then AES128 (no real measurement, just quick observation). The result is that on my Atom 330 board, the encryption process runs at 100% CPU usage, eating up a full core and I only get 15MB/s writing speed (as opposed to 30MB/s on a Core2Duo 1.6GHz — maxing out the USB port). It’s still OK, it’s just that I don’t even have to bother using the eSATA port with the system. The good thing is, that on the next weekly backup, the disk speed will not matter very much as only the diff will get rsynced :)
Now … my nights will be much better, I think :)
And if you don’t have home backups yet, I hope your nights will be very restless!
Sebastian was invited to a radio interview with RadioTux during LinuxTag and I decided to join him. It was a lot of fun talking with Roman (much more than talking alone as I did the last year). Now, finally here’s the recording (in German).
Die Ruby Welt verwendet Blöcke (Closures) liebend gerne für alles mögliche. Zum Beispiel als Builder-Methapher um Baumstrukturen (XML, GUI's, HTML, Tests) in der Sprache hinzuschreiben und dann nur noch in die Target-Sprache zu rendern.
Das sieht in Tests zum Beispiel so aus:
describe "something" do
it "should do fnord" do
someObject.should be_fnordy
end
end
Der Trick dabei ist das alles von do bis end jeweils ein Block ist der von der Methode describe oder it dann in eine UnitTest Klassenstruktur eingehängt wird um dann später als 'ganz normale' unit tests ausgeführt zu werden.
Jetzt wo Objective-C auch Blöcke unterstützt (ok, die können natürlich weniger als das Ruby Equivalent) müsste das eigenltich auch gehen - und siehe da mit Cedar gibt es auch schon einen ersten Versuch RSpec in Objective-C nachzubauen.
Well und daher habe ich mir mal angeschaut wie weit man denn kommt wenn man in Objective-C einen Block in eine Instanz-Methode umwandeln will.
Gleich vorneweg - das Typ-System von Objective-C macht mir hier einen kleinen Strich durch die Rechnung - ich habe es nicht geschafft einen Block nicht direkt als Funktions-pointer verwenden.
Aber mit etwas Umweg geht es doch.
Der Trick ist das Blöcke auch id's sein können, d.h. man kann sie bequem in ein NSMutableDictionary packen.
Also brauche ich auf meiner Klasse nur ein Dictionary, speichere die Blöcke darin mit dem Namen der Methode ab und baue mir einen generischen Dispatcher-IMP der den Selector (zweites unsichtbares Argument jeder Objective-C Methode) verwendet um den Block aus aus dem Dictionary zu ziehen und führe ihn dann einfach aus.
Fortunately, sping said almost everything there is to say about LinuxTag. But there’s one important part missing: We finally made a peace treaty with what many call Gentoo’s arch nemesis (no pun intended?): Ubuntu.
While Ubuntu lost the “just works on your notebook” unique selling point a while ago (thanks to freedesktop et. al.), we could convince Ubuntu founder Mark Shuttleworth to sign our Gentoo slogan “It’s all about choice” — so maybe in a year from now, you might see USE flags in Ubuntu as well. Don’t believe it? Here’s proof.
On a more serious note, I really like how events like LinuxTag encourage collaboration between distributions. You often meet people that do similar things in a different way, learn about new technology and ideas and (here’s the best part) most people will even want to show you how they integrated something and convince you to do it similarly. Try to get that with an i*hone at some consumer convention.
Oh, and if you read this whole text to get an answer to the question in the title: No. He was a Debian developer years before Gentoo was on the horizon.
…von Datenschutz hält… dat is schon Bombe, ne?
Well, These New Zuckerberg IMs Won’t Help Facebook’s Privacy Problems
Dumb fuck.
Brainfuck is a small esoteric programming language which comes with just eight commands and Turing completeness (given enough time or memory). And that is just enough to write a small synthesizer in it. Some people have definitely too much time ;-)

Sowas wünsche ich mir auch mal für andere Programmiersprachen. Eine ständig aktuelle Hitliste der schönsten Testsuiten von Open Source software.
Sowas hier - aber systematisch und crowdsourced immer aktuell.
Hach, man kann träumen. :-)
Today I stumbled upon a very nasty behaviour of glibc - again.
On a host which has no access to IPv6 at all and no module-support in the kernel, it seems the connect() call fails when there is a AAAA record in place for a remote server.
This means I cannot wget a webpage if an AAAA record exists for the page, etc.
You will find many solutions on how to 'disable IPv6' - but they all miss the resolver in glibc, the part that is behind the 'gethostbyname' call.
I like to disable AAAA DNS-queries for IPv6 completely - and the solution is easy:
#cat /etc/resolv.conf options no-inet6 nameserver ... nameserver ...
Just documenting it here, because the manpage does not document the 'no'-Feature and searching for this on google was not helpful at all.
by Florian (noreply@blogger.com) at Thu, 27 May 2010 22:28:23 +0000
LinuxTag is coming, and we’re on board again! All four days, starting Wednesday, June 9th until Saturday, June 12th, Gentoo will be present at the Berlin Fairgrounds.
And this time, we’re celebrating. As this is the fifth time we present our favorite distribution at LinuxTag, we have prepared a great booth for all Gentoo users, developers — and those who want to join the fun. After having visited the events in Karlsruhe in 2003 and 2004, we are regular visitors at the Berlin LinuxTag since 2008. Besides our usual activities (talking, emerging, giving away merchandise), we will have our unique Gentoo T-Shirts, the latest Gentoo DVDs, and the world’s most configurable Gentoo badge compiler.
So pack your bags, come to Berlin, and meet the 10+ Gentoo developers and users that already signed up. And maybe, you’ll join us for the some beer (or Mate tea) after the show or enjoy helping other users at the booth (drop us an email)?
But wait, there’s more! The German non-profit association “Förderverein Gentoo e.V.” will hold a member’s meeting right on the Fairgrounds on Friday (11th), 12:00–14:00 in the workshop room. Not a member yet? You can still become one, even right there and support our work.
Hope to see you all in Berlin!
Gentoo users compile their stuff on their own. This is a fun thing to do and provides you with a lot of flexibility. Every gentoo system is unique. Sadly this sometimes is exposed to the internet. For example Firefox contains the compile-date in it’s useragent string. Goodbye privacy.
Then again, we can easily fix this. Take a common useragent from useragentstring.com and paste it into the “general.useragent.override” option in the about:config settings editor of firefox. (If the setting does not exist, create it.) Done.
You can check your uniqueness on the EFF Panopticlick site. I reach a level of “one in 13,247 browsers have the same fingerprint as yours” (which is pretty good already). This is with a Windows-Firefox 3.6.3 useragent string and javascript disabled.
Eben bin ich mal wieder über einige Kleinigkeiten gestolpert, die einfach nur ärgerlich sind.
Ein paar wirklich kleine Bugs, aber trotzdem unendlich nervig!
Gnome bindet Samba-Freigaben (also Windows-Freigaben) innerhalb des virtuellen Dateisystems ~/.gvfs innerhalb des Homes des Nutzers ein. Soweit so gut.
Man könnte ja annehmen, dass Gnome dann auch transparent Zugriff darauf erlaubt. Wenn ich ein Terminal starte, kann ich in das Verzeichnis wechseln und mit normalen Kommandozeilentools auf die Freigaben schreiben. Alles toll.
Aber in Gnome tauchen diese Freigaben im normalen Datei-öffnen Dialog nicht auf. Entsprechend auch nicht in Firefox, Galeon, Epiphany. Wie soll denn ein Endnutzer jetzt auf einfache Weise einen Download auf dem Share speichern? Vielleicht übersehe ich auch was, aber sowas ist einfach nur ärgerlich. Nicht nur weil das unter Windows ohne Probleme funktioniert.
Navigiert man manuell nach ~/.gvfs/ klappt es aber...
Wer es aus Windows kennt, versucht es auch unter Linux. Hat man nach viel Suchen die richtige Freigabe auf dem richtigen Server gefunden, zieht man die Freigabe aus der Netzwerkumgebung auf den Desktop und hat fortan eine Verknüpfung mit dem Share, die beim Doppelklick wiederhergestellt wird.
Nicht so bei unserem Lieblingsfrickelbetriebssystem mit Gnome. Zuerst beschwert es sich, dass die Freigabe kein normaler Ordner ist. Ach! Dann legt es auf dem Desktop einen leeren Ordner mit dem Namen der Freigabe an. Toll! Wie soll denn ein Endbenutzer jetzt auf die Idee kommen, dass alles was er in diesem Ordner speichert eben nicht auf dem Server landet?!
Nun gut, versuchen wir Rechtsklick auf den Freigabenamen in der Netzwerkumgebung, dann Verknüpfung erstellen. Ooops. Ich habe auf der obersten Ebene des Servers ja keine Schreibrechte, also Fehlerdialog, Verknüpfung kann nicht angelegt werden. Leider erfolgt auch keine Möglichkeit wie bei Windows (sic!) die Verknüpfung statt dessen direkt und automatisch auf dem Desktop anlegen zu lassen. Ergo: Verknüpfungen erzeugt man manuell, indem man einen Starter mit dem Ziel nautilus smb://server/ anlegt.
Wie soll denn ein Endbenutzer....
Wenn man viel Glück hat geht das auch meistens. Oft habe ich aber wie unter Windows nur leere Servereinträge, bekomme skurrile dbus-Fehlermeldungen, kann das Netzwerk nicht durchsuchen, etc. Ja, iptables ist leer und auf ACCEPT.
Nein, nicht wirklich.
Bei dem Gnomefs ist z.B. die Funktion fchmod nicht implementiert. Und das führt zu unnötigen Fehlern.
Situation: Auf dem Share liegt eine Datei, die wir komprimieren wollen.
Also Kommandozeile, cd ~/.gvfs/sharename ; bzip2 file - und wir bekommen einen netten IO-Error um die Ohren gehauen. Vorher hat bzip2 das File übrigens ordnungsgemäß komprimiert. Komplett. Und wieder aufs Share geschrieben. Dann gelöscht.
Das gleiche Experiment mit gzip: Es wird auch ein Fehler geworfen, das File wird aber korrekt abgelegt und die Quelle gelöscht.
Welches Verhalten ist nun besser? gzip, der die Rechte nicht setzt und dem es egal ist, oder bzip2, dass die Datei einmal übers Netz zieht, komprimiert, schreibt und zurücksendet und dann löscht?
Was mich aber am meisten wundert: warum wird das fchmod erst NACH dem Schreiben der Nutzdaten gemacht?
Die Krönung des ganzen: Der Mode, den bzip2 hier übergeben will, unterscheidet sich nicht vom Mode, den die Datei auch so schon hat, wenn sie neu angelegt wird -.-
Fazit: Alle doof außer Mutti!
by Florian (noreply@blogger.com) at Tue, 18 May 2010 10:04:19 +0000
Bei einer Tasse Kaffee bin ich beim sonntäglichen Inspirationenquellen suchen fuer mein neuen Desktop-PC ueber einige echt gute Gehaeuse gestolpert :

Wer kennt schon nicht Lian Li als Gehaeusehersteller?.. Ich habe bei der Suche nach NAS-Gehaeusen dieses gefunden, welches wie immer gut durchdacht - insbesondere aber durch das typische Schlichte Design sehr Wohnzimmertauglich ist.
Nachteile:
Vorteile:
by Tannek (nospam@example.com) at Sun, 16 May 2010 12:36:04 +0000