Donnerstag, 26. August 2010

log in a static method in Grails domain class

This post is in english, I guess it might help some people

I've been struggling with this issue some time. I found some hints via Google, especially a thread in Pubbs and one in Nabble. Both didn't help, though.

I don't know if what I did is good, or even "legal" or the Groovy way or... whatever, it works, though. Here on Grails 1.1.1 at least.

Here's the code:
def log = (new MyDomainClass()).log
It's so easy. I just instantiate a new object of the type of the current domain class and get its log property. That downsize is, it can't be copy-pasted to any domain class without editing it. Don't know if there's a solution to that.
For those who want a more talkative example:
class MyDomainClass{
static myStaticMethod () {
def log = (new MyDomainClass()).log
log.debug "This is a log message from a static domain method"
}
}
Did this help? Let me know in the comments.

Mittwoch, 18. August 2010

Probleme mit der MSVCP71.DLL

Letztens hatte ich Probleme, weil eine Fehlermeldung in meinem Windows XP kam. Nach der Lösung des Problems habe ich einen Kumpel das Problem per Email erörtert. Allerdings dachte ich mir jetzt, das wäre vielleicht auch für die Allgemeinheit interessant! Hier also ein ein bisschen bearbeitetes copy-paste der Email:

Seit einigen Tagen trat bei mir folgende Fehlermeldung auf.

Aus meiner Sicht "unerwartet". Also, ich hab mich nicht zu sehr damit befasst und natürlich mehrere Programme am laufen. Keine Aktion hatte ich kurz davor ausgeführt, so war es schwierig den Fehler zu reproduzieren. Vor allem hatte ich kein Programm gestartet was zu dieser Fehlermeldung führen könnte.

Heute hab ich mir Visio Professional 2010 von MSDNAA runtergeladen (für die DA). Wenn das Setup beendet wurde und, Achtung, man etwas gewartet hat, vielleicht so 1-10 Sekunden, kam eben diese Fehlermeldung (deshalb auch die Setup Exe-Datei in der Titelzeile).

Man merke sich:
* Beim beenden des Setups
* Nach kurzer Zeit, nicht sofort

Einiges an googlen hab ich die wohl kompetenteste Antwort in einem Forum von Microsoft gefunden.

Tja, eine DLL aus dem Internet wollte ich nicht unbedingt runter laden (Virengefahr), vor allem weil nirgendwo die eigentliche Größe der DLL angegeben wurde (übrigens 499.721 Byte). Also hab ich in meinen Gemeinsamen Dateien unter Programme gesucht und tatsächlich zwei DLLs gefunden. Beide hatten sogar die gleiche Größe. Also hab ich mir das mit dem regsvr32 angeschaut, was aber zu einer Fehlermeldung geführt hat, dass der blablabla Einstiegspunkt nicht gefunden wurde. Dann hab ich den Dateinamen mit Groß- und Kleinschreibung so geschrieben wie die Datei war, auch ne Fehlermeldung. Das sei keine richtige DLL bzw OCX Datei. *shrug*
Also hab ich mal den Filemon.exe von SysInternals angeworfen. Und die Lösung ist so einfach:

Kopiere die MSVCP71.DLL in das Verzeichnis Windows\System32

Es werden nämlich alle Verzeichnisse im PATH nach der Datei durchsucht. regsvr32 ist nicht nötig.

Aber Vorsicht, ich habe mit dem TotalCommander die MSVCP71.DLL in das Windows\System32 Verzeichnis kopiert und Sophos Anti-Virus hat daraufhin meine totalcmd.exe in Quarantäne verschoben. *autsch*
Also aufpassen :)

Samstag, 10. April 2010

Der 30. Geburtstag in Zahlen

Stell dir vor es ist Geburtstag und keiner denkt daran...
... glücklicherweise ist mein soziales Netzwerk nicht so vergesslich und somit präsentiere ich hier meinen

30. Geburtstag in Zahlen

Der erste Glückwunsch der mich erreichte war von Iris, die mir pünktlich um 00:09Uhr eine SMS geschrieben hat. Insgesamt erreichten mich 13 SMS. Die letzte um 22:21Uhr.
Die erste Email die mich erreichte kam von meiner Patentante um 7:57Uhr. Insgesamt erreichten mich zwei Emails mit Geburtstagsglückwünschen. Dazu kommt eine E-card von Heike.
Das erste Geburtstagsglückwunsch-Wallpost in Facebook kam um 9:07Uhr von einer Freundin die derzeit in Bukarest ist. Die erste Facebook-Nachricht kam von einer Cousine in Indien um 6:11Uhr. Insgesamt bekam ich 29 Wallposts, das letzte um 23:04Uhr. Darunter war ein Video Stevie Wonder - Happy Birthday (gepostet von Tina) und eine Biertorte (von Ania).
Ich bekam eine Lokalisten Nachricht (von Lukas), zwei direct messages in Twitter, die erste war von Fabian um 11:35Uhr. Die einzige Mention in Twitter kam von Oscar.
Auf dem klassischen, also dem persönlichen Weg, konnte mir meine Familie, zuallererst mein Vater, gratulieren. Der letzte war Marcus, der mir davor auch noch per Facebook Wall-post und per Anruf gratulierte und damit derjenige war, der mir am öftesten gratulierte. Insgesamt persönlich gratuliert wurde mir 15 mal. Glückwünsche per Anruf bekam ich 9, der erste kam von Richi um 11:15Uhr. Interessanterweise haben ich mit zwei Personen telefoniert die mir allerdings nicht gratuliert haben => FAIL

