Entries tagged as java
Related tags
android code computer google gui jabber linux&unix misc mobile opensource presentation programming screenshot sdk shortys software video web webdesign xml feedreader html markup rss ruby scala stuff swing tool webwide windows xslt bad world blog blogging browser captcha changes cheatsheet comic contentmanagement css dns encryption firefox fun hardware howto im javascript life lighttpd mail media murphy networking newsbeuter picture podcast politics privacy psi regular expression s9y security server spam subnetting tail -f /var/log/life test truecrypt wordpress zeitgeist perl conference dslr nikon photography coffee free science tv 1 2Medianight
Morgen, am Donnerstag den 02.07.2009 wird an meiner Hochschule wieder die Medianight stattfinden. Hier werden die Studenten ihre Projekte des letzten Semesters praesentieren. Ich werde dort unter anderem mit meinem eigenen Projekt am Start sein.
YAXIM
Wie schon zuvor gesagt, werde ich zusammen mit Chris unser Semesterprojekt, das den Namen YAXIM traegt, vorstellen. YAXIM steht fuer "Yet Another XMPP Instant Messenger" und ist ein Jabberclient fuer die Android-Plattform. Als kleinen Vorgeschmack folgen hier noch unsere Folien und das Video der heutigen Praesentation:
Wie bei manchen anderen Kleinigkeiten haben sich bei mir ein paar der Tools aus dem Android-SDK geweigert auf meinem 64Bit Arch Linux zu starten. Anscheinend fehlten ein paar Bibliotheken. Ich versuche hier mal zusammenfassend zu beschreiben, wie ich es zum laufen bekommen habe.
SDK installieren
Da das PKGBUILD aus dem User-Repository zum einen keine Abhaengigkeiten enthaellt und zum anderen nicht aktuell ist, habe ich mich dazu entschlossen eine modifizierte Version zu verwenden:
PKGBUILD
pkgname=android-sdk
pkgver=1.5_r2
pkgrel=1
pkgdesc="Google Android SDK"
arch=('i686' 'x86_64')
url="http://code.google.com/android/"
license=('custom')
if [ "$CARCH" = "x86_64" ]; then
depends=('jre' 'lib32-libstdc++5' 'lib32-libx11' 'lib32-ncurses' 'lib32-zlib' 'lib32-sdl' 'lib32-libxext' 'swt')
else
depends=('jre')
fi
source=(http://dl.google.com/android/android-sdk-linux_x86-$pkgver.zip \
android.sh)
md5sums=('1d3c3d099e95a31c43a7b3e6ae307ed3' 'e7f23c39d02a3a280c746f7398bf5114')
build() {
mkdir -p $pkgdir/opt && \
mkdir -p $pkgdir/etc/profile.d && \
mv $srcdir/android-sdk-linux_x86-$pkgver $pkgdir/opt/android-sdk && \
cp $srcdir/android.sh $pkgdir/etc/profile.d && \
rm $pkgdir/opt/android-sdk/tools/lib/libswt* && \
cp /usr/lib/libswt-* $pkgdir/opt/android-sdk/tools/lib && \
cp /usr/share/java/swt.jar $pkgdir/opt/android-sdk/tools/lib && \
cd $pkgdir/opt/android-sdk && \
find -type d -exec chmod 755 \{\} \; && \
find -exec chmod +r \{\} \; && \
chmod +x $startdir/pkg/etc/profile.d/android.sh
}
Wie man sieht, werden die *swt*-Komponenten des SDK durch native 64Bit Versionen ersetzt. Darum ist es auch notwendig zuvor das SWT-Paket zu installieren.
android.sh
#!/bin/sh
export PATH=$PATH:/opt/android-sdk/tools
Installation
Das Erstellen und Installieren des Pakets kann nun wie gewohnt mit makepkg vorgenommen werden. Mit diesem Setup sollten dann auch die Tools fuer Eclipse wieder wie gewohnt laufen.
Ein Kommilitone von mir hat heute die Ergebnisse seines letzten Semesterprojekts oeffentlich gemacht. Darum moechte ich hier mal etwas Werbung fuer das coole Projekt machen:
camstick is a symbiosis of camera and joystick to symbolize you that you can not only use your webcam for simple video chats but for interacting with your computer using your webcam. Camstick is started as a project work of mine at the Stuttgart Media University. Now i want to share my result with you!
Da ich gerade an einem Projekt arbeite, dass XMPP auf Java verwendet, hab ich mir zu Testzwecken eine Klasse gebaut, die Smack verwendet und ein paar Moeglichkeiten der API nutzt. Es ist unter anderem moeglich sich zu verbinden, das Roster auszulesen und empfangene Nachrichten anzuzeigen. Da mir bei der offiziellen Dokumentation Beispiele gefehlt haben, die man auf einen Rutsch kopieren und bearbeiten kann, moechte ich hier ein wirklich lauffaehiges Beispiel veroeffentlichen. Ich hoffe, damit kann jemand was anfangen:
import java.util.Collection;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterListener;
import org.jivesoftware.smack.SASLAuthentication;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketTypeFilter;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.packet.Packet;
import org.jivesoftware.smack.packet.Presence;
public class SmackTester {
private XMPPConnection conn;
private String username;
private String password;
private String server;
public SmackTester() {
// debug option
XMPPConnection.DEBUG_ENABLED = false;
username = "einuser";
password = "einpasswort!";
server = "jabber.foo.bar";
makeConn();
doConnect();
makeRoster();
chatAction();
// wait ... (I know that's pretty ugly)
while (conn.isConnected()) {
try {
Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// nothing interesting here
public static void main(String[] args) {
new SmackTester();
}
private void doConnect() {
// let's connect
try {
conn.connect();
conn.login(username, password, "someRessource");
} catch (XMPPException e) {
System.err.println("Login failed!");
e.printStackTrace();
System.exit(1);
}
System.out.println("Login succesful!");
}
private void makeConn() {
ConnectionConfiguration config = new ConnectionConfiguration(server,
5222);
// pass some connection options
config.setSASLAuthenticationEnabled(true);
SASLAuthentication.supportSASLMechanism("PLAIN", 0);
conn = new XMPPConnection(config);
}
private Roster makeRoster() {
Roster roster = conn.getRoster();
Collection<RosterEntry> entries = roster.getEntries();
// print out all entries in roster
System.out.println("---------- entries in roster -----------");
for (RosterEntry entry : entries) {
System.out.println(entry);
}
System.out.println("---------- entries in roster -----------");
// react to changes in roster
roster.addRosterListener(new RosterListener() {
// called methods ...
public void entriesDeleted(Collection<String> addresses) {
// do stuff
}
public void entriesUpdated(Collection<String> addresses) {
// do stuff
}
public void presenceChanged(Presence presence) {
System.out.println("Presence changed: " + presence.getFrom()
+ " " + presence);
}
public void entriesAdded(Collection<String> arg0) {
// do stuff
}
});
return roster;
}
private void chatAction() {
PacketTypeFilter filter = new PacketTypeFilter(Message.class);
PacketListener myListener = new PacketListener() {
public void processPacket(Packet arg0) {
if (arg0 instanceof Message) {
Message msg = (Message) arg0;
System.out.println("Message: " + msg.getFrom() + " "
+ msg.getBody());
}
}
};
// Register the listener.
conn.addPacketListener(myListener, filter);
}
private void doDisconnect() {
conn.disconnect();
System.out.println("Disconnected");
}
}
Prinzipiell finde ich Java in Verbindung mit Swing ja wirklich nett um grafische Oberflaechen zu erstellen. Allerdings wurde bei mir immer das unschoene "Metal" Look&Feel verwendet. Somit sahen die Anwendungen ebenfalls wenig ansprechend aus. Abhilfe schafft ein globales Setzen des entsprechenden Styles. In meinem Fall ist es gewollt, dass Java-Anwendungen die Optik von GTK-Anwendungen erhalten.
Hierzu ist es notwendig die Datei $JAVA_HOME/jre/lib/swing.properties mit folgendem Inhalt anzulegen:
swing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
Zum Vergleich: Hier ein kleiner, von mir geschriebener Taschenrechner.


Ich denke der Unterschied ist klar zu erkennen. ![]()
Quicksearch
Kategorien
Links
Tags
del.icio.us
- Appcelerator Developer Center - Documentation
- Coderspiel — Rewiring Android for type-safe layout resources
- pkrumins's stackvm at master - GitHub
- Netty - the Java NIO Client Server Socket Framework - JBoss Community
- Learn Your Motherf#@kin' Science: A Textbook for Juggalos | Cracked.com
- The C Book - Table of Contents
- andrewvc's node-streamlogger at master - GitHub
- Setting up a JavaScript Build Process – JavaScriptr
- js-build-tools - Project Hosting on Google Code
- YUI Compressor
- JsUnit
- InfoQ: Ralph Johnson, Joe Armstrong on the State of OOP
- ztellman's aleph at master - GitHub
- Clojure - home
- Mac OS X keyboard shortcuts

