Showing posts with label Blognachbarn. Show all posts
Showing posts with label Blognachbarn. Show all posts

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.

Sunday, December 09, 2007

Ahlblog: Der Wert kleiner Klassen

Eine Schande, dass ich das "Ahlblog" von Martin Ahlborg nicht schön früher erwähnt und verlinkt habe. Die kleinen Programmiertipps und seine Gebote für Programmierer sind schon lange eine Erwähnung wert gewesen.

Herausgepickt habe ich mir hier den Artikel "Klein aber Fein - Der Wert kleiner Klassen" vom 3. September. In diesem Artikel beschreibt der Autor die Daumenregel, dass Klassen nicht zu groß werden sollten.

Klassen können [...] zu groß werden, weil sie borgmäßig Aufgaben von anderen Klassen assimilieren. In vertikaler Richtung kann eine Klasse beispielsweise gleichermaßen Highlevel- und Lowlevel-Funktionen haben. Dieses Problem findet man oft bei Kommunikationsschnittstellen. Da gibt es dann eine Klasse, die sowohl die ganzen Lowlevel-Kommunikationsdetails kapselt als auch Funktionen, die eigentlich ins Datenmodell gehören. In horizontaler Richtung kann eine Klasse Funktionalität implementieren, die eigentlich auf mehrere Klassen aufgeteilt werden sollte. Man kann dies gut erkennen, wenn man einen Teil der Klasse entfernen kann, ohne den Rest kaputt zu machen.
Was bringen mir eigentlich kleine Klassen? Nun, hauptsächlich wird man flexibler. Programme lassen sich leichter erweitern, da sich Erweiterungen auf die Implementation neuer Klassen und hier und da ein paar kleinen Codeänderungen beschränken. Ebenso erhöht sich die Wiederverwendbarkeit des Codes. Dadurch kommen weniger Codewiederholungen vor, eine der Hauptursachen für so richtig fiese Bugs.
Kleine Klassen lassen sich auch besser testen. Große Klassen tendieren dazu, viel Funktionalität intern zu kapseln. Es gibt keine Möglichkeit diese Funktionen direkt zu testen. Nutzt diese Klasse jedoch andere Klassen, die jeweils einen Teilbereich der Funktionen implementieren, dann lässt sich dieses Konglomerat besser testen, weil ich damit quasi Testschnittstellen geschaffen habe. Ich kann jetzt interne Funktionen testen, ohne dass ich Raum und Zeit verbiegen muss.

Meiner Erfahrung nach, ist die Regel, dass eine Klasse nur reine Aufgabe haben sollte, die entscheidendere und passendere Daumenregel. Eine Folge dieser Regel sind dann meist kleinere Klassen. Deshalb störe ich mich auch etwas an dem Hinweis auf 400 Lines of Code (aber auch der Autor sieht es nur als ungefähren Wert). Dennoch ein gut geschriebener, lesenswerter Artikel wie (ich befürchte ich wiederhole mich) viele Artikel in dem Blog.
"Head First Design Pattern" nennt diese Regel "Eine Klasse sollte nur einen Grund haben sich zu ändern", aber im Endeffekt läuft es auf das Gleiche hinaus.

Thursday, May 31, 2007

Bloggen vom Linuxtag

Wer wissen möchte, wie relativ untechnische, ungeekige, Medizin- und Philosophiestudentinnen den Linuxtag wahrnehmen, dem sei Evas Artikel "Bloggen vom Linuxtag" (und noch nachfolgende Artikel) ans Herz gelegt.
Erste Impression:

Mehr Maenner als auf dem Deutschlandtag der Jungen Union.

Zweite Impression:

Die Tastaturbelegung dieses Rechners kann nicht herausgefunden werden von den Herren Informatikern um mich herum, weswegen ich auf gut Glueck und ohne Umlaute und unter Verzicht auf die meisten Satzzeichen schreiben muss. So ist das bei freien Softwareprojekten. Das sei wie Katzen hueten, habe ich heute schon gelernt.