1. Plätze
  • Nadia (fb wall),
  • Iris (SMS)
  • César (persönlich)
  • Michelle (fb msg)
  • Eva (Email)
  • Corinna (Anruf)
  • Tina (fb video)
  • Oscar (Twitter mention)
  • Fabian (Twitter dm)
  • Moni & Budda (ICQ)
  • Ania (fb photo)
  • Marcus (Anzahl Gratulationen)
  • Heike (E-card)
Verspätete Geburtstagswünsche habe ich aktuell 11 :) Mal sehen, wie viele noch kommen!

Somit wurde mir insgesamt 81 mal gratuliert, davon 77 mal von einzelnen Personen.

Der Geburtstag an sich war also sehr schön, man kann sich ja auch kaum was besseres vorstellen als den Hinweis, dass jemand an einen denkt! Danke allen für die lieben Geburtstagsgrüße ich habe mich über jeden einzelnen mehr gefreut als über die gesamte Menge.

Und heute wird das gebührend gefeiert, ich freue mich auf jeden der oder die kommt!

Freitag, 29. Januar 2010

Aus dem Leben eines Informatikers

Als Informatiker hat man mehr mit Maschinen zu tun als mit Menschen. Vorgehensweisen, die Menschen - also nicht Informatiker - haben, werden von uns beobachtet, analysiert und schließlich selbst ausgeführt. Besonders interessant sind für uns soziale Protokolle.
Diese sozialen Protokolle... ich werde sie nie verstehen...
Lasst mich euch ein Beispiel nennen:
Als selbstständiger, selbstversorgender Mann, wie wir Informatiker nun mal sind, gehe ich selbst einkaufen, esse zum Frühstück und zum Abendessen jeden Tag das gleiche. Also etwas, was ich im nächstgelegenen Supermarkt einkaufen kann. Mittags gehe ich in die Kantine und zahle mit meiner Mitarbeiterkarte an der Kasse nach dem Buffet. So weit, so gut.
Letzten Monat hat mich ein Arbeitskollege zu seinem Geburtstag eingeladen. Ungewöhnlicherweise hat er nicht bei sich zu Hause gefeiert sondern in einem Restaurant. In einigen Blogeinträgen, man interessiert sich ja im Voraus, hab ich vom „Essen gehen“ schon mal gelesen und war vorbereitet. In der Einladung, die, ökologisch verwerflich, mir auf einer Karte ausgehändigt wurde stand: „Macht euch keine Gedanken, die Kosten gehen auf mich.“ Ich habe die Karte natürlich eingescannt und dann zurückgegeben, so konnte er sie wiederverwenden.
In diesem Restaurant haben wir zu fünft gegessen. Interessanterweise kam jemand an den Tisch und hat gefragt was wir wollen, ein Buffet sah ich nirgendwo. Etwas verwirrt wurde mir erklärt, man solle sich anhand der Beschreibung auf einem Faltblatt ein Gericht aussuchen welches einem dann gebracht wird. Auch das Getränk sollte man sich aussuchen. Apfelschorle, was sonst? Mein Tischnachbar, Physiker, nahm übrigens Spezi.
Nach dem Essen und interessanten Gesprächen über Clustering im SuSy-Raum mit jenem Tischnachbarn bat das Geburtstagskind um die Rechnung. Er bezahlte allerdings etwas mehr, als auf der Rechnung stand. Mir wurde erklärt:
Wenn man bedient wird, zahlt man dazu sogenannten Trinkgeld. Dieses ist Geld, welches dem Personal gegeben wird um sich für guten Service zu bedanken. Man sagt, Bedienungen leben von diesem Geld, weil deren Gehalt alleine sehr gering sei.
Wieso dies aber nun TRINKgeld heißt, konnte mir allerdings niemand erklären.
Aufgrund des anregenden Gesprächs mit meinem Tischnachbar haben wir ausgemacht, uns demnächst noch ein mal zu treffen und das Gespräch fortzuführen. Dazu gingen wir in eine Bar. Laut Karte war der Preis meiner Apfelschorle höher, bei dem Spezi weiß ich nicht mehr den Preis im Restaurant. Da ich ihm anscheinend weiter geholfen hatte, lud auch er mich ein und wieder bemerkte ich den Zuschlag, das Trinkgeld. Ich fragte nach, wie hoch dieser Zuschlag denn sein sollte. Er meinte, er liege üblicherweise bei ca. 10% des angegebenen Preises. Er machte mich außerdem darauf aufmerksam, wie andere zahlten und dass dazu meistens auf den nächsten Euro oder halben Euro aufgerundet würde. So würde man sich das Kleingeld sparen. Dafür brauchte man also Bargeld, für gewöhnlich zahle ich immer mit EC Karte.
Nun, letzte Woche gingen wir erneut gemeinsam in diese Bar. Dieses mal brauchte ich seine Hilfe und bot ihm an, ihn einzuladen, was er gerne an nahm. Als die Bedienung zum Kassieren kam, wollte ich erst den Betrag auf der Rechnung zahlen doch der Physiker machte mich darauf aufmerksam, dass ich eben diese 10% noch dazu zahlen sollte was dann zufälligerweise einen runden Preis von 10 Euro ergeben hat. Und die Bedienung sah mich dieses mal nicht so verwirrt an wie die Kassiererin in der Kantine.
Mir wurde nun wiederum erklärt, dass man Trinkgeld nur zahle, wenn man eben bedient würde. Ich dachte dann also, ich hätte es verstanden.
Nun war gestern allerdings ein Stehempfang wegen der zehnjährigen Firmengründung mit fliegendem Buffet...

