Eclipse RCP

Eclipse RCP ermöglicht es, schnell und einfach Anwendungen zu erstellen. Bei der RCP Version von Eclipse sind auch einige Beispiele dabei, welche z.B. eine “Hello World” RCP Anwendung erstellen, auch mit Menü wenn man weitere Beispiel auswählt. Ein gutes Eclipse RCP Tutorial im Internet ist von “Lars Vogel”. Dies beschreibt den Aufbau einer kompletten RCP Anwendung. Zu finden ist es unter http://www.vogella.de/articles/EclipseRCP/. Darüber hinaus hat er noch mehr Beiträge zu diesem Thema unter Vogella Eclipse. Auf der Eclipse Seite selbst, gibt es im Wiki weitere gute Hilfen und Howtos. Unter SaxonySoft gibt es drei Beiträge zu StatusLeiste, ComboBox und Listener von Sebastian Würkner. Unter http://www.ralfebert.de/blog/eclipsercp/rcp_examples/ findet ihr eine Liste von Eclipse RCP Anwendungen mit Quellcode.

OpenExpo CH Bern 2010 - Vorträge verfügbar

Referatsfolien als PDF verfügbar und Vorträge auf Youtube verfügbar

Die Vorträge sind wie auch 2008 und 2009 als PDF und auf Youtube verfügbar (Vorträge als PDF). Unter den Vorträgen waren dieses Jahr wieder viele interessanten Themen. Aktuelle Infos und Informationen zur nächsten OpenExpo findet ihr hier. Der Youtube OpenExpo channel ist unter http://www.youtube.com/openexpo?gl=DE&hl=de#p/a erreichbar.

PHP Dateien automatisch einbinden

Der folgende Code ermöglicht es, PHP Dateien automatisch einzubinden. Dadurch ist es möglich, automatisch eine PHP Datei einzulesen, wenn diese in ein Order kopiert wird. Der folgende Code durchsucht dabei alle Dateien und Ordner aus dem Wurzelverzeichnis. Gibt man der Konstanten “PFAD” einen anderen Wert, werden nur die darin enthaltenen Dateien und Unterordner durchsucht.

if($path_parts[‘extension’] == “php” &&
$path_parts[‘filename’]!=”core” &&
$path_parts[‘filename’]!=”index” &&
$path_parts[‘filename’]!=”config”)

Diese Zeile berücksichtigt die Dateien “core.php”, “index.php” und “config.php” nicht. Dies ist notwendig, damit die Datei in der sich der Code befindet nicht selbst aufruft oder durch eine andere Datei aufgerufen wird, in der sie als include steht.

# Bitte editieren
define(“PFAD”, ‘C:\xampp\htdocs\meinprojekt’);

##########################
#
#
# Inlcudes der Anwendung
#
function readFiles($paths) {
$verzeich=opendir ($paths);
while ($file = readdir ($verzeich)) {
if($file == “.” || $file == “..” || $paths.”/“.$file == “/.” || $paths.”/“.$file == “/..”) {
continue;
}
if(is_dir($paths.”/“.$file)!=1) {
$path_parts = pathinfo($file);
if($path_parts[‘extension’] == “php” && $path_parts[‘filename’]!=”core” && $path_parts[‘filename’]!=”index” && $path_parts[‘filename’]!=”config”) {
$name = $paths.”/“.$file;

            include($name);
        }
    } else {
        readFiles($paths."/".$file);
    }
}
closedir($verzeich);

}
$verz=’.’;
readFiles(PFAD);

Termine von EGroupware automatisch in Drupal einbinden

Um Termine von Egroupware in Drupal automatisch anzuzeigen, werden folgende Dinge benötigt:

Und die folgenden Drupal Plugins:

  • CCK
  • Views
  • FeedAPI
  • FeedAPI Mapper
  • Date, Calendar
  • iCal parser (Version 1.1, Version 2.0 benötigt eine andere Feed API und funktioniert daher nicht)

Einstellungen für EGroupware Für das exportieren des Kalenders aus EGr oupware wird das Modul “iCalSrv” benötigt. Es erstellt unter “http://domain.de/egroupware/icalsrv/icalsrv.php/username/events.ics" automatisch eine ics Datei. Der Pfad “http://domain.de/egroupware/" ist abhängig von der EGroupware Installation. Automatisches kopieren per Cronjob Das folgende Skript kopiert die icsDatei automatisch in das Verzeichniss der Webseite.

#
# Author: Tobias Gafner
#
# Copy Event ics from Egroupware

# Verzeichniss oeffnen
# PFAD HIER EINTRAGEN TODO
cd /srv/www/vhosts/…../