Thursday, May 17, 2007

"USA Erklärt" für Grimme-Preis nominiert

Das Blog "USA Erklärt", welches ich im Februar empfohlen habe, wurde jetzt für den Grimme-Preis nominiert.

Viel Glück von meiner Seite.
Ich fände es gut, wenn eine Seite gewinnt ,die durch ihren Inhalt besticht (wie USA Erklärt) und nicht nur durch schickes Design (wie IMHO einige der Mitbewerber)

Tuesday, May 08, 2007

Stöckchen von Fredo gefangen

Ich habe mein erstes englisches Stöckchen von Frederick gefangen. Aber ich wechsele trotzdem mal wieder die Sprache. Nicht dass ich etwas gegen Englisch hätte, aber in einem Blog nur einen Stöckchenartikel auf Englisch zu schreiben, ist wenig sinnvoll.

Das Stöckchen geht an einen Vertreter des Chaos-Blogs, wenn die solche Sachen mitmachen.

Bücher:
Derzeit lese ich das Buch "Versuchungen der Unfreiheit" von Ralf Dahrendorf, in dem er sich damit beschäftigt, warum einige öffentliche Intellektuelle in Zeiten der Prüfungen nicht den Versuchungen der Unfreiheit (Faschismus, Kommunismus) erlegen sind.

Insgeheim warte ich auf die 2.0-Version eines meiner (früheren) Lieblingsbücher: "Mikrosklaven" von Douglas Coupland. Das Originalbuch ist spielt vor mittlerweile 14 Jahren und ist nicht mehr zeitgemäß. Zeit für "Mikrosklaven 2.0″. Zu Schreiben gäbe es genug.

Zeitungen:
Ich lese nur selten (meist auf langen Zugfahren) Zeitungen. Mir fehlt einfach die Zeit dafür. Wenn ich eine Zeitung aufschlage, dann meine Lokalzeitung "Die Glocke", Welt (kompakt) oder "Die Zeit".
Ersatz für die Tageszeitungen sind meine abonnierten RSS-Feeds, aber bei diesem Stöckchen geht es ja explizit um "gedrucktes" Lesbares.

Technische Bücher:
Im Moment liegt das "Dragonbook" über Compilerbau und "Effektiv C++ programmieren " von Scott Meyer auf meinem Nachttisch.
Ich warte auf die Lieferung von "Building Scalable Web Sites" von Cal Henderson.

Studium:
Nachdem ich den ganzen "Code Quality" und "Effektiv Java programmieren"-Sachen vom SmartTeams-Vortrag beiseite geräumt habe, sind einige Paper zum Thema "Data Dissemination in Large-Scale Sensor Networks" wieder aufgetaucht: PG-Vortrag steht an.

Wednesday, May 02, 2007

Schöne Panoramabilder meiner Uni

Schöne Panoramabilder meiner Uni gibt es bei Olaf zu sehen.

Schön grün und eine ganz nette Atmosphäre.
Interessent wäre es zum Vergleich Bilder der gleichen Orte im Winter zu haben.
Dann ist die Uni Paderborn grau und ziemlich hässlich.

Friday, February 16, 2007

Gates vs. Jobs with Mighty Finder

Schon sehr durchgeknallt, aber witzig.

(YouTube Video)
Der iHouse-Gag war schon extrem komisch ("Yes, no windows")
(via Chaos Blog Paderborn)

Sunday, February 04, 2007

Webmontag in Paderborn

Bei meinem ehemaligen Azubi-Kollegen Tim Adler habe ich von der Idee eines Webmontags in Paderborn gehört.

Ich habe schon von den Webmontag-Veranstaltungen in anderen Städten gehört und seit ein paar Stunden ist auch ein Webmontag Paderborn in Planung.

