Archives for category: Uncategorized

Ich hoffe mal, der Pilot hat Glück gehabt….

Growl ist DAS Benachrichtigungssystem unterm Mac, wenn es darum geht, dem Nutzer über neue Mails, abgeschlossene Downloads oder neue Chatnachrichten zu informieren. Was ich bisher nicht wusste, man kann Growl auch über Java ansteuern und entsprechende Benachrichtigungen an Growl schicken.

Ich zeige anhand eines klitzekleinen Beispielprogramms, wie man Growl nutzen kann.

Zuerst muss man sich das SDK von http://growl.info/downloads_developers.php herunter laden. Darin enthalten ist die API-Dokumentation und eine Klasse (com.growl.Growl), die den Zugriff auf Growl wrappt. Falls das heruntergeladenen DMG nicht automatisch gemountet wird, dies nun machen. Unter Bindings/Javafinden sich die für Java-Entwickler interessanten Dateien. Im Verzeichnis Bindings/Java/docs befindet sich die API-Dokumentation, die kann man sich lokal kopieren, ist aber nicht unbedingt notwendig. Unter Bindings/Java/Source befindet sich die Wrapper-Klasse für Growl, diese wird gleich benötigt.

In der IDE seines Vertrauens erstellt man nun ein neues Java-Projekt. In das Source-Verzeichnis kopiert man die Growl-Klasse (aus Bindings/Java/Source) inklusive der Verzeichnisse, also com markieren und per Copy & Paste ins Sourceverzeichnis kopieren. Im Normalfall sollte die IDE jetzt meckern, dass sie die Klassen und Packages (com.apple.cocoa…), die im Import-Teil der Growl-Klasse stehen, nicht auflösen kann. Dazu muss in den Klassenpfad des Projektes noch folgendes Verzeichnis mit aufgenommen werden: /System/Library/Java. Nun sollte es keinen Fehler mehr geben, die Import-Anweisung dürften aber noch markiert sein, da die verwendeten Klassen laut Apple deprecated sind.

Growl zeigt bei den Benachrichtigungen noch ein Symbol an, dies sollte in der Regel das Symbol der Anwendung sein, die die Benachrichtigung an Growl sendet. Dazu ist es in unserem kleinen Beispiel notwendig, eine PNG-Grafik mit 32 x 32 Pixeln zu erstellen. Im Codebeispiel wird angenommen, die Grafik ist über folgenden Pfad auf dem System erreichbar: /image/GrowlTest.png.

Hier nun das Codebeispiel, anschliessend noch ein paar Erklärungen zum Code:

package de.yellowshoes.growl.example;
import com.growl.Growl;
public class GrowlExample
    {
    public static void main(String[] args) throws Exception
        {
        String GROWL_EXAMPLE_NOTIFY_01 = "ExampleNotification_01";
        String[] notifications = { GROWL_EXAMPLE_NOTIFY_01 };
        Growl growl = new Growl( "MyApp", notifications, notifications );
        growl.register();
        growl.notifyGrowlOf( GROWL_EXAMPLE_NOTIFY_01, "Ein Beispiel", "Hier steht die Beschreibung des Events" );
        growl.notifyGrowlOf( GROWL_EXAMPLE_NOTIFY_01, "/image/GrowlTest.png", "Zweites Beispiel", "Und noch eine Beschreibung" );
        }
   }

Die Variable GROWL_EXAMPLE_NOTIFY_01 bezeichnet einen möglichen Benachrichtigungsevent, der von Seiten der Applikation an Growl geschickt werden kann. Bei der Initialisierung der Wrapperklasse (Growl growl = new Growl….) übergibt man zuerst den Namen der Applikation (MyApp), die die Benachrichtigungen an Growl schicken wird, anschliessend einen Array mit allen möglichen Benachrichtigungsevents der Applikation und als dritten Parameter ein Array mit allen Benachrichtungsevents, die per default aktiviert sein sollen.

Das Abschicken der Benachrichtigungsevents (growl.notifyGrowlOf….) sollte eigentlich selbsterklärend sein. Der Unterschied besteht hier darin, das beim zweiten Aufruf das eigene Symbol mit angezeigt wird.

import oracle.jdbc.driver.OracleConnection
import groovy.sql.Sql
import java.sql.DriverManager
OracleConnection connectionSource = DriverManager.getConnection(
'jdbc:oracle:thin:@server:1521:SID', 'username', 'password' )

