Posted: Juli 23rd, 2010 | Filed under: Allgemein | Tags: FaucetLight, kostenlos | No Comments »
GetDigital haut wieder tolle sachen raus. Einfach hier nachlesen .
GetDigital Geburtstagsgeschenke
Posted: Juli 19th, 2010 | Filed under: Programmieren | Tags: HTML Sonderzeichen Decoder, htmlentities, Java, java htmlentities, PHP, unhtmlentities | No Comments »
Bei diversen Projekten habe ich schon öfters auf eine sehr hilfreiche JAVA Klasse zugreifen müssen. Diese funktioniert wie in PHP. Die HTMLEntities Methode wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um. Die Klasse kann natürlich noch viel mehr, ihr könnt sie euch hier herunterladen, http://sourceforge.net/projects/htmlentities.
Posted: Juli 18th, 2010 | Filed under: Software | Tags: Facebook, Firefox, ICQ, ICQ Alternative, Instantbird, Multimessenger, XULRunner | No Comments »
Heute möchte ich euch mal Instantbird vorstellen. Instantbird ist ein Multimessenger der auf Mozillas Entwicklungsumgebung XULRunner und der offenen Bibliothek libpurple (pidgin) basiert. Der Aufbau des Messengers ist relativ einfach, aber mir gefällt das.
Unterstützte Protokolle
Instantbird unterstützt nahezu jedes gewünschte Protokoll.
- ICQ
- AIM
- IRC
- Yahoo!
- Google Talk
- MSN
- Facebook
- MySpaceIM
- MobileMe
- SILC
- IBM Lotus Sametime
- SIMPLE
- …
Aussehen
Freundesliste
Chat Fenster
Plugins
Besonders gut bei diesem Messenger gefällt mir das Pluginsystem, welches dem vom Firefox gleich kommt. Ein absolutes Plus gegenüber Miranda.
Plugin Verwaltung
Fazit
Ein Blick auf Instantbird zu werfen ist auf jeden Fall gerechtfertigt. Der Messenger hat viel Potenzial nach oben, leider werde ich erstmals doch noch bei Miranda bleiben weil ich eine gewünschte Hotkey Funktion vermisst habe.
Posted: Juli 17th, 2010 | Filed under: Internet, Software | Tags: Adium, Clienten, Digsby, ICQ, ICQ Alternative, icq2go, imo, Instantbird, kopete, Linux, Mac, meebo, Miranda, Online, pidgin, qip, Trillian, Windows | 14 Comments »
Clienten mit ICQ Unterstützung!
Ihr sucht eine ICQ Alternative, bittschön. Hier einige Clienten die sogar noch einiges mehr können als nur das ICQ Protokoll. Viele von den aufgelisteten Clienten sind Multimessenger und unterstützen zum Beispiel Protokolle wie: AIM, Jabber, IRC, Skype, MSN, Google Talk, Yahoo, Facebook, Twitter und viele mehr.
Windows
ICQ – icq.com
Miranda – miranda-im.org
Instantbird – instantbird.com
digsby – digsby.com
pidgin (ehmalig GAIM) – pidgin.im
qip – http://qip.ru
Trillian – ceruleanstudios.com
ysm – ysmv7.sourceforge.net
AIM (AOL) – aim.com
GMX Multimessenger – service.gmx.net/de/cgi/g.fcgi/products/messenger
WEB.DE MultiMessenger – produkte.web.de/messenger
SIM IM – sim-im.org
&RQ – rejetto.com/&RQ
Unix, Linux, BSD
pidgin (ehmalig GAIM) – pidgin.im
kopete – kopete.kde.org
ysm – ysmv7.sourceforge.net
climm – climm.org
SIM IM – sim-im.org
Instantbird – instantbird.com
Mac OS X
Adium – adiumx.com
iChat – apple.com/support/ichat
Proteus – proteusx.org
Fire – fire.sourceforge.net
Instantbird – instantbird.com
Online Clienten
imo – https://imo.im
icq2go (Flash/Java/Webbased) – http://www.icq.com/download/webicq/de
meebo – meebo.com
im+ – plus.im
Habt ihr noch einen? Dann postet sie in den Comments 🙂
Posted: Juli 16th, 2010 | Filed under: Internet, Programmieren, Tutorials | Tags: Beispiel, JAVA SAX Beispiel, JAVA SAX Tutorial, SAX, SAX Parser, XML Parsen | 20 Comments »
„Simple Api for XML“ (SAX) ist eine API zum Parsen(analysieren) von XML-Dateien. Ursprünglich wurde SAX in Java geschrieben ist mittlerweile aber auch in anderen Sprachen verfügbar.
Ich möchte hier ein kleines Beispiel geben um euch zu zeigen wie ihr, in der Praxis, den SAX-Parser benutzen könnt.
Angenommen ihr bekommt eine XML-Datei vorgelegt und sollt alle Personen in einer ArrayList abspeichern. In der XML-Datei befindet sich folgender Inhalt.
XML-Beispiel-Datei
Person.java
Das Personen Objekt repräsentiert eine Person in der XML-Beispiel Datei und dient lediglich als Datenhaltung für die Informationen.
package parser;
import java.util.Date;
public class Person {
private int id;
private String name;
private String vorname;
private Date geburtsdatum;
private String postleitzahl;
private String ort;
public Person() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public Date getGeburtsdatum() {
return geburtsdatum;
}
public void setGeburtsdatum(Date geburtsdatum) {
this.geburtsdatum = geburtsdatum;
}
public String getPostleitzahl() {
return postleitzahl;
}
public void setPostleitzahl(String postleitzahl) {
this.postleitzahl = postleitzahl;
}
public String getOrt() {
return ort;
}
public void setOrt(String ort) {
this.ort = ort;
}
@Override
public String toString() {
return "[[" + this.id + "] ["+ this.name + "] [" + this.vorname + "]" + " [" + this.ort
+ "] [" + this.postleitzahl + "] [" + this.geburtsdatum + " ]]";
}
} |
Main.java
Im Folgenden sieht man sehr gut wie man einen XMLReader initialisieren muss. Es besteht sogar die Möglichkeit dem SAX Parser eine DTD zu übergeben. Dies wurde aber in meinem Beispiel einfachheitshalber auskommentiert. Die eigentliche implementierung der SAX Parser Logik steckt jedoch im ContentHandler, dieser folgt anschließend.
package parser;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.XMLReaderFactory;
public class Main {
public static void main(String[] args) {
try {
// XMLReader erzeugen
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
// Pfad zur XML Datei
FileReader reader = new FileReader("X:\\personen.xml");
InputSource inputSource = new InputSource(reader);
// DTD kann optional übergeben werden
// inputSource.setSystemId("X:\\personen.dtd");
// PersonenContentHandler wird übergeben
xmlReader.setContentHandler(new PersonenContentHandler());
// Parsen wird gestartet
xmlReader.parse(inputSource);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}
}
|
PersonenContentHandler.java
Beim Parsen der XML-Datei werden die jeweiligen ContentHandler Funktionen aufgerufen.
package parser;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
public class PersonenContentHandler implements ContentHandler {
private ArrayList<Person> allePersonen = new ArrayList<Person>();
private String currentValue;
private Person person;
// Aktuelle Zeichen die gelesen werden, werden in eine Zwischenvariable
// gespeichert
public void characters(char[] ch, int start, int length)
throws SAXException {
currentValue = new String(ch, start, length);
}
// Methode wird aufgerufen wenn der Parser zu einem Start-Tag kommt
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
if (localName.equals("person")) {
// Neue Person erzeugen
person = new Person();
// Attribut id wird in einen Integer umgewandelt und dann zu der
// jeweiligen Person gesetzt
person.setId(Integer.parseInt(atts.getValue("id")));
}
}
// Methode wird aufgerufen wenn der Parser zu einem End-Tag kommt
public void endElement(String uri, String localName, String qName)
throws SAXException {
// Name setzen
if (localName.equals("name")) {
person.setName(currentValue);
}
// Vorname setzen
if (localName.equals("vorname")) {
person.setVorname(currentValue);
}
// Datum parsen und setzen
if (localName.equals("geburtsdatum")) {
SimpleDateFormat datumsformat = new SimpleDateFormat("dd.MM.yyyy");
try {
Date date = datumsformat.parse(currentValue);
person.setGeburtsdatum(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
// Postleitzahl setzen
if (localName.equals("postleitzahl")) {
person.setPostleitzahl(currentValue);
}
// Ort setzen
if (localName.equals("ort")) {
person.setOrt(currentValue);
}
// Person in Personenliste abspeichern falls Person End-Tag erreicht
// wurde.
if (localName.equals("person")) {
allePersonen.add(person);
System.out.println(person);
}
}
public void endDocument() throws SAXException {}
public void endPrefixMapping(String prefix) throws SAXException {}
public void ignorableWhitespace(char[] ch, int start, int length)
throws SAXException {}
public void processingInstruction(String target, String data)
throws SAXException {}
public void setDocumentLocator(Locator locator) { }
public void skippedEntity(String name) throws SAXException {}
public void startDocument() throws SAXException {}
public void startPrefixMapping(String prefix, String uri)
throws SAXException {}
}
|
Ausgabe
Nach dem durchlaufen des SAX Parsers befinden sich nun alle Personen in der ArrayList allePersonen.
[[1] [Mustermann] [Max] [Bierdorf] [54321] [Fri Nov 25 00:00:00 CET 1983 ]]
[[2] [Müller] [Petra] [Bierdorf] [76543] [Fri Apr 13 00:00:00 CEST 1990 ]]