Im Wiki gibt es die aktuellen Informationen. Sehr positiv finde ich die Anzahl der Teilnehmer und der Themenvorschläe, die sich schon in der kurzen Zeit angesammelt haben.

Die Idee ist prima und wenn es terminlich irgendwie machbar ist, dann bin ich dabei.

Thursday, February 01, 2007

Hinweis: USA Erklärt

Da ich schon gerade beim Thema bin, will ich gleich auch auf die Seite "USA Erklärt" (eigentlich kein Blog im herkömmlichen Sinne) empfehlen.

Der Autor (ein US-Amerikaner, der in Deutschland lebt) schreibt in unregelmäßigen Abständen über verschiedene Themen und versucht "die USA zu erklären".

Hier mal eine kurze Themenliste mit hervorragenden oder witzigen Artikeln:

  • Das politische System:
  • (Pop)-Kultur, Kino und Serien:

    <ul>
      <li><a href="http://usaerklaert.wordpress.com/2006/10/18/halloween-ein-leitfaden-fur-die-nacht-der-kinder/">Halloween: Ein Leitfaden für die Nacht der Kinder</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2007/01/10/niemand-entkommt-dem-kansas-spruch-die-bedeutung-von-the-wizard-of-oz/">Niemand entkommt dem Kansas-Spruch: Die Bedeutung von The Wizard of Oz</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/09/10/die-ultimative-einfuhrung-in-american-football/">Die ultimative Einführung in American Football</a> (mangels eigener Sportkategorie, sehe ich Football einfach mal als Teil der Popkultur)</li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/11/19/buffy-und-anti-drogen-botschaften-in-us-serien/">Buffy und Anti-Drogen-Botschaften in US-Serien</a></li>
    </ul>
    
  • amerikanische Geschichte (schon deshalb interessant weil ich gerade sowieso das klassische Buch "Demokratie in Amerika" von Tocqueville lese)

    <ul>
      <li><a href="http://usaerklaert.wordpress.com/2006/12/06/liebe-briten-euer-tee-schwimmt-im-hafen-steuern-und-mitbestimmung/">Liebe Briten, Euer Tee schwimmt im Hafen: Steuern und Mitbestimmung</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/10/27/land-fur-alle-wie-das-eigenheim-fur-amerikaner-zum-normalfall-wurde/">Land für alle: Wie das Eigenheim für Amerikaner zum Normalfall wurde</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/06/11/wie-man-eine-verfassung-bewirbt-die-federalist-papers/">Wie man eine Verfassung bewirbt: Die Federalist Papers</a></li>
    </ul>
    
  • Übersetzungsfehler:

    <ul>
      <li><a href="http://usaerklaert.wordpress.com/2006/09/23/nachtrag-trinity-und-south-park-und-die-gefahren-der-synchronisation/">Nachtrag: Trinity und South Park und die Gefahren der Synchronisation</a></li>
    </ul>
    
  • alltäliche Fallstricke beim Leben in den USA:

    <ul>
      <li><a href="http://usaerklaert.wordpress.com/2006/11/13/thanksgiving-ist-nicht-erntedank/">Thanksgiving ist nicht Erntedank</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/11/01/kurz-erklart-butter/">Kurz erklärt: Butter</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/09/18/warum-amerikaner-briten-kanadier-nicht-sagen-was-sie-meinen/">Warum Amerikaner (Briten, Kanadier) nicht sagen, was sie meinen</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/12/18/humor-teil-1-jetzt-mal-im-ernst/">Humor, Teil 1: Jetzt mal im Ernst</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/08/23/kurz-erklart-grundnahrungsmittel-erdnussbutter/">Kurz erklärt: Grundnahrungsmittel Erdnussbutter</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/07/29/root-beer-oder-wie-man-deutsche-und-amerikaner-unterschiedet/">Root Beer oder wie man Deutsche und Amerikaner unterscheidet</a></li>
    
      <li><a href="http://usaerklaert.wordpress.com/2006/09/25/warum-einkaufen-in-den-usa-so-nervig-ist-die-sales-tax/">Warum Einkaufen in den USA so nervig ist: Die Sales Tax</a></li>
    </ul>
    

