JavaOne - T-Shirt Contest

********Nabend zusammen,

auch wenn ich derzeit noch in Palo Alto (CA) sitze, wollte ich schon einmal kurz auf den Contest hinweisen wie Ihr ein JavaOne T-Shirt gewinnen könnt.

Viele von Euch haben sicherlich schon mit verteilten Anwendungen gearbeitet, manche aber sicher auch noch nicht. Ich sehe es als den nächsten Step, den jeder (angehende) Developer zu mindestens ansatzweise wissen sollte.

Daher habe ich mich für folgende Challenge entschieden:

Hazelcast ist ein Toolkit um sehr einfach und schnell verteilte Anwendungen zu bauen. Es bietet viele Basisimplementierungen wie Maps, Listen, Sets, Topics (PubSub) und ähnliches. Zu 99% greift es dabei auf die üblichen Java-Interfaces zurück um schnell Erfolge zu sehen.

Die Idee ist nun, ein kleines, lustiges, verteiltes Programm zu schreiben. Es ist dabei vollkommen egal ob es sich um ein Spiel handelt welches Hazelcast für Realtime Communication nutzt, ob es eine kleine verteilte Datenbank-Anwendung wird oder ein Messenger. Es liegt vollkommen bei Euch - überrascht mich :slight_smile:

Der Contest läuft bis Mitte November. Bis dahin wird jede Application angenommen und mit in die Verlosung aufgenommen.

Leider konnte ich nur noch ein XL T-Shirt bekommen aber ich denke das sollte nicht an der Teilnahme hindern. Zusätzlich lege ich noch ein Buch „Getting Started With Hazelcast“ (http://www.amazon.de/Getting-Started-Hazelcast-Mat-Johns/dp/1782167307) oben drauf.

Bei Fragen zum Contest oder zur Nutzung von Hazelcast, einfach hier Eure Frage stellen.

Informationen / Dokumentation zu Hazelcast:
http://hazelcast.com/docs/3.0/manual/single_html/

Ja, Hazelcast hatte ich irgendwann mal über den Link in deiner Signatur gefunden, und fand das von der Idee her schon sau-cool (nicht zuletzt, weil mal im Raum stand, dass ich an der Entwicklung von etwas ähnlichem arbeiten sollte). Auch wenn ich vermutlich nicht den kreativen Funken auffangen werde, der zur Teilnahme notwendig ist, nur allgemein: Nach welchen Kriterien wird der Gewinner ermittelt?

Ich würde sagen man stellt die Einsendungen vor und es wird abgestimmt :slight_smile: Dann ist es nicht an mir die finale Entscheidung zu treffen.

Endlich dran gedacht, final hier die Bilder (Vorder- / Rückseite) T-Shirt JavaOne

Der kleine Zettel mit der Aufschrift “Hazelcast!” ist in meiner Queue schon ein Stück weiter hoch gewandert, aber da es noch an kreativen Ideen fehlt, könnte ich bestenfalls auf “wenige Mitbewerber” spekulieren - was aber auch schade wäre…

Ich bin sicher, dass dir da noch ein Einfall kommt, z.B. irgendwas verteiltes mit JCUDA? :slight_smile:

Es gibt zwar Experimente zu MapReduce (mit Hadoop) + JCuda, aber … leider sind Java Collections und CUDA erstmal SO unterschiedliche Welten, dass es schwer würde, da irgendeine sinnvolle Kombination zu finden. (Plain primitive arrays FTW :D)

Jetzt hab’ ich nochmal hochgescrollt, und gesehen, dass da nichts von „sinnvoll“ in den Anforderungen stand :smiley: Aber wenn, dann dachte ich eher an irgendwas Spiel-artiges, oder irgendwas, was einfach nur ein fancy Experiment ist (und nicht unmittelbar, aber zumindest in bezug auf den Erkenntnisgewinn oder eine „Horizonterweiterung“ als „sinnvoll“ bezeichnet werden könnte). Zeit ist halt auch immer so eine Sache, aber mal schauen, ob sich die Gelegenheit ergibt, da was zu basteln… :reflect:

Es gibt mindestens zwei mögliche Schlüsse, die man aus der Anzahl derer, die bisher in diesem Thread etwas geschrieben haben, ziehen kann: Entweder, keiner wird teilnehmen, oder diejenigen, die teilnehmen, halten das bisher geheim.

Ersteres wäre verständlich. Eine kreative Idee kommt ja nicht einfach so auf Abruf.
Letzteres wäre auch verständlich. Wer will sich schon seine kreative Idee klauen lassen? :smiley:

Aber ein Hinweis, und sei es nur ein „Ich bastle da an was…“ wäre schon interessant…

Ich habe mir Hazelcast jetzt mal „angesehen“ (auf der Ebene von „Das HelloWorld mal laufen lassen“ :o ) : Irgendwie habe ich das Gefühl, dass man damit richtig coole Sachen machen könnte, aber eingefallen ist mir bisher nichts. Das MapReduce auf Basis von Hazelcast ist in diesem Sinne ja schon fast „nahe liegend“, und da ich mir auch MapReduce schon länger mal ansehen wollte, habe ich das gleich mit in meine Inspirationssuche einbezogen … aber auch DA liest man immer nur „Joa, damit kann man Worthäufigkeiten zählen“ :rolleyes: Hm. Irgendwie muss da noch mehr dahinter stecken :reflect:

Naja das ist eben das Basisbeispiel :slight_smile: Ich habe in Blogpost allerdings mit Wörterbüchern und Übersetzungen finden gespielt https://www.sourceprojects.org/writing-a-hazelcast-castmapr-mapreduce-task-in-java

Wegen der „Idee fällt nicht vom Himmel“ Sache:
Deswegen habe ich einen Monat gegeben, mit HZ anfangen ist zügig, sollte also nicht die große Zeitverzögerung sein. Bleibt das Problem „was kann man cooles mit verteilten Anwendungen bauen?“ :slight_smile:

Jetzt weiß ich, was mich am Titel dieses Threads dauernd so irritiert. Naja, gut, dass die Konferenz nicht “Wet” heißt :o)