Diese sozialen Protokolle... ich werde sie nie verstehen...

Mittwoch, 11. November 2009

Meine Wishlist für eine Twitter Facebook Application

Hier eine Wishlist mit Funtionalitäten, die ich mir dafür wünschen würde.
Doch zuerst ist zu klären: Was ist eine "Twitter Facebook Application"?
Das ist eine Facebook Application die Tweets aus Twitter in den eigenen Facebook Stream als Status Update übernimmt. D.h. ich kann mit meinem Twitter-Client, derzeit WittyTwitter, tweets erstellen die dann als mein neuer Facebook Status übernommen werden.
Hier jetzt nun die Wishlist, unten erkläre ich dann noch, wieso ich diese Application nicht selbst schreiben kann.
  1. Selektivität: Es sollen entweder alle Tweets oder nur welche mit einem bestimmten Hash-Tag (z.B. "'fb") übernommen werden. Hier stellt sich auch die Frage was mit @-replies und ReTweets passieren soll
  2. Passend hierzu sollte man die Möglichkeit haben Tweets, die man vergessen hat zu hash-taggen trotzdem noch als Status-Update zu übernehmen
  3. Links expandieren: Benutzt man Twitter werden Links oft verkürzt (z.B. über bit.ly). Diese Links sollten in Facebook expandiert dargestellt werden weil bei Facebook die Längenbeschränkung auf 140 Zeichen fehlt
  4. Links sharen: Verlinkt man ein Photo, sollte es in Facebook nicht als Link angezeigt werden sondern als eigenes Photo in dem Stream dargestellt werden. Das gleiche gilt natürlich für Videos. Interessant wird es dann auch bei flickr- oder PicasaWeb-Alben
  5. OpenSource: Der Code sollte OpenSource sein. Es entstehen immer mehr Plattformen für Link-Verkürzung und Photos etc. Dafür jedes mal selbst die Filter zu schreiben halte ich für zu aufwändig und würde das lieber einer Community übergeben
  6. Hash-Tag Funktionen: Man sollte auch überlegen, was man mit den Hash-Tags macht die in Twitter gern verwendet werden aber in Facebook (noch?) keinen Sinn machen. So könnte man vielleicht die #'s entfernen, oder man lässt alle Hash-Tags nach dem #fb weg. Es gibt viel was man sich da überlegen kann :)
Diese Ideen stammen von den vorhandenen Facebook Applications Twitter, PowerTwitter und Selective Twitter App, die zwar alle die Funktionalitäten bieten aber nicht in eine Application vereint. Wichtig wäre auch, die App so konfigurierbar zu machen, dass man die einzelnen Funktionalitäten nach eigenen Wünschen einsetzen kann.

Nun, warum schreibe ich diese Application nicht selbst? Ich habe mich durchaus mit den APIs von Facebook und Twitter auseinandergesetzt und es reizt mich doch sehr dieses Mashup zu schreiben. Doch leider braucht man dafür einen cron-Job. Ich habe mich umgeschaut nach Webspace der cron-Jobs anbietet. Aber die sind mir durchweg entweder zu teuer oder bieten sonst nicht das an, was ich brauche. Da verzichte ich lieber zuerst auf den cron-Job und dann auf anderes. Und schreibe die App vielleicht erst später...