#alte datei deleten
rm events.ics

#neue holen
wget http://domain.de/egroupware/icalsrv/icalsrv.php/usernamehier/events.ics –http-user=usernamehier –http-passwd=passworthier

Die Zeile “/srv/www/vhosts/…../“ muss durch den Ort ersetzt werden, an dem die ics Datei auf der Webseite liegen soll. Die Webadresse muss ebenfalls angepasst werden. Durch die Angabe von user und passwd kann sich wget auf die gesicherte Seite einloggen. Daher muss usernamehier und passworthier ebenfalls ersetzt werden. Dabei entsprechenden die beiden Angaben, der Zugangsdaten von EGroupware. Danach muss unbedingt noch ein entsprechender Cronjob erstellt werden, welcher die sh Datei mit “sh /home/Order1/Order2/event.sh” aufruft. Dabei kann die Zeit z.B. auf alle 14 Minuten gestellt werden. Dadurch wird der Kalender bei einer Drupal Feed Aktualisierung von 15 Minuten, mindestens 1x davor aktualisiert. Die Crontab Einstellung für diesen Cronjob würde daher dann so aussehen: /13 * sh /…..event.sh Drupal Einstellungen Zuerst müssen die Plugins installiert werden und die Anleitung unter http://drupal.org/node/341716 befolgt werden. Der Pfad zur ics Datei kann dann z.B. http://domain.de/events.ics sein. Dazu muss dieser Ort aber im Shell Skript zum kopieren der ICS Datei angegeben werden. Die Minimale Refresh Periode kann dann auf 15 Minuten gesetzt werden. Probleme mit Zeitzonen Sollte der Export aus Egroupware eine falsche Zeitzone aufweisen, kann man mithilfe von folgender Java Klasse und Shell-Skript die Zeit entsprechend bearbeiten. Die Java Klasse addiert 2 Stunden zu jedem Termin hinzu. Durch das editieren der Variable timeadd kann dabei die Zeit erhöht oder reduziert werden. Wichtig ist, dass im Inhaltstyp Datum bei Drupal unter “Startseite » Verwalten»Inhaltsverwaltung » Datum” die Zeitzonenbehandlung auf “UTC” steht. Dies kann man durch klicken auf “Konfigurieren” ändern. In beiden Skripten müssen Pfade und Dateinamen entsprechend der eigenen Gegebenheiten editiert werden. Die Java Klasse kann auf jede Shell mit folgendem Code compiliert werden:

javac Start.java

Das Shell Skript wird dann anstatt des oben erwähnten Shell Skriptes verwendet:

#
# Author: Tobias Gafner
#
# Copy Event ics from Egroupware

cd /…/ #Pfad vo die Shell Datei liegt
wget http:/domain.de/egroupware/icalsrv/icalsrv.php/benutuzername/events.ics –http-user=benutzername –http-passwd=passwort

java Start
rm events.ics
cd /srv/www/vhosts/…/httpdocs/
rm events.ics
cp /…/eventr.ics /srv/www/vhosts/…/httpdocs/
mv eventr.ics events.ics
rm /…/eventr.ics

Die Java Klasse dazu sieht folgendermaßen aus:

/*
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
* @author tobi
/
public class Start {

/\*\*
 \* @param args
 */
public static void main(String\[\] args) {

    int timeadd = 2;
    //
    // Ausgabestrom in Datei erzeugen
    //
    // Eine lokale Ausgabedatei in eine Instanz in File kapseln.
    File ausgabeDatei = new File("eventr.ics");
    // FileWriter erzeugen.
    FileWriter fw;
    BufferedReader in;
    try {
        in = new BufferedReader(new FileReader("events.ics"));
        fw = new FileWriter(ausgabeDatei);
        // Den FileWriter in einem BufferedWriter verpacken.
        BufferedWriter bw = new BufferedWriter(fw);
        //
        // Zeilenweise einlesen
        //
        String zeile = in.readLine();
        while (zeile != null) {
            if (zeile.contains("DTSTART") || zeile.contains("DTEND")) {
                int pos = zeile.lastIndexOf("T");
                String time = zeile.substring(pos + 1, pos + 3);
                int stunde = Integer.valueOf(time);
                stunde += timeadd;
                boolean flag = false;
                GregorianCalendar cal = new GregorianCalendar();
                if (stunde > 23) {

                    int year = Integer.valueOf(zeile.substring(pos - 8,
                            pos - 4));
                    int month = Integer.valueOf(zeile.substring(pos - 4,
                            pos - 2));
                    int day = Integer
                            .valueOf(zeile.substring(pos - 2, pos));
                    cal.set(year, month-1, day);
                    cal.add(Calendar.DAY\_OF\_YEAR, +1);
                    stunde -= 24;
                    flag = true;
                }
                String newTime = String.valueOf(stunde);
                if (newTime.length() == 1)
                    newTime = "0" + newTime;
                String zeile2 = "";
                if (!flag) {
                    zeile2 = zeile.substring(0, pos + 1) + newTime
                            \+ zeile.substring(pos + 3);
                } else {
                    String month = String.valueOf(cal.get(Calendar.MONTH)+1);
                    String day = String.valueOf(cal.get(Calendar.DAY\_OF\_MONTH));
                    if (month.length() == 1)
                        month = "0" + month;
                    if (day.length() == 1)
                        day = "0" + day;
                    String endnewTime = cal.get(Calendar.YEAR)+month+day+"T"+newTime;
                    zeile2 = zeile.substring(0, pos -8) + endnewTime
                            \+ zeile.substring(pos + 3);

                }
                bw.write(zeile2);
            } else {
                bw.write(zeile);
            }
            bw.newLine();
            zeile = in.readLine();
        }
        in.close();
        bw.close();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

Email Adresse Verschlüsseln

Wenn die Email Adresse direkt auf eine Webseite geschrieben wird, erhöht sich die Spam Flut. Um das zu verhindern, gibt es Möglichkeiten die Mail Adresse zu verschlüsseln. Hier einige Anbieter die entsprechende Tools anbieten: http://www.antispam.de/index.php?topic=encoder http://www.e-mail-adresse-verschluesseln.de/ http://www.onsite.org/html/antispam_email.html Alternativ kann das AT Zeichen auch als Bild eingefügt werden oder in Klammern gesetzt werden. Durch das ersetzten mit einer Grafikkarte, ist ein mailto Funktion aber nicht mehr möglich. Die beste Alternative ist daher ein Formular. Dadurch ist die Adresse für den Anwender nicht sichtbar und er kann ohne eigenes Email Programm eine Nachricht versenden.

Möglichkeiten mit der Wordpress wp_list_pages() Funktion

Mit der Funktion “wp_list_pages” kann man die Seiten in Wordpress ausgeben und durch Paramater in der Funktion diese Ausgabe auf verschiedene Art und Weise verändern:

$navi = wp_list_pages(‘echo=00&title_li=&child_of=’.$post->ID.’’);

Damit werden alle Seiten, welche als “Parent” die aktuelle Seite haben (“$post->ID”) ausgegeben. Die aktuelle Seite kann man durch folgenden aufruf erhalten:

if(is_page())
$post = get_post($wp_query->post->ID);

Durch das Objekt $post kann man aber auch auf den Parent der aktuellen Seite zugreifen:

$navi2 = wp_list_pages(‘echo=0&title_li=&child_of=’.$post->post_parent.’’);

Bei $navi2 werden alle Kinder vom Parent der aktuellen Seite ausgegeben. Eine ausführliche Beschreibung der Möglichkeiten der Funktion wp_list_pages() findet ihr unter http://codex.wordpress.org/Template_Tags/wp_list_pages.

NETGEAR PS110 unter Windows 7 installieren

Für den Netgear PS110 wird im gegensatz zu Windows XP bei Windows7 ein anderes vorgehen benötigt. Da der Anschluss des PrintServers nicht mehr durch die Software erstellt werden kann. Zuerst muss die LPT Warteschlange in Windows aktiviert werden und danach der “Drucker hinzufügen” Wizard aufgerufen werden . Dort wählt man einen Lokalen Drucker und dann neuer Anschluss “Standart TCP/IP Port”. Im nächsten Fenster muss dann die IP des Printservers angegeben werden. Bei Anschlussname wird der Port eingetragen (P1, P2, …) oder ein beliebiger anderer Name. Im darauf folgendem Fenster wird “Benutzerdefiniert” angeklickt. Dann muss auf “Einstellungen” geklickt werden und das Protokoll “LPR” ausgewählt werden. Die Warteschlange erhält dabei den Namen des Ports. Nach dem klick auf Weiter kommt die Auswahl des Druckertreibers. Hier ist bei Windows 7 x64 besonders folgende Seite bei HP Drucker zu beachten: http://h10025.www1.hp.com/ewfrf/wc/document?lc=de&dlc=de&cc=de&docname=c01904106 Nach der Auswahl des richtigen Treibers, normalerweise sollten alle Treiber per Windows Update gefunden werden, ist die Installation des Druckers abgeschlossen.