def dbHandleSource = new Sql( connectionSource )

def produktSourceSet = dbHandleSource.dataSet( 'PRODUKT' )
produktSourceSet.each
   { produkt ->  
   println produkt.id + ', ' + produkt.name  
   }

Im Beispiel mit Zugriff auf eine Oracle-DB. Der passende Oracle-Treiber muss im Classpath mit eingebunden sein.

import oracle.jdbc.driver.OracleConnection
import groovy.sql.Sql
import java.sql.DriverManager
Class.forName ("oracle.jdbc.OracleDriver")
OracleConnection connection = DriverManager.getConnection(
'jdbc:oracle:thin:@server:1521:SID', 'username', 'password' )
def dbHandleSource = new Sql( connection )
dbHandleSource.eachRow( 'SELECT * FROM PRODUKT' )
   { produkt ->
   println produkt.id + ', ' + produkt.name
   }

Zur Terminfindung habe ich wieder ein Doodle (http://www.doodle.com/dh3yskz23r93926t) aufgemacht.

Ziel ist diesesmal “Zum Eichkatzerl” (http://www.eichkatzerl.de/ ).

Die Stimmen zur Terminfindung koennen bis 10.06.2010 abends abgegeben werden, entsprechend werde ich dann wieder reservieren.

Gruss, Jochen

Posted via web from Frankfurter Schnitzel

We’ve been tracking super-simple publishing service Posterous

for quite a while now, and for the most part they’ve turned us into big fans. Unfortunately, they’ve just committed a fairly serious blunder. In a post earlier today, one Posterous user stumbled

across the fact that his site was automatically converting all of his links to affiliate links using VigLink

. There isn’t anything sinister about VigLink — the service helps publishers generate revenue without having to manually insert affiliate links themselves, and has received funding from Google Ventures, First Round Capital, and some prominent angel investors. But Posterous neglected to inform its users that it was starting to monetize all of their links, which is a breach of user trust.

Co-founder Sachin Agarwal agrees — in a phone interview he conceded that Posterous should definitely have informed users about the change (they’re currently drafting a statement about the incident). Agarwal says that Posterous has actually been testing the VigLink integration for months, which means the links have gone unnoticed for quite a while. But he says it’s just an experiment, and that Posterous hasn’t decided if it’s going to be keeping them in the long-term (though he agrees they should have informed users regardless).

Agarwal also says that if Posterous does wind up permanently integrating VigLink, users won’t have to take part in the program. And there’s an upside: once they’ve built the infrastructure to support it, Posterous has plans to allow its users to generate revenue from links on their own blogs, which could actually drive more people to start using the publishing platform.

It’s worth pointing out that while VigLink will convert any normal links to affiliate links whenever possible, it will ignore any links that are already connected to affiliate programs (in other words, it doesn’t overwrite existing affiliate links).

Posterous image

Website: posterous.com
Location: San Francisco, California, United States
Founded: May, 2008
Funding: $5.14M

Posterous is a Y Combinator startup that was founded in mid 2008. It’s a simple web publishing platform via email. Text and files can be uploaded to the site via email.

Users are not required to create an account… Learn More

Information provided by CrunchBase

Oha, hat das schon jemand bei seinem Posterous-Account festgestellt?

Posted via web from dermaister’s posterous

Zur Terminfindung habe ich wieder ein Doodle (http://doodle.com/f7i7r9nwrp7bchf2) aufgemacht.

Ziel ist diesesmal “Zum Eichkatzerl” ( http://www.eichkatzerl.de/ ).

Die Stimmen zur Terminfindung können bis 29.03.2010 abends abgegeben werden, entsprechend werde ich dann wieder reservieren.

Bis zum nächsten Schnitzel :-)

Gruss, Jochen

Posted via email from Frankfurter Schnitzel

Von meinem maiPhone gesendet

Posted via email from dermaister’s posterous

Zur Terminfindung habe ich wieder einen Doodle (http://doodle.com/fwmhkr2ekavmtuve) aufgemacht.

Es geht dieses Mal ins Schöneberger (http://www.schoene-berger.de/) auf der Berger Strasse.

Die Stimmen zur Terminfindung können bis zum 29.01. abends abgegeben werden.

Bis zum nächsten Schnitzel! :-)

Gruss, Jochen

Posted via email from Frankfurter Schnitzel