Wie auch immer. Gibt’s in CastMapR schon vorgefertigte, generische Identity-Mapper und Reducer? (Wenn ja, habe ich die API doc wohl noch nicht richtig überblickt, und) wenn nicht, könnte man sowas in Betracht ziehen. Braucht man anscheinend öfter mal. (Ich fräs’ mich da gerade erst in die oberste Schicht der Oberfläche… :o )

Nein gibt es noch nicht. Mach nen Issue, forke und gib mir nen Pull-Request :wink:

Wenn es generell um Ideen für verteilte Aufgaben geht, fallen mir aus unserer Distributet Computing Vorlesungen Themen wie

  • Matrixmultiplikation
  • Rechtschreibkorrektur
    ein, könnte demnächst mal schauen, ob ich da noch andere Themen finde, die wir damals in der Vorlesung hatten

So gehts mir auch. Ich poste also nur um zu zeigen, dass durchaus Interesse am Wettbewerb besteht. Ich finde die Idee klasse!

Hab schon eine Idee, die halbwegs Sinn macht. Muß allerdings noch ein paar Kleinigkeiten überdenken und dann die nötige Zeit und Muse finden das dann auch umzusetzen. Eine andere Geschichte hab ich erstmal hinten angestellt, da ich da noch zuviele Probleme sehe.

Ein Problem an dem Hazelcast ist halt wirklich einen Anwendungsfall zu finden. So ein verteiltes System macht ja auch erst Sinn, wenn man mehrere Rechner zur Verfügung hat. Dafür muss dann auch das Problem groß genug sein.

