Thursday, December 25, 2008

Usage of Scala at Twitter

Here is a nice presentation about the use of the Scala language at Twitter:  

Besides the counless features of Scala (type interfence, Traits, Pattern Matching, ...), I found the reasons interessing the speaker gave against Ruby (Twitter was once a major landmark project for Ruby and Rails) : "Ruby's poor VM performance, monkeypatching and cultural issues, questionable for large systems". I found Monkeypatching terrible. Is there an equivalent to Liskovs principle for monkeypatching?

Remote Actors in Scala

A well known feature of Scala is it support for message passing concurrency via Actors similar to Erlang. In Chapter 30 of "Programming in Scala" Scala's Actors is described in detail.

However, it is not so well-known that Scala also supports actors distributed across different nodes (Remote Actors). Here is the Ping-Pong example with the Ping actor and the Pong actor running in different processes on (possibly) different (cluster) nodes. The example also shows the actor-linking support of Scala. Linking an actor a to an actor b, means that a is notified if b terminated.

Messages:

package de.dirkmeister.pingpong

case object Ping case object Pong case object Quit

Ping:
package de.dirkmeister.pingpong

import scala.actors.Actor import scala.actors.Actor._ import scala.actors.Exit import scala.actors.remote.RemoteActor._ import scala.actors.remote.Node

object RemotePingApp { def main(args: Array[String]) : Unit = { val port = args(0).toInt val peer = Node(args(1), args(2).toInt) val ping = new RemotePing(port, peer, 16) ping.start() } } class RemotePing(port: Int, peer: Node, count: Int) extends Actor { trapExit = true // (1)

def act() {
alive(port)     // (2)
register('Ping, self) // (3)

val pong = select(peer, 'Pong) // (4)
link(pong)             // (5)

var pingsLeft = count - 1
pong ! Ping     // (6)
while (true) {
  receive {     // (7)
    case Pong =>
      Console.println("Ping: pong")
      if (pingsLeft > 0) {
        pong ! Ping
        pingsLeft -= 1
      } else {
        Console.println("Ping: start termination")
        pong ! Quit     // (8)
        // Terminate ping after Pong exited (by linking)
      }
    case Exit(pong, 'normal) => // (9)
        Console.println("Ping: stop")
        exit()
  }
}

} }

Pong:
package de.dirkmeister.pingpong

import scala.actors.Actor import scala.actors.Actor._ import scala.actors.remote.RemoteActor._

object RemotePongApp { def main(args: Array[String]) : Unit = { val port = args(0).toInt val pong = new RemotePong(port) pong.start() } } class RemotePong(port: Int) extends Actor { def act() { alive(port) register('Pong, self)

while (true) {
  receive {
    case Ping =>
      Console.println("Pong: ping")
      sender ! Pong
    case Quit =>
      Console.println("Pong: stop")
      exit()    // (10)
  }
}

} }

Notes: (1) By setting trapExit, the linked actor is notified by sending an Exit(sender, reason) message. Otherwise the termination is either ignored (if reason is 'normal) or the linked actor is terminated, too (reason != 'normal). (2) alive(port) (member of the RemoteActor object) starts the remote service listening on the given port (3) register(symbol, actor) (member of the RemoteActor object) registers the given actor using the symbol. The other actors can then lookup the actor by the hostname and port and this symbol. (4) This lookup is done by the select(node, symbol) method that returns an proxy actor, which managed the complete transmission. (5) The link method links the Ping actor with the Pong actor, so that the current actor is notified if the Pong actor is terminated. This example shows that this also works remotely. (6) and (7) That proxy actor is used to send messages to the remote node. Sending and receiving remote messages is similar to local messages. Well, everything must be serializable, but the use of case classes is recommended anyway. (8) The Quit message stops they Pong actor. See (10) (9) When the Pong actor terminates, an Exit(sender, reason) message is sent to the Ping actor. This is linking system is used for error handling, here it is used to terminate the Ping actor, too. (10) The Pong actor calls the exit() method, which terminates the actor with the reason 'normal.

I think Scala's Remote Actors are really nice. Well, it lacks Erlang's capability to spawn actors on a different node and maybe other things, but it has the property that it isn't written in a 20 years old language: It is written in a modern, OO/functional-hybrid language.

According to a comment on the Lambda blog, there is (or was?) and effort to use the Java P2P protocol JXTA for remote actors. That would be cool, but I found nothing newer about that effort. Here is a description about clustering Scala actors via Terracotta. Here one using Oracle Coherence for that.

Wednesday, December 24, 2008

Twitter

So richtig offiziell habe ich es hier im Blog nach gar nicht gesagt, aber seit einiger Zeit habe (und benutze mit unregelmäßigen Abständen) einen Account bei Twitter. Ab heute sogar mit Profil-Foto.

Unterverständnis über das Qimonda-Hilfspaket

Laut heise.de will sich das Land Sachsen mit 150 Millionen Euro für den Speicherchiphersteller Qimonda beteiligen. Durch die Pleite wären die Arbeitsplätze von 3200 Mitarbeiten bedroht.

Das sind mal eben 46.000 Euro pro Arbeitsplatz, die vom Steuerzahler aufgebracht werden müssen. Das sind Größenordnungen, die fast an die Kohlesubventionen im Ruhrgebiet herankommen.

Der Haushalt des Landes beträgt 3,4 Milliarden (Quelle). Das bedeutet, dass 4% des gesamten Haushalts in ein Unternehmen gepumpt wird, dass "seit Geschäftsbeginn im Jahr 2005 [...] Milliardenverluste einfährt" und deren "strukturellen Probleme seit Langem bekannt sind" (Quelle).

Mir ist nicht klar, was außer reinem Populismus Politiker dazu bringt, so das Geld aus dem Fenster zu werfen. Sie können doch nicht ernsthaft glauben, dass die Strukurprobleme der Firma irgendwie gelöst werden, wenn man mal eben etwas Bargeld hineinpumpt. Wenn die Firma dann 2010 anstatt 2009 insolvent geht, dann ist das Geschrei wegen der "Heuschrecken" und den bösen Unternehmen wieder riesig. Das ist doch abzusehen. Ich kann, wenn ich die Nachrichten im Moment verfolge, nur den Kopf schütteln. Mit 150 Millionen lässt sich so viel sinnvolles anstellen, aber der Firma ein oder zwei Jahre zu schenken, gehört ganz bestimmt nicht dazu. Aus Holzmann und Co. wurde offensichtlich nicht gelernt.

Tuesday, December 23, 2008

Latex-Tipps für doppelseitige Diplomarbeiten

In der letzten Minute der Masterarbeit hab ich noch Latex-Probleme bekommen: Warum?

Bei normalem Buchdruck die erste Seite links ist, da dies die Rückseite des Buchrückens ist. Damit sind ungerade Seite links und gerade rechts. In Diplomarbeiten (oder Bachelorarbeiten, Masterarbeiten, what ever) ist die erste Seite (die Titelseite) rechts, weil es das erste gebundene Blatt ist. So sind gerade Seiten links und ungerade Seiten rechts.

Wenn man dort nicht aufpasst und nur "twopage" in "documentclass" verwendet, hat man schnell ein Dokument gesetzt, was jede Seite einzeln betrachtet  richtig aussieht, aber global falsch gesetzt ist. Die größeren Rändern sind außen anstatt innen. Das Ergebnis ist hier zu sehen:

thesis1

Daher müssen die bei Rändern so umgestellt werden, dass sie bei den geraden Seiten links größer sind und auf den ungeraden Seiten rechts größer. Ich habe dafür diese Befehle von Robort Close übernommen: setlength{voffset}{-10pt} setlength{topmargin}{10pt} setlength{headheight}{14pt} setlength{headsep}{25pt} setlength{textheight}{660pt} setlength{footskip}{30pt} setlength{hoffset}{0pt} setlength{oddsidemargin}{1.4cm} setlength{textwidth}{426pt} setlength{marginparsep}{0pt} setlength{marginparwidth}{0pt} setlength{marginparpush}{0pt} setlength{headwidth}{textwidth} setlength{evensidemargin}{paperwidth} addtolength{evensidemargin}{-textwidth} addtolength{evensidemargin}{-2.0in} addtolength{evensidemargin}{-oddsidemargin}

Danach sieht es so aus:

thesis2

Der zentrale Tipp ist es, sich die Datei (wie in den Screenshots) mit "Vorschau" anzusehen. Dort wird das Titelblatt richtig (rechts) angezeigt und alle nachfolgende Seiten (gerade links und ungerade rechts). Damit lässt sich erkennen, ob das Dokument richtig gesetzt ist.

Interessanterweise zeigt bei der Doppelseitigen Ansicht Adobe Reader die Titelseite links zusammen mit der 1. geraden Seite rechts und danach jede ungerade Seite links und jede gerade Seite rechts. Also genau wie es i.d.R. für Diplomarbeiten falsch ist. Daher Tipp nur 2): Wenn es in Adobe Reader richtig aussieht, ist es für eine Diplomarbeit in der Regel falsch.

Thursday, November 20, 2008

Monty Python on YouTube

Nein, heute mal nicht die Programmiersprache, sondern die Komikergruppe:

Monday, November 17, 2008

I will start at the Paderborn Center for Parallel Computing

With high probability, I will start as research assistent (aka PhD student) at the Paderborn Center for Parallel Computing.

There I will research in the area of storage systems, especially on the topic "data deduplication". It is really nice to be able to continue and complete the work of my master thesis.

Thursday, November 13, 2008

Es wurde ein Zeichen gesetzt

Spiegel Video: http://www.spiegel.de/video/video-40242.html

Der Veranstalter sagt, es wurde ein Zeichen gesetzt.

Da hab ich Angst um dieses Land. Warum wird Linke-Gewalt in der Öffentlichkeit so geduldet? Ich verstehe es nicht. Die Spiegel-Reporterin meint lapidar: "Die Schüler spielen etwas 68er". Was machen diese Schüler erst wenn sie groß sind? Andersdenkende an die Wand stellen?

Thursday, November 06, 2008

Compress, Encrypt and then remove redundancies:Really?

I knew that I had read it some where, but I forgot. I have found it again: The white paper "The New Metrics of Disk-based Data Protection" by the Strategic Research Cooperation claims that Diligent's Hyperfactor approach works in three steps - compress, encrypt, and then eliminate redundancy".

I really, really want to know how you can de-duplicate that have been compressed and encrypted before. Data that was similar to already known data elements has to be complettly different after compression and encryption. Then there - as I understand it - simply can't be any similarity left between the data elements.

Tuesday, November 04, 2008

Compression vs. Data Deduplication

How is data compression fundamentally different from data de-duplication? I really don't see it. But I'm not convinced that there is no need for a new word either.

Jon Bentley presented a compression algorithm for finding und eliminating common long strings in 1999. The approach works by dividing a stream of bytes into chunks of static size (he uses 1K chunks for the evaluation) and then hash them using Rabin's fingerprinting method. He maintains a table of all fingerprints seen up to date, and there he lookup up the hash value of a new chunk to check if a chunk with the same value was seen before. If there is such a collision, he checks these two chunks byte for byte. If the chunk was not seen before, the hash value is added to the table. If the chunk was there already, a link to an existing occurrences is stored.

The hash-based data de-duplication approach works as follows: The divide a stream of bytes into chunks (often using a more elaborate chunking method that is often falsely called "Rabin Fingerprints" because it used that fingerprinting technique), and then hash them using a cryptographic fingerprinting method (like SHA-1). Dedup systems maintain an index that contains all fingerprints seen up to data, and there they lookup up the fingerprint of the new chunk to check if the chunk was seen before. If the chunk was not seen before, the chunk is stored. If a chunk contains the same data (whp.) the data is not stored.

Looking similar?

In contrast to Jon Bentleys approach, it is common to skip the byte-by-byte comparison for performance reasons claiming that the collision probability using a cryptographic hash value is much lower than e.g. a random byte flip in memory. If there is a data loss, it is whp. not caused by a fingerprint collision. However, even that is not inherent to the de-duplication approach. You could easily perform a byte-by-byte-comparision in dedup systems, too.

One problem — from a students perspective writing a master thesis about that topic — is that before 2008 I found no evidence of the term "data de-duplication" (in a storage context, not in a data mining context) in research literature. The first usage I found was Zhu's paper about Data Domain's ways to avoid the disk bottleneck of hash-based data de-duplication.
There was an interesting discussion about the difference between the storage blogs "Backup Central" and "StorageMojo".
A StorageMojo author says:

I still don’t get why the industry refers to “de-duplication” rather than compression - why use a well-understood term when you can invent a new one? - but they did make the point that compression rates depend on your data types, backup policies and retention policies. Basically the more stuff stays the same the higher your back up compression rate.


W. Curtis Preston of "Backup Central" takes on that.

There are different definitions to distinguish compression from data de-duplication. Here are few tries:

  • Most often (Zhu, Kulkarni) it is claimed that the difference is that compression founds data only in a single file, while data de-duplication looks at multiple files. This is true e.g. for the zip compression application, it is a bit blurred by tar.gz, but the claim still seems to hold. But fundamentally, this is not more than an implementation detail. I have no trouble writing a small compression app that tries to find common strings from multiple files. Is that a compression application? Sure! In general compression is defined as working over a stream of bytes. If that stream is a single file, multiple files, or what ever is not important at a conceptually level. If the byte-stream stops producing new data for a week and than continue to produce new bytes like in a backup scenario also seems not important to me at a conceptually level.
  • In a recent SNIA white paper defines data de-duplication "as the process to examining a data set or byte stream at the sub-file level and storing and/or sending only unique data". Well, this differentiates dedup from "Content Addressable Storage"(CAS) or "Single Instance Storage"(SIS), but not from compression. The "unique data"-term wonders me a bit. All dedup systems I aware of (hash-based systems for sure and also Diligent's implementation of "Delta Encoding via Resemblance Detection") are very course grained approaches for finding redundancy. E.g. hash-based systems miss every redundancy smaller than a chunk size. They may miss large chunks of data if static-sized chunks are used (like in the Venti system) and a small shift has changed the data. Claiming that only unique data is stored, is not exactly true. A dedup systems stores no redundant data that it has classified as redundant. That is a difference.
  • The same SNIA paper defines compression as "the encoding of data to reduce its storage requirements". The referral to the "encoding" is a good point. Dedup systems use a permanent table to lookup, while most compression approaches use a temporary table and that is used to find a small encoding for the table, e.g., Huffman encodings. But wait a moment. A filesystem de-duplication system may consist of three parts a) A storage of all as new classified chunks b) an index with a mapping from the chunk fingerprint to the storage component and c) an index mapping from an Inode to a list of chunk fingerprints (together with offset and sizes and so). Can the value of an entry in the last index not be seen as an encoding of the file? I don't know. The point is not bad.
  • In a whitepaper from Diligent, they differentiate the two terms by claiming that compression finds redundancies only in a short "sliding window". Well, I have found no sliding window in Jon Bentleys compression algorithm.
  • W. Curtis Preston from Backup Central refers also to the file-by-file- or backup-by-backup property of compression, while de-duplication finds redundancies between multiple backups. Another difference is that de-duplication compression ratios are based on the types of data and how the backup is done. "Repeated incremental backups of brand new data (e.g., seismic data) would not de-dupe at all". This limits data de-duplication to the one (important) area of backup- and archival storage. De-duplication is very effective in that area, but not limited to it.

There are some approaches to differentiate the terms, but there is at least no clear and conscience definition and separation.

A commentator at "Backup Central" pointed out that data de-duplication "has more in common with image compression than text compression" and both dedup classes "look like out-of-order MPEG-4 compression". I honestly have no clue about image compression and MPEG-4 (I should!), but maybe he is right. It seems like the text compression approaches based on LW and the implementations like ZIP are simply stated as "compression". The whole concept of compression is reduced to that.

For me the goals are the same: To save storage capacity or bandwidth usage by finding and eliminating redundancies. The approaches are sometimes remarkable similar, while the implementations are not. May be de-duplication is just a subfield of compression