Ja, es sind jetzt ein Menge Einträe geworden, aber es sind wirklich so viele (und noch mehr) gute Artikel.

Politisch ist der Autor zwar nicht ganz meine Richtung (auch erkennbar, am Blogkarnevalzeichen), aber da es sich explizit nicht um ein Meinungsblog (siehe hier) handelt, blitzt die eigene Meinung des Autors nur ein einigen Stellen heraus.

Aber insgesamt tut dies der Güte der Seite keinen Abbruch. Viele Artikel waren entweder sehr lehrreich und/oder witzig.

Monday, January 08, 2007

Neu in der Sidebar

Wie schon lange im B.L.O.G. gibt es nun auch auf dirkmeister.de in der Sidebar mit eine aktuelle Buchempfehlung von mir.

Ich beginne mit "Programming Pearls" (amazon.de, ub.upb.de) von Jon Bentley, dass ich schon in dem Artikel über binäre Suche erwähnt habe.
In diesem Buch, dass eine Sammlung von Beiträen aus der gleichnamigen Kolumne der "Communications of the ACM" ist, stellt in verschiedenen Abschnitten immer Programmierprobleme und Tipps zur Programmierung (allgemein wie für konkrete Probleme) vor.

Zum Beispiel aus dem ersten Abschnitt: "How could you generate a file of k unique random integers between 0 and n - 1 in random order? Strive for a short programm that is also efficient.". Im weiteren Verlauf des Buches geht es auch noch um Testen, Performanceabschätzung sowie verschiedene Standardprobleme wie Sortierung, Suchen und Heaps.
Wenn es interessiert MuA in Code umzusetzen, der wird auch dieses Buch mögen.

Monday, September 25, 2006

Java kann keine Listen?

Martin Eisenhardt vom Blog node-0 verzweifelt an seinen Studenten, die überzeugt sind "Java kann keine Listen".

Nach einigen Hin und Her und natürlich den Verweis auf die Collections-Klassen folgt der Student A zum letzten und alles entscheidenen Argument aus:

M wird es langsam zu bunt. Er setzt ein Lächeln auf. Seine Stimme ist listig.

M: äh, erklär mir noch einmal, warum Du so sicher bist, dass es in Java keine Listen gibt?

A baut sich auf und schaut triumphierend, als er zum entscheidenden Schlag ausholt.

A: Weil wir in der Übung zu Algorithmen und Datenstrukturen die verkettete Liste selbst programmieren mussten!

M zweifelt kurz an der Welt, entscheidet dann aber, dass es halt solche und solche Studierende gibt, aber eben mehr solche als solche. :-D

Das Problem kenne ich noch aus der Zeit als ich "Grundlagen der Programmierung"-Tutor gewesen bin.

Datenstrukturen selbst entwickeln ist wichtig, aber wenn die API-Klassen nicht erwähnt werden, dann existieren sie auch für einen Teil(!) der Studenten nicht. Wir haben damals auch einige wichtige API-Klassen behandelt und auch versucht darzustellen, dass die Java-API eine Schatzkammer ist die man nutzen kann/sollte. Zumindest wenn es nicht explizit angegeben wurde z.B. wenn es Sinn der Übung gewesen ist, dass die Implementierung von bestimmten Strukturen geübt werden sollte.

Einige Studenten sind aber irgendwie nicht damit klar gekommen, eine verkettete Liste selbst entwickeln sollen, wenn es LinkedList doch schon fertig gibt.

Das erinnert mich auch an Leute (nicht von der Uni) die meinen C wäre deshalb eine schlechte Sprache, weil es keine vordefinierten Funktionen im Sprachumfang gibt.