Aber vielleicht interessiert sich ja jemand anderes schon jetzt dafür und möchte schon einmal beginnen.

Nichtsdesdoweniger ist es interessant, was sich andere für Gedanken gemacht haben. Bitte schreibt, was ihr von der Wishlist haltet und was euch noch fehlt.

Sonntag, 1. November 2009

Über Nutzen und Unnutzen der Spezialisierung

Derzeit schreibe ich meine Diplomarbeit. Es geht um Data Mining, KI und Adaptivität. Viele Begriffe unter denen man viel verstehen kann.
Mein Betreuer meinte, ich müsse eine Anwendung auf ein Framework aufbauen und so den generellen Prozeß des Data Mining zu beschleunigen.
Das Framework wurde von einem anderen Diplomanden geschrieben. Mir wurde gesagt es wäre ein Grails Projekt. Durch meine Projektarbeit, die ich in Ruby on Rails geschrieben habe bildete ich mir ein, einen einfachen Einstieg zu finden.
Mittlerweile habe ich den Code des Frameworks bekommen und habe versucht diesen zu compilieren.
Erfolglos.
Meine generelle Spezialisierung im Bereich Web bezieht sich hauptsächlich auf PHP. Java kenne ich durch die Universität.
Um das Framework, welches aus fünf einzelnen Projekten besteht vollständig zu compilieren muß natürlich jedes Projekt einzeln in der richtigen Reihenfolge übersetzt werden. Exakt für diese Aufgabe wurde Ant geschaffen, welches einen Fortschritt zu make sein soll, welches wiederum ein Fortschritt zu shell scripts bzw. Batchdateien ist.
Ein Nachteil von Ant ist, daß es auf XML basiert was es ziemlich aufwändig macht zu erstellen.
Aus diesem Grund gibt es nun GAnt welches Ant fernsteuert und mit Groovy angesprochen wird.
Ich stehe also nun vor dem Problem als fast fertig studierter Informatiker mich in neue Systeme und Sprachen einarbeiten zu müssen. In der Universität lernen wir abstrakt und konzeptionell zu denken. Aus dieser Spezialisierung zur Abstraktionsfähigkeit heraus weiß ich nun, was ich machen muß und was ich lernen muß. Nämlich die genaue Umsetzung von Konzepten in diesen neuen Sprachen. Ich komme also von einer Spezialisierung in eine andere. Jegliche weitere neue Tendenzen, die sich irgendwer allein im Webbereich irgendwann ausdenken wird muss neu erlernt werden dass sich eben die Frage stellt:
Macht es Sinn, dass sich ein Informatiker spezialisiert?

Dienstag, 9. Juni 2009

Verteiltes Twitter?

Wäre es nicht schön, wenn Twitter andauern funktionieren würde? Öfter haben ja die Server ausfälle und vor allem: Es ist alles zentral und nicht OpenSource.
Wäre es nicht schön, wenn man eine abgewandelte Version des XMPP/Jabber Protokolls schaffen würde, welches natürlich über eine ähnliche API anbietet wie Twitter? Dazu so verteilt, dass jeder, der eine Homepage hat dieses leicht installieren könnte.
Also, die Idee:
Jeder installiert ein paar CodeSchnipsel auf seiner Datenbankfähigen Homepage. Diese bietet die API für den eigenen Client an. Es werden die Freunde = Following eingetragen und das Skript auf dem Server frägt deren Feeds ab und gibt sie an den Client zurück. Der Client könnte natürlich auch eine WebApp sein. Keine Frage...
Da stellt sich natürlich noch die Frage: Wie werden die Freunde identifiziert?
Das könnte über die URL zu der API des jeweiligen Freundes gehen. Evtl. kann man das Protokoll noch so anreichern, dass eine Homepage mehrere Benutzer unterscheiden kann. Die URL zu der API kann dann in einem link-Tag stehen, so dass Browsererweiterungen diese autonom finden und anbieten, analog zu RSS Feeds.
Geschützt werden kann der Zugriff standardkonform via SSL.

Weiterhin kann man natürlich behaupten, dass die Homepage besonders großer Multiplikatoren (Britney Spear, Barack Obama, etc.) dadurch zu sehr ausgelastet werden. Evtl. könnte man dazu Proxies einrichten lassen die wie die Aggregatoren der RSS Feeds funktionieren und einen Packen Friends abfragen und als nicht dynamische Homepage wieder anbieten um die Datenbank zu entlasten.

Was denkt ihr? Wäre das keine gute Idee, insbesondere wenn man bedenkt dass Twitter ein Geschäftsmodell sucht und weiß Gott was daraus wird! Ein verteiltes OpenSource Twitter hätte dieses Problem nicht!

Ich freue mich über Kommentare.