  1. in that redundancies are found over all seen data,
  2. used to build storage systems like block devices and file systems.
I'm really not sure about the formulation and the scope. I included the second point because a compression app that finds redundancies over all seen data and stores them in a single file, would I not call deduplication application. The first point is important because a storage system that applies only "classical" text compression wouldn't be a deduplication system.

Friday, October 31, 2008

Deduplication as Primary Data Storage

Das Blog StorageMojo schreibt in einem Artikel:

So what percentage de-dup compression of unstructured data is feasible? That is the key to understanding the economic basis of primary storage de-duplication of unstructured data. [...] Primary storage de-dup could be the next big win for IT shops. We just don’t have the data that can tell us how big the win could be

Hhm, mal schaun: "vim thesis.tex" - Just kidding!

8K Random Writes on Intel SSD

Eine neue Solid State Disk von Intel soll über 8.000 Random Writes pro Sekunde schaffen. 8000! "Meine" SSD, die ich in der Masterarbeit nutze, schafft gerade mal 3000 (laut IOMeter). Nicht umsonst sagt Linus Torvalds dazu "That thing absolutely rocks.". Der Preis ist immer noch etwas happig: Pro 80 GB 595 Euro (Großhandelspreis), also 7 Euro pro GB. Mal die erstbeste Festplatte von Alternate rausgesucht: 640 GB für 63 Euro (Endkundenpreis) - Also 10 Cent pro GB.

via [Kevin Burton]

P.S. Etwas verspätet, ich arbeite gerade meine Google Reader "Stars" ab.

Saturday, October 25, 2008

Cool! Livestream vom Bundeskongress der Julis

Bei neuen Technologien als Hilfsmittel der innerverbandlichen Partizipation sind die Julis meist an der Spitze. Zum Beispiel ist juli-blogs.de ist knapp zwei Jahre älter als jusos-blogs.de.

Von dem Bundeskongress der Julis an diesem Wochenende gibt es auch erstmals einen - gut gemachten - Videostream. Sehr cool, sehr nacharmungswert. So kann evtl. sogar ich als Juli-Rentner nochmal meinem Senf abgeben (per Blog) ohne Hunderte von Euros ausgeben zu müssen. Auch bei Twitter ist der Bundeskongress vertreten.

Sunday, October 12, 2008

Java Anwendung braucht sehr viel Speicher!

Ich wußte ja immer, dass Java etwas mehr Hauptspeicher benötigt als z.B. C/C++-Programme, aber dieses Programm will schon etwas sehr viel:

javamem.tiff

Saturday, September 27, 2008

Politik: Antragsbuch zum Landeskongress der Julis NRW

Ich habe gerade das Antragsbuch zum 68. Landeskongress der Julis NRW im Briefkasten gefunden und ehrlich: Es zeigt mal wieder warum es gut ist, dass ich nicht mehr aktiv dabei bin. Warum kriege ich eigentlich von das Antragsbuch?

Warnung: Der folgende Text könnte für Nicht-Junge-Liberale etwas kryptisch und unverständlich sein? Was ein KV? Was ein LAK? Was ein Landeskongress? Was ist ein Antrag? Sorry, ich will in den Artikel nicht noch mehr Zeit stecken um in allgemein verständlich zu machen. An vielen Stellen fehlt aus dem gleichen Grund einer detaillierte Begründung für meine Meinung. Kann ich bei Bedarf nachliefern.

Der Leitantrag ist eindeutig eine Arbeit von Plahr und gewohnt gut. Dass sich viele Delegierte unter "unveräußerlichen Rechten" und "offener Gesellschaft" nichts vorstellen können, ist ein bekanntes Problem. Zustimmung wird dieser Antrag natürlich trotzdem finden.

Der Antrag zur Gleichstellung von Religionslehrern, d.h. das Religionslehrer ihr Fach auch ohne Zustimmung der Kirche ausüben dürfen müssen, ist erfreulich (Trennung von Kirche und Staat). Das Autonomie der Schulen als Begründung angeführt wird (steht im Antragstext ist aber eine Begründung, egal) finde ich gut. In der letzten Zeit hat sich LAK Bildung angestrengt hat, die Schulautonomie mit Füßen zu treten u. A. mit der Begründung so etwas gäbe Probleme beim Zentralabitur (siehe Antrag: Abschaffung des Abiturs an Berufskollegs - Der Antrag ist der Grund für meiner Rücktritt vom stellv. Leiteramt und Austritt beim LAK Bildung). Da finde ich es schön, wenn einige die Schulautonomie nicht vergessen haben.

Ein Beispiel für die gewöhnte Richtung des LAK Bildung - der Staat als Gesellschaftskonstrukteur und Erzieher zum richtigen, zum gewünschten Menschen - ist der Antrag "Kulturpass für Kinder und Jugendliche in NRW" - Juhu, noch eine weitere Pauschalsubvention für den Kulturbetrieb - Noch mehr Umverteilung von unten nach oben. Es gibt wirklich andere Möglichkeiten für Kultur für Kinder,Jugendliche und Menschen mit klammen Geldbeutel bezahlbar zu machen, ohne diese Umverteilungskomponente. Darüber hab ich mal eine Diskussionsrunde in Köln mit dem Titel "Kultur ins Grundgesetz - Wichtig für das Land der Dichter und Denker oder staatliche Umverteilung von unten nach oben" geleitet.

Auch die Einführung eines Kindergartenpflichtjahres ist typisch für dieses Antragsbuch. Hat mal irgendwer von denen ins Grundgesetz geschaut? Da steht etwas von 6 Jahren und Schulpflicht und nicht von 5 Jahren und Kindergartenpflicht.

Aber nicht nur der LAK Bildung kann die Vision "Schulautonomie" ablehnen. Der Kreisverband Köln kann es auch. So gut sich der Antrag "Lehrpläne müsen die Verbrechen der DDR umfassend thematisieren" anhört, ja, in der derzeitigen System der Bildungs-Mikrokontrolle durch das Land sogar sinnvoll ist: Die Ziele in der Bildungspolitik sollten für Liberale sein die Mikrosteuerung den Schulen zu überlassen. Jeder Antrag der die Einführung von neuen Lehrinhalten, neuen Fächern sind ein Schritt in die falsche Richtung. Vielfach sind die Lehrpläne auch schon weiter als es in den Antragen dargestellt wird. Ich würde unter keinen Umständen jemals derartige Anträge unterstützen, wenn sie nicht klipp und klar angeben, warum die aktuellen Lehrpläne nicht ausreichend sind. Das fehlt in der Begründung allerdings völlig.

Während eine weitgehende Schulautonomie noch ein Vision ist (zumindest in Deutschland, andere Länder sind dort wesentlich weiter), ist Hochschulautonomie Realität. Das hält den Bezirksverband OWL nicht davon ab, die landesweite Einführung von Lehrevaluationen zu fordern. Die sollen dann durch die Fachschaften u.a. in Zusammenarbeit mit qualitativen Sozialforschern erfolgen. Ja, wie lange soll das den dauern? Wie viel soll es kosten? Wo ist der Mehrwert durch die Beteiligung der Sozialforscher? Also ich vertraue meiner Fachschaft, dass sie grundlegende Statistik können.
Wo ist allgemein der Mehrwert gegenüber einer freiwilligen Evaluation durch die Fachschaften? Seit wann ist das Land in irgendeiner Form den Fachschaften gegenüber weisungsberechtigt? Gibt es dann Strafgelder für Fachschaften, wenn diese keine Evaluation durchführen?

Und ehrlich: Gibt es tatsächlich Fachschaften, die nicht schon selbstständig Evaluationen durchführen? Wenn ja (ich hoffe es nicht), dann ist es deren Versäumnis und Problem. Landesgesetze helfen nicht, um lokale Probleme wie untätige oder unfähige Fachschaften zu lösen.
Glaubt den irgendwer dass ein Professur in NRW berufen wird ohne, dass sich die Studentenvertreter im Berufungsausschuß nach der Lehrevaluationen des Bewerber umhören? Ich kann mir es nicht vorstellen.

Ja, Lehre muss größer geschrieben werden, aber ein Gesetz zur Lehrevaluation ist IMHO nicht der richtige Weg.

Gerade zu skandalös finde ich den Antrag "Diagnose: Verdacht auf Störung der Sexualpräferez? - Nein Danke!". Aus Diskriminierung und aus Datenschutzgründen soll unter anderem die Diagnose "Pädophilie" verboten werden. Ja, geht es denn noch? Die Diagnose als Krankheit ist die einzige Chance für die Patienten auf Hilfe.

Der KV Köln reitet - IMHO ohne Sachkenntnis - auf der aktuellen Datenschutzwelle bezüglich Internetdiensten mit. Dabei erfinden sie eigentlich nur schon bestehendes Recht neu. Die einzige wirkliche Neuerung ist die Verpflichtung "personenbezogene Daten maximal 6 Monate zu speichern". Wo kommt diese willkürliche Grenze her?
Soll das ein neuer Grundsatz mit BDSG werden oder nur für Internetanbieter? Nur für Google? Ich fände es blöd, wenn nach 6 Monaten mein StudiVZ-Profil und meine GMail-Mails gelöscht werden.
Lasst doch bitte die Benutzer entscheiden, ob sie einem Anbieter vertrauen oder nicht. Keine willkürlichen Grenzen in irgendwelche Gesetze schreiben nur weil ihr - KV Köln - natürlich viel besser wisst, was richtig für alle ist.
Mein Standpunkt zum Datenschutz ist, dass Information was mit Daten passiert, welche Daten gespeichert werden, extrem wichtig ist. Wenn diese Informationen vorliegen oder weitgehend vorliegen, dann ist es die freie Entscheidung als mündiger Bürger sich für Dienst A, Dienst B oder keinen Dienst zu entscheiden.

Das einzige Highlight - auch vom KV Köln - ist der Antrag "Nein zum "Nanny State" - Suchtprävention durch Aufklärung und Beratung statt Volkspädagogik". Inhaltlich fordern sie, die Ablehnung von:
- Tageszeitabhängige Verbote des Verkaufs alkoholischer Getränke
- Ortsabhängige Verbote von Alkoholverbote, ausgenommen: Öffentliche Plätze, sowie Spiel- und Bolzplätze.
- Verbote von "Flatrate-Partys"
- Heraufsetzung des Mindestalters für den Erwerb und Konsum nicht branntweinhaltiger alkoholischer Getränke auf 18 Jahre
- Werbeverbote für Alkohol
- Steuererhöhungen auf alkohlische Getränke
stattdessen fordern sie auf Beratung und Aufklärung.

Einen kleinen Kritikpunkt habe ich schon:
- Warum die Ausnahme von öffentlichen Plätzen? Ich lehne diese Maßnahme - die eigentlich nur den örtlichen Wirten helfen soll - ab.
Ansonsten kann ich dem Antrag zustimmen.

Formal ist schön, dass Antrag und Begründung ordentlich getrennt ist. Die Begründung ist ausführlich und gut. So sollen Anträge aussehen.

Von der sehr guten formalen Arbeit des KV Köln beim "Nanny-State"-Antrag kann der KV Hagen nur lernen. Ich möchte keine rhetorischen Fragen in einem Antrag - wenn dann gehört so etwas in die Begründung. Ich möchte keinen Antrag der zu 2/3 aus reiner Begründung besteht.

Der Antrag "Reform des öffentlich-rechtlichen Bankensektors" durch den LAK Wirtschaft ist im Grunde sehr gut, ist aber durch die Realität überholt worden. Heute würde niemand mehr Sätze schreiben wie "Die öffentlich-rechtlichen Banken sollen in erster Linie Förderbanken sein, wie es praktisch schon erfolgreich mit der KfW (Kreditanstalt für Wiederaufbau) gelebt wird".

Der Rhein-Kreis-Sieg will eine Klärung, ob die Julis für die Abschaffung oder die Aussetzung der Wehrpflicht sind. Dies sei angeblich nicht klar. Ein Blick in die Beschlusslage und auf die Homepage hilft: Dort steht die Forderung "Wehrpflicht abschaffen". Ehrlich Leute. Ein Anruf beim Landesprogrammatiker hätte da bestimmt schnell weitergeholfen.

All den Julis, die stets meinem mit mehr Gesetzen und Verordnungen, empfehle ich u.a. die tägliche Lektüre der "Bissigen Liberalen."

Thursday, September 11, 2008

nice auf F1-Rechnern

Vor ein paar Tagen habe ich noch angemerkt, dass nice ein sinnvoller Befehl für Hintergrundanwendungen auf F1-Rechnern ("Unendliche Geschichte"-Pool ist.

Zumindest so lange er funktioniert:

>nice echo 1
setpriority: Permission denied.

Was ist los? Hat das IRB wieder Mist gebaut (wie ich zuerst gedacht habe)?
Anscheinend ist dies ein Nebeneffekt davon, dass jeder Prozess von Remote-Users nun automatisch mit nice-Level 10 gestartet wird. Das ist generell eine gute Nachricht.
[Hinweis: Ziemlich geändert.]

Wednesday, September 10, 2008

Podcast: eBay's Architecture Principles

Vorgestern wurde ein sehr guter Beitrag bei Software Engineering Radio veröffentlicht. Dieses Mal kein Model-Driven Buzzword-Bingo, sondern ein Beitrag über die Architektur von eBay. Randy Shoup, ein eBay-Architekt, stellt vier Hauptideen vor:
- Partition everything
- Asynchrony everywhere
- Automate everything
- Design the system keeping in mind that everything fails at some time

Im Grunde sind es die klassischen Ideen für Internet-Scale Systems. Ähnliche Ideen werden auch vorgestellt in "On Design and Deploying Internet-Scale Services" , ein Paper über die Erfahrungen des Windows Live Server Teams.

Eine weitere, meiner Meinung nach zentrale, Idee wurde nicht in der Zusammenfassung genannt: Der teilweise Verzicht auf die ACID-Eigenschaften und verteilte Transaktionen, weil diese die Performance und Skalierbarkeit einschränken. Diese Idee wird auch von Pat Helland (damals Amazon, heute (wieder) Microsoft) in "Life beycond Distributed Transactions: An Apostate's Opinion" ausgeführt.

Wirklich ein hörenswerter Podcast-Beitrag.

Bei InfoQ gibt es auch ein Video über das gleiche Thema.

Wednesday, August 27, 2008

F1-Poolrechner für Laptopeinsatz gesperrt

Seit fast 1 1/2 Jahren arbeite ich jeden Tag im F1-Pool der Fürstenallee.

Die Ausstattung war immer optimal. Man konnte den Laptop an die 24"-Monitore anschließen, per USB Tastatur und Maus anschließen und fertig ist ein wirklich guter Arbeitsplatz. Immer sind Kommilitonen dort, die man kennt und mit denen man einen Kaffee trinkt, diskutiert und sonst wie ablenken lässt.

Aber nun ist das gute Arbeiten im F1-Pool vorbei: Bald ist das letzte USB-Kabel ist weggeschlossen, das letzte VGA-Kabel entfernt. Die Bürokratie hat wieder einmal gesiegt.

Die Pool-Computer selbst sind auf dem Papier ziemlich gut ausgestattet: Dual-Core, 4 GB Hauptspeicher, aber sie haben entscheidende Nachteile für den wirklichen Einsatz.

Die dort installierte Software reicht für kaum eine Abschlussarbeit aus (uraltes Eclipse, überall verschiedene Java-Versionen auf allen Rechnern) und natürlich kann man nicht einfach Software nachinstallieren. Fast jede Arbeit braucht irgendwelche besondere Software. Ich brauche für meine Masterarbeit zwingend Root-Rechte - Kernel-Entwicklung ist ohne Root-Rechte so schwierig. Auch die NFS-Quota ist nicht wirklich dafür geeignet ernsthaft zum Arbeiten einzuladen: 400 MB Quota sind zu wenig, selbst für weniger Daten-intensive Abschlussarbeiten als meine (ich bewege mich da eher im Bereich von einigen Hundert GB). 400 MB im Jahr 2008 - Hallo? Und natürlich der Vorteil in der Uni und zu Hause, die gleiche Software in der gleichen Konfiguration nutzen zu können. Einfach so.

Manchmal laufen darauf (gerade in der Endphase des Semesters) auch zu viele Langläuferprozesse von Doktoranden, Abschlussarbeiten von Studenten und von Projektgruppen (wäre doch der upb-Supercomputer Realität geworden). Das ist wichtig, weil ohne die F1-Poolfläche Simulations-intensive Abschlussarbeiten wesentlich erschwert werden würden. Zur Erinnerung: Mindestens 30 Runs pro Simulationskonfiguration für Konfidenzintervalle. Aber an Arbeiten ist an den Rechnern dann teilweise nicht mehr zu denken (Hinweis trotzdem an die Langläufer-Starter: nice ist ein schöner Befehl!)

Auch sind die Rechner dauert nicht funktionstüchtig!

Es hat wirkliche Vorteile auf dem Laptop anstatt den Poolrechnern zu arbeiten. Ich könnte meine Arbeit unter keinen Umständen auf den Poolrechnern schreiben.

Es ist typisch Uni-Verwaltung! - Anstatt froh zu sein, dass die Infrastruktur der Universität genutzt wird, werden den Studenten, die mehr Zeit zum Lernen und Arbeiten in der Fürstenallee verbringen, Steinen in den Weg gelegt. Den engagierten Studenten wird damit mal wieder ein Schlag ins Gesicht verpasst. Und wenn ich mir ansehe, wer dort mit Laptop sitzt und arbeitet: Es sind genau die engagierten Studenten!

Ach ja: Als Ersatz stehen auf F1 zwei (!) Mini-Monitore ohne Tastatur und Maus für Laptop-Besitzer bereit. Dass in dem F1-Pool zu Hochzeiten eher 10 bis 20 Laptop-Besitzer ihren dauerhaften Arbeitsplatz gefunden haben, stört eine gute Behörde dabei natürlich nicht. Selbst jetzt (nachdem fast alle VGA-Kabel entfernt sind) arbeiten im F1-Pool 8 Studenten mit Laptop und 7 an den Poolrechnern.

Ich würde es ja verstehen, wenn die Kabel oder die Mäuse öfter geklaut würden. Aber dies war nicht die Begründung des Mitarbeiters und selbst dann hätte mein eine Lösung finden können, z.B. indem die Mäuse festgeschlossen werden (wie nun auch) und trotzdem für Laptop-Besitzer verwendet werden können. Die Begründung war, dass die Computer oftmals nicht einsatzfähig gewesen wären. In der Realität heisst, dies nur weil die Monitore manchmal auf Einstellung "1 - VGA" hinterlassen werden und man einmal auf "2 - DVI" umstellen muss und maximal zwei USB-Kabel in sichtbare USB-Stecker zurückstecken muss, werden die Studenten zu verbannt. In der FÜ sind Informatikstudenten. Die können dass! Die fangen deshalb nicht an zu weinen und wissen nicht, was sie tun sollen. Und meistens haben alle auch darauf geachtet, dass alles im Originalzustand gewesen ist, wenn man gegangen ist. Alles andere sind - gerade in Hinblick darauf wie viele Studenten mit Laptop dort jeden Tag gewesen sind - eher Ausnahmen.

Ich bin sauer, weil es in den letzten Monaten in der FÜ immer sehr viel Spaß gemacht hat zu arbeiten und ich mich nun wohl wieder nach Hause in die Wohnung verkriechen muss. Ich werde dann in der Zukunft kein "FÜ-Bewohner" mehr sein. Danke, IRB!

P.S.: Mal sehen, wann auch die Steckdosen abgebaut werden.

Tuesday, July 22, 2008

Mac-Cluster an Virginia Tech

Da im PC^2 eh jeder Mitarbeiter einen Mac zu haben scheint, wäre es doch nur konsequent den Weg von Virginia Tech zu folgen, oder? 29 TeraFlop sind auch ein bisschen mehr als die 2,6 TeraFlops des Arminius-Clusters.

Thursday, July 10, 2008

Code Swarm: Shox Network Simulator

Code Swarm ist ein interessantes Experiment zur Visualisierung der Aktivitäten an Projekten. Mit der code_swarm Software wird aus der (SVN-)Commit-History eins organisch wirkende Visualisierung berechnet. Dabei fliegen die Namen der entsprechenden Entwickler in den Raum, wenn sie Dateien committed haben und verschwinden wieder, wenn die Aktivität nachlässt. Alle Dateien werden durch kleine Punkte visualisiert. Sie werden immer dicker und heller je öfter die Datei geändert wird.

Das Projekt ist hier zu finden. Das Programm selbst wird bei Google Code gehostet. Ich habe mal das entsprechende Video für Shox - einem Netzwerk Simulator für Sensornetzwerke - an dem ich mal mitgearbeitet habe.
. Im Grunde hat es keinen direkten Nutzen, aber die Aktivität wird auf interessante Weise dargestellt. Man erinnert sich dann sofort an die entschiedenen Phasen des Projektes.

Videos sind auch verfügbar für Python, Apache, Eclipse und PostgreSQL.

Saturday, July 05, 2008

Zeit.de: "Ihren Fitness-Ausweis, bitte!"

Erschreckend realistische Zukunftsvision auf zeit.de:

"Was darf’s denn sein?", fragt der Kellner. - "Ich hätte gerne das argentinische Riesensteak mit Bratkartoffeln, dazu eine Flasche Rotwein bitte.“ Der Kellner mustert mich prüfend. "Dann müsste ich laut Gesetz zum Schutze vor Übergewicht kurz einen Blick auf ihren Fitness-Ausweis werfen", entgegnet er mir streng.

Im Moment werden wir ja gut in diese Richtung "angefüttert".

Friday, July 04, 2008

Mein Blogprojekt wird in der TAZ erwähnt

Interessant, was Google Alert mir heute in den Feedreader geliefert hat.

Mein Blogprojekt "juli-blogs.de" in der linken Zeitung "TAZ" erwähnt und nichtmal zerrissen oder sonst billig niedergemacht wie sonst bei der TAZ üblich:

Wer glaubt, es mit einem Generationenproblem [die schlechte Aufstellung der Parteien im Web 2.0] zu tun haben, sieht sich getäuscht. Internet und alles, was dazu gehört, gilt immer noch als junges Thema. Doch die Nachwuchsorganisationen der Parteien sind dort kaum besser aufgestellt. Zwar verfügt die grüne Jugend über ein Weblog und ein eigenes wiki; auch die Jungliberalen bloggen, und die Jusos haben das zumindest mal getan. Wer aber derartiges bei der JU oder den jungen Linken sucht, wird nichts finden.

Auf die hypercoole Web 2.0 Community "my.fdp.de" hätte die TAZ aber eingehen können. Haben die Redakteure etwas nicht die Masse von Pressemitteilungen gelesen, die die FDP darüber herausschickt? Die Plattform hätten sie dann auch mit Recht niedermachen können.

Aber "wir" sind nicht die "Jungliberalen", sondern die "Jungen Liberalen" "juli-blogs.de" ist kein offizielles Projekt.

P.S. Da fällt mir auf, dass ich wirklich dringend die Umlaut- und Linkprobleme von "juli-blogs.de" beheben muss.

Sunday, June 15, 2008

Do I want to go where the real action is?

The Linux Kernel Module Programming Guide:

You know C, you've written a few normal programs to run as processes, and now you want to get to where the real action is, to where a single wild pointer can wipe out your file system and a core dump means a reboot.

(Hervorhebung von mir)
Wollen? "Wollen" ist nicht der richtige Ausdruck, aber solange sich die iSCSI Target-Implementierung nicht ins Userland bewegt, muß ich mich in den Kernel bewegen. Ansonsten nix "Master of Science".

Wednesday, June 11, 2008

Zusammenarbeit Java und Python

Einer der Vorteile von Python ist die gute Integration von C-Bibliotheken z.B. um einzelne Funktionen aus Performancegründen auszulagern. Die Zusammenarbeit mit Java ist viel schwieriger. Es gibt mehrere Gründe, warum eine bessere Zusammenarbeit wünschenswert ist. Zum einen sind die sehr umfangreichen Bibliotheken ein riesiger Vorteil der Java-Welt, auf der anderen Seite könnte man eine Verbindung mit Java-Legacy-Anwendungen aus Python heraus herstellen wollen.

Es gibt mit Jython eine Python-Implementierung auf der JVM, die natürlich sehr einfach mit Java-Bibliotheken und -Programmen zusammenarbeiten kann. Jython hat in letzter Zeit einige Fortschritte erzielt, aber die Implementierung ist immer noch Jahre hinter der aktuellen Entwicklung der Sprache hinterher. In vielen Situationen scheidet Jython als Alternative einfach aus.

Eine Lösung, die ich seit einigen Wochen verwende, ist JPype. JPype erlaubt aus normalen (C-)Python heraus Zugriff auf Java-Bibliotheken und integriert diese gar nicht schlecht. Ein Beispiel: import jpype jpype.startJVM(jpype.getDefaultJVMPath(), "-Djava.class.path=%s" % classpath) java = jype.JPackage("java") de = jype.JPackage("de") contact = de.dirkmeister.example.Contact(surname = "Meister") contact.mail = "XYZ@XYZ.de" contact.sendMail("Test-Mail") java.lang.System.out.println("Mail sent") Die Integrationg geht soweit, dass Java’s hashCode() Methode als __hash__, equals() als __eq__ und toString() als __str__ verwendet werden, so dass man quasi kaum merkt, ob ein Objekt nur ein Python- oder ein “Java”-Objekt ist. Selbst Getter- und Setter werden als Python-Properties integriert und sogar Exceptions werden transparent umgesetzt. Auch Swing-Anwendungen sollen einfach möglich sein.

Nachdem die Hürde der Installation überwunden hat, gestaltet ich die Arbeit erstaunlich flüssig und problemlos.

Ich verwende JPype um in Python auf das Hadoop Distributed File System (HDFS) zu zugreifen und dabei die volle FileSystem-API auf eine pythonifizierte Art zu verwenden z.B. sollen die Stream-Objekte als “File-like Objects” integriert werden. Den Code will ich in ein paar Wochen auf hier vorstellen.

Saturday, June 07, 2008

Google TechTalk: Fujaba-Storydiagramme

Fujaba-Storydriven Modeling (SDM) sind ein an der Uni Paderborn entwickelter Ansatz für General-Purpose-, visuelle, rein-modelbasierte Softwareentwicklung. Mit General-Purpose meine ich, dass es eine Modelsyntax für alle Domainen gibt, also kein unterschiedliches Meta-Modell für unterschiedliche Domains (DSL-Ansatz) mit jeweils problem-spezifischen Code-Generatoren. Das Story in SDM hat auch keinen Zusammenhang mit den Userstories in XP, ganz bestimmt nicht. SDM haben wir in der Vorlesung "Modellbasierte Softwareentwicklung" behandelt.

Gefallen hat mir der Ansatz nie: Zu unkompakt, komplex und unübersichtlich war mir immer die Syntax. Alle Beispiele aus der Vorlesung habe ich in Python und Java nachprogrammiert. Und Python war immer wesentlich lesbarer und kürzer als die Storydiagramme, Java auch in einigen Fällen. Der aus Storydiagrammen generierte Java-Code spottet jeder Beschreibung. Es wurde zwar in der Vorlesung behauptet, dass erfahrende Java-Entwickler Storydiagramme genau so in Code übersetzen würden, aber dann bin ich wohl nicht "erfahren".

Für mich waren Storydiagramme nicht das Silver Bullet, für das einige diese Modellierungssprache offensichtlich halten. Auch insgesamt bin ich von rein-modellbasierter Softwareentwicklung (das berühmte Zitat "Programmierer sind dumm" stammt auch aus der Vorlesung) nicht wirklich überzeugt.

Aber es gibt offensichtlich doch Leute, die sich dafür interessieren.
Der "Erfinder" Alfred Zundorf hat letzte Woche einen Google TechTalk gehalten:

Friday, May 30, 2008

Born Brave Developer

brave-developer.jpg

Keine Ahnung, wo es ursprünglich herkommt. Fatal Exception war der früheste Eintrag mit dem Foto, dass ich gefunden habe.

Via JRoller-Shared Memory-Blog

Thursday, May 15, 2008

Interview zu "Effective Java - Second Edition"

InfoQ hat ein Interview mit Josh Bloch über „Effective Java – Second Edition" und ein Probekapitel des neuen Buches veröffentlicht.

Etwas Balsam für meine Seele - nachdem ich ein bestimmtes Open-Source Projekt nach ca. einem Jahr nun endgültig frustiert verlassen habe - ist folgender Rat:

InfoQ: What are the core principles and key takeaway points that Effective Java aims to convey to the reader? Joshua Bloch: Same as it ever was: Always strive to write simple, clear, and correct programs. It is penny wise and pound foolish to do otherwise. Style does matter. It pays real dividends in terms of correctness, usability, robustness, and maintainability. Also, it's way more fun to write good programs than bad ones.
Auf der Webseite des Publishers ist der 8. Mai als Veröffentlichungdatum eingetragen. Bei amazon.de steht immer noch 28. Juni. So lange kann es also nicht mehr dauern bis das Buch bei mir ankommt.

Tuesday, May 06, 2008

Podcast-Liste

Podcasts sind eine nette Sache auf langen Zugfahrten, im Bus, auf eine CD gebrannt auch im Auto. Vor Urzeiten (ca. 2 Jahre oder so) hab in schon mal eine Liste der Podcasts gepostet, die ich regelmäßig höre. Zum einen hat die Liste den Servercrash nicht überlebt, zum anderen dürfte sich die Liste auch total gewandelt haben.

Derzeit höre ich:

  • The Java Posse: Ein richtig guter Podcasts von 4 Java-Gurus über aktuelle Java (+ Umfeld wie Andriod)-News, Diskussionen und Interviews. Es lohnt sich mal die gesamte Liste alle Folgen zu überfliegen. In den Archiven verstecken sich reichlich Schätze in Form von Interview mit z.B. Josh Bloch, Gavin King (Hibernate), Bill Pugh and Brian Goetz, Martin Odersky (Scala), (Crazy) Bob Lee (Guice), usw.
    "The Java Posse" ist (oder wird langssam) eine Größe in der Java-Welt. Immerhin veranstalten sie ihre eigene OpenSpace-Konferenz (Java Posse Roundup) und haben auch eine Diskussions-Session auf der JavaOne-Konferenz (nächste Woche).

  • Semi-Coherent Computing: Ein sehr professionell gemacher Podcast von "The Register" zu Datacentern und Datacenter-Technologien.


  • Software Engineering Radio: Ein Podcast zu allen Themen des Software Engineering. Wirklich interessant und hat oft einen breiteren, sprachunabhängigen Blickwinkel. Manchmal etwas - naja, Buzz-Word getragen: Ich persönlich kann SOA einfach nicht mehr hören.

    Wirklich cool (aber nur am Rand SE bezogen) fand ich das Interview zu Microsofts Forschungsbetriebssystems Singularity, dass z.B. durch Codeanalyse sicherstellt, dass ein Objekt niemals von zwei Prozessen referenziert werden kann. Dadurch kann komplett auf Speicherschutz verzichtet werden. Eine recht typische Folge ist "Fault Tolerance with Bob Hanmer"

  • Philosophy Bites: Von Philosophy Bites habe ich bisher erst eine Folge gehört (gestern abend auf dem Heimweg vom Grillen!): "Richard Reeves on Mill's On Liberty". Aber es war eine richtig schöne Zusammenfassung on Mills Philosphie der Freiheit. Ich hab selten ein Buch mit einem höheren "Intelligente Gedanken pro Seite" Wert gelesen: Ja, ich mag Mill, allem Utilitarismus zum Trotz. Gerade in Zeiten in denen die Politik (insbesondere die Grünen und Frau von der Leynen, aber im Grunde das gesamte Spektrum) den Menschen vorschreiben wollen wie ein gutes und richtiges Leben auszusehen hat, ist Mill IMHO kaum zu überschätzen.

  • J!Cast: J!Cast ist ein Jura-Podcast zum Informations-, Telekommunikations- und Medienrecht. Auch halbwegs verständlich für den interessierten Laien wie mich.

  • Chaosradio Express: Interviews zu vielen total verschiedenen meist technischen, teilweise aber auch politischen Themen von Hubschraubern. Oft sehr interessant, aber meist zu lang für meinen Geschmack (über 2 Stunden).

Saturday, May 03, 2008

Writing Code not beneath a Gentleman Engineer

Brian Cantrill (Entwicker von DTrace) schrieb in seinem Blog:

We suffer — tremendously — from a bias from traditional engineering that writing code is like digging a ditch: that it is a mundane activity best left to day labor — and certainly beneath the Gentleman Engineer. This belief is profoundly wrong because software is not like a dam or a superhighway or a power plant: in software, the blueprints _are_ the thing; the abstraction _is_ the machine.

Ich werde in der Universität oftmals komisch angesehen, wenn ich sage, dass in 10 Jahren noch Code schreiben will. Es kommt eben darauf an z.B. welchen Code bzw. Code wofür.

Wednesday, April 30, 2008

Flickr-Stream vom England-Urlaub

Bei Flickr habe ich schon vor einiger Zeit einen Fotostream von einigen meiner Englandfotos online gestellt. Dort kann kann man sich u.a. davon überzeugen wie gut das Wetter in dem Urlaub gewesen ist.

Beeindruckt hat mich in England vor allem:

  • London
    London
  • "Fire Gardens" in Bournemouth
    Bournemouth - Fire Gardens
  • Die "Surferstadt" mitten in Cornwall: Newquay
    Newquey, Cornwall
  • Oxford
    Oxford

Es lief im Urlaub nicht alles glatt (Autounfall mit Blechschaden) aber es war ein schöner Urlaub. Würde da gerne mal wieder hin .

Keine Festival-Karten an der FÜ

In den vergangenen Wochen hab ich mit verschiedenen Freunden und Bekannten in der Fürstenallee (FÜ / FA / F-Gebäude) darüber gesprochen, dass der Uni-Mainstream oftmals zu tut als würde die FÜ nicht existieren.

Ein Beispiel war immer die fehlende Möglichkeit Uni-Party-Karten zu kaufen, insbesondere wenn es um die "große, offizielle" Uni-Party ging: dem Asta-Sommerfestival. Karten gab es an dem Uni-Campus, aber niemals an der Fürstenallee. Obwohl es viele Studenten (viele aus der Informatik und E-Technik in den höheren Semestern) gibt, die quasi niemals am Campus sind.

Ich hab bei der letzten Wahl gehofft, dass sich dieser Misstand legt, wenn wir genug Informatiker in das StuPa wählen, aber geändert hat sich nichts. Vermutlich hängen da immer noch genug Geisteswissenschafter im 20. Semester rum, die nichmal wissen, dass die FÜ existiert.

Heute hat die Fachschaft eine Mail herumgeschickt, die ich einfach mal kommentieren möchte:

Der Verkauf der Sommerfest-Karten an der Fürstenallee wurde uns [von der "Uni"]
verboten und wir mussten mit Kasse und Karten wieder abziehen.

Dass der AStA nicht von sich aus früh genug einen Verkauf an der
Fürstenallee einplant, obwohl das offizieller Standort der Uni ist und
viele Studierende sich gar nicht am Campus aufhalten halte ich für
traurig genug, dass uns der Verkauf dann verboten ist sollte aber eine
einmalige Sache sein.

Das die AStA es nicht packt, die FÜ ordentlich in den AStA-Teil des "Stundenleben" einzubinden, ist tatsächlich traurig. Schließlich sind wir (FÜ-Bewohner) genauso Teil der verfassten Studentenschaft. Der Kartenverkauf ist da eher ein Beispiel von vielen.

Schon die jetzige Planung - dass die Fachschaft Informatik selbst den Verkauf übernimmt und organisiert - war eher eine Minimallösung. Das nun nichtmal diese Minimallösung möglich ist, ist bitter.

  • Warum erlaubt die Universität den Verkauf und die Veranstaltung am Campus und verbietet den Verkauf im F-Gebäude. Kann man von Informatiker-Diskriminierung sprechen?
  • Wer genau hat dies verboten? Universitätsleitung oder der AstA?
  • Gibt es eine zitierfähige Begründung für diesen Unsinn?

Zum Glück habe ich mich nicht darauf verlassen und habe schon am Dienstag (als ich einmal zufällig im Campus war) meine Karte gekauft.

Ein paar ungeordnete Gedanken zu Ruby on Rails

Ich entwickele - quasi als privates "20% Projekt" - mein erstes größeres Projekt im Ruby on Rails.

Insgesamt bin ich wesentlich produktiver als ich es mit JSP/Servlets oder ASP.NET jemals war. Aber irgendwie bleibt ein ungutes Gefühl im Magen. Deshalb hier mal ein paar ungeordnete ziemlich ketzerische Gedanken zu Ruby und Ruby on Rails, die ich aber einfach mal los werden muss.

  • Ich hasse solchen Code:

    >>s = "Hallo"
    >>s2 = s
    >>[....]
    >>s << " Welt"
    >>[...]
    >>s2 == "Hallo" => false
    >>s2 == "Hallo Welt" => true

    Änderbare Stringklassen haben ihren Zweck (deshalb gibt es in Java StringBuilder zusätzlich zu java.lang.String), aber sie sollten nicht die Standardklasse für Zeichenketten sein. Die Argumentation über Korrektheit wird die Hölle, wenn jederzeit von Hinten den Zustand zerschossen werden kann. Dafür das Ruby eigentlich so funktional angehauchte Sprache ist (sein soll), ist die Stringklasse (eine der zentralsten Klassen überhaupt) eine Katastrophe. In Bezug auf Zeichenketten ist Java funktionaler als Ruby.

    Mit string_name[0..-1] eine entkoppelten Clone einer Zeichenkette machen, was man auch dringend an entsprechenden Stellen auch machen sollte, wenn man keine Lust hat den Zustand zerschossen zu bekommen (z.B. immer wenn man eine Invariante bezüglich des Inhaltes einer Zeichenkette testet)

  • In Ruby on Rails hinter Fehlern herzusuchen ist die Hölle. Such mal Fehler in dynamisch generiertem Code also Code ohne Entsprechung im Quelltext. Ich hab 3 Abende hinter einer nur manchmal auftretenden Endlosschleife in einer benannten Route von einer REST-Ressource in Rails hinterhergesucht. Grausam. (Ok, auf die Idee die Route normal, also mit :controller => x, :action => y, anzugeben hätte ich schneller kommen können). Woher die Endlosschleife kommt, habe ich bis heute nicht verstanden.
  • So richtig wohl fühle ich mich bei Ruby noch nicht. Ich verstehe die Syntax und die Möglichkeiten z.B. dynamisch Klasse zu erweitern und Code zu generieren, aber für mich ist es zu viel Magie. Ich habe noch die Befürchtung, dass die Entwicklung nur solange wirklich richtig produktiv ist wie alles klappt, aber wehe man bekommt Probleme. Ich hoffe Rails ist keine Sackgasse sobald man anspruchsvolle Dinge probiert oder man sonst auf Probleme und komische Bugs stößt.
  • Ruby on Rails macht auf mich eher dein Eindruck einer Sprache zum Schreiben von Code anstatt zum Lesen und Verstehen von Code. Zu viel implizit zu machen (Magie) macht es manchmal nicht einfacher zu verstehen.
  • Python ist einfach eher meine Sprache. Scala würde ich gerne mal für etwas richtiges Ausprobieren. Ich hab das neue Buch "Programming in Scala" von Martin Odersky gelesen und will es unbedingt mal ausprobieren.
  • Eines der Killerfeatures von Rails und warum ich noch nicht nach Pylons (Pythlon) oder Lift (Scala) gewechselt bin, ist die gute Integration von AJAX, insbesondere mit RJS. Wow. Ich fühle mich eher im Backend zu Hause, aber was ich in wirklich wenig Zeit an schicken AJAX-Sachen machen konnte, ist beeindruckend.

    Das Two-way-Matching von Url-Pfaden auf Controller (Routes) war mein erster Wow-Moment bei Rails (und ich finde es immer noch gut gelöst, wenn man mal von gewissen Endlosschleifen absieht (s.o.)). Allerdings hat Pylons das Konzept ziemlich direkt übernommen.

    Auch das fließende Zusammenspiel von Controller und View hat schon einiges für sich. Wie gesagt, ich habe viel in kurzer Zeit geschafft. Rails hat schon gute Konzepte.

  • Alle Ruby und Ruby von Rails-Bücher in der Bibo sind auf Monate verliehen und vorgemerkt.

  • Hibernate ist Rails ActiveRecord um mindestens 3 - 5 Jahre voraus. ActiveRecord ist nett und man kann gut mitarbeiten, aber diesen großen Hype um Rails ActiveRecord verstehe ich nicht. Einen Vergleich aus 2005 zwischen Hibernate und ActiveRecord ist auf ServerSide.com zu finden. Nur als Beispiel: N:N-Beziehungen können meines Wissens nach nicht transparent umgesetzt werden. Man sieht immer die Mittlerklasse/Mittlertabelle wie hier dargestellt. Es ist eine Umsetzung des Active Record Musters von Martin Fowler, deshalb muß quasi schon jede Tabelle 1:1 abgebildet werden, aber das Optimum zum Arbeiten ist für mich eine ORM, die die Objekte näher an die Domain bringt.

    Wenn man Hibernate gewöhnt ist, fühlt man sich bei ActiveRecord fast als würde man wieder auf dem blanken Metall arbeiten.

  • Hochdynamische Sprachen wie Ruby stellen viel höhere Anforderungen an die Dokumentation als statische Sprachen wie Java. Dort hat man wenigstens mal den Compiler um den größten Unfug zu entdecken. Dafür ist die Dokumentation von Rails ist in meinen Augen nicht ein Auszeichnungsmerkmal von Rails. Kann mir mal jemand z.B. die Dokumentation für die Methoden zeigen, die 1.hour usw. ermöglichen? Ich konnte es wirklich nicht finden.

Vielleicht wird der nächste Ruby on Rails Artikel hier etwas positiver, aber dieses Problem mit der benannten Route hat mich echt genervt.

Sunday, April 27, 2008

Clay-Probleme mit "Jahr der Mathematik"

2008 ist das Jahr der Mathematik und in Paderborn gibt es dazu eine Vortragsreihe mit einigen interessanten Vorträen (während mich die Vorträe zum Jahr der Informatik eigentlich ziemlich kalt gelassen haben).

Zum Beispiel gibt Vorträe über die Clay-Probleme, offene mathematische Probleme für deren Lösung vom Clay Institute jeweils ein Preisgeld von einer Millionen Dollar ausgeschreiben wurde.

Es ging am 24. April los mit der Poincaré-Vermutung und der Hodge-Vermutung. 19. Juni geht es weiter zwei weiteren "Vermutungen" (Birch und Swinnerton-Dyer und Navier-Stokes-Gleichung)

Für Informatiker wohl am interessantesten sind die "Vermutungen", die am 4. Dezember vorgestellt werden. Prof. Hansen stellt die Yang-Mills-Quantentheorie vor. Prof. Bürgisser stellt vor, ob P=NP ist oder eben nicht. Prof. Wedhorn stellt die Riemannsche Vermutung vor.

Wer hat Lust zu diesen Veranstaltungen zu gehen?

Saturday, April 19, 2008

IBM kauft Daten-Deduplication-Firma

Wie Golem berichtet hat IBM die Daten-Deduplication-Firma Diligent gekauft. Laut dem Bericht für vermutlich 200 Millionen Dollar.

Das Thema meiner Masterarbeit ist tatsächlich sehr heiß. Auch wenn ich die damalige Bemerkung "akademisch bisher kaum behandelt" nicht mehr so stehen lassen kann. Dafür ist meine To-Read-Liste bei CiteULike langsam zu lang geworden.

Thursday, April 17, 2008

Pre-VKrit: Parallel Programming in Java

Ein Mitarbeiter der AG Kastens hat mich heute von meinem angestammten Arbeitsplatz (F1-Freifläche) verjagt. So richtig begeistert war ich nicht davon. Aber es ist das Zeichen, dass die Vorlesung "Parallel Programming in Java" gestartet ist ("Funktionale Programmierung" ist ja leider doch abgesagt worden).

Vor knapp einem halben Jahr hab ich in einer kleinen Artikelserie geschildert, warum ich von der Behandlung von paralleler Programmierung in "Grundlagen der Programmierung 2"(GP2) nicht richtig begeistert gewesen bin. Programme, mit denen Studenten parallele Programmierung beigebracht werden soll, sollten zumindest thread-safe sein und möglichst den empfohlenen Wegen entsprechen. Zum Beispiel wurde java.util.concurrent komplett ignoriert. Diese Artikel sind aber leider bei dem Server-Crash verloren gegangen.

Aber der "Rauswurf" hat mich auf die Idee gebracht Kastens-Material mal anzusehen. Ich nenne es mal "Pre-VKrit", aber im Grunde ist es nur ein Durchsehen der Vorlesungsfolien. Aufgefallen ist mir folgendes:

  • Es geht mit bei dem bekannten DigiClock-Beispiel los, dass in GP2 daneben gegangen ist. Hier wurde aber die running-Variable als "volatile" deklariert. Damit ist das Programm dann auch thread-sicher. Es gibt immer noch Varianten, die für den Zweck einen Block in bestimmten Zeitintervallen auszuführen, die vielleicht besser sind (z.B. ScheduledThreadPoolExecutor), aber immerhin ist es thread-sicher es auf diese Weise zu machen.
  • Auf Folie 25 wird java.util.concurrent vorgestellt und das locks-Unterpackage näher besprochen. Insbesondere wird fett markiert, dass die dort zu findenden Lock-Implementierungen die gleichen Speichersemantik haben wie die normale Synchronisation. Leider wird die Semantik des Speichermodells im Rest der Vorlesung mit keinem Wort erwähnt. Keine Ahnung, wieso man fett hervorhebt, dass zwei Konstrukte, die gleiche Speichersemantik haben, wenn man diese Speichersemantik nicht vorstellt.
  • Die InterruptedException wird immer noch durchgängig sinnlos verwendet (catch (InterruptedException e) {}). Brian Goetz sagt in "Java Concurrency in Pratice", dass man mit einer InterrupedException vieles machen kann, aber man sollte sie niemals fangen und nur ignorieren.
Aber ansonsten fand ich die Folien jetzt recht gut. Ich würde sie hören, wenn nicht mein Softwaretechnikteil schon lange "voll" wäre. Die Vorlesung relativ stark ausgerichtet auf Datenparallelismus, wie sie im High-Performance-Computing wichtig ist, (Loop Transformation, etc) und weniger auf andere Muster wie parallele Programme strukturiert werden könnten (Active Object, Reactor, Fork-Join, etc.). Eine eher "Doug Lea"-orienterte Vorlesung hätte ich es spannender gefunden, aber auf Grund des PC^2 "in der Nähe" ist es wohl auch eine nachvollziehbare Schwerpunktsetzung.

Wer sich für das Thema interessiert und einen vielleicht etwas anderen Blickwinkel wünscht, sollte sich "Doug Lea: Concurrent Programming in Java" und "Java Concurrency in Practice" von Brian Goetz, Doug Lea, Josh Bloch und anderen aus der Bibliothek besorgen. Doug Leas Buch ist ist älter (2000, insbesondere pre-1.5), sehr muster-orientiert (aber kein Muster-Buch wie POSA2) und wirklich gut. Brian Goetz fügt insbesondere eine ausführliche Behandlung des "neuen" Java 1.5-Speichermodells hinzu und bespricht unter starker Berücksichtigung des java.util.concurrent-Paketes wie moderne, parallele Java-Programme strukturiert werden könnten. Das "JCiP"-Buch fand ich einfacher zu lesen.

Tuesday, April 15, 2008

Sopra: Softwarequalität bewusst niedrig gehalten

Ich schreibe gerade an einen Artikel über das "Softwaretechnikpraktikum" an der Universität Paderborn und wollte eigentlich begründen warum ich die alte Aufgabenstellung ("Shuttle-Simulation") trotz all der Probleme besser finde als die neue Aufgabenstellung ("dSpace Systemdesk").

Dazu lese ich gerade auch den Artikel "Ein verbessertes Softwaretechnikpraktikum: Zwischen grüner Wiese und Legacy-Systemen" in dem Björn Axenath und Stefan Henkler ihre Neukonzeption beschreiben. Vielleicht muß ich mir das nochmal überlegen.
Geschockt war ich als ich laß (Hervorhebung von mir):

In den letzten Jahren wurde den Studenten der undokumentierte Code eines komplexen, verteilten Systems [die Shuttle-Simulation] gegeben. [...]
Für einen Großteil der Studenten war dies die erste Begegnung mit einem großen Softwaresystem. Da es sich um ein Legacy-System handelte, war die Qualität bewußt niedrig gehalten.
Was? Bewusst?
Das ein System mit den Jahren verkümmert, kann ich ja noch irgendwie verstehen. Die bekannte Liste "realer" Architekturtypen von Brian Foote und Joseph Yoder (Big Ball of Mud) sind gleichzeitig Zeugniss und Warnung davor. Ich bin immer davon ausgegangen, dass dies eben unabsichtlich passiert ist, weil sich niemand um die Qualität gekümmert hat. Mein Eindruck war damals, dass es am Anfang durchaus als gutes System entwickelt wurde (z.B. konnte man die Überreste eines State-Pattern finden, wenn man genau hingeguckt hat) und die Qualität aber den späteren Entwicklern stumpf egal war.

Aber ein bewußt meises System zu entwickeln und frischen Studenten vorzusetzen, ist doch so ziemlich das Schlimmste was man machen kann: Das ist Anti-Code-Reading. Und wir wundern uns über die meise Softwarekonstruktionsfähigkeiten von Absolventen. Wo sollen sie es den gelernt haben, wenn selbst im berühmten Elfenbeinturm kein "Vorbild" vorgesetzt wird?

Sopra: Softwarequalität bewusst niedrig gehalten

Ich schreibe gerade an einen Artikel über das "Softwaretechnikpraktikum" an der Universität Paderborn und wollte eigentlich begründen warum ich die alte Aufgabenstellung ("Shuttle-Simulation") trotz all der Probleme besser finde als die neue Aufgabenstellung ("dSpace Systemdesk").

Dazu lese ich gerade auch den Artikel "Ein verbessertes Softwaretechnikpraktikum: Zwischen grüner Wiese und Legacy-Systemen" in dem Björn Axenath und Stefan Henkler ihre Neukonzeption beschreiben. Vielleicht muß ich mir das nochmal überlegen.
Geschockt war ich als ich laß (Hervorhebung von mir):

In den letzten Jahren wurde den Studenten der undokumentierte Code eines komplexen, verteilten Systems [die Shuttle-Simulation] gegeben. [...]
Für einen Großteil der Studenten war dies die erste Begegnung mit einem großen Softwaresystem. Da es sich um ein Legacy-System handelte, war die Qualität bewußt niedrig gehalten.
Was? Bewusst?
Das ein System mit den Jahren verkümmert, kann ich ja noch irgendwie verstehen. Die bekannte Liste "realer" Architekturtypen von Brian Foote und Joseph Yoder (Big Ball of Mud) sind gleichzeitig Zeugniss und Warnung davor. Ich bin immer davon ausgegangen, dass dies eben unabsichtlich passiert ist, weil sich niemand um die Qualität gekümmert hat. Mein Eindruck war damals, dass es am Anfang durchaus als gutes System entwickelt wurde (z.B. konnte man die Überreste eines State-Pattern finden, wenn man genau hingeguckt hat) und die Qualität aber den späteren Entwicklern stumpf egal war.

Aber ein bewußt meises System zu entwickeln und frischen Studenten vorzusetzen, ist doch so ziemlich das Schlimmste was man machen kann: Das ist Anti-Code-Reading. Und wir wundern uns über die meise Softwarekonstruktionsfähigkeiten von Absolventen. Wo sollen sie es den gelernt haben, wenn selbst im berühmten Elfenbeinturm kein "Vorbild" vorgesetzt wird?

Monday, April 07, 2008

Die Prüfungsordnung: Vertiefungsprüfung

Wie ich schon am 1. April geschrieben habe, ist am 9. April meine Vertiefungsprüfung im Masterstudiengang.

Die Vertiefungsprüfung im Masterstudiengang, oder "Abschlussprüfung" wie sie offiziell heißt, ist ausführlich festgelegt in §14 (4) Satz 1 und 2 festgelegt Master-Prüfungsordnung:

1. drei studienbegleitenden Modulprüfungen im Vertiefungsgebiet; eins dieser Module ist in
der Regel das Modul Projektgruppe mit einer dem Vertiefungsgebiet zugeordneten
Veranstaltung (26 Leistungspunkte), die beiden anderen bzw. gegebenenfalls alle drei
Module sind Wahlpflichtmodule mit einem Umfang von 8 Leistungspunkten,
2. einer mündlichen Abschlussprüfung über die Zusammenhänge der Inhalte aus den drei
Modulen unter Nr. 1

und §19 (2)

Die Gesamtnote errechnet sich aus dem gewichteten Durchschnitt der Noten aus [cut, siehe auch]. Dabei wird abweichend von den in § 16 Abs. 4 festgelegten Leistungspunkten die Projektgruppe mit 8 Punkten, die Abschlussprüfung mit 16 Punkten und die Masterarbeit mit 50 Punkten gewichtet.

Ende! Das wars. Mehr Festlegungen gibt es nicht bzw. mehr offizielles und öffentlich festgelegtes konnte ich nicht finden. Ich bin ja durchaus gegen diese "Hochschule als Verwaltungsorgan des Landes"-artige Überreglementierung, aber dies ist schon etwas arg wenig. Für 16 ECTS-Punkte also soviel wie 4 Master-Vorlesungen ist dies sehr viel Unklarheit!

Nur wenig mehr Klarheit besteht bei dem Begriff "Vertiefung" also den Veranstaltungen deren Zusammenhang Thema der Vertiefungsprüfung ist. Wie oben zitiert wurde, besteht die Vertiefung "in der Regel" aus
- der Projektgruppe
- zwei Modulen mit insgesamt vier Veranstaltungen davon mindestens einem Seminar (§16(7)).
All diese Veranstaltungen und die Projektgruppe müssen aus dem gleichen Informatikgebiet (SWT, ESS, MUA, MMWW) kommen (§16(2)).
Diese Variante ist wohl der Standardfall. Bei mir ist dies die Projektgruppe "ORCOS", das Seminar "Rechnernetze" bei Prof. Karl, "Betriebssysteme" bei Prof. Rammig, "Architektur paralleler Rechnersysteme" bei Jens Simon und "Speichersysteme" bei Andre Brinkmann.

Wenig bekannt ist die Alternative mit drei "normalen" Modulen aus dem Vertiefungsgebiet. Das "in der Regel" kann man dann getrost vergessen. Die Projektgruppe gilt dann als normales Modul in einem der anderen Bereiche und ersetzt das normale Module dort. Wichtig, die Projektgruppe muss dann dort eingebracht werden. Der Gesamt-"Workload" bleibt der Gleiche. Zum Beispiel könnte man eine Projektgruppe im Bereich "Modele und Algorithmen" machen, nichts anderen in dem Bereich und dann "Mensch-Maschine-Wechselwirkung" als Vertiefungsgebiet wählen und dort 6 Veranstaltungen absolvieren. Das Beispiel ist arg theoretisch, denn es gibt bekanntlich (in diesem Semester) keine Projektgruppe bei den "Theoretikern".

Laut Auskunft des Prüfungssekretariats muss man selbstständig einen Termin mit zwei Prüfern aus der Gruppe der Veranstalter der Vorlesungen im Vertiefungsgebietes vereinbaren und eine gewisse Frist vorher beim PrüfSek schriftlich anmelden. Dabei soll mindestens ein Prüfer auch Professor sein.
Die Rechtsgrundlage für diese Festlegungen sind mir nicht klar. Wie ist es geregelt, wenn kein Termin organisiert werden kann? Was passiert, wenn ich in meinen Vertiefungsveranstaltungen keinen Professor gehabt habe (schwierig, aber theoretisch denkbar?). Diese Fragen sind unklar.

Die wichtigste Unklarheit bleibt der Inhalt der Prüfungen:
Zur Erinnerung: "Abschlussprüfung über die Zusammenhänge der Inhalte" ist alles wir haben. Dies ist aber auch der entscheidende Unterschied zur DPO4-Vertiefungsprüfung. Es geht (mehr) um die Zusammenhänge zwischen den Inhalten der Veranstaltungen.

Meine Empfehlung ist mit den Prüfern vorher zu sprechen. Dies ist üblich und wirklich ratsam. Mit viel Glück schränken sie den Stoffumgang auch noch etwas ein.

Eine wichtige Frage ist der Umgang mit Seminaren. Muss man "fit" in allen Seminarthemen sein, oder reicht es wenn man sein eigenes Thema kennt. Dies handhaben die Prüfer wohl jeweils anders. Auch ist nicht in dem Fall sichergestellt, dass auch jeder Teilnehmer Zugang zu allen Ausarbeitungen hat.

Wichtig ist, auch die Prüfer daran zu erinnern, dass es sich um Prüfungen im Master handelt. Prof. Karl hat mir zwar mal gesagt, dass es mittlerweile jedem Prüfer glasklar sein sollte worin der Unterschied besteht. Aber ich bin zu lange an der Uni Paderborn, um daran nicht hin und wieder meine Zweifel zu haben.

Am 9.4 um 15:30 bis 15:45 kann ich mehr berichten.

Disclaimer: Bitte in Zweifelsfällen immer nochmals bei den verantwortlichen Stellen nachfragen. Ehrlich!

Tuesday, April 01, 2008

Ein glorreicher Tag: Die Projektgruppe ist beendet

Kein Aprilscherz: Gestern abend haben wir - die Ehre für das Softwareteam wurde mir überlassen - die Abgabeversion der Projektgruppe getaggt. Die Projektgruppe ist damit beendet. Hab ich schon mal gesagt, dass ich lieber bei SmartTeams hätte mitmachen sollen?

Nein, im Ernst: Ich bin froh, dass die Projektgruppe vorbei ist. Vielleicht schreibe ich dazu mal etwas mehr. Aber nicht heute.....

Nächste Schritt: Vertiefungsprüfung am 9. April.

Google: Search tomorrow's web, today! (SPOILER)

Google Österreich hat ein neues Feature auf die Hauptseite der Suchmaschine eingebaut - gDay - Die Suchergebnisse von morgen:

The core technology that powers gDayâ„¢ is MATEâ„¢ (Machine Automated Temporal Extrapolation).
Using MATE’s™ machine learning and artificial intelligence techniques developed in Google’s Sydney offices, we can construct elements of the future.
Google spiders crawl publicly available web information and our index of historic, cached web content. Using a mashup of numerous factors such as recurrence plots, fuzzy measure analysis, online betting odds and the weather forecast from the iGoogle weather gadget, we can create a sophisticated model of what the internet will look like 24 hours from now.
We can use this technique to predict almost anything on the web – tomorrow’s share price movements, sports results or news events. Plus, using language regression analysis, Google can even predict the actual wording of blogs and newspaper columns, 24 hours before they’re written!
Das hat mich sofort an diesen H. Maurer erinnert, ein österreichischer Informatik-Professor, der schon sehr skurrile Thesen vertritt, die zu diskutieren dies aber das falsche Blog ist (und ich vielleicht der falsche Autor). Nur als Kostprobe: Er hält, laut einem GI-Artikel von letztem August, Google in unredlicher Zusammenarbeit mit Wikipedia für die mächtigste Organisation aller Zeit(!). Mächtiger als die Kirche im Mittelalter, Mächtiger als <da fällt mir noch eine ganze Menge ein>, Wow!

--- SPOILER WARNUNG---

Sunday, March 30, 2008

Quellcodeverwaltung Mercurial 1.0 freigegeben

Wie Golem die Woche berichtet hat, wurde die Version 1.0 von Mercurial freigegeben. Mercurial ist eine freie, verteilte Quellcodeverwaltung. Schon vor 1.0 wurde sie für zahlreiche Projekte verwendet. Die größten Projekte sind wohl die Sun-nahen Projekte wie NetBeans - by the way - Super RoR-Support - und OpenJDK.

Der größte Unterschied von einem verteilten Quellcodeverwaltungsystemen zu konventionellen wie Subversion ist (meinem Verständnis nach), dass ein Checkout (bei Mercurial Clone genannt) nicht fest mit einem Repository verbunden ist. Änderungen können kurzfristig im Repository A gesichert werden. Aber ein späterer Versionstand kann in eiem anderem Repository B gespeichert werden. Außerdem ist dort das erzeugen einer neuen Version durch Commit von dem Veröffentlichen dieser Änderung entkoppelt. Man kann lokal häufig committen, aber nur fertige Versionen können dann veröffentlich ("pull") werden. Im Mercurial-Wiki ist eine Beschreibung vorhanden.

Warum kann dies nützlich sein?
Zum Beispiel bei Uni-Projekten könnte (mit Mercurial) jeder Student mit seiner Bachelor- oder Diplomarbeit oder jede Gruppe von Studenten ein eigenes (privates) Repository erhalten mit dem er tälich oder stündlich Commits erzeugt. Aber nur funktionierende Versionsstände werden dann in das zentrale Hauptrepository geschoben.

Man könnte so etwas mit Subversion-Branches machen, aber selbst da ist jede "interne" Sicherung auf dem zentralen System sichtbar. Nicht so schön. Faktisch commiten Studenten tälich Zwischenstände ins zentrale Repository, was häufig zu Unannehmlichkeiten führt.* Oder sie arbeiten ohne Sicherung (Commit) bis zum einem Meilenstein, aber viel des Komforts einer Quellcodeverwaltung geht damit verloren. Und bei HD-Crashes verliert man nicht nur dem "Komfort".

In gewisser Weise sind verteilten Quellcodeverwaltungsysteme die dritte Stufe - nach zentralisierten, Sperr-basierten Systemen und zentralisierten, Merge-basierten Verfahren wie Subversion. Ein anderes verteiltes Quellcodeverwaltungssystem ist GIT, dass z.B. für den Linux-Kernel eingesetzt wird.

Ich selbst habe noch nicht mit veteilten Quellcodeverwaltungen gearbeitet, aber ich glaube, dass es z.B. in dem Uni-Kontext wirklich sinnvoll wäre. **

---

* Man kann eine Strategie fahren, dass man nur ein zentrales Repository mit häufigen Commits ohne Branches hat. In enggekoppelten Teams wie in Firmen ist dies wohl auch die Standardvariante. Aber bei lose-gekoppelten Teams wie bei Uni-Projekten ist dies wohl nicht die optimale Idee.

** Ebenfalls für den Einsatz für Studentenprojekten gedacht ist DrProject, eine Trac-Variante für "classroom usage".

Saturday, March 22, 2008

VKrit: Philosphie der Technik

Nachdem ich vor zwei Jahren die gute, interessante Vorlesung zur Sozialphilosphie gehört habe und ich noch Punkte für das Studium Generale brauchte, hab ich im letzten Semester die Vorlesung "Philosphie der Technik" von Prof. Peckhaus gehört. Da Prof. Peckhaus auch im Vorstand des "Heinz Nixdorf Institutes" sitzt, klang auch erstmal nicht schlecht.

Ich nehme die Verantwortung des Ingenieurs durchaus ernst und auch deshalb habe ich gedacht, es könnte interessant werden. Und wurde bitter enttäuscht.

Der absolute Fokus der Vorlesung lag auf extrem technik-kritischen Kräften wie Martin Heidegger und Hans Jonas. Zum Beispiel geht es bei Jonas laut der Vorlesung nicht mehr um eine Risikoabschätzung und Bewertung alleine. Wenn eine Technologie, Erfindung oder Tat größere negative Folgen haben könnte - egal mit welcher Wahrscheinlichkeit oder welchen Umständen, nur die Möglichkeit zählt - dann sollte man die Erfindung nicht tätigen, nicht in die Richtung forschen oder etwas nicht tun. Ich glaube nicht, dass ich das so falsch sehen wenn ich sage, dass man mit dieser Leitlinie kann man Forschung und Technikanwendung einfach komplett einstellen kann.

Irgendwie konnte ich mich nie dem Gedanken verwehren es geht doch mehr darum, dass "kapitalistsche (-technische)" System an sich zu kritisieren als mir als Ingenieur sinnvolles Handwerkszeug in die Hände zu geben.

Die Unterlagen waren ziemlich schlecht und können von der Qualität nicht ansatzweise mit den Unterlagen wie sie in der Informatik üblich sind mithalten. Dass die Klausur trotz (mit etwas Abstand gesehen) sehr einfachen Fragen gar nicht so gut ausgefallen ist, lag weder an der Komplexität des Stoffes oder den Studenten sondern an den Unterlagen. Ein roter Faden fehlte meiner Meinung nach zum Beispiel komplett.

Zumindest im letzten Monat wurde sehr oft mit Videobeiträen gearbeitet, wo zum Beispiel gezeigt wurde das für ein tolles, vorbildliches, weil untechnisiertes Leben Heidegger in den Alpen führte. Ist dass richtig in einer Universtätsvorlesung? Man braucht sich dann auch nicht mehr zu wundern, wenn die Lehramtsstudenten (die meisten waren aus der Schiene) diese "Technik" in den späteren Unterricht übernehmen.

Mein Fazit ist nie wieder, aber mein Studium Generalle ist seit Mittwoch auch "voll". Es gab nur einen Grund weiter zu der Vorlesung zu gehen und der hatte mit Kaffee zu tun.

Tuesday, March 18, 2008

Plagiate

In guter Regelmäßigkeit wird durch Hochschulen bemängelt, dass Studenten Teile von Seminararbeiten oder sogar Diplomarbeiten aus dem Internet abschreiben: Ein Plagiat.

Und ich sehe keinen Grund so etwas zu verteidigen. Es missachtet die Arbeit des originalen Autors, stellt dem Prüfer in Abrede dies zu entdecken zu können und unfair gegenüber Mitstudenten, die ehrlich ihre Leistung erbracht haben.

Aber ohne Zweifel gibt es dies auch in der anderen Richtung. Spiegel online berichtet von einem Fall bei der ein Professor die Arbeit einer Studenten unter eigenem Namen veröffentlicht hat.

Vielleicht kann mir da mal jemand erklären. Wie kommen Wissenschafter darauf geistige Schöpfung von anderen zu nehmen und unter eigenen Namen in die Welt zu tragen? Wo ist die wissenschaftlich Ethik geblieben?

Saturday, March 15, 2008

Seminararbeit Rechnernetze

In diesem Semester habe ich bei Professor Karl am Seminar "Rechnernetze" teilgenommen.

Meine Arbeit hat sich mit verteilten Hashtablen mit direkten Routing (One-Hop Distributed Hashtables) beschäftigt.

Abstract:

Distributed Hash Tables (DHT) are an important substrate of several peer-to- peer (P2P) applications. Most existing approaches favor a small memory and net- work overhead over lookup latency. New approaches question this tradeoff and allow a lookup with using only one hop, but they store the routing information for all nodes on each node in the system and so require higher background traffic to maintain the routing tables up-to-date. In this paper the design of three one-hop DHT approaches is described and compared in detail. This comparison shows that different assumptions are used to analyze the approaches. Therefore, several parameters are inspected and an uni- fied parameter setting is extract. Using the unified parameter setting, a fair and meaningful comparison of the approaches is possible. In particular, the bandwidth consumption, fault tolerance properties, the usage of heterogeneity in the P2P net- work, and the scalability are compared. The comparison shows that the unified parameter setting lead to different relative results as originally stated by the approach designers.

Download: PDF 1,2 MB

Tuesday, March 11, 2008

Jolt Award: Beautiful Code and Guice

Gerade bei der Java Posse gehört:

Das Buch Beautiful Code, dass ich vor ein paar Wochen empfohlen habe, hat einen Jolt Award 2008 gewonnen. Cool.

Wunderbar und höchst verdient: Das Dependency Injection Tool Guice hat ebenfalls einen Jolt Award gewonnen.

Durch Guice hatte ich die Idee für das neue Konfigurationssystem (das alte war im Grunde unbrauchbar) von Shox. Zuerst wollte ich Guice direkt verwenden, aber weil der Fokus doch stärker auf Konfiguration von Attributen lag, Dependency Injection dabei nur ein angenehmer Nebeneffekt war und ein paar Überlegungen mehr ist es dann doch zu dem @ShoxParameter System gekommen. Guice ist richtig, richtig cool.

Thursday, February 14, 2008

No System Engineers were harmed during filming...

No System Engineers were harmed during filming.....

The same cannot be said of sales reps.

Buchtipp: Beautiful Code

Ich habe schon zweimal angefangen einen Artikel über den Essay-Band "Beautiful Code - Leading Programmers Explain How They Think" zu schreiben. Beide Male hat irgendein Bug in meinem Blog-Editor den Text (unwiderbringlich) "gefressen". Nun habe ich keine Lust mehr den ganzen Text schon wieder neu zu schreiben. Also: Gutes Buch, die einzelnen Essays schwanken zwischen langweilig und super interessant.

Stattdessen ein Foto von mir am Strand von Bournemouth/Südengland beim Lesen des Buches:

Bournemouth (86)

Wednesday, February 13, 2008

Thema der Masterarbeit

Nachdem am Donnerstag meine letzte Vorlesung gewesen ist (wahrscheinlich!), steht auch das Thema der Masterarbeit fest.

Ich werde, betreut von Andre Brinkmann, über die "Skalierung von Data-Deduplication in Storage Clustern" schreiben. Die Formulierung steht allerdings nicht fest.

Data-Deduplication beschreibt in diesem Feld (im Data-Mining wird der Begriff anders verwendet) Methoden um redundant gespeicherten Dateien* in Speichersystemen zu vermeiden. Zum Beispiel werden in Firmen oft die gleichen Daten (von mehreren Mitarbeitern) mehrmals gespeichert: Die gleichen E-Mails, die gleichen Präsentationen, (im Zweifel) die gleichen mp3-Dateien. Dabei ist es ausreichend, wenn jede Datei nur einmal gespeichert ist. Alle weitere Kopien könnten dann auf die erste Kopie verweisen. Die Problematik in dem Bereich liegt im Erkennen, wann eine Datei redundant ist, dem Datendurchsatz und in der Skalierbarkeit der Ansätze.

Ich finde das Thema spannend für eine Masterarbeit, weil es die Möglichkeit bietet neue Ansätze zu entwickeln, auszuprobieren und zu verwerfen. Es verbindet nicht-triviale Implementierungsaufgaben (das Ergebnis soll per iSCSI in Linux eingebettet werden) mit einem schönen Hauch Theorie (Hashing, Kollisionen, Bloom-Filter, etc). So wie ich es mag.

Außerdem scheint das Thema akademisch bisher kaum behandelt worden zu sein. Wie sagt man so schön: Da könnte Luft für neue Ideen sein.

Die dazu passende Vorlesung "Speichersysteme" (Brinkmann) war meine Lieblingsveranstaltung im Master. Auch "Datenverwaltung in Rechnernetzen" (MadH) fand ich interessant. Aber Herum-Beweisen mit Hashfunktionen, Expandergraphen usw. ist nicht unbedingt meine Vorstellung einer schönen Zeit. Auf keinen Fall für eine Masterarbeit. So scheint das Thema eine gute Wahl zu sein.

Alternativ hätte ich mir z.B. auch eine Arbeit im PC^2 vorstellen können. Aber in der Zeit als ich ein Thema gesucht habe, ist es mir nicht gelungen den einzigen Lehrberechtigten dort (Jens Simon) im Büro zu erwischen und zum anderen klingen mir die meisten Themen-Vorschläe dort zu sehr nach reinem Doing und zu wenig Forschung zum Beispiel die Erweiterung des hauseigenen Resource-Management-Systems zum Feature xy.

Wenn alles gut geht, dann werde ich mit der Masterarbeit nach den letzten Prüfungen und der Vertiefungsprüfung im April beginnen.

* Es wird eher auf "Blockgeräte"-Ebene anstatt auf Dateisystem-Ebene gearbeitet, aber mit "Dateien" lässt sich das Thema wohl besser vermitteln. Das ist zumindest meine Erfahrung.

Friday, February 08, 2008

Letzte Vorlesung

So langsam merkt man, dass das Studium zu Ende geht. Man sucht ein Thema für die Masterarbeit, die Bewerbungen fangen an und gestern hatte ich mit "Leistungsbewertung und Simulation" meine letzte reguläre Vorlesung im Studium.

Gut, der Prof. hat meine Bemerkungen zu einen Kommilitonen mit einem "Abwarten!" kommentiert, aber ich glaube daran. ;-)

Tuesday, January 08, 2008

Java Urban Legend: "Java kann kein Multi-Core"

Es ist immer wieder erstaunlich, welche Urban Legends sich über Java halten.

"Java ist langsam, zu langsam" ist davon noch der absolute Klassiker. Aktuelles Beispiel sind die Kommentare in "TWiT 126" vor ein paar Wochen.

So langsam sollte sich diese Legende doch wirklich in Luft aufgelöst haben, oder? Naja, wenn nicht, dann sollte man schnell Brian Goetz Kolumne "Java theory and practice" lesen. Insbesondere Urban performance legends und Urban performance legends, revisted. Dort heisst es zum Beispiel:

You don't have to search through too many blogs or Slashdot postings to find confidently worded statements like "Garbage collection will never be as efficient as direct memory management." And, in a way, those statements are right -- dynamic memory management is not as fast -- it's often considerably faster. The malloc/free approach deals with blocks of memory one at a time, whereas the garbage collection approach tends to deal with memory management in large batches, yielding more opportunities for optimization (at the cost of some loss in predictability).

Eine andere Legende ist, dass Java keine Multi-Prozessoren ausnutzen kann, weil es nur User-Level-Threads hat. Mir war bis heute nicht klar, dass diese Legende wirklich jemand glaubt. Aber dann hat mich ein Kommolitone, der eigentlich weiß was er tut, eines besseren belehrt.

Vermittelt wird diese Legende offenbar durch eigentlich gute Autoren wie Tanenbaum. Wenn man nach "Java User-Level" bei Google sucht, dann findet man Dutzende von Betriebssystem-Kursen, in denen genau dies gelehrt wird z.B. Uni Dortmund, Uni Mannheim und selbst, Oh Schreck, Uni Paderborn. Da muß ich wohl in KMS mal geschlafen haben. Selbst in der Wikipedia ist dies nicht eindeutig beantwortet.

Offenbar ist der Hintergrund für die Legende, dass viele immer noch bei Java 1.1. hängengeblieben sind. Dort gab es (nur) so genannte Green Threads, dies waren Javas User-Level-Threads.
Aber diese Beschränkung wurde schon mit 1.2 aufgehoben. Also vor mehr als 10 Jahren!

In "Programmieren mit Java" heisst es:

Derzeit werden Java-Threads folgendermaßen unter Windows, Solaris und Linux implementiert:
  • Unter Windows NT/2000/XP werden Java-Threads auf Threads im Betriebssystems abgebildet, die innerhalb des Virtual-Machine-Prozesses ablaufen. Die Anzahl der gestarteten Prozesse und Threads kann auf dieser Plattform gut im Task-Manager beobachtet werden. Beim Starten eines Java-Programms sieht man, dass sich die Anzahl der Prozesse um Eins erhöht, die Anzahl der Threads nimmt dagegen stärker zu. Dies ist auch dann der Fall, wenn das Programm selbst keine eigenen Threads erzeugt, weil die Virtual Machine eigene System-Threads für Aufgaben wie Garbage Collection startet.
  • Bei Solaris werden seit JDK-Version 1.2 die nativen Threads eingesetzt. In den Vorversionen machte die Solaris-Virtual Machine von Green Threads Gebrauch.
  • Unter Linux werden Threads seit JDK-Version 1.3 mit abgespalteten Tochterprozessen realisiert. Zuvor wurden auch hier Green Threads verwendet. Dadurch, dass für Java-Threads komplette Prozesse erzeugt werden, kann die Erzeugung einer großen Anzahl neuer Threads länger dauern als bei Betriebssystemen, auf denen native Threads eingesetzt werden.
Ein Blick in die Aktivitätsanzeige oder "top" hätte die Behauptung also widerlegen können.

Ans Extrem treibt es zum Beispiel die Firma "Azul Systems", die Werbung macht mit "World's Most Powerful Platform for Java Computing: Massive Capacity: 768 Processors and 768 GB of Memory".

Also: Ich hoffe, ich kann zumindest bei den Lesern dieses Blogs diese Legende aus der Welt schaffen.

Bei Autoren/Forschern aus dem Systemsoftware-Bereich bin ich schon lange sehr vorsichtig, wenn diese sich zu Software-Engineering-Themen äußern. So sehr die Autoren ihren eigenen Kram in- und auswendig kennen, so viel Mist über SE ist manchmal auch enthalten. Bestes Beispiel: "Reliable Distributed Systems". Teilweise recht grausam. Ein Paper, dass schön Distributed Computing und Software Engineering verbindet ist z.B. dieses hier.