Vor ein paar Tagen wurde dieses Blog 5 Jahre alt, und ich hätte es fast schon wieder verschlafen. Ich gelobe hiermit Besserung und kündige hiermit an, dass ein paar neue Posts in der Mache sind.
Da es aktuell aufgrund von Zeitmangel relativ still auf diesem Blog ist und ich aktuell den meisten Content auf Twitter und bei RadioTux produziere, wollte ich auch an dieser Stelle mal ein Lebenszeichen von mir geben und die Slides meiner letzten Präsentation über die Programmiersprache Scala veröffentlichen.
Die Präsentation gibt es hier als PDF zum Download.
Abschließend habe ich noch ein Beispielprogramm erstellt, das den Einsatz von Scala Traits als polymorphe Typen beschreibt:
Ich bin, wie bereits bekannt sein sollte, seit knapp 3 Jahren Besitzer eines Thinpkpad T60. Leider hatte ich hiermit in der Letzten Zeit Probleme mit dem CPU-Frequency-Scaling: Wenn man das Notebook über das Netzteil mit Strom versorgt hat und der Akku entfernt war, wurde die CPU dauerhaft auf ihre minimale Taktfrequenz herunter geregelt. Diesen Zustand hat auch das Tool cpufreq-info bestätigt:
cpufrequtils 006: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us.
hardware limits: 1000 MHz - 1.83 GHz
available frequency steps: 1.83 GHz, 1.33 GHz, 1000 MHz
available cpufreq governors: powersave, ondemand, performance
current policy: frequency should be within 1000 MHz and 1000 MHz
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 1000 MHz (asserted by call to hardware).
Nach einer kurzen Suche habe ich im Thinkwiki eine passende Lösung gefunden: Das Anhängen des Parameters "processor.ignore_ppc=1" an die Kerneloptionen im Bootloader. Ein passender Eintrag sollte bei grub ungefähr so aussehen:
title Arch Linux-ck
root (hd0,1)
kernel /vmlinuz26-ck [weitere optionen] processor.ignore_ppc=1
initrd /kernel26-ck.img
Nach dieser Änderung und reinem Neustart des Notebooks skaliert die CPU nun bei Last auch wieder sauber auf höhere Taktfrequenzen:
analyzing CPU 0:
driver: acpi-cpufreq
CPUs which run at the same hardware frequency: 0 1
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: 10.0 us.
hardware limits: 1000 MHz - 1.83 GHz
available frequency steps: 1.83 GHz, 1.33 GHz, 1000 MHz
available cpufreq governors: powersave, ondemand, performance
current policy: frequency should be within 1000 MHz and 1.83 GHz.
The governor "ondemand" may decide which speed to use
within this range.
current CPU frequency is 1000 MHz (asserted by call to hardware).
Änderungen
Nach Feedback auf den letzten Blogeintrag habe ich mich nochmal an das Feedchecker Script gemacht und ein paar Änderungen eingepflegt:
- Ruby 1.8 Kompatibilität (da ich selbst auf Ruby 1.9 entwickle)
- Vereinfachtes Suchen der Urls durch XPath-Expression
- Konfigurierbare Anzahl der parallel abzuholenden Feeds
./feedchecker.rb -h
This is a simple, script which takes an opml file and checks all contained feeds for
errors.
Usage:
feedchecker.rb [options] -i <filename>
where [options] are:
--input, -i <s>: Input opml file
--timeout, -t <i>: Timeout interval in seconds (default: 60)
--age, -a <i>: Specify the minimum age in days (default: 365)
--fetchparallel, -f <i>: Specify the amount of feeds to fetch parallel (default: 5)
--version, -v: Print version and exit
--help, -h: Show this message
Mehr Details gibts in der Commit-History auf github.
Geschwindigkeit
In meinen Tests verwende ich meine Liste mit ca. 160 Feeds. Einmal mit den Standardeinstellungen und einmal mit der Option, dass 10 Feeds parallel abgeholt werden.
Zuerst ein paar Vorbereitungen:
wget http://github.com/pfleidi/feedchecker/raw/master/feedchecker.rb
chmod +x feedchecker.rb
Mit Standardeinstellungen:
time ./feedchecker.rb -i feeds.opml
...
real 1m33.162s
user 0m18.909s
sys 0m1.296s
Mit 10 Threads:
time ./feedchecker.rb -i feeds.opml -f 10
...
real 1m20.754s
user 0m19.493s
sys 0m1.340s
Mit 10 Threads und aggressiveren Timeouts von 20 statt 60 Sekunden:
time ./feedchecker.rb -i feeds.opml -f 10 -t 20
...
real 0m39.808s
user 0m19.205s
sys 0m1.472s
Viel Spaß damit und ein frohes Fest euch allen!
Was tun mit riesigen Feedlisten?
Es geht wahrscheinlich vielen so: Man sammelt im laufe der Jahre hunderte Feeds in seiner Liste ohne nun wirklich zu wissen welche noch aktuell sind und welche nicht. In der letzten Zeit hatte ich genau aus diesem Grund mal wieder das Bedürfnis meine RSS-Feeds auszumisten. Da ich ein fauler Mensch bin und eigentlich keine Lust habe hunderte von Feeds "von Hand" zu prüfen, habe ich ein kleines Tool geschrieben, das mir dabei hilft kaputte, nicht erreichbare oder verwaiste Feeds zu entdecken.
Das Tool
Das Tool wurde in ruby geschrieben, ist frei unter der GPLv2 verfügbar und hoert auf den nicht besonders kreativen Namen feedchecker. Um es zu benutzen ist das Trollop-Gem sowie das Peach-Gem notwendig. Dieses lassen sich einfach mittels "gem install trollop" sowie "gem install peach" installieren.
Update: Unter Debian scheint das SSL-Plugin nicht mit der normalen Ruby-Installation mit installiert zu werden. Darum sollte es noch mittels "aptitude install libopenssl-ruby" nachinstalliert werden.
Verwedung
Da das Tool nicht viel kann, haellt sich die Komplexitaet der Optionen in Grenzen:
./feedchecker.rb --help
This is a simple, script which takes an opml file and checks all contained feeds for
errors.
Usage:
feedchecker.rb [options] -i <filename>
where [options] are:
--input, -i <s>: Input opml file
--timeout, -t <i>: Timeout interval in seconds (default: 60)
--age, -a <i>: Specify the minimum age in days (default: 365)
--fetchparallel, -f <i>: Specify the amount of feeds to fetch parallel (default: 5)
--version, -v: Print version and exit
--help, -h: Show this message
Mit einem Aufruf des Scripts lässt sich zumindest die Liste der zu prüfenden Feeds stark eingrenzen.
feedchecker.rb -i /tmp/rss.opml
http://atsutane.freethoughts.de/feed/atom feed isn't well formed and could't be parsed
http://blog.b-o-f-h.net/index.php?/feeds/index.rss2 is out of date. Age: 388 days without an update
http://blog.choas.net/RSS age could not be checked
http://blog.fefe.de/rss.xml?html age could not be checked
http://blog.roothell.org/feeds/index.rss2 Connection timed out
http://codebu.de/blog/?feed=rss2 Redirect ... new URI: http://codebu.de/blog/feed/
...
Eventuell hat ja ausser mir noch jemand eine Verwendung dafür. Falls ja ist dies mein Weihnachtsgeschenk an euch.
Der Ingo hat mich vor ein paar Tagen dazu eingeladen bei Radiotux etwas zu Google Wave zu erzählen.
Letzten Donnerstag war es dann so weit und ich war bei radiotux@horads zu Gast und habe mich etwas an der Diskussion beteiligt. Leider sind wir aus unterschiedlichen Gründen nicht mehr zu Wave gekommen. Das wird dann wahrscheinlich in einer anderen Sendung nachgeholt.
Sollte sich also jemand dafür interessieren was der Herr aus roothausen so zu erzählen hat: Hört euch den Podcast an. ![]()
... bringen nichts. Als Beweis hier mal ein paar Fotos der Haltestelle Stuttgart Universität. An dieser Stelle sollte noch erwähnt werden, dass hier auf beiden Seiten der Haltestelle mehrere Kameras hängen ...
Eigentlich wirkt das Bisschen Farbe auch erfrischender als die Werbeplakate, die da rumhängen. Aber das ist dann eher Geschmackssache. ![]()
Vor kurzem hatte ich das Bedürfnis Bilder automatisiert, mit Hilfe eines Ruby-Scripts, zu verkleinern. Dieses Script sollte zudem ohne Änderungen sowohl auf Linux als auch auf Windows lauffähig sein.
Fuer diese Aufgabe ist Imagemagick natürlich ein super Werkzeug, da man es auch als Bibliothek von Ruby aus nutzen kann und auch für Windows verfuegbar ist. Unter Windows ist hierfür eine Installation von Ruby, sowie die Installation von Imagemagick und dem passenden RMagick Ruby-Gem notwendig. Unter Linux reicht es Imagamagick und Ruby mit dem Paketmanager seiner Wahl zu installieren und mittels "gem install rmagick" das Gem zu installieren.
Der eigentliche Code gestaltet sich relativ simpel. Prinzipiell lässt sich ein Bild mit wenigen Anweisungen verkleinern:
#!/usr/bin/env ruby
require 'rubygems'
require 'RMagick'
@debug = true
def resize_image(file)
puts "let's resize #{file} ..." if @debug
img = Magick::Image::read(file).first
img.resize_to_fit(1024, 1024)
img.write(file)
puts "resizing of #{file} successful" if @debug
end
Die Methode resize_to_fit() sorgt hier für das Verkleinern auf bestimmte Maximalwerte in Länge und Breite. Weiteres erfährt man aus der Doku
.Medianight
Morgen, am Donnerstag den 02.07.2009 wird an meiner Hochschule wieder die Medianight stattfinden. Hier werden die Studenten ihre Projekte des letzten Semesters praesentieren. Ich werde dort unter anderem mit meinem eigenen Projekt am Start sein.
YAXIM
Wie schon zuvor gesagt, werde ich zusammen mit Chris unser Semesterprojekt, das den Namen YAXIM traegt, vorstellen. YAXIM steht fuer "Yet Another XMPP Instant Messenger" und ist ein Jabberclient fuer die Android-Plattform. Als kleinen Vorgeschmack folgen hier noch unsere Folien und das Video der heutigen Praesentation:
Fuer diejenigen, die es nicht auf den LinuxDay geschafft haben, moechte ich nun noch unsere Slides zum Thema OpenWRT veroeffentlichen:
Hier gibt es die Praesentation auch noch als PDF
Wie bei manchen anderen Kleinigkeiten haben sich bei mir ein paar der Tools aus dem Android-SDK geweigert auf meinem 64Bit Arch Linux zu starten. Anscheinend fehlten ein paar Bibliotheken. Ich versuche hier mal zusammenfassend zu beschreiben, wie ich es zum laufen bekommen habe.
SDK installieren
Da das PKGBUILD aus dem User-Repository zum einen keine Abhaengigkeiten enthaellt und zum anderen nicht aktuell ist, habe ich mich dazu entschlossen eine modifizierte Version zu verwenden:
PKGBUILD
pkgname=android-sdk
pkgver=1.5_r2
pkgrel=1
pkgdesc="Google Android SDK"
arch=('i686' 'x86_64')
url="http://code.google.com/android/"
license=('custom')
if [ "$CARCH" = "x86_64" ]; then
depends=('jre' 'lib32-libstdc++5' 'lib32-libx11' 'lib32-ncurses' 'lib32-zlib' 'lib32-sdl' 'lib32-libxext' 'swt')
else
depends=('jre')
fi
source=(http://dl.google.com/android/android-sdk-linux_x86-$pkgver.zip \
android.sh)
md5sums=('1d3c3d099e95a31c43a7b3e6ae307ed3' 'e7f23c39d02a3a280c746f7398bf5114')
build() {
mkdir -p $pkgdir/opt && \
mkdir -p $pkgdir/etc/profile.d && \
mv $srcdir/android-sdk-linux_x86-$pkgver $pkgdir/opt/android-sdk && \
cp $srcdir/android.sh $pkgdir/etc/profile.d && \
rm $pkgdir/opt/android-sdk/tools/lib/libswt* && \
cp /usr/lib/libswt-* $pkgdir/opt/android-sdk/tools/lib && \
cp /usr/share/java/swt.jar $pkgdir/opt/android-sdk/tools/lib && \
cd $pkgdir/opt/android-sdk && \
find -type d -exec chmod 755 \{\} \; && \
find -exec chmod +r \{\} \; && \
chmod +x $startdir/pkg/etc/profile.d/android.sh
}
Wie man sieht, werden die *swt*-Komponenten des SDK durch native 64Bit Versionen ersetzt. Darum ist es auch notwendig zuvor das SWT-Paket zu installieren.
android.sh
#!/bin/sh
export PATH=$PATH:/opt/android-sdk/tools
Installation
Das Erstellen und Installieren des Pakets kann nun wie gewohnt mit makepkg vorgenommen werden. Mit diesem Setup sollten dann auch die Tools fuer Eclipse wieder wie gewohnt laufen.
Wie ich bereits gestern versprochen hatte, bekommt ihr nun hier die Slides meiner Praesentation ueber Design Patterns in Ruby:
Hier gibt es das Ganze auch noch als PDF. Den SourceCode findet man hier
Es gibt nun mittlerweile schon seit ein paar Tagen das finale Programm zum LinuxDay. Da ich allerdings die letzten Tage etwas viel um die Ohren hatte, komme ich erst jetzt dazu, darauf hinzuweisen.
Zeit Thema
13:15-13:30 Welcome & Log in
Christoph Lindenmüller, Hochschule der Medien Stuttgart
13:30-14:30 OpenWRT Linux auf dem Router
Own your DSL router
Moritz Seltmann & Sven Pfleiderer, Hochschule der Medien Stuttgart
14:45-15:45 Open Source Groupware
Own your organisation
Helmut Neuberger, Zarafa: MS Exchange replacement
15:45-16:15 Kaffee, Drinks, Diskussion
16:15-17:15 Open Source Groupware II
Solutions for an Open Campus and the Open Enterprises
Michael Herkens, OpenXchange
17:30-19:30 Open Source Community World
Keep the web open: The new web technologies & standards
Paul Rouget, Mozilla Foundation
Mozilla: Community, Contribution, Foundation
NN, Mozilla Foundation
19:45-20:15 Open Source Commuity Local
1. Linux User Group Stuttgart
Adrian Reyer, LinuxHaus
2. Open Source Region Stuttgart
Hans-Ulrich Schmid, Open Source Region Stuttgart
20:15-22:00 Get Together @ Unithekle
Allmandring 17, 200m Fussweg
20:15-22:00 OpenWRT Router Workshop @ Unithekle
Moritz Seltmann, Sven Pfleiderer & Team
Ich bitte hiermit mal alle, die sich noch fuer Freiheit in diesem Land interessieren, an der Petition gegen Internetsperren teilzunehmen:
Text der PetitionWir fordern, daß der Deutsche Bundestag die Änderung des Telemediengesetzes nach dem Gesetzentwurf des Bundeskabinetts vom 22.4.09 ablehnt. Wir halten das geplante Vorgehen, Internetseiten vom BKA indizieren & von den Providern sperren zu lassen, für undurchsichtig & unkontrollierbar, da die "Sperrlisten" weder einsehbar sind noch genau festgelegt ist, nach welchen Kriterien Webseiten auf die Liste gesetzt werden. Wir sehen darin eine Gefährdung des Grundrechtes auf Informationsfreiheit.
BegründungDas vornehmliche Ziel – Kinder zu schützen und sowohl ihren Mißbrauch, als auch die Verbreitung von Kinderpornografie, zu verhindern stellen wir dabei absolut nicht in Frage – im Gegenteil, es ist in unser aller Interesse. Dass die im Vorhaben vorgesehenen Maßnahmen dafür denkbar ungeeignet sind, wurde an vielen Stellen offengelegt und von Experten aus den unterschiedlichsten Bereichen mehrfach bestätigt. Eine Sperrung von Internetseiten hat so gut wie keinen nachweisbaren Einfluß auf die körperliche und seelische Unversehrtheit mißbrauchter Kinder.
Ich finde es uebrigens wirklich beeindruckend, dass hier schon nach kaum zwei Tagen fast 20000 30000 Menschen unterzeichnet haben. Weiter so!
Ein Kommilitone von mir hat heute die Ergebnisse seines letzten Semesterprojekts oeffentlich gemacht. Darum moechte ich hier mal etwas Werbung fuer das coole Projekt machen:
camstick is a symbiosis of camera and joystick to symbolize you that you can not only use your webcam for simple video chats but for interacting with your computer using your webcam. Camstick is started as a project work of mine at the Stuttgart Media University. Now i want to share my result with you!
Quicksearch
Kategorien
Links
Tags
del.icio.us
- Appcelerator Developer Center - Documentation
- Coderspiel — Rewiring Android for type-safe layout resources
- pkrumins's stackvm at master - GitHub
- Netty - the Java NIO Client Server Socket Framework - JBoss Community
- Learn Your Motherf#@kin' Science: A Textbook for Juggalos | Cracked.com
- The C Book - Table of Contents
- andrewvc's node-streamlogger at master - GitHub
- Setting up a JavaScript Build Process – JavaScriptr
- js-build-tools - Project Hosting on Google Code
- YUI Compressor
- JsUnit
- InfoQ: Ralph Johnson, Joe Armstrong on the State of OOP
- ztellman's aleph at master - GitHub
- Clojure - home
- Mac OS X keyboard shortcuts