Nun, große Probleme zu finden könnte schwierig werden. Dafür bräuchte man ja richtig Große Daten. (Oder wie soll man „Big Data“ übersetzen? :smiley: ). Sowas wie Matrixmultiplikation ist einerseits ein Kandidat, aber da müßte es entweder um wirklich gigantische, dicht besetzte Matrizen gehen, oder man muss sich überlegen, welche Sparse Datenstruktur für diesen Fall der geeignetste ist (und damit sich das für Sparse Matrizen lohnt, müßten es ja wiederum astronomisch viele non-zeros sein). Ich hatte auch angesetzt, mal zu schauen, welche Graphenalgorithmen man da drauf loslassen könnte. Da gibt’s zwar ein paar (die jemand schon auf MapReduce abgebildet hat, deswegen wäre CastMapR da praktisch :wink: ), aber da stellt sich erstens die Frage, ob das bzgl. der Performance wirklich Sinn macht, und ob es nicht etwas gibt, was „mehr her macht“, als ein Kommandozeilentool, das stundenlang rechnet und am Ende „42“ ausgibt. Deswegen hab’ ich jetzt nochmal mit etwas Spiel-artigem angefangen, aber auch da könnte man den Sinn in Frage stellen: FALLS das irgendwann mal lauffähig wird, wird Hazelcast da nur ein theoretisches, unter vielen Schichten verstecktes „Implementierungsdetail“ sein, das nicht wirklich ausgenutzt wird. Naja, mal schauen, was sich ergibt.

[QUOTE=Majora]Hab schon eine Idee, die halbwegs Sinn macht. Muß allerdings noch ein paar Kleinigkeiten überdenken und dann die nötige Zeit und Muse finden das dann auch umzusetzen. Eine andere Geschichte hab ich erstmal hinten angestellt, da ich da noch zuviele Probleme sehe.

Ein Problem an dem Hazelcast ist halt wirklich einen Anwendungsfall zu finden. So ein verteiltes System macht ja auch erst Sinn, wenn man mehrere Rechner zur Verfügung hat. Dafür muss dann auch das Problem groß genug sein.[/QUOTE]

Nee du kannst relativ simpel zum testen auch mehrere Instanzen innerhalb der selben JVM starten oder mehrere Prozesse parallel starten. Mir geht es mehr um die Idee :slight_smile:
Vielleicht kann ich die beste Idee mal in unserem Amazon EC2 laufen lassen :slight_smile:
@Marco13
Ich denke die Sinnhaftigkeit ist nicht so wichtig eher dass es eine lustige, coole Idee ist :slight_smile:

Lustig und Cool - naja, wenn man ein 5000-Zeilen-Programm hat, und dann als Änderung

// WEG: private Map<K, V> map = new HashMap<K, V>();
// HIN:
private Map<K, V> map = createHazelcastMap();

einfügt, würde ich das als „Thema verfehlt“ abstempeln (und mein zweiter Ansatz würde auf so etwas hinauslaufen, aber die übrigen 4999 Zeilen wären auch ganz unterhaltsam, deswegen ist mir das egal :wink: ). Die Möglichkeiten, die Hazelcast bietet, wirklich auszunutzen erfordert wohl etwas mehr Kreativität. Der verteilte ExecutorService klingt toll, den würde ich gerne mal antesten, aber … womit füttern? Naja, vielleicht wirklich mal eines dieser Straightforward-Fälle wie Matrixmultiplikation ausprobieren…

Als sinnvolle Anwendung fiele mir da jegliche Form von Crawler ein.

Wir hatten in der Uni bei Verteilten Systemen oder so die Matrixmultiplikation ich glaube einer 1000x1000 Matrix mal einer 1000x1000 Matrix [oder sogar 10.000x10.000 mal 10.000x10.000 bin mir nicht sicher] (befüllt mit Zufallswerten) und den Vergleich zwischen Berechnung auf einer Maschine Single Thread und Verteiltem Berechnen gibt da ja auch verschiedene Möglichkeiten, wie man das dann aufteilen kann, ist aber von der Theorie her einfach :wink:

Also 1000x1000 löst man heute im Schlaf, d.h. entweder das ist schon 20 Jahre her, oder war 10000x10000 :wink: Mit „Straightforward-Fälle“ meinte ich gerade das - nämlich dass die wichtigsten Zerlegungsmethoden da auch gleichzeitig recht einfach sind. Sowas wie http://de.wikipedia.org/wiki/Strassen-Algorithmus sollte man ziemlich direkt runterschreiben können. Das spannende ist DA dann eher, wie man die Daten am besten repräsentiert, und ob nicht das Verteilen der Daten schnell zum Bottleneck wird (und auch bleibt). Am besten wäre, wenn man irgendwelche kleinen (am besten GAR keine ;)) Eingabedaten hätte, und die Berechnung „beliebig“ aufwändig wäre. Sowas wie ein brute-force-Passwortknacker oder so, aber… das ist auch schon fast langweilig.