Monday, December 05, 2005

B.L.O.G.: Buch über Entwicklungshilfe

Boche vom B.L.O.G. - Bissige Liberale Ohne Gnade - hat einen interessanten Artikel über Entwicklungshilfe veröffentlicht und verweist dabei auf das Buch "Ende der Armut" von "Jeffrey D. Sachs".

Er wendet sich dabei gegen die Liberale, die meinen man käme auch ohne Entwicklungshilfe aus. Die Personen, die Entwicklungshilfe als sozialistische Subventionspolitik sehen.

Selbstverständlich ist Marktwirtschaft zentralistischer Wirtschaftspolitik überlegen. Selbstverständlich schafft Kapitalismus dauerhaften und wachsenden Wohlstand, wie uns heute vor allem asiatische Volkswirtschaften lebendig vorführen.

Aber: Wenn man die extreme Armut (also die, die einen tatsächlich an Hunger oder eigentlich behandelbaren Krankheiten krepieren lässt) beseitigen möchte, muss man die Menschen erst einmal dazu befähigen, am Markt überhaupt teilnehmen zu können! Wer tälich um sein blankes Leben kämpft, wer seine Angehörigen reihenweise an Krankheiten sterben sieht, dem hilft die reine kapitalistische Lehre nicht. Damit Kapitalismus funktioniert, muss Kapital vorhanden und kumulierbar sein. Wie es Sachs anschaulich ausdrückt: Die Ärmsten der Armen brauchen Hilfe, um die unterste Stufe der Leiter zu erreichen. Den Rest schaffen sie dann allein.

Er schließt mit:

Gerade wir Deutschen, die der amerikanischen Entwicklungshilfe nach dem zweiten Weltkrieg unsere wirtschaftliche Führungsrolle und unseren Reichtum verdanken, sollten diese Lehren eigentlich verstehen können.

Eine gut koordinierte Entwicklungspolitik kann wirklich etwas bewegen.
Entwicklungshilfepolitik ist allerdings ein sehr komplexes Thema.
Nicht nur für die Ärmsten der Armen ist Entwicklungshilfe notwendig, auch für anderen Entwicklungsländern. Wenn dort allerdings natürlich andere Maßnahmen notwendig sind, also bei den ärmsten Ländern der Welt.

Wie die vergangenen Jahre und Jahrzehnte gezeigt haben, kann es nicht damit getan sein, nur Geld nach Afrika zu pumpen.
Noch schlimmer wirkt es, wenn man (überschüssige) landwirtschaftliche Erzeugnisse hoch subventioniert nach Afrika (und in andere Länder der dritten Welt) schickt. Natürlich mit der Ausnahme von akuten Notsituationen.
Dies ersteuert die letzten lokalen und internationalen Marktchancen der afrikanischen Bauern.
Mit derartigen Maßnahmen bekommen manche vielleicht ein gutes Gewissen, aber es ist eher sogar kontraproduktiv.

Das Buch jeden Falls steht von nun an auf meinen Amazon-Wunschzettel.

Zu dem Thema ist auch die 286. Ausgabe der Zeitschrift "Informationen zur politischen Bildung" der "Bundeszentrale für politische Bildung", die sich speziell mit dem Thema "Entwicklung und Entwicklungspolitik" beschäftigt, von Interesse.

Thursday, October 27, 2005

Buch über Smalltalk

Man kann von der politischen Einstellung des Bloggers Schockwellenreiter halten, was man will, ich halte davon gar nichts.

Warum das Blog trotzdem einen Platz in meinen NetNewsWire hat, liegt an deinen qualitativ hervorragenden Artikeln über Macs und Programmiersprachen.
Heute hat er wieder eine gute Buchempfehlung gegeben.


Das Smalltalk-Buch The Art and Science of Smalltalk kann ab sofort kostenlos von dieser Seite heruntergeladen werden.