Showing posts with label Buchtipp. Show all posts
Showing posts with label Buchtipp. Show all posts

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).

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.

Thursday, February 14, 2008

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)

Sunday, December 23, 2007

Buchtipp: Programming Collective Intelligence

Meine neueste Buchanschaffung und Buchtipp ist
"Programming Collective Intelligence" von Toby Segaran.


Was der Titel elegant verschweigt (vielleicht um potenzielle Käufer nicht abzuschrecken): Das Buch ist Machine-Learning angewendet auf moderne Web-Anwendungen. Das Inhaltsverzeichnis offenbart dies sehr deutlich. In dem Buch werden behandelt:

  • Clustering (Item-based und Hierachisches)
  • Künstliche Neurale Netzwerke
  • Stochastische Optimierung (Hill-Climbing, Simulated Anneling, etc)
  • Support Vector Machines
  • Naive Bayesian Classifier
  • Decision Tree Learning
  • Genetic Programming
  • Nicht-negative Matrix Faktorisierung

Dies ist schon eine ziemlich beeindruckende Liste von Verfahren. Viel mehr steht im "Mitchell" auch nicht.

Eine Besonderheit des Buches ist die absolute Abwesenheit von Pseudocode. Jeder Algorithmus wird in lauffähigen Python-Code dargestellt. Bei einigen komplexeren Ansätzen finde ich Pseudocode immer noch lesbarer, aber so sinkt die Hürde mit den Algorithmen direkt "zu spielen" ungemein.

Hinzu kommt, dass für jeden Ansatz auch immer praktische Beispiele für das Web angegeben werden. Es werden u.a. Empfehlungen auf Basis von del.icio.us-Daten gegeben, Personen auf Facebook gematcht und Preise auf eBay geschätzt. Alles extrem aktuelle Anwendungen inkl. Input (meist: HTTP-Request and Rest-Webservice und XML parsen) und Output z.B. ein Entscheidungsbaum als Image exportieren) der Ansätze, die in Python-Code dargestellt werden.

Ein weiteres Highlight des Buches z.B. im Vergleich zur Vorlesung "Maschinelles Lernen" ist in meinen Augen die Diskussion über die Auswahl und Parametrisierung der Ansätze. Es wird dargelegt, wann welcher Ansatz möglicherweise bessere Ergebnisse liefert, aber auch welche Auswirkungen Parameter haben und z.B. auch die tendenziellen Unterschiede zwischen Gini-Koeffizienten und Entropy beim Entscheidungsbaum-Lernen. In der Vorlesungen werden die Verfahren zwar skizziert, aber es gibt keine Beispiele realistischer Größe oder andere Hilfestellungen. Dies ist in der Form auch nicht unbedingt Aufgabe der Vorlesung. Ich sehe das Buch deshalb komplementär zur Vorlesung.

Diesen Zweck erfüllt das Buch meiner Meinung nach hervorragend und es macht Lust die Beispiele sofort zu nehmen, auszuführen und weiterzuentwickeln.

Allerdings sind einige Ansätze schon ziemlich abgefahren - Wird genetische Programmierung tatsächlich irgendwo eingesetzt? Auch habe ich teilweise das Gefühl, dass mehr Hintergründe/Theorie notwendig sind, um einige Ansätze auf neue Probleme anwenden zu können. Ob für Entwickler ohne Informatik-Background eine 2-seitige Einführung in Lineare Algebra ausreicht, um nicht-negative Matrixfaktorisierung auf andere Problemen anwenden zu können, bezweifele ich.

Saturday, June 16, 2007

2. Auflage von "Effective Java" in Arbeit

Bei den regelmäßigen Lesern dieses Blogs sollte ich herumgesprochen haben, dass ""Effective Java" von Joshua Bloch eines meiner Lieblingsbücher ist.

Leider ist die aktuelle Version schon von 2001 und damit aus IT-Sicht uralt. Hinweise wie der Tipp für typsichere Enums sind von der Sprachspezifikation überholt worden; Nebenläufigkeit ist heute wichtiger als vor 6 Jahren und natürlich werden auch generische Typen nicht besprochen.

Dennoch hat es auch heute noch einen Mehrwert. Deshalb fand ich es schade, dass "Effective Java" nicht mehr verkauft wird. Aber die gute Nachricht ist dieses Interview mit Bloch auf der letzten JavaOne:


Q: You are currently busy revising Effective Java. Can you give us some hints about what will be in the second edition?

A: I’m trying very hard to preserve the tone of the first edition. I’m revising all the existing items in light of the J2SE 5.0 language changes and everything I’ve learned since 2001. I’m adding a few more items here and there, plus an entire chapter on generics. Also, I’m slanting the threads chapter toward java.util.concurrent.


Für die Übergangszeit gibt es noch "Java Puzzlers", auch wenn ich vermute, dass der "Gebrauchswert" von "Puzzler" deutlich geringer sein wird.

Friday, March 09, 2007

VKrit: Architektur paralleler Rechnersysteme

Diese Veranstaltung "Architektur paralleler Rechnersysteme" von dem PC^2-Mitarbeiter Jens Simon sorgt dafür, dass (große) parallele und verteilte Systeme nach dem Weggang von Professor Kao an der Uni Paderborn nicht total untergehen. Die Veranstaltung ist weitgehend unbekannt, weil die Webseite dazu nicht über die Seite "Lehrangebot" erreichbar ist.
Im Modulhandbuch wird sie auch nicht explizit erwähnt. Dort heisst es aber:

Die Veranstaltungen über Cluster Computing, Architektur paralleler Rechnersysteme und Performance-optimierte Programmierung führen in die Welt des Hochleistungsrechnens. Dabei werden sowohl der prinzipielle Aufbau als auch Fall Beispiele von Hochleistungsrechnern vorgestellt. Ferner wird auf die entsprechende Systemsoftware, auf die Netzwerkstrukturen und insbesondere auf die Programmiermodelle für Parallelrechner eingegangen.

Das Thema finde ich sehr interessant und eines der empfohlenen Bücher "Hennessy/Patterson: Computer Architecture - A Quantitative Approach" ist eines der besten Bücher, die ich bisher im Studium gelesen habe.

Ein Plus-Punkt bekommt die Veranstaltungen wegen den Übungsaufgaben, die auch praktische Entwicklung auf dem PC^2-Cluster beinhalteten.

Negativ ist anzumerken, dass in der Vorlesung und in dem Folienskript teilweise der rote Faden fehlt. Einzelne Themen werden mehrmals besprochen und dabei teilweise unterschiedlich definiert. Insgesamt brauchen die Folien nochmals eine gründliche Durchsicht.
Auch wirkt die Motivation mit dem Zitat von Luiz Andre Barroso über die Google Architektur in Anbetracht der Ausrichtung der gesamten Veranstaltung auf wissenschaftliches Rechnen (was auch genau dem Fokus des PC^2 entspricht)sehr merkwürdig.


Das Google Konzept z.B. hier widerspricht in meingen Augen genau dem Fokus und den Inhalten der Vorlesungen (Sehr deutlich z.B. auf Folie 23 der Vorlesung zu Clustern). Eine Motivation, die eher auf wissenschaftliches Rechnen mit Aufgaben wie Barnes Hut (Galaxiesimulation) u.a. eingeht, würde der Vorlesung besser entsprechen.

Bis auf die verbesserungsbedürftigen Folien und der Motivation, die nicht zur Vorlesung passt, auch eine gute Veranstaltung, die ich empfehlen kann.

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.