Archives for posts with tag: Mac

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/Java finden 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.

Nur zur Erinnerung, damit ich es nicht mehr vergesse.

Wenn man unter Parallels XP installiert und von Mac OS X z.B. auf eine unter XP installierte Oracle-Installation zugreifen will, dann sollte man in der Windows Firewall den passenden Port auch frei schalten. Ansonsten klappt der Zugriff einfach nicht

Als Mac-Nutzer hat man von Haus aus bereits ein einfaches Versionsverwaltungssystem names Time Machine im System eingebaut. Als Entwickler wird man damit allerdings nicht zufrieden sein, wenn man die Vorteile von CVS und SVN auch in Bezug auf Vergleichsmöglichkeiten zwischen verschiedenen Versionsständen von Dateien gewöhnt ist. Ausserdem kann es passieren, dass Time Machine anfängt, ältere Versionsstände zu entfernen, wenn es auf seinem Backupmedium nicht mehr genügend Speicherplatz vorfindet.

Als Entwickler kann man sich nun einem Anbieter wie beanstalkapp.com/ anvertrauen, der für einen das Hosting eines SVN-Servers übernimmt. Allerdings kann man sich auch eine recht einfache Lösung selbst erstellen. Entwickelt man alleine und benötigt die versionierten Dateien aber doch auf mehreren Rechnern, kann man über die Nutzung von Dropbox und einer lokalen SVN-Installation eine recht einfache Lösung zusammenstellen.

Für die Lösung benötigt man einen Dropbox-Account (die freie Variante sollte erstmal genügen), die Dropbox-Clientsoftware und die Subversion-Software.

Die Dropbox-Clientsoftware bekommt man beim Serviceanbieter unter folgendem Link: https://www.getdropbox.com/downloading

Die Subversion-Software kann man über verschiedene Varianten beziehen. Ich habe mich direkt für den Download beim Supporter des Projekts, CollabNet, entschieden: http://www.open.collab.net/downloads/community/

Beide Software-Komponenten entsprechend der Anleitungen installieren.

Nun ein Finder-Fenster öffnen und das Dropbox-Verzeichnis suchen. Dort ein neues Verzeichnis erstellen in dem gleich das Subversion-Repository angelegt wird. Das Verzeichnis kann z.B. Subversion oder SVN genannt werden.

Nach dem das Verzeichnis im Dropbox-Verzeichnis angelegt wurde ein Terminal-Fenster öffnen. Im Beispiel wird angenommen, dass das Dropbox-Verzeichnis im Benutzer-Verzeichnis liegt. Um nun ein SVN-Repository anzulegen wird im Terminal-Fenster folgender Befehl eingegeben:

svnadmin create --fs-type fsfs /Users/benutzername/Dropbox/Subversion

Mit diesem Befehl wird das SVN-Repository angelegt. –fs-type fsfs muss nicht mit angegeben werden, bei den neuen Subversion-Versionen wird als Standard ein dateibasierendes Repository angelegt.

Nun hat man bereits ein SVN-Repository, welches mittels Dropbox geshared werden kann. Wie kann man nun darauf zugreifen? Nutzt man z.B. Eclipse, dann legt man für das obige Beispiel ein SVN-Repository in Eclipse mit der URL file:///Users/benutzername/Dropbox/Subversion an.

Das wars dann auch schon.

Im Folgenden wird beschrieben, wie man sich auf seinem Mac OS X System einen lokalen IMAP-Server einrichten kann und darauf ein Backup eines anderen IMAP-Accounts anlegen kann.
Benötigt wird hierzu eine installierte Version von MacPorts.org. Bitte entsprechend der Anleitung dort installieren.
Installation und Einrichtung IMAP-Server Dovecot
Ein Terminalfenster öffnen und folgendes eingeben:
sudo port install dovecot
Das Passwort für den Administrator-Account eingeben (falls kein gesonderter Administrator-Account angelegt wurde, dürfte es das Passwort des eigenen Benutzers sein) und bestätigen.
MacPorts fängt nun an, verschiedene Dateien aus dem Netz nachzuladen. Dies kann einige Minuten in Anspruch nehmen.
Nachdem die Installation abgeschlossen ist, sollte das Terminalfenster in etwa so aussehen:
Standardmässig wird keine Default-Konfiguration für Dovecot angelegt, es werden allerdings Beispiel-Konfigurationsdateien mitgeliefert. Eine dieser Beispiel-Konfigurationsdateien nutzen wir als Ausgangspunkt und kopieren sie um mit folgendem Befehl:
sudo cp /opt/local/etc/dovecot/dovecot-example.conf /opt/local/etc/dovecot/dovecot.conf
Damit ist nun eine Konfigurationsdatei für den IMAP-Server Dovecot angelegt. Allerdings muss hier noch ein klein wenig Hand angelegt werden. Zuerst legen wir aber eine Datei mit den Logindaten für einen IMAP-User an. Da bei diesem Beispiel davon ausgegangen wird, dass der IMAP-Server lokal, auf einer Single-User-Maschine laufen gelassen wird, nutzen wir die einfachste Variante mit einer Datei, in der das Passwort im Klartext abgelegt wird. Der Benutzername entspricht hierbei dem angemeldeten User (hier jochenmai):
echo “$USER:{PLAIN}geheim1234″ > passwd.dovecot
sudo mv passwd.dovecot /etc
Nun muss die eigentliche Konfigurationsdatei von Dovecot zum Editieren geöffnet werden:
sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit /opt/local/etc/dovecot/dovecot.conf
Dort kann man nun die folgenden Zeilen einfügen und hat damit eine Grundkonfiguration, die man benutzen kann:

## Dovecot configuration file

base_dir = /var/run/dovecot/
protocols = imap imaps
listen = *
disable_plaintext_auth = no
ssl_disable = yes
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail
auth default {
mechanisms = plain

passdb passwd-file {
args = /etc/passwd.dovecot
}

userdb passwd {
}

user = root
}



Die Datei im Texteditor speichern und anschliessend in einem Terminalfenster folgenden Befehl ausführen:
sudo dovecot &
Der IMAP-Server wird nun gestartet. Es kann sein, dass eine Warnmeldung, wie im folgenden Screenshot zu sehen, ausgegeben wird. Die wird aber hier einfach ignoriert.
Zum Testen des IMAP-Servers im Terminalfenster folgenden Befehl ausführen:
telnet 127.0.0.1 143
Kommt folgende Ausgabe, nimmt der IMAP-Server Verbindungen an.
Man kann im Mailclient seines Vertrauens (er muss IMAP unterstützen) ein Konto für diesen lokalen IMAP-Server aufsetzen, um den Zugriff und die Authentifizierung zu testen. Folgende Verbindungsdaten sind dabei einzutragen:
Server: 127.0.0.1
Port: 143
User: Der Benutzername, unter dem der Benutzer auf seinem lokalen System arbeitet, hier jochenmai.
Passwort: Das Passwort, welches in der Datei passwd.dovecot abgelegt wurde, hier geheim1234.
Damit sollte eine Verbindung zum IMAP-Server aufgebaut werden können.
Nun folgt der nächste Schritt, das eigentliche Backup der Mails.
Backup der Mails auf den lokalen IMAP-Server Dovecot
Zuerst muss das Paket imapsync mittels MacPorts installiert werden. In ein Terminalfenster wechseln und folgenden Befehl ausführen lassen. Dies kann wieder einige Minuten in Anspruch nehmen:
sudo port install imapsync
Nach erfolgreicher Installation sieht das Terminalfenster wie folgt aus:
Ein imapsync –help liefert einem die Ausgabe der Hilfe auf das Terminalfenster.
Die Parameter, die angegeben werden müssen, existieren, bis auf eine Ausnahme, jeweils für zwei Konten.
Ein wichtiger Parameter für die Testphase ist –dry. Hiermit wird imapsync in einen Simulationsmodus geschaltet. In diesem Modus führt imapsync keinerlei Änderungen auf den Servern durch, es zeigt nur auf, was es tun würde. Dies kann man nutzen, um einen Durchlauf erstmal im “trockenen” testen zu können.
Bei der Angabe der Verbindung- und Kontodaten wird es keine Probleme geben, allerdings wird man für beide Server die Authentifizierungsmechanismen manuell austesten müssen. Der passende Parameter für die beiden Konten lautet –authmech1 und –authmech2. Mögliche Werte für diese Parameter sind PLAIN, LOGIN und CRAM-MD5. imapsync liefert hier die entsprechenden Fehlermeldungen der IMAP-Server der Accounts zurück, so dass man anhand dessen die Parameterwerte ausprobieren kann.
Nachfolgend ein möglicher Testaufruf (–dry ist mit als Parameter aufgeführt), das Quellkonto wäre hier ein Googlemail-Account, das Zielkonto die lokale Dovecot-Installation aus der Anleitung oben. Bei Googlemail erfolgt der Zugriff mittels SSL, daher für das erste Konto noch der Parameter –ssl1. Wäre das zweite Konto über SSL zu erreichen, so müsste –ssl2 angegeben werden.
imapsync –dry –host1 imap.gmail.com –port1 993 –user1 benutzername@googlemail.com –password1 geheimespasswort –authmech1 LOGIN –ssl1 –host2 127.0.0.1 –port2 143 –user2 jochenmai –password2 geheim1234 –authmech2 PLAIN
Mit diesem Aufruf fängt imapsync an, sich gegen beide Server anzumelden und die vorhanden Verzeichnisse zu analysieren. Sind alle Verzeichnisse analysiert, wird der Abgleich durchgeführt (hier aber nur als Textausgabe, die eigentliche Kopieraktion zwischen beiden Konten wird aufgrund von –dry nicht ausgeführt).
Sehen die Log-Ausgaben soweit gut aus, kann man den Aufruf ohne –dry starten und die Mailnachrichten von Account 1 zu Account 2 kopieren lassen.

Posted via email from maicoda

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.

Gestern per Zufall rausgefunden, auf einem aktuellen Macbook Pro (meines ist ein 17″ MC226*/A) kann man mit dem iPhone Headset iTunes steuern, anscheinend analog zur Steuerung von iTunes im iPhone. Nett!

Ok, schon länger bekannt, ich wusste es bisher nicht. Ausserdem hatte ich bisher nicht ein neueres Macbook Pro Modell zur Verfügung.

Von meinem maiPhone gesendet

Posted via email from dermaister’s posterous

Von meinem maiPhone gesendet

Posted via email from dermaister’s posterous