Identitaet und Privatsphaere
visus am 29. Januar 2010 um 22:40Identitaet – was ist das eigentlich? Irrelevanzia definiert die Identitaet wie folgt:
Beim Menschen bezeichnet Identitaet (v. lat. idem, derselbe, der gleiche) die ihn kennzeichnende und als Individuum von anderen Menschen unterscheidende Eigentuemlichkeit seines Wesens.
Es geht also um Alleinstellungsmerkmale und die kann man zumindest stochastisch evaluieren. Wir ich schon in meinem Paper ueber Reality Mining1 bereits beschrieben habe, ist Entropie ein dabei besonders interessantes Mass. Es gilt als Einheit fuer Unordnung, aber es ist viel mehr als das. Entropie kann dazu verwendet werden, um Muster zu visualisieren und sie sogar mathematisch vergleichbar zu machen, selbst wenn wir diese Muster nicht in Worte fassen koennen. Eine andere Definition von Entropie nennt es die Generalisierung der Anzahl von moeglichen zufaelligen Unterschieden. Solche Anzahlen werden haeufig auch durch Bits of Entropy dargestellt. Beispiel: Bei einem Zufallsexperiment gibt es zwei moegliche Elementarereignisse. Wir sprechen hierbei dann von einer Entropy von einem Bit, da . Wenn wir eine Entropy von 3 Bits bei einem Zufallsexperiment annehmen, so gibt es
Ereignisse, usw.
Nun koennen wir dieses simple mathematische Modell auf die Identitaet anwenden: Es gibt ca. 6,9 Milliarden Menschen (6.900.000.000). Also benoetigt man Bits, um eine Person auf der Welt eindeutig zu identifizieren. Da es bei Computern so immer die Sache mit der 8 ist, koennen wir jetzt mal approximieren:
, also weniger als 5 Byte. Zum Vergleich: Auf x86 Maschinen ist die Assembler Anweisung nop (=no operation, hexadezimal 90 oder auch 10010000) 8 Bit lang. 8 Bits wuerden genuegen, um im optimalen Fall 256 Personen unterscheiden zu koennen. Das ist alles wirklich nicht viel.
Treiben wir das ganze noch weiter und werden politischer: Wenn EVILOFYOURCHOICE Daten von Personen speichert, z.B. Land, Most Viewed Website, durchschnittliche Online-Zeit, Browser, Displaygroesse, zuletzt online gekaufter Artikel, zuletzt offline gekaufter Artikel, etc., ohne zu wissen, wer diese Person ist, so ist das voellig egal, denn man kennt natuerlich auch die Personen, die mit dieser Person kontakt hatten (Telefon, E-Mail, SMS) und deren Daten und das alles aggregiert sich zu einem riesigen Netz (ja, jetzt sind wir beim Reality Mining angelangt). Jetzt nehmen wir mal an, dass wir dieses Netz kennen und eine Person aus diesem Neetz geht in einen Laden und nutzt seine Payback-Karte, die mit dem Namen der Person assoziiert ist… dann wissen wir auf einmal noch viel mehr und koennen ohne Muehe andere Personen aus diesem Netz identifizieren.
Leute, die unsere Daten speichern, nutzen solche Techniken (die ich bewusst sehr plump erklaert habe) schon seit Jahren! Sie nutzen das auch aus und senden Werbung oder bevorzugen besondere Zentralpersonen solcher Netze bei Hotlines und bei Kulanz. Wisst ihr ueberhaupt, wer was von euch weiss? Glaubt ihr wirklich, dass eure Privatsphaere geschuetzt ist und ihr nichts zu verbergen habt?
Uebrigens: Wenn die Polizei so etwas macht, dann nennt man das Rasterfahndung, deren Vertraeglichkeit mit dem Grundgesetz doch stark zu bezweifeln ist, da sie die Unschuldsvermutung, die wie folgt rechtlich (GG Art. 11 Abs. 1) definiert ist, aufhebt:
Jeder Mensch, der einer strafbaren Handlung beschuldigt wird, ist solange als unschuldig anzusehen, bis seine Schuld in einem oeffentlichen Verfahren, in dem alle fuer seine Verteidigung noetigen Voraussetzungen gewaehrleistet waren, gemaess dem Gesetz nachgewiesen ist.
Auf Europaeischer ebene verletzt es meiner Ansicht nach auch Art. 6 Abs. 2 der Europaeischen Menschenrechtskonvention:
Jede Person, die einer Straftat angeklagt ist, gilt bis zum gesetzlichen Beweis ihrer Schuld als unschuldig.
Dennoch wird es gemacht! Wollt ihr wirklich den neuen Personalausweis oder bis vor kurzem ePA?
SRSLY?
Mehr Informationen zu Bits & Privacy? Hier.
- Veroeffentlichung steht noch aus. [↩]
Danke, Frau Merkel!
visus am 26. Januar 2010 um 10:20Noch peinlicher als das ist wohl nur Frau Merkel selber.
Der lange Weg zum NAS
visus am 21. Januar 2010 um 05:15Wie ich waehrend des 26C3 festgestellt habe, mag ich Netzwerk Storages. Ich habe also bei eBay herumgeschaut und musste wiederum feststellen, dass ich mir eine richtige Kiste nicht leisten kann. Also habe ich mich prompt dazu entschieden, mir ein NAS zu improvisieren. Die Zutaten:
- ein Thin Client
- ein paar USB Sticks
- ein paar externe Festplatten
- Linux
Ich habe mir also bei eBay zwei (just in case…) Thin Clients (FSC Futro S300 und HP Thin Client t5510) fuer insgesamt rund 70 EUR gekauft. Da der HP schoener aussieht und als erstes geliefert wurde, habe ich ihn auserkoren zum NAS zu werden.
Der naive Versuch
Da der HP (und auch der FSC) kein CD Laufwerk hat, bleibt nur USB. Das war mir ja klar, also habe ich auch direkt ein paar (2x 4GB, 10x 2GB, weil die so guenstig waren) USB Sticks gekauft und den Ubuntu Installer auf einen der 4GB Sticks geknallt. Da der Installer aber nach 30 Minuten noch immer nicht komplett geladen war, habe ich das mit dem Ubuntu ad acta gelegt.
Kleine Pueppchen
Nun musste also eine Ersatzdistro her, die am Besten auf Debian basiert (Debian ist sexy). Nach ein paar brutalen Stunden, die ich mit Google verbracht hab, war ich von dem Linux Terminal Server Project etwas enttaeuscht. Dann bin ich endlich auf Puppy Linux gestossen. Die knapp 100MB grosse Linux Distribution habe ich dann gepflegt in den Downloadmanager geladen und froehlich 1,5 Stunden(!!!) gewartet. Tolle Mirrors….
Aber endlich war es dann soweit. USB Stick mit Puppy Linux beladen und gib ihm… Haettstewohlgern! Die Fehlermeldung beim Booten haette genauso gut auch EPIC FAIL heissen koennen. Blieb mir nur eins:
dd if=/dev/null of=/dev/sda
Verdammt klein
… soll ja Damn Small Linux sein. Da es auch auf Debian basiert, war es meine naechste Wahl. Saugen, auf den Stick knallen, booten. Endlich! Innerhalb von Sekunden(!!!) startete Fluxbox. Coole Sache. Das hat mich an meine (spaete, da ich anfaenglich nur mit CLI gearbeitet habe) OpenBSD Zeit erinnert. Da gab es tatsaechlich auch die Moeglichkeit ein Pendrive Linux zu installieren. Also steckte ich einen weiteren USB Stick in den Thin Client, der zum Glueck 4 USB Slots hat, und startete sogleich auch den Pendrive Installer. EPIC FAIL. Abgeschmiert. Zu wenig RAM… Damn Small aber dennoch Damn Memory-leaky. Diesmal habe ich mir dann mit…
shred -n 10 -v /dev/sda
…geholfen. *facepalm*1
Verzweiflung
Zu dem Zeitpunkt war ich doch schon sehr verzweifelt, da ich schon mehrere Tage (da ich ja immer erst spaet von der Uni komme) daran gehockt habe und noch zu keinem Ergebnis gelangt bin. Unter Windows lief mal wieder mein VMware-Ubuntu im Unity-Mode (sexy, wenn auch von Parallels abgeguckt). Da Ubuntu von Debian abstammt, kommt man auch sehr schnell auf die Idee debootstrap anzuschmeissen und sich sein Debian manuell zusammenzubauen. Gesagt, getan: Nach ein paar Stunden Frickelei (USB+ext3 = keine gute Idee, USB+vfat+Linux = noch schlechtere Idee, USB+Grub = beschissene Idee) habe ich es dann auch geschafft mir ein Linux zu bauen, das ich halbwegs booten konnte. Halbwegs. Kernel Panic. Aus die Maus.
cfdisk -z /dev/sda
… und auf Wiedersehen Partitionstabelle.
RTFM
Manchmal ist es doch so einfach: Die Debian Doku enthaelt einen netten Abschnitt ueber das Vorbereiten von Dateien fuer das Booten von einem USB Stick. Die boot.img.gz-URL hat mir Google sofort geliefert. wget, zcat, mount und eine sowieso in meinem Dateiarchiv existierende und aktuelle Debian ISO draufgeschoben, brachte mich nun endlich zum Erfolg. Der Debian Installer im Textmodus startete problemlos und hat es zugelassen die Installation auf einen anderen USB Stick vorzunehmen. Nur das mit dem Grub ist da so eine Sache… Der Installer dachte “ich USB, ich = sda, sdb = Ziel, (hd2,0) also Bootpartition” (hd0 ist die interne 32MB Flash Card, die so fest verbaut ist, dass man sie nicht austauschen kann). Dementsprechend pflanzte der Installer eine Grub Config (in (hd1,1), also /dev/sda1, wtf?) und die Flash Card habe ich als MBR-Bettchen erkoren. Beim Rebooten (und gleichzeitigem Entfernen des Installer-Sticks) war es natuerlich klar, dass Grub etwas verwirrt war. Interessanterweise hat er die Config gefunden. Nunja, jetzt zwei Zeichen im Bootmenue zu aendern war nicht das Problem und so bootete endlich(!!!) ein jungfraeuliches Debian.
Fileserver
… sind auch so eine Sache fuer sich. Samba (jaja, oldschool – aber soll ja jeder hier im Haus nutzen koennen) hat eine sehr interessante fluide Syntax fuer die Config. Wichtig hierbei war lediglich root preexec zum Mounten der Festplatte (sofern nicht bereits geschehen). Da meine Externe einen netten Stromsparmodus hat und sich selber abschaltet, wenn sie laenger nicht genutzt wurde, konnte ich mir postexec sparen.
Wenn man nun schon einen Fileserver hat, dann kann der ruhig auch hier und da mal dezentrales Filesharing (ohja, man kann auch legale Sachen damit herunterladen!) betreiben. rtorrent hatte ich noch im Hinterkopf, aber das habe ich ganz schnell wieder verworfen. Drecksteil. Das hat mehr Shortcuts als screen und vi zusammen. Oergs. Dann wollte ich noch torrentflux, eine Webschnittstelle zu rtorrent, nutzen… Ein guter Tipp: MySQL und 128MB RAM vertragen sich gar nicht. Letztendlich war MySQL an, dpkg dachte es sei deinstalliert (sogar purged) und das Init-Script mochte es nicht stoppen, weil es dazu ersteinmal initial-gestartet werden muesste, um die Configs zu generieren. Argh! Uebrigens, folgendes hilft:
dpkg --remove --force-remove-reinstreq mysql-server-5.0
Wo war ich? Achja, torrentflux. MySQL + Low Memory = Dreck. Apache ging lustigerweise. Aber ohne torrentflux brauch ich es nicht. Also weg mit dem Mist. Dann blieb ich erstmal bei Transmission. Dank babels Tipp habe ich mir dann doch (das per Default bereits installierte) BitTornado bzw. btdownloadcurses angeschaut. Nach knapp 1,5 Stunden Spielereien mit screen und btdownloadcurses kam dann ein nettes Bash-Script heraus, das Torrents herunterladen, sie archivieren, sharen und gleichzeitig in eine wunderbare Multiwindow-Screen-Umgebung packen kann. Das moechte ich natuerlich niemanden vorenthalten (ja, inkonsistente Schreibweise, aber ich bin atm zu faul):
#!/bin/bash ### CONFIG ### DEVICE="/dev/sdb1" MOUNTPOINT="/media/storage" TORRENTDIR="/root/torrents" DOWNLOADDIR="/media/storage/public" PORTFILE="/root/torrents/.ports" SCREEN_SESSION_NAME="__DEFAULT" SCREEN_DATETIME="$(date +%Y%m%d_%H%M%S)" MAX_UPLOAD_RATE=30 MIN_PORT=53535 MAX_PORT=53559 ### CODE ### if [ "$(cat /proc/mounts | grep /media/storage | wc -l)" -eq "0" ]; then echo -n "Mounting $DEVICE on $MOUNTPOINT..." mount -t ntfs-g3 $DEVICE $MOUNTPOINT > /dev/null 2>&1 if [ "$?" -eq 0 ]; then echo " done." fi fi FILE="" if [ -f "$1" ]; then echo "Loading $1..." FILE="$1" else echo -n "Downloading torrent..." rm -f tmp.torrent wget -O tmp.torrent $1 > /dev/null 2>&1 echo " done." if [ -f "tmp.torrent" ]; then echo -n "Name: " read NAME FILE="$NAME.torrent" mv tmp.torrent "$FILE" else echo "Torrent file does not exist" exit 1 fi fi cd $DOWNLOADDIR SCREEN_EXISTS=$(screen -ls | grep ${SCREEN_SESSION_NAME} | wc -l) if [ "$SCREEN_EXISTS" -eq "0" ]; then /usr/bin/screen -S "${SCREEN_SESSION_NAME}" /usr/bin/btdownloadcurses --max_upload_rate $MAX_UPLOAD_RATE --minport $MIN_PORT --maxport $MAX_PORT "$TORRENTDIR/$FILE" else COMMAND="screen /usr/bin/btdownloadcurses --max_upload_rate $MAX_UPLOAD_RATE --minport $MIN_PORT --maxport $MAX_PORT \"$TORRENTDIR/$FILE\"" /usr/bin/screen -r "${SCREEN_SESSION_NAME}" -X eval "$COMMAND" fi
Last but not least muss ich sagen: Es hat sich (bisher) gelohnt.
Freedom of Speech
visus am 13. Januar 2010 um 02:17Normalerweise twitter ich solche Sachen oder ich teile sie auf Facebook. Aber das Folgende ist es einfach wert gebloggt zu werden:
Nachdem Google sich zunaechst der chinesischen Regierung gebeugt und Inhalte zensiert hat, will Google das nicht laenger mitmachen. Ausgeloest haben das vor allem kuerzlich durchgefuehrte Angriffe auf Google und andere Unternehmen aus dem Bereichen Internet, Finanzen, Technologie, Medien und Chemie. Google hat die U.S. Behoerden und die jeweiligen Firmen ueber die Angriffe informiert und zieht daraus nun Konsequenzen.
Die Angriffe auf Google bezogen sich vor allem auf Diebstahl von Intellectual Property und auf GMail Konten von Menschenrechtsaktivisten. Hier mal ein Auszug aus dem Blogpost von Google:
These attacks and the surveillance they [China] have uncovered–combined with the attempts over the past year to further limit free speech on the web–have led us to conclude that we should review the feasibility of our business operations in China. We have decided we are no longer willing to continue censoring our results on Google.cn, and so over the next few weeks we will be discussing with the Chinese government the basis on which we could operate an unfiltered search engine within the law, if at all. We recognize that this may well mean having to shut down Google.cn, and potentially our offices in China.
Am Ende des Blogposts nimmt Google noch die Mitarbeiter in China in Schutz und schreibt, dass dieser neue Weg, den Google nun einschlaegt, einzig und allein von den Entscheidungstraegern in den USA bestimmt wurde:
We want to make clear that this move was driven by our executives in the United States, without the knowledge or involvement of our employees in China who have worked incredibly hard to make Google.cn the success it is today.
Google hat nun also endlich Menschlichkeit bewiesen und erklaert der chinesischen Zensurpolitik den Krieg.
Woran merkt man, dass die Welt untergeht?
visus am 8. Januar 2010 um 06:10Und hier folgen auch schon meine Top 10:
Platz 10
peep peep peep peeeeep peeeeep peeeeep peep peep peep
Platz 9
Die Russen kommen.
Platz 8
Es tauchen RFCs zum Thema Archebau auf und es ist nicht der 1. April.
Platz 7
Ueberall rennen Hollaender wild umher und schreien “Vloed!!!” (Flut).
Platz 6
China laesst Gefangene frei.
Platz 5
Die Bild sagt die Wahrheit.
Platz 4
Es gibt kein Bier mehr.
Platz 3
Die USA fängt an neues Geld zu drucken.
Platz 2
CDU und/oder FDP sind an der Macht.
Platz 1
Fefe hat aufgehoert zu bloggen.
Die Entmuendigung des Einzelnen
visus am 7. Januar 2010 um 02:49Dass Apple der Teufel ist, ist doch sicher mittlerweile jedem klar. Aber hier gibt es noch ein schoenes Video dazu.
via Elektrischer Reporter – Digitale Entmündigung: Was Dir gehört, gehört Dir nicht.
Dragons Everywhere in Essen: Tag 4
visus am 31. Dezember 2009 um 00:28Meine Berichte werden immer kuerzer…
- … und die Anzahl der Teilnehmer wurde wieder geringer.
- Ein GBit Switch macht doch schon einiges mehr als ein 100MBit Switch.
- Ein Beamer, ein kleiner Rechner, Maus und Tastatur (+CCC VPN) reichten heute vollkommen, um die Streams zu sehen. Der Rest blieb im Buero.
- Ich will jetzt einen NAS.
Gesamt laesst sich wohl folgendes sagen:
- Wenn man sich auf Andere verlaesst, dann ist man verlassen.
- In Essen und Umgebung ist die Anzahl der Hacker (abzgl. derer, die nach Berlin gefahren sind) sehr gering.
- Die Vortraege waren genial.
- Das Streaming verlief im Schnitt relativ gut.
- Wir waren fuer hunderte Personen vorbereitet und hatten zu Beginn enormen technischen Overhead.
- Ich mache so eine Aktion nicht mehr mit.
Dragons Everywhere in Essen: Tag 3
visus am 30. Dezember 2009 um 02:22Wie gehabt:
- Wir haben puenktlich begonnen, das SOAHarbor-Team war bereits da und nicht sehr erfreut… Als Entschaedigung gab es eine Kaffee-Flat.
- Wir haben ein zweites NAS aufgestellt und beide mit externen Festplatten verstaerkt.
- Die Teilnehmeranzahl ist erneut gesunken.
- Auf Grund mangelnder Nachfrage fand kein Hackcontest mehr statt.
- Es wurde aus ge-hack-ten Zwiebeln und Hack-fleisch eine leckere Festplatte gehackt.
- Die VPN funktionierte problemlos, Streamingausfaelle blieben die Ausnahme.
- Mate (und somit Tschunk) ist leer – aber Bier ist noch da.
- Der Jahresrueckblick war genial.
- Wir haben beschlossen, dass wir naechstes Jahr nach Berlin fahren.
- Beim Abbauen haben wir vergessen dem hauptsaechlich genutzten NAS eine IP Adresse fest zuzuweisen, sodass wir ihn woanders hinstellen konnten… Ein rumfliegender Router hat das Problem geloest.
- Morgen gibt es nur einen kleinen Rechner, einen Beamer und Lautsprecher.
- Wir brauchen dringend mehr Schlaf.
Dragons Everywhere in Essen: Tag 2
visus am 29. Dezember 2009 um 01:32Gerade startet Hacker Jeopardy, also wird es wohl Zeit ueber den heutigen Tag zu schreiben. Ich versuche es mal wie gestern:
- Vor der Eroeffnung waren wir zu Zweit. Das blieb auch erstmal so.
- Wir waren mehrere Stunden mit einem anderen Hacker da.
- Wir haben uns letztendlich entschlossen unsere 1000m² aufzugeben und zu einer ueberschaubareren Location zu wechseln. Waehrend wir das vollzogen haben, hat sich die Anzahl der Personen erst quadriert und dann noch einmal fast verdoppelt.
- Waehrend wir umgezogen sind, haben wir noch eine oeffentliche Kiosk-Mode-Workstation mit einem Ubuntu ausgestattet… Das tschechische Windows Vista Ultimate mit deutschem Language Pack haben wir natuerlich drauf gelassen… Ein versteckter Grub macht uns dann in Zukunft mehr Freiheit.
- Nachdem der Umzug vollzogen war, wurde die Stimmung immer besser.
- Wir haben einen Fileserver aufgesetzt.
- Wir haben leckeren Tschunk gemixt und getrunken.
- Morgen machen wir auch an der kleineren Location weiter. Diesmal aber erst ab 11 Uhr.
- Der Hackcontest wurde durchgefuehrt. 5 Teams haben mitgemacht. Ein Team hat es geschafft innerhalb von 27 Minuten den Server einzunehmen. Morgen machen wir damit weiter.
- Streaming hat heute besser funktioniert als gestern.
- Die VPN nach Berlin klappt jetzt mittlerweile auch.
- Unsere Fragen zu den Jeopardy-Antworten sind besser.
Dragons Everywhere in Essen: Tag 1
visus am 28. Dezember 2009 um 00:20Es ist nun Pi mal Daumen 23 Uhr. Wir sind seit 9 Uhr in der Universitaet, haben viele Sachen transportiert, aufgebaut und herumgetueftelt. Hier mal ein paar Stichpunkte zum Verlauf des aktuellen Tags:
- Der Transport der Sachen verlief problemlos.
- Bei der Ankunft stellten wir fest, dass der Strom in allen Hoersaelen abgestellt war. Wir haben das dem Pfoertner mitgeteilt, der wiederum den technischen Notdienst alarmiert hat. Eine Stunde Zeitverzoegerung. Erst kurz vor dem ersten Vortrag hatten wir Strom.
- Die Streams waren zu Beginn fast nicht nutzbar. Waehrenddessen genauso wenig. Im Moment ist es relativ akzeptabel.
- Die Konfigurationsdaten, die wir vom CCC erhalten haben, um der VPN des CCC in Berlin beizutreten waren nutzlos, da wir bisher keine Moeglichkeit gefunden haben, die Portblockaden der Universitaet zu umgehen, die Routen zu setzen etc. An dem Problem sassen wir bisher ungefaehr 12 Stunden.
- Um ca. 20 Uhr wollte uns ein anderer Pfoertner verklickern, dass die Veranstaltung nur bis 18 Uhr angemeldet sei. Wir haben jedoch 4 volle Tage angemeldet. Wir koennen natuerlich weitermachen.
- Mittags haben wir bei Pizzaboy bestellt. Das ging relativ schnell (40 Minuten) in Relation zu der Menge, die wir bestellt haben. Das Essen war lauwarm. Abends (ca. 19:30 Uhr) haben wir uns wieder entschieden bei Pizzaboy zu bestellen. Um 22 Uhr(!!!) wurde das Essen geliefert. Mein Cheese Burger hat gefehlt. Der Fahrer wollte trotzdem abkassieren, ich habe es verweigert und erst eine Nachlieferung gefordert. Die kam dann auch 30 Minuten spaeter und teilte mir mit, dass das Burgerbrot ausgegangen ist und sie stattdessen ein Baguette genommen haben. Der Burger/das Baguette hatte bereits die Aussentemperatur angenommen. Das war das letzte Mal, dass ich bei Pizzaboy bestellt habe. Trinkgeld gab es nicht.
- Die durchschnittliche Personenanzahl lag etwa bei 15. Sehr wenig, was vielleicht daran liegt, dass heute Sonntag ist, gestern noch Weihnachten war und alle noch so groggy sind. Wir sind noch optimistisch, vor allem weil ALLE anwesenden Personen auch registriert waren und die Anzahl der Registrierungen noch wesentlich hoeher ist.
- Die Atmosphaere hier in Essen war durchweg sehr gut – trotz Pizzaboy-Debakel.
- Vertreter der Piratenpartei sind auch nach Essen gekommen.
- Wir haben noch genug Mate.
- Kaffee war heute das beliebteste Getraenk. Wir haben daher spontan eine Kaffee-Flat angeboten. Unser Kaffee-Vorrat ist so gut wie aufgebraucht. Morgen frueh haben die Geschaefte gluecklicherweise wieder auf.
- Interessanterweise verbrachten die meisten Anwesenden lieber die Zeit ausserhalb der 3 Hoersaele. Wir haben uns daher kurzfristig dafuer entschieden einen Hoersaal zu schliessen und einen der Streams (je nach Vortrag) direkt im Foyer an die Wand zu werfen. Morgen entscheiden wir das wieder neu.
- Den Hackcontest haben wir nicht wie semi-angekuendigt heute schon angefangen, sondern findet erst ab morgen statt (bedingt durch diverse technische Probleme, Zeitverzoegerungen und eine geringe Anzahl von potentiellen Teilnehmern).
- Ich bin muede.
Relevante Informationen
visus am 22. November 2009 um 23:23Da Netstumbler unter Windows 7 definitiv nicht funktioniert, dachte ich mir: “Hey, bau dir deinen eigenen Stumbler!” Und das habe ich auch getan. Dabei ist mir aufgefallen, dass ich gar nicht weiss, welche Daten fuer mich eigentlich relevant sind. Ich habe mir angeschaut, wie inSSIDer arbeitet und habe mir dort abgeschaut, wie ich Daten erfasse:
Zunaechst verbinde ich mich mit dem GPS Geraet und beginne zeilenweise die Daten zu parsen. Dann starte ich den Wifi-Scan. Jedesmal, wenn ein Scan abgeschlossen ist, schaue ich nach, ob ich das jeweilige Netzwerk schon kenne. Wenn ich es bereits kenne, dann ueberpruefe ich, ob der alte RSSI Wert geringer ist, als der neue. Ist das der Fall, dann setze ich die Position des gefundenen Netzes auf die aktuelle GPS Position, ansonsten lasse ich die alte bestehen. Kannte ich das Netzwerk noch nicht, dann habe ich es in die Liste der gefundenen Netze aufgenommen und die aktuelle GPS Position als Netzposition gesetzt.
Letztendlich erhalte ich so eine nette Liste von Wifi-Infrastrukturen, und die GPS Koordinaten von dem Ort, an dem man sich am Nächsten an der Infrastruktur befunden hat. Natuerlich koennte man das noch verbessern, indem man sich der Mathematik bedient, aber da die Reichweite von Access Points noch weit unter Sichtweite ist, ist das erstmal egal.
Bei der Programmierung ist mir aufgefallen, dass ich Wifi-orientiert arbeite, d.h. ich finde Netze und suche mir dazu die Positionen. Es geht natuerlich auch andersherum: Jedesmal, wenn mir der GPS Receiver eine Koordinate rauswirft, also meist mit einem ausreichenden Takt von 1Hz, dann kann ich die zur Zeit verfuegbaren Netze dazu assoziieren. Letztlich geht es hierbei um zwei Betrachtungsweisen, die sich zwei verschiedenen Fragen widmen:
- Welche Infrastrukturen gibt es an der Position X?
- Welche Position hat die Infrastruktur Y?
Beide Fragen sind durchaus interessant. Die Frage, die von den meisten Geoprogrammen beantwortet wird, ist die zweite, da gerade diese beim Wardriving interessant ist. Was ich mich jetzt frage ist:
Gibt es Anwendungsfaelle, bei denen es wichtiger ist, zu wissen welche Infrastrukturen an einer bestimmten Position sind? Wenn ja: Ist ein Hybridverfahren* eventuell geeignet?
* Das Hybridverfahren, das ich mir vorstelle, laesst sich wohl am Besten durch ein Event-basiertes System und einer Datenbank entwickeln:
Hierbei registriert sich die Klasse Main bei zwei Listenern, und implementiert deren Interfaces. Beide Methoden networkFound() und positionChanged() machen jetzt im Prinzip das Gleiche:
- Gefundene Netzwerke (im networkFound()-Fall genau eins) werden in die Datenbank geschrieben (z.B. in die Tabelle networks).
- Die Position wird in die Datenbank geschrieben (z.B. in die Tabelle positions).
- Es werden Relationen in eine dritte Tabelle (z.B. network_positions) geschrieben. Darin enthalten sind nur die jeweiligen IDs der Netzwerke bzw. Positionen.
Mit dem Verfahren lassen sich beide Fragen beantwortet. Dieses Verfahren ist jedoch nicht verbreitet (keins der bekannten Tools arbeitet auf diese Weise). Aber wieso nicht?
Mein idealer Arbeitsplatz
visus am 22. November 2009 um 19:34Durch Dirks Umfrage zum idealen Arbeitsplatz fuehle ich mich gezwungen auch etwas zu schreiben…
Mein idealer Arbeitsplatz erfuellt folgende Kriterien:
- das Arbeitsklima ist freundschaftlich; bei Fragen wird man unterstuetzt und Hilfe muss nicht erbettelt werden
- die Arbeitszeit ist frei; solange X am Y fertig ist, ist alles okay; es gibt kein Zeiterfassungssystem
- der Arbeitsort ist variabel. Wenn das Buero nervt, arbeitet man von Zuhause oder wo man moechte
- das Geld stimmt
- die Wahl der Hilfsmittel/Tools/Entwicklungsumgebungen/Software/Hardware ist frei
- es gibt keine Rufbereitschaft
- man muss nicht um Urlaubstermine streiten
- die Arbeit wird dokumentiert
- es wird strukturiert gearbeitet
- die Vorgesetzten wissen, wovon sie reden
- die Aufgabenstellungen werden klar formuliert
- Deadlines werden sinnvoll gelegt
- Risikoabschaetzung wird durchgefuehrt
Die meisten Punkte werden von meinem Job am Lehrstuhl extrem gut erfuellt, muss ich feststellen.
Howto: GPS to Android
visus am 10. November 2009 um 01:54Wie ich schon hier beschrieben, bastel ich im Moment etwas herum. Zur Zeit steht Android auf dem Programm. Ich habe gerade einen GPS Receiver vom Lehrstuhl hier liegen (und suche im Moment auch nach einem geeigneten Geraet fuer private Zwecke) und da kam mir heute die Frage auf: Wie zum Teufel bekomme ich die echten Daten in den Android Emulator?
Tja, das ist gar nicht so einfach. Es gibt die Möglichkeit, über die Eclipse IDE einzelne Koordinaten an den Emulator zu senden, sodass er diese als aktuelle Position annimt. Das geht auch ueber Telnet ganz wunderbar. Wie das geht ist hier beschrieben: You Are Here: Using GPS and Google Maps in Android. Das klaert aber noch nicht ganz, wie man jetzt die Daten vom echten GPS Geraet da hineinbekommt und das auch noch in Echtzeit.
Ich bin ja der Typ, der – statt endlos lang nach einer Loesung zu suchen – einfach mal ein Programm schreibt. Da der Emulator ja die aktuelle Position via Telnet annimmt, kann man das doch glatt ausnutzen. Wie das geht? So:
Erstmal ist Java alleine ja langweilig, also verwende ich C# und .NET, um mein kleines Problem zu loesen. Ich schreibe mir also eine Klasse, die das ermoeglicht:
public class LocationPipe { private SerialPort serialPort; private int port; private Socket socket; public SerialPort SerialPort { get { return this.serialPort; } set { this.serialPort = value; } } public int Port { get { return this.port; } set { this.port = value; } } public void Start() { if (this.socket == null) { this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); this.socket.Connect("localhost", this.port); } if (this.serialPort != null && !this.serialPort.IsOpen) { this.serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); this.serialPort.Open(); } } public void Stop() { this.serialPort.Close(); this.socket.Shutdown(SocketShutdown.Both); this.socket.Close(); this.socket = null; } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { try { string data = this.serialPort.ReadLine(); Console.WriteLine(data); if (!data.StartsWith("$GPGGA")) { return; } data = "geo nmea " + data + "\r\n"; byte[] bytes = Encoding.ASCII.GetBytes(data); this.socket.Send(bytes); } catch (Exception) { } } }
Dabei referenziert serialPort die Verbindung zum GPS Receiver und port gibt den Port zum Emulator an. Start() startet den Spass, Stop stoppt den Spass – easy as hell. Die Methode port_DataReceived() macht dann nichts anderes als eine Zeile vom COM Port zu lesen, zu pruefen, ob der Emulator damit was anfangen kann, um sie letztendlich dem Emulator zu senden.
Und so nutzt man die Kiste:
SerialPort serialPort = new SerialPort("COM8"); serialPort.BaudRate = 38400; // Haengt vom Endgeraet ab; 38400 sollte aber passen serialPort.Parity = Parity.None; serialPort.StopBits = StopBits.One; serialPort.ReadTimeout = 10; LocationPipe pipe = new LocationPipe(); pipe.SerialPort = serialPort; pipe.5554; // Haengt vom Emulator ab; 5554 sollte es aber sein, sofern nichts massiv geaendert wurde this.pipe.Start(); // Irgendwann sollte man das ganze noch stoppen!
Nunja, jetzt behaupte ich, dass das funktioniert. Damit man mir nicht widerspricht (das mag ich naemlich gar nicht), folgt jetzt noch eine Testapplikation, die im Android-Emulator die aktuelle Position stupide als Text anzeigt.
Die Activity nenne ich mal LocationViewer, demnach sollte es eine solche Datei geben, die folgendes enthaelt:
package net.visus; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; public class LocationViewer extends Activity implements LocationListener { private LocationManager locationManager; private TextView textView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.textView = (TextView) this.findViewById(R.id.textBox); this.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); for (String provider : this.locationManager.getAllProviders()) { this.locationManager .requestLocationUpdates(provider, 1000, 0, this); } } @Override public synchronized void onLocationChanged(Location location) { if (location != null) { this.textView.setText("Latitude:\t\t" + location.getLatitude() + "\nLongitude:\t" + location.getLongitude() + "\nAltitude:\t\t" + location.getAltitude() + "\nSpeed:\t\t" + location.getSpeed() + "\nAccuracy:\t\t" + location.getAccuracy() + "\nBearing:\t\t" + location.getBearing() + "\nTime:\t\t\t" + location.getTime()); } } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } }
Damit das ganze laeuft, sollte es auch eine Textbox im Layout geben (res/layout/main.xml):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/textBox"/> </LinearLayout>
Das Programm braucht jetzt noch die Rechte, auf den Location Service zugreifen zu duerfen (ApplicationManifest.xml):
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.visus" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".LocationViewer" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> </manifest>
Und dann sieht das so aus:
GPS Device?
visus am 9. November 2009 um 21:23Zur Zeit suche ich ein geeignetes GPS Geraet, das folgende Eigenschaften erfuellen soll:
- Bluetooth + USB
- Logging + Real-Time Navigation
- Manuelle Speicherung der Position (Push-To-Log)
- mind. 50 Kanaele
- lange Akkulaufzeit (Minimum: 10 Stunden)
- mind. 1 Hz (Logging & Receiving)
- AGPS Unterstuetzung
- NMEA via COM Port lesbar
- Real-Time Navigation via Google Earth soll moeglich sein
- Speicher fuer mind. 100.000 Wegpunkte
- geringe Cold/Warm/Hot-Startzeiten
- geringer Preis (< 80 EUR)
Hat jemand zufaellig Erfahrungen und Vorschlaege?
Nachtrag (10.11.2009):
Ich habe mir heute einen GPS Receiver von Nokia bei Amazon gekauft, weil ich das Teil heute life testen konnte und positiv ueberrascht war. Das werde ich erstmal durchtesten. Vorschlaege fuer andere Geraete sind immernoch willkommen, da ich einen Logger haben moechte. Ich habe das Geraet aber nur gekauft, weil es extrem guenstig und dafuer sehr gut ist. Gekauft habe ich es bei Amazon: Nokia LD-4W Bluetooth GPS Modul.











