sixserv blog

welcome to teh #sixserv!

Das Fnordlicht

mit 3 Kommentaren


Das Fnordlicht in Aktion.

Das Fnordlicht in Aktion.

Ich und Elektronik? Ohje ich bin ja gewissermaßen eher der Softwerker aber ermutigt davon, dass es bereits ITler vor mir geschafft haben sollen, das geniale MoodFnordlicht zum laufen zu kriegen, mache ich mich daran, in den nächsten Tagen selbst ein Fnordlicht zu bauen. Wer noch nicht davon gehört hat, kann das ganze z.B. schon mal auf (wiki.)lochraster.org begutachten. Nebenbei sei erwähnt das der Erfinder, fd0 auch andere interessante Projekte entwickelt hat, z.B. das Etherrape eine kleine Platine mit(mehr oder weniger) vollwertigem Webserver. All das läuft mit dem Atmel AVR Microcontroller(ATmega-Serie), darüber bin ich schon mehrfach bei einigen meiner Stamm-Podcasts gestolpert, schon vor einiger Zeit gab es beim Chaosradio Express eine Sendung zum Thema(CRE067: Microcontroller, mit fd0), sowie erst vor kurzem mit mef die Nummer 117 von /dev/radio. fd0 hat übrigens zum Thema auch 2 Vorträge auf dem 22c3 und 23c3 gehalten.
Ich hoffe das sich meine (Löt-)Unfälle in Grenzen halten werden und ich in nächsten Tagen genauer darüber berichten kann.

Weitere Links zum Thema:

Update: Ganz vergessen zu aktualisieren. Das Fnordlicht leuchtet jetzt! später mehr.

Geschrieben von apoc

3. Dezember 2008 @ 20:13

Posted in hardware

Tagged with , , , ,

Wordpress 2.7: “Volldampf Voraus”

ohne Kommentare


Bereits 2.6 machte einen großen Schritt, das Backend wurde umgestaltet, Versionierung der Artikel, Google Gears Unterstützung, zahlreiche Verbesserungen der Usability und sonstige Neuerungen machten Wordpress noch ein Stück mehr zu einen der besten Weblog-Applikationen die es gibt. Mit 2.7 setzen die Entwickler noch eins drauf, die Funktion zum Update eines Plugins direkt vom Backend aus war ja schon erster Schritt, doch mit 2.7 wird es möglich das gesamte Wordpress direkt vom Backend aus zu upgraden.

Core Update

Core Update

Ebenfalls ist nun eine Plugin-Suche direkt im Backend integriert und neue Plugins können mit einem einzigen Klick installiert werden. Außerdem soll in Zukunft ein neuer Code-Editor für Theme und Plugin-Dateien, Syntax-Highlighting unterstützen, davon ist jedoch in der aktuellen Entwickler-Version noch nicht viel zu sehen.

Plugin Suche

Plugin Suche

Wordpress-Deutschland hat die Agenda der wohl erfolgreichsten Weblog-Software, Wordpress zusammengestellt. Außerdem gibt es ein Screencast vom neuen Backend.

Update: Am Design des Backends hat sich noch viel geändert aber es ist Grundlegend in die neue WP Version 2.7 eingegangen. Ich finde es ist sogar noch gelungener geworden wie die Entwickler-Version vermuten lies.

Geschrieben von apoc

8. Oktober 2008 @ 17:34

Posted in coding, php, wordpress

Tagged with , ,

Captchas

mit 2 Kommentaren


Captchas, diese kleinen Bilder als Zugriffsbeschränkung, die verunstaltete Buchstaben mit teils zufälligen Hintergründen darstellen. Erst nach abtippen der Richtigen Buchstaben wird man als Mensch klassifiziert und man darf Formulare Senden oder den vor Software-Robotern(Bots) geschützten Bereich betreten. CAPTCHAS: Completely Automated Public Turing test to tell Computers and Humans Apart. Ein verdrehter Turing Test, ein Mechanismus der Voraussetzt das Menschen den Text lesen können und Computer nicht.

