USB-Herelist: Unterschied zwischen den Versionen

aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Zur Navigation springenZur Suche springen
(MOS (Metalab-Hauptseitenintegration))
Zeile 2: Zeile 2:
 
== Aktuelles ==
 
== Aktuelles ==
 
'''Status:''' Anfang der Beta-Phase
 
'''Status:''' Anfang der Beta-Phase
'''Metalab-Hauptseitenintegration:''' Ich hab mitgekriegt, dass es in Django geschrieben ist, also hab ich eine einfache fehlertolerante, offline-fähige Implementation geschrieben: [[USB-Herelist/MOS]]
+
'''Metalab-Hauptseitenintegration:''' Ich hab mitgekriegt, dass es in Django geschrieben ist, also hab ich eine einfache fehlertolerante, offline-fähige Implementation geschrieben: [[USB-Herelist/MOS]].
  
  
Zeile 25: Zeile 25:
 
** Auf Anfrage ausgeben der Liste -> kleiner HTTP-Server, XML und plain text
 
** Auf Anfrage ausgeben der Liste -> kleiner HTTP-Server, XML und plain text
 
* Vorschlag für MOS: -> [http://metalab.at/wiki/Diskussion:USB-Herelist#MOS-Schnittstelle Diskussion], [http://getsatisfaction.com/metalab/topics/herelist_schnittstellendefinition MOS-Bugtracker]
 
* Vorschlag für MOS: -> [http://metalab.at/wiki/Diskussion:USB-Herelist#MOS-Schnittstelle Diskussion], [http://getsatisfaction.com/metalab/topics/herelist_schnittstellendefinition MOS-Bugtracker]
** HTTP-GET-Requests an eine URL mit /update-herelist.php?event=Nickname%20has%20left.
+
** Das Terminalgerät schickt, wenn: Etwas geändert wurde oder 20 Minuten vergangen sind, einen update-request, der die Liste beinhaltet. Die Webseite liefert aus dem Cache aus, außer der Cache ist älter als 30 Minuten oder die Herelist leer ist.  
** HTTP-GET-Request serving auf einem Port mit plaintext-Liste oder, falls nötig, äußerst einfachem XML-RPC.
+
** für eine Implementation siehe [[USB-Herelist/MOS]].
 
** Wenn man ganz motiviert ist, kann man mit AJAX (lies: XMLHttpRequest) den Bildschirm in Echtzeit updaten.
 
** Wenn man ganz motiviert ist, kann man mit AJAX (lies: XMLHttpRequest) den Bildschirm in Echtzeit updaten.
* Schön ist auch, dass nirgends Polling benötigt wird.
+
* Schön ist auch, dass nirgends Polling notwendig ist.
  
 
== Begrenzung ==
 
== Begrenzung ==

Version vom 15. Dezember 2007, 19:24 Uhr

USB-Herelist verwaltet eine Liste von Personen, die sich im Metalab befinden.

Aktuelles

Status: Anfang der Beta-Phase Metalab-Hauptseitenintegration: Ich hab mitgekriegt, dass es in Django geschrieben ist, also hab ich eine einfache fehlertolerante, offline-fähige Implementation geschrieben: USB-Herelist/MOS.


Funktion

  • USB-Gerät (Stick, Kamera, MP3-Player) werden ins Terminal gesteckt
  • Das Programm benutzt lsusb um die Gerätinformationen auszulesen (Hersteller, ID, Produkt) und bildet daraus einen SHA1-Hash
  • Insbesondere wird das Gerät nicht gemountet.
  • Falls noch nicht bekannt, kann man das Gerät zu seinem Nicknamen registrieren lassen (auch mehrere Geräte).
  • Sonst: Bei reinstecken wird zwischen "im Lab" und "nicht im Lab" (auf der Herelist/nicht auf der Herelist) ge-toggled.
  • Gespeicherte Informationen: Nickname, SHA1 der lsusb-Informationen.
  • Nach einer Timeout-Zeit (derzeit 12h) wird man vom System auch ausgetragen.

Erweiterbarkeit

  • Gewünscht ist, dass die Information auf der Webseite dynamisch angezeigt wird. Dazu ist noch eine Schnittstelle zu definieren

Bezug zu anderen Projekten

  • consti: KnockKnock:
    • Liest SNMP (Laptops die im Lab sind) und Barcodes. Läuft noch nicht.
    • Sobald funktionsfähig, wird USB-Herelist auch in dieselbe Datenbank speichern. Die Schnittstelle, die andere Metalab-Komponenten beliefert, wird dann daraus die Informationen beziehen.

Schnittstellen

  • Vorteil ist, dass beliebige Schnittstellen möglich sind
    • Bei Auftreten von Events: kommen, gehen -> UDP-Broadcasts, HTTP-GET-Requests an Web-Projekte
    • Auf Anfrage ausgeben der Liste -> kleiner HTTP-Server, XML und plain text
  • Vorschlag für MOS: -> Diskussion, MOS-Bugtracker
    • Das Terminalgerät schickt, wenn: Etwas geändert wurde oder 20 Minuten vergangen sind, einen update-request, der die Liste beinhaltet. Die Webseite liefert aus dem Cache aus, außer der Cache ist älter als 30 Minuten oder die Herelist leer ist.
    • für eine Implementation siehe USB-Herelist/MOS.
    • Wenn man ganz motiviert ist, kann man mit AJAX (lies: XMLHttpRequest) den Bildschirm in Echtzeit updaten.
  • Schön ist auch, dass nirgends Polling notwendig ist.

Begrenzung

  • USB-Herelist kann nicht zur Authentifizierung verwendet werden, dazu ist die Information zu unsicher.
  • Insbesondere ist es kein Anmelde-, Schlüssel- oder RFID-Ersatz
  • Es ist kein Logging vorgesehen. Die einzige Information die gespeichert wird ist der derzeitige Zustand.

Wert der Information

  • Die Benutzung ist freiwillig, daher ist die Information sicher immer unvollständig.
  • Leute, die das System benutzen, sagen damit anderen (evtl. über die Webseite), "Hi, ich bin im Lab!"
  • Wenn ein USB-Gerät geklaut wurde oder nachgebaut, oder wenn jemand den Namen eines Anderen für sein Gerät einträgt, kann die Liste gefälscht werden. Bei 2 Produkten, die keine ProductID angeben, kann eine Überschneidung sogar unabsichtlich passieren. Das sollte aber auffallen.

Der Informationsgehalt lässt sich mit dem von Wikipedia vergleichen: unvollständig, fälschbar, nicht sicher, aber so gut wie immer richtig.

Wozu das alles

  • Es ist oft nett, zu wissen, ob eine Person A im Lab ist, weil man vl. von A etwas braucht, quatschen will, etc.
  • Das Schönste daran finde ich, dass es freiwillig ist.

Code

Datei:Usbherelist-2007-12-15.tar.bz2.

  • Systemkonfiguration: 60 Zeilen.
    • crontab für timeout
    • /etc/event.d/tty2 für USB-Herelist auf tty2
    • /etc/init.d/usbherelist-httpd für http-server starten/stoppen
    • /etc/syslog.conf für fifo-Ausgabe, damit nicht als root die kernel-log angesehen werden muss
    • /etc/visudo: lsusb als root
  • Http-Server: 77 Zeilen (netcat + bash)
    • plaintext (\n-Getrennte Liste) & pseudo-xmlrpc
  • usb-herelist: 207 Zeilen.
    • läuft auf tty2

Notizen

  • tail hat einen Buffer. Das suckt. Aber: Workaround gefunden.
  • Der Einschaltknopf ist am Notebook zwischen Display und Notebook, am Notebook, in der Mitte, unten ein weißes Zäpfen das man nach rechts drückt. Wird nicht runtergefahren, wenn man im laufenden Betrieb drückt.
  • Netzkabel steht unter Strom.
  • Ubuntu verwendet upstart (statt inittab).

Links

  • Die Diskussion findet sich auf der Liste von 2007-October beginnend mit diesem Eintrag.