Doch Captchas sind lohnend. Es existiert ein richter Markt für das Erkennen von Captchas, die Spammer und andere zweifelhafte Gestalten zahlen zwischen $0.70 und $1.00 je 1000 erkannten Captcha. Doch längst gibt es nicht mehr nur Text-based-Captchas, von Audio-Captchas die verrauscht einzelne Buchstaben aufsagen, bis hin zu Rechenaufgaben die es zu lösen gilt oder das finden der Frau/Mann auf einem Bild:

Kreativer-Captcha: Wie heisst der Mann auf dem Bild?

Kreativer-Captcha: Wie heißt der Mann auf dem Bild?

Rechenaufgaben als Captcha

Rechenaufgaben als Captcha

Diese kreativen Captchas haben den Vorteil das erst jemand ein gezielten Angriff schreiben müsste, dann jedoch offenbart sich nach kurzen überlegen die Schwachstellen, die Rechenaufgabe ist einfach per OCR zu erkennen, und war nicht Google ein hervorragender Taschenrechner? Auch die Bilder der Personen-Konturen offenbaren dummerweise nach einigen Reloaden immerwieder die exakt gleichen Konturen, und auch hier ist die Schrift einfach zu erkennen. Die Frage ob ein Captcha sicher ist oder nicht kann nicht so leicht beantwortet werden. Mit genügend Motivation und Technischer Finesse kann sogut wie alles gelöst werden. Dabei reicht eine Erkennungsrate von 10% völlig aus, bei 1000 abgesetzten Spam-Versuchen kommen so immer noch 100 durch. Klassisch läuft ein Angriff auf ein Captcha in 3 Phasen:

  1. Vorverarbeiten des Bildes, entfernen von Hintergrundbilder, Kontrast erhöhen, etc.

  2. Segmentation: Die Buchstaben werden voneinander getrennt.

  3. Recognizion: Jeder Buchstabe wird per OCR erkannt.

Mittlerweile haben wir überaus fortschrittliche OCR-Software zur Verfügung, die freie alternative gocr usw. Einige wie z.B. Finereader erlauben zudem das antrainieren einer bestimmten Schriftsorte, perfekt für ein erkennen von Captchas. Moderne Captchas setzen deshalb bereits eine Stufe früher an. Das Schwierigste ist nämlich die Segementation, wo ein Mensch nicht die geringsten Probleme hat Buchstaben voneinander zutrennen, ist diese Aufgabe für den Computer fast unmöglich. Deshalb setzen gute Captchas daran das Segementieren möglichst Schwierig zu gestalten:

Segmentierung fast unmöglich

Segmentierung fast unmöglich

Der Strich verbindet die Buchstaben und macht Segementierung sogut wie unmöglich

Ein Strich verbindet die Buchstaben und macht die Segmentierung schwer

Teilweise werden auch neue Schriftarten kreiert die nur dem Captcha Generator zur Verfügung stehen um OCR-Software zu überfordern. Captchas sind seit langem Forschungsgegenstand, es gibt einige Papers die neue Algorthmen und Möglichkeiten beschreiben Captchas zu entschlüsseln oder die Zeichen zu segmentieren. Genauso wie es Aufsätze über das Erstellen von besonders sicheren Captchas gibt.

Eine weitere Möglichkeit Captchas zu entschlüsseln ist sie auf eigenen Seiten unterzubringen. Diese Relay-Attacke bindet das Captcha einer Fremden Seite auf einer eigenen Seite ein wo Besucher das entschlüsseln des Captchas übernehmen. Es gibt keine Möglichkeit diesen Angriff wirkungsvoll zu verhindern.

Geschrieben von apoc

27. September 2008 @ 17:20

Posted in web

Tagged with , , ,

opengl-background unter compiz

mit 3 Kommentaren


eine weitere nette spielerei fuer menschen mit zu viel ressourcen :D

ich hab sie nicht aber das ganze laeuft auch auf einem 700Mhz Duron fluessig.

ihr benoetigt “xscreensaver” (und auch das paket “fireflies” falls ihr es wie auf den screenshots haben wollt, wobei sich “pong” auch ganz gut macht) und “xwinwrap” (xwinwrap does teh magic)

nks@hydra ~ $ nice -n 15 /usr/bin/xwinwrap -ni -argb -fs -s -st -sp -b -nf — /usr/lib/misc/xscreensaver/fireflies -window-id WID

das ganze sieht dann so aus:

fuer mehr infos:

man kann neben xscreensaver auch videos als hintergrund laufen lassen

nks

Geschrieben von nks

19. September 2008 @ 17:53

software-kvm mit synergy

ohne Kommentare


mir ist gestern die fernbedienung meiner sourround-anlage auf den boden gefallen - jetzt ist sie unbrauchbar. also dachte ich mir: “hey, mach doch den eee-pc zu deiner neuen fernbedienung!”.

also wenn ich im bett liege und die lautstaerke regeln will, schnell per ssh auf den rechner verbinden und alsamixer nutzen. aber dafuer is der eee ja schon bisl overkill. dann erinnerte ich mich an meine experimente vor einem jahr die beiden desktop-pcs miteinander zu verbinden.

ich hatte es auch mit synergy versucht, aber es war ziemlich buggy. aber die neue version laeuft wesentlich stabiler. also schnell auf allen 3 boxen synergy gemerged und ab an die config:

# nks’s synergy configuration file
# eeerr0r is the synergy-server
# infected and hydra are the clients

section: screens
infected:
hydra:
eeerr0r:
end

section: links
# larry is to the right of moe and curly is above moe
infected:
right = eeerr0r
eeerr0r:
left = infected
right = hydra
hydra:
left = eeerr0r
end
section: aliases
infected:
192.168.178.30
hydra:
192.168.178.32
eeerr0r:
192.168.178.25
end

das ganze dann auf dem system welches tastatur und maus bereitstellen soll unter “/etc/synergy.conf”
und dann ab in die shell:

nks@eeerr0r ~ $ synergys -f –config /etc/synergy.conf

nks@infected ~ $ synergyc -f eeerr0r

nks@hydra ~ $ synergyc -f eeerr0r

und schon kann ich vom eee-pc aus beide rechner kvm-style fernsteuern :D
das ganze funktioniert auch unter windows und mac os.

besonders schoen is das ganze in kombination mit compiz weil man dann vom bett/anywhere aus ranzoomen kann :D

informationen & links:

ps: apoc ich werd das mit dem gross/klein-schreiben ueberarbeiten :D

pps: chase & status releasen demnaechst ihr neues album, zwar ziemlich die uk-kommerz schiene, aber “hurt you” und “pieces” laufen atm ja fast in jedem set, also man kann gespannt sein (wobei “hurt you” auch auf dem neuem album ist)

ppps: ich hatte damals auch mit xdmx rumexperimentiert, hehe.. vll. probier ich demnaechst auch wieder etwas damit rum, allerdings mit compiz etwas zu lahm, in kombination mit chromium funktioniert es vll besser.

nks

Geschrieben von nks

19. September 2008 @ 16:54

Posted in linux

Tagged with , , , , , ,

Rbot Remote

ohne Kommentare


Ich setze schon lange den grandiosen IRC-Bot “rbot” ein. Ein überaus vielseitiger und einfach zu erweiternder Bot, der dazu auch noch in meiner lieblings Script-Sprache Ruby geschrieben ist. Vielleicht komme ich dazu einige meiner Plugins, die ich für ihn geschrieben habe, hier zu Veröffentlichen.

Eines der Features von rbot welches ich erst kürzlich entdeckt habe und was absolut genial ist, ist das Rbot Remote Interface. Per Default hört der Bot nämlich auf Port 7268(127.0.0.1) und stellt dort ein DRb(Distributed Ruby) Interface zur Verfügung. Dieses erlaubt es von Außen den Bot zu steuern und beispielsweise Funktionen eines Plugins auszuführen. RbotRemote kann z.B. dazu genutzt werden bei neuen SVN-Commits im RSS Plugin das Updaten eines Commit-Feeds zu starten. Denkbar ist dies natürlich auch für neue Blog-Posts innerhalb von Wordpress etc.

Da DRb logischerweise nur für Ruby zur Verfügung steht muss bspw. eine PHP-Webapplikation ein Ruby-Skript starten welches die gewünschte Aktionen am rbot auslöst. Hier als Beispiel-Skript wird eine Nachricht an #sixserv(btw: im Freenode) gesendet:

#!/usr/bin/ruby
 
require 'drb'
 
rbot = DRbObject.new_with_uri("druby://localhost:7268")
id = rbot.delegate(nil, "remote login owner [Owner/Auth Passwort]")[:return]
rbot.delegate(id, "dispatch say #sixserv Hallo Welt!")

In /bin/rbot-remote gibt es ein ähnliches, etwas komplexeres Beispiel welches die Eingaben von stdin erwartet.

Eine weitere Möglichkeit ist wie schon erwähnt eine Methode eines Plugins zu starten. Hier ein ganz einfaches rbot-Plugin:

class SimplePlugin < Plugin
  def sayfoo(m, params)
    @bot.say '#sixserv', 'foo'
    if params.has_key?(:bar) then
      @bot.say '#sixserv', params[:bar]
    end
  end
end
 
plugin = SimplePlugin.new
plugin.map 'sayfoo'
plugin.map 'sayfoo :bar'

Wird die Methode extern aufgerufen kann man natürlich kein m.reply verwenden, wenn die Nachricht im Channel landen soll, ich habe das hier ganz einfach gelöst indem ich den Channel fest eingebunden habe. Hier noch das Skript welches sayfoo mit Parameter aufruft:

#!/usr/bin/ruby
 
require 'drb'
 
rbot = DRbObject.new_with_uri("druby://localhost:7268")
id = rbot.delegate(nil, "remote login owner [Owner/Auth Passwort]")[:return]
rbot.delegate(id, "dispatch sayfoo bar")

Geschrieben von apoc

15. September 2008 @ 23:14

Posted in rbot, ruby

Tagged with , , , , ,

Corporate Blogging mit User-Subdomains

mit einem Kommentar


Das Sixserv Blog ist ein Multiuser-Blog(d.h. Mehrere Autoren verfassen Artikel), unter der Hauptdomain(sixserv.org) sollten alle Artikel angezeigt werden. Wir wollten allerdings zusätzliche Subdomains(z.B. apoc.sixserv.org) die die Artikel des jeweiligen Autors anzeigt. Besonders wichtig dabei war das es möglich ist pro Subdomain unterschiedliche Themes zu verwenden.
Als Grundlage für dieses Vorhaben verwendete ich das Wordpress-Plugin Domain-Mirror von Dave McAleavy. Ich ergänzte es um die Möglichkeit pro Domain einen Benutzer sowie Theme eingeben zu können: Weiterlesen »

Geschrieben von apoc

2. September 2008 @ 02:44

Posted in coding, meta, php, wordpress

Tagged with , , ,

WPA_Supplicant für Windows

ohne Kommentare


Gestern stand ich vor dem Problem ein neues WLAN-Netzwerk unter Windows XP einzurichten, soweit ja kein Problem werdet ihr sagen, allerdings wurde vorher das unsichere WEP eingesetzt und eine der verwendeten WLAN-PCMCIA Karten unterstützt kein WPA. Dazu kommt noch das der letzte Treiber von 2004 ist. Es handelt sich um eine “Acer WLAN 11g PCMCIA(wlan-g-pc2)”.

Gelöst habe ich das Problem letztendlich mit wpa_supplicant für Windows, welches nach einigen Testen auch durchaus stabil läuft. Das ganze wirkt schon ein wenig abenteuerlich(Winpcap wird z.B. benötigt um an die Pakete und das Interface zu gelangen), allerdings ist es schnell eingerichtet(läuft über die gleiche wpa_supplicant.conf wie unter Linux) und unterstützt dann auch tatsächlich alle Protokolle die Supplicant unterstützt.
Zusätzlich gibt es eine spezielle Version(wpasvc.exe) die man als Dienst(Service) registrieren kann. Nachteil ist allerdings das sie ihre Konfiguration aus der Registry bezieht, was wie bekannt ein wenig umständlich ist.

Trotzdem ist es eine wunderbare Möglichkeit ältere WLAN-Adapter unter Windows für WPA Fit zu machen.

Geschrieben von apoc

1. September 2008 @ 19:39

Posted in windows

Tagged with , , , ,

kernel mode sockets part 2 (the clean way)

mit 2 Kommentaren


version 0.1 -  30.08.2008

willkommen zu teil 2 der linux kernel mode socket serie. nun befassen wir uns mit einem sauberem weg der socketcalls vom kernel aus. auch hierfuer gibt es noch andere wege. in einem der naechstem teile bauen wir uns eine socket()-funktion selber, aber nun zum sauberem socket :D

auch hier muessen wir wieder set_fs/get_fs (man kann sie auch weglassen, aber in diesem fall garantiere ich fuer NICHTS, bzw das modul laesst sih kompilieren aber die funktion funktioniert im besten fall nicht…) nutzen da file-operationen im kernelmode nicht gestattet sind, der zugriff auf sockets ist ein dateizugriff. die funktion inet_addr muessen wir uns nicht extra schreiben, hab ich zwischenzeitlich rausgfeunden in der “linux/inet.h” gibt es in_aton() :D

die hauptschwierigkeit besteht in den neuen strukturen iovec und msghdr. die ich allerdings anhand von kommentaren erklaeren werde, soweit wichtig, bzw unter den beiden links steht alles was man wissen muss (obwohl es nich spezifisch um die linux strukturen geht).

kommen wir nun zum code:

/*
* lkm_clean_socket.c - nks
*/

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/socket.h>
#include <linux/net.h>
#include <linux/in.h>
#include <linux/inet.h>
#include <net/sock.h>
#include <asm/uaccess.h>

int init_module(void)
{
struct socket *socket;
struct sockaddr_in saddr;
int errno;
char buffer[1024];
struct msghdr msg;
struct iovec iov;
mm_segment_t old_fs;

printk(KERN_INFO "#sixserv/sixserv.org presents:\n");
printk(KERN_INFO "simple & clean kernel mode socket - nks\n");

if ((errno = sock_create(PF_INET,SOCK_STREAM,IPPROTO_TCP,&socket))<0)
{
printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
printk(KERN_INFO "-- ERRNO: %d..\n",errno);
return 0;
}
else
{
printk(KERN_INFO "++ Kernel Mode Socket is up ...\n");
printk(KERN_INFO "++ ERRNO: %d..\n",errno);
}

saddr.sin_addr.s_addr = in_aton("79.140.33.153");
saddr.sin_port = htons(80);
saddr.sin_family = AF_INET;

if ((errno = socket->ops->connect(socket,(struct sockaddr*)&saddr,sizeof(saddr),0))<0)
{
printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
printk(KERN_INFO "-- ERRNO: %d..\n",errno);
return 0;
}
else
{
printk(KERN_INFO "++ Kernel Mode Socket is up an connected...\n");
printk(KERN_INFO "++ ERRNO: %d..\n",errno);
}

iov.iov_base = "GET / HTTP/1.0\r\n\r\n";
iov.iov_len = sizeof("GET / HTTP/1.0\r\n\r\n");

msg.msg_iov = &iov;
msg.msg_iovlen = 1;  /* anzahl der elemente in iov */
msg.msg_control = NULL;
msg.msg_controllen = 0;
msg.msg_name = NULL;
msg.msg_namelen = 0;
msg.msg_flags    = 0;

old_fs = get_fs();
set_fs(KERNEL_DS);

if ((errno = sock_sendmsg(socket,&msg,sizeof("GET / HTTP/1.0\r\n\r\n")))<0)
{
printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
printk(KERN_INFO "-- ERRNO: %d..\n",errno);
set_fs(old_fs);
return 0;
}
else
{
printk(KERN_INFO "++ Kernel Mode Socket is sending stuff...\n");
printk(KERN_INFO "++ ERRNO: %d..\n",errno);
set_fs(old_fs);
}

iov.iov_base = buffer;
iov.iov_len = 1024;

msg.msg_iov = &iov;
msg.msg_iovlen = 1;  /* anzahl der elemente in iov */
msg.msg_control = NULL;
msg.msg_name = NULL;
msg.msg_namelen = 0;

old_fs = get_fs();
set_fs(KERNEL_DS);

set_fs(old_fs);

if ((errno = sock_recvmsg(socket,&msg,1024,0))<0)
{
printk(KERN_INFO "-- Kernel Mode Socket ERROR...\n");
printk(KERN_INFO "++ ERRNO: %d..\n",errno);
set_fs(old_fs);
return 0;
}
else
{
printk(KERN_INFO "++ Kernel Mode Socket is recieving stuff...\n");
printk(KERN_INFO "++ ERRNO: %d..\n",errno);
printk(KERN_INFO "++ Recieved: %s..\n",buffer);
set_fs(old_fs);

}
return 0;
}

void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world.\n");
}

MODULE_LICENSE("GPL");

ein weiteres mal passen wir unsere Makfeile an:

obj-m += lkm_clean_socket.o

all:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

nach einem make ist das modul fertig und liegt unter dem namen “lkm_clean_socket.ko” im aktuellem verzeichnis.
wenn alles geklappt hat machen wir folgendes:

# modinfo lkm_clean_socket.ko
filename:       lkm_clean_socket.ko
license:        GPL
depends:
vermagic:       2.6.25-gentoo-r7 SMP mod_unload PENTIUM4
# insmod lkm_clean_socket.ko
# dmesg
....

++ Kernel Mode Socket is up ...
++ ERRNO: 0..
++ Kernel Mode Socket is up an connected...
++ ERRNO: 0..
++ Kernel Mode Socket is sending stuff...
++ ERRNO: 19..
++ Kernel Mode Socket is recieving stuff...
++ ERRNO: 1024..
++ Recieved: HTTP/1.1 200 OK
Date: Sat, 30 Aug 2008 00:18:58 GMT
Server: Apache
X-Powered-By: PHP/5.2.0-8+etch11
X-Pingback: http://sixserv.org/xmlrpc.php
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="de-DE">
<head profile="http://gmpg.org/xfn/11">
<title>sixserv blog</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="welcome to teh #sixserv!" />
<meta name="generator" content="WordPress 2.6.1" /> <!-- leave this for stats please -->
<link href="http://sixserv.org/wp-content/themes/journalist/style.css" rel="stylesheet" type="text/css" media="screen" />
<link rel="alternate" type="application/rss+xml" title="sixserv blog RSS Feed" href="http://sixserv.org/feed/" />
<link rel="shortcut icon" type="image/x-png" href="http://sixserv.org/wp-content/the
....
# rmmod lkm_clean_socket.ko

wie man sehen kann ist unser buffer ein wenig zu klein, und die errnos kann man sich eigtl auch sparen wenn kein fehler auftritt.

seid gespannt auf den naechsten teil der kernel mode serie :D

nks

quellen:

ps:
cuil.com und metager2.de lassen sich beide in die suchleiste oben integrieren (klickt einfach auf den namen dann fragt euch FF). nach einigem testen gefaellt mir metager2 wesentlich besser weil es VIEL mehr findet. allerdings gefaellt mir die aufmachung von cuil.com, ich sehe noch einiges an potenzial.

pps:
mal wieder ein musikalischer tipp
http://www.myspace.com/blue_nine

Geschrieben von nks

30. August 2008 @ 02:34

Posted in coding, linux

Tagged with , , , ,

bitlet.org privacy

ohne Kommentare


ich nutze gerne den bittorrent-client “BitLet”. wirklich genial und einfach. zeigt sehr schoen wie man mit Java auch nicht resourcenfressende ressourcen-schonende torrent-clients schreiben kann, im gegensatz zu Azureus/Vuze. ich nutze BitLet recht haeufig jedoch bereitet mir schon seit laengerem sorgen, dass auf der startseite eine history der letzten torrents liegt. das ist natuerlich sehr prakitsch fuers resumen bzw um den aktuellen stand des downloads zu sehen und ihn bei bedarf zu loeschen oder zu resumen, allerdings liegen diese daten auf dem server von BitLet.org.
BitLet hat somit auf ihren servern eine datenbank laufen die die IPs logt mit denen die user ihre downloads taetigen und die entsprechenden namen der .torrent-Files (mit ausgelesenen meta-daten und download-fortschritt). das wird vermutlich ueber ein cookie realisiert.

also ab und zu mal cookies loeschen…

bleibt abzuwarten was sich daraus ergibt.

nks

links:

Geschrieben von nks

29. August 2008 @ 02:19

Posted in java, torrent

Tagged with , , ,