Linux auf 486-Architektur

Ich wollte dieses Wochenende einen alten Toshiba-Laptop mit Ubuntu beglücken und kam nicht recht voran. Am Anfang versuchte ich es mit Lubuntu und schon beim Livesystem-Start meldete mir der Rechner, dass der CPU nicht unterstützt wird. Eine Netzsuche ergab die Kernel-Option „forcepae“, um das Problem zu umgehen. Nun gab es erst nach dem Start ein Problem, welches zu einem nicht mehr reagierenden System führte.

Bei der Ubuntu-Netzinstallation gab es schon beim Laden der Deb-Pakete Probleme. Das Programm stürzte mit einem Speicherzugriffsfehler ab. Nach einem Lauf von memtest86+ (RAM-Test), konnte ein Hardwaredefekt im Speicher ausgeschlossen werden.

Als nächstes versuchte ich die Server-Variante von Ubuntu zu installieren. Und da kam endlich die Fehlermeldung, die das Problem zeigte: Während der Installation meldete die Routine, dass für diesen CPU kein Kernel installiert werden kann. Für die Architektur „486“ liegt kein passendes Paket vor und man soll sich selber darum kümmern.

Nach einer weiteren Netzsuche musste ich feststellen, dass Ubuntu seit Version 10.10 die 486-CPUs nicht mehr unterstützt. Aber Debian führt noch ein Paket linux-image-486. Die Installation lief ohne zusätzliche Kernelparameter durch. Der passende Kernel wurde automatisch gewählt. Also bei älteren Rechnern in Zukunft gleich Debian wählen!

Getagged mit: , ,
Veröffentlicht unter Linux

Feuerwehrsport-Statistik auf Rails umgestellt

Seit 2012 betreibe ich die Seite Feuerwehrsport-Statistik.de. Die Idee dahinter entstand bei der Auswertung der Wettkampfsaison 2012, bei der ich ein paar Fakten zu den persönlich erreichten Zeiten jedes Mannschaftsmitglieds des Feuerwehrsport Team-MVs zeigen wollte. Schnell merkte ich, dass ich neben den Daten von Daniel Grosche noch viele weitere Ergebnisse im Netz fand. Die auf PHP, Javascript, CSS und MySQL basierende Seite wuchs immer weiter. Auf Bootstrap und jQuery aufbauend programmierte ich vieles selber. Da die Berechnungen immer komplexer wurden, nutzt ich die Funktionen vom Apache-Webserver, um mithilfe von Caching die Ausgabe zu beschleunigen.

Als ich im Sommer 2013 bei der milabent GmbH einstieg, lernte ich die Vorzüge von Rails mit Coffeescript kennen. Ich stellte das genutzte Javascript auf der Seite auf Coffeescript um. Die Seite wurde auch immer bekannter in der Szene. Es kamen immer mehr Funktionen hinzu, was allerdings nicht zur Codequalität beitrug. Immer mehr merkte ich, dass die fehlende Testabdeckung und das unzureichende Framework bei weiteren Arbeiten hinderlich ist.

Im Frühjahr 2015 setze ich ein neues Projekt um: Der Wettkampf-Manager für Feuerwehrsport-Wettkämpfe. Eine Rails-Applikation, die Wettkämpfe im Feuerwehrsport auswerten kann. Dabei nutzt es Daten von der Statistikseite, um Vorschläge bei der Eingabe von Namen zu machen. Die aktuelle Version läuft unter Linux, MacOS und Windows.

Allerdings zeigte mir das Projekt, dass auch die Statistikseite so nicht auf Dauer existieren und weiterentwickelt werden kann. Im Herbst 2015 fing ich mit den Grundlagen eines Rails-Projektes der Umstellung an. Einige Probleme und deren Lösungen wurden im Blog diskutiert, weitere werden folgen.

Natürlich ist es schade, dass das schöne PHP-Projekt jetzt eingestampft wird, allerdings war es ja nicht umsonst. Viele Feuerwehrsportler nutzen die Möglichkeit und brachten mich dazu, viele Dinge über PHP und auch Ruby zu lernen, die mir sonst nicht unter die Finger gekommen wären.

In der Zukunft wird sich die Seite mehr mit dem Wettkampf-Manager vermischen. Vermutlich werden sie sich auch auch einen gewissen Teil der Code-Basis teilen. Dadurch wird die Pflege leichter und beide Seiten können besser miteinander interagieren.

Getagged mit: ,
Veröffentlicht unter Informatik, Programmierung

Nullmailer mit statischer Absenderadresse

Der Nullmailer für Linux-Systeme lässt Systemmails ressourcenschonend an einen anderen Mail-Hub weiterleiten. Bei meinem Mail-Server muss die Absenderadresse aber stimmen. Dies kann man leider in Nullmailer nicht konfigurieren. Eine Walkaround gibt es schon, der aber nicht bei Hintergrundprozessen ohne Shell funktioniert. Dafür muss man den Standard-Input noch austauschen.

 

Getagged mit: ,
Veröffentlicht unter Linux, Programmierung

PostgreSQL vs. MySQL und DB-Views bei Feuerwehrsport-Statistik.de

Auf meiner Webseite Feuerwehrsport-Statistik.de rechne ich mit relativ vielen Daten Statistiken aus. Dabei werden unter anderem auch Joins über große Tabellen durchgeführt. Bisher läuft das über PHP mit MySQL. Es gibt keine Abstraktionsschicht und so wird jede SQL-Query einzelnd geschrieben.

Um die immer weiter wachsenden Anforderungen zu erfüllen, probiere ich gerade das Projekt zu Rails zu konvertieren. Dabei sollen die Abstraktionen von ActiveRecord genutzt werden, um möglichst wenig eigenen SQL-Code zu schreiben. Aber schon bei obigen Beispiel stößt ActiveRecord an seine Grenzen.

Datenbank-Views in Rails

Kurze Erklärung zum Verständnis: Mitglied einer Mannschaft kann man über zwei verschiedene Arten werden. Einmal ist man für eine Mannschaft in einer Gruppendisziplin gestartet (person_participations) oder man ist in einer Einzeldisziplin für diese Mannschaft gestartet (scores). In ActiveRecord kann man beide Beziehungen mittels has_many abbilden.

Um jetzt alle Mitglieder einer Mannschaft zu bestimmen, muss man einen UNION über scores und person_participations bilden.

Diese Methode liefert zu einer bestimmten Mannschaft alle Mitglieder. Will man aber die Mannschaften nach Mitgliederanzahl sortieren, muss man für alle Mannschaften (zur Zeit 2110) diese Methode und somit eine aufwendige SQL-Query absetzen. Nützliche Rails-Funktionen wie joins und includes funktionieren nicht.

Die Lösung liefert die Datenbank: Views. Views sind Abbilder auf die Daten. Sie können nur gelesen werden. ActiveRecord unterstützt diese nicht direkt, was sich vor allem dadurch widerspiegelt, dass sie nicht in der schema.rb auftauchen. Ich habe das nach einer Anleitung implementiert und schon funktionieren die Anfragen.

PostgreSQL ist 14-mal schneller als MySQL

Nachdem ich für eine Übersichtsseite auch die Anzahl der Wettkampfteilnahmen pro Mannschaft brauchte, dauerte die Anfrage trotz zweier Views mit MySQL 2110 ms. In diesem Fall sind team_members und team_competitions Views, die mit mehreren JOIN- und UNION-Operationen arbeiten.

Einem Kommentar auf Stackoverflow zur Folge lohnt es sich PostgreSQL als Alternative zu MySQL auszuprobieren. Der Kommentar behauptet, dass MySQL mit komplexen Joins manchmal Probleme macht. Dank Rails ist ein Umstieg auf eine anderes RDBMS kein Problem. Die gleiche Abfrage dauert nun nurnoch 143 ms.

Auf verschieden Vergleichsseite von RDBMS ist auch immer wieder zu lesen, dass für jeden Anwendungsfall die Auswahl der Datenbank einzelnd erfolgen soll, denn die Performance hängt stark von den verwendeten Operatoren ab. Für die neue Implementierung der Statistikseite wird also PostgreSQL zum Einsatz kommen.

Getagged mit: , , , , ,
Veröffentlicht unter Informatik

Raspberry Pi 2 mit mehr USB-Strom

Seit ein paar Tagen bin ich Besitzer eines Raspberry Pi 2 und wollte eine externe Festplatte ohne sekundäre Stromversorgung anschließen. Dabei nutzte ich den Image von sjoerd.luon.net mit Jessie. Der genutzte Kernel erkennt die /boot/config.txt nicht und somit ist die im Netz viel genannte Option max_usb_current=1 nutzlos.
Aber man kann das Bord auch direkt zur Stromübertragung zwingen. Dafür muss der GPIO-Port 38 hochgesetzt werden. Das passiert so:

Wird das in die /etc/rc.local eingetragen, wirkt die auch bei jedem Booten erneut.

Getagged mit: ,
Veröffentlicht unter Linux

AIX – Prozesse zu offenen Ports zuordnen

Möchte man in AIX die offenen Ports überprüfen, hilft es, wenn man die zugehörigen Prozesse kennt. Leider hat AIX dafür keine eigene Funktion, weshalb man sich selbst helfen muss.

Dieser Befehl sollte die geforderte Ausgabe liefern. Kurze Erklärung:

1. netstat -Aan | grep <port number>

  • This shows if the specified <port number> is being used. The hex number in the first column is the address of protocol control block (PCB)

2. rmsock <addr of PCB> tcpcb

  • This shows the process who is holding the socket. Note: This command must be run as root..

Siehe http://www-01.ibm.com/support/docview.wss?uid=swg21264632

Diese Ausgaben werden mittels awk verbunden und in einer Datei gespeichert. Danach werden zu jedem Prozess noch zusätzliche Informationen gesucht.

Getagged mit: , , ,
Veröffentlicht unter Informatik

Adressangabe für Garantie bei Mediamarkt

Adresse für Barkauf?

Anne hat sich neulich ein neues Mobiltelefon zugelegt. Dafür sind wir zusammen im Mediamarkt Brinksmannsdorf gewesen. Nachdem ein Gerät ausgesucht war und die Verkäuferin ein solches Modell aus dem verschließbaren Schrank geholt hatte, wurde Anne nach ihren Namen mit Adresse gefragt. Über die Schulter fragte ich dann die Verkäuferin, wofür die Daten denn gebraucht werden. Leider konnte sie mir diese Frage nicht zufriedenstellend beantworten. Es klang so:

Irgendwie für die Garantie. Wir machen damit nichts.

Ich fragt, ob sie mir eine Datenschutzerklärung oder so etwas geben könnte und wurde dann zur Information verwiesen. Dort schilderte ich die Aussage der Verkäuferin und bekam leider nur eine ähnliche Antwort. Nach einer weiteren Nachfrage konnte mir die Informationsfrau nur noch hinzugeben, dass die Angabe freiwillig ist und man bei Nichtangabe nicht die vollständige Garantie erhält. Sicher war sie sich aber auch nicht.

Kontaktaufnahme im Internet

Da der Abend schon lang war, beschloss ich meine Nachforschungen am nächsten Tag im Internet fortzusetzen. Leider fand ich auf der Mediamarkt-Webseite und auch über diverse Internetsuchen keine Informationen zu diesen gesammelten Adressdaten. Ich beschloss, Kontakt aufzunehmen. Ich schilderte mein Problem über das Kontaktformular auf der Webseite. Nach kurzen E-Mailverkehr bezüglich einer ungenauen Angabe meinerseits erhielt ich folgende Antwort (30.01.2013 15:03 Uhr):

Sehr geehrter Herr Meier,

vielen Dank für Ihre Email.

Wir werden uns Ihrem Anliegen annehmen und uns umgehend nach Klärung, erneut mit
Ihnen in Verbindung setzen.

Mit freundlichen Grüßen

Anja XXXXXXXX

Schon am gleichen Tag erhielt ich eine weitere E-Mail von einem für den Rostocker Mediamarkt zuständigen Herrn (30.01.2013 17:23 Uhr):

Sehr geehrter Herr Meier,

vielen Dank für Ihre Mail vom heutigen Tag.

Gern beantworte ich Ihre Anfrage nach unseren Datenschutzbestimmungen bezüglich der von Kunden für Barverkäufe angegebenen Daten.
Um die von Ihnen gewünschte Datenschutzerklärung, sowie ein Verfahrensverzeichnis zu bekommen wende ich mich persönlich an unsere Hauptverwaltung.

Eine Antwort auf meine Anfrage erhalte ich am morgigen Donnerstag.
Diese stelle ich Ihnen anschließend gern per Mail zur Verfügung.

Für Fragen stehe ich Ihnen bis dahin selbstverständlich auch persönlich oder telefonisch zur Verfügung.

mit freundlichen Grüßen

Justus XXXXXXXXXX
Bereichsleiter Neue Medien

Ich fragte dann nach einer Woche nochmal nach, wie es aussieht und bekam dann eine Antwort, dass die Auskunft in Arbeit sei. In der darauf folgenden Woche erhielt ich dann folgende Antwort (11.02.2013 15:34):

Sehr geehrter Herr Meier,

heute kann ich Ihnen, wie gewünscht, ein Verfahrensverzeichnis zur Verfügung stellen.
Die Erhebung kundenbezogener Daten erfolgt in unserem Haus zur Erleichterung von Reklamationen und Geltendmachung von Gewährleistungsansprüchen im Falle eines Verlusts von Kaufbelegen, etc.
Dies geschieht auf freiwilliger Basis seitens unserer Kunden.

mit freundlichen Grüßen aus Rostock

Justus XXXXXXXXXX
Bereichsleiter Neue Medien

Ich habe dann in einer weiteren Anfrage um Erlaubnis gefragt, die Verfahrensanweisung zu veröffentlichen, woraufhin ich eine Zusage bekommen habe. Hier ist das bereitgestellte Dokument als PDF. Wikipedia definiert eine Verfahrensanweisung so:

Eine Verfahrensanweisung ist ein Dokument, das durch verschiedene Normen gefordert wird, um die normativ vorgeschriebenen Abläufe im Sinne einer verbindlichen Vorschrift im Unternehmen nachvollziehbar zu dokumentieren.

Daten nur für Erleichterung?

Wenn ich den Aussagen des Bereichsleiters und der Verfahrensanweisung Glauben schenken darf, dann werden die Adressdaten wirklich nur dafür genutzt im Falle einer Garantieleistung die Daten schon gespeichert zu haben. Klingt erst einmal sehr fragwürdig, gerade wenn man noch folgenden Absatz zusätzlich auf der Zunge zergehen lässt:

Es wurden keine Löschfristen festgelegt. Eine automatisirte Löschung von Daten erfolgt derzeit nicht. Kundendaten werden auf Anfrage gelöscht bzw. gesperrt, wenn Aufbewahrungspflichten aus gesetzlichen, vertraglichen oder satzungsmäßigen Vorgaben (HGB, AO ua.) einer Löschung entgegenstehen und kein Grund zu der Annahme besteht, dass eine Löschung/Sperrung schutzwürdige Interessen der betroffenen Person beeinträchtigt.

Im Prinzip heißt das, dass von alle Leute die schon einmal etwas bei Mediamarkt zurückgegeben habe (dann muss man auch die Adresse angeben) oder eine solche Adressangabe pro forma ausgefüllt haben, immer noch die Daten gespeichert sind. Dies kann ich auch so bestätigen. Ich selber wollte schon mal was zurückbringen. Mein Nachname war schon gespeichert, allerdings der Vorname meines Bruders. Als ich ihn darauf ansprach meinte er, dass die Reklamation Jahre zurücklag.

Fazit – Datensammeln ohne Grund

Für mich ergibt sich hier eine große Datensammlung, die keinen Sinn ergibt. Die Daten dürften nach meinen Verständnis gar nicht erhoben werden, denn der oberste Grundsatz des Datenschutzes lautet „Datenvermeidung“. Ich hoffe, dass Mediamarkt alles in ihrer Macht stehende tut, um die Adressdaten ihrer Kunden zu schützen.

Getagged mit: , , ,
Veröffentlicht unter Datenschutz, Rostock

Linux in ein paar Minuten herunterfahren

Mit Zenity kann man viele komplizierte Kommandozeilen-Eingaben schön verpacken und somit sogar versteckte Linux-Funkionen dem normalen Benutzer zugängig machen. Eine solche Funktion ist das zeitgesteuerte Herunterfahren. Dies kann man nutzen, wenn man vor dem Einschlafen noch Musik vom Rechner hören möchte oder ein Download noch nicht abgeschlossen ist.

Dabei wird der Befehl Herunterfahren (shutdown) mit dem Super-User-Rechten (sudo) aufgerufen. Die Parameter -h (Ausschalten) und +30 (in 30 Minuten) geben zusätzliche Informationen. Nach der Eingabe wird der Nutzer nach dem Passwort gefragt, weil sudo dies verlangt. Eine sehr aufwendige Methode, die man sich merken muss.

Zenity machts graphisch

Mit der Zenity-Bibliothek kann man diese Aufgabe nun graphisch lösen. Dafür legt man folgendes Skript unter den Namen ausschalten.sh an.

Dieses macht man mit dem Befehl chmod +x ausschalten.sh ausführbar. Es fehlt nur noch ein Eintrag in der Datei, die den Zugriff auf die Super-User-Funktionen regelt. Dafür ruft man im Terminal den Befehl sudo visudo auf. Am Ende der angezeigten Datei fügt man folgende Zeile ein, wobei der eigene Benutzername einzusetzen ist:

Führt man das oben angelegte Skript nun aus, wird man zuerst nach der Anzahl der Minuten gefragt. Dann wird der Shutdown-Befehl ausgeführt und ein Fenster mit den Hinweis darauf angezeigt. Wird dieses Fenster geschlossen, wird auch der Herunterfahren-Prozess beendet.

Veröffentlicht unter Allgemein

Div mit Textarea ersetzten

Möchte man eine Seite dynamisch bearbeiten, gibt es die Möglichkeit die Inhalte mit einer Textarea zu ersetzen. Normalerweise sehen die Inhalte in einer Textarea jedoch deutlich anders aus, als die Inhalte der Seite. Gerade, wenn man den Inhalt einer Überschrift auf diese Weise zur Bearbeitung anbieten möchte.

Bindet man die Textarea nun an die gleichen CSS-Eigenschaften, die für das Div oder H1-Element festgelegt sind, wird einem auffallen, dass es bei dem Wechsel zur Textarea eine Abstandskorrektur vom Browser gibt. Es scheint, als ob bei folgenden Szenario die ersten beiden Elemente dichter zusammen sind, als die zweiten und das obwohl die Abstandseigenschaften gleich sind.

<div style="margin:5px; padding:0"></div>
<div style="margin:5px; padding:0"></div>

<textarea style="margin:5px; padding:0"></textarea>
<div style="margin:5px; padding:0"></div>

Dieses Problem liegt an den Standardeinstellungen der Display-Eigenschaft. Div und Überschrift-Elemente sind standardmäßig auf block gestellt, während eine Textarea auf inline steht. Korrigiert man dieses, kann ein gleiches Aussehen erreicht werden.

Mittels folgenden Jquery-Anweisungen kann eine fast identische Textarea eingefügt werden:

Getagged mit: , , , ,
Veröffentlicht unter Programmierung, Webseite

US-Richter erklärt die Welt

Endlich hat ein Gericht verstanden, warum IP-Adressen nicht zur Personenidentifikation eingesetzt werden kann. Das besondere dabei: Es handelt sich um ein Gericht aus New York. Die Einschätzung des Richters hat Netzpolitik.org übersetzt:

Die Kläger behaupten, dass die Angeklagten, die nur durch eine IP-Adresse identifiziert werden, die Personen sind, die einen Inhalt aus dem BitTorrent-Schwarm heruntergeladen haben.

Allerdings ist die Annahme, dass die Person, die für einen Internetzugang an einem bestimmten Ort bezahlt, die gleiche Person ist, die einen Film heruntergeladen hat, fraglich und wird mit der Zeit immer fraglicher. Eine IP-Adresse bestimmt nur den Ort, an dem eine beliebige Anzahl an Computer-Geräten eingesetzt sein kann, so wie eine Telefonnummer für eine beliebige Anzahl von Telefonen verwendet werden kann.

Wenn sie nur einen Computer an das Internet anschließen, kann dieser die Adresse von ihrem Provider verwenden. Viele Haushalte verwenden heutzutage jedoch Router, um einen einzigen Internet-Anschluss mit vielen Computern zu teilen. In den letzten Jahren sind WLAN-Router besonders populär geworden. Wenn Sie einen Router verwenden, um eine Internetverbindung gemeinsam zu nutzen, bekommt der Router die IP-Adresse direkt vom Provider zugewiesen. Anschließend erstellt und verwaltet dieser ein Subnetz für alle Computer, die an diesem Router angeschlossen sind.

Dass der Anschluss-Inhaber hinter einer IP-Adresse eine bestimmte Computer-Funktion vorgenommen hat, hier das angebliche illegale Herunterladen eines einzelnen pornografischen Films, ist daher nicht wahrscheinlicher als zu sagen: Derjenige der die Telefonrechnung bezahlt, hat auch einen bestimmten Anruf gemacht. Wegen der steigenden Beliebtheit von WLAN-Routern ist das sogar viel weniger wahrscheinlich. Während es vor zehn Jahren noch fast keine drahtlosen Netzwerke in privaten Haushalten gab, verfügen mittlerweile 61% der US-Haushalte über einen solchen Zugang.

Viele Internet-Provider bieten einen kostenlosen WLAN-Router als Teil ihres Internet-Pakets an. Aus diesem Grund unterstützt eine einzige IP-Adresse der Regel mehrere Endgeräte, die im Gegensatz zu Telefonen gleichzeitig von verschiedenen Personen betrieben werden können.

Die Downloads könnten von verschiedenen Familienmitgliedern oder sogar Besuchern durchgeführt wurden sein. Außer wenn der WLAN-Router eine entsprechende Verschlüsselung hätte (und manchmal sogar dann), können auch Nachbarn oder Passanten über die IP-Adresse des Anschlussinhabers auf das Internet zugreifen.

Manche IP-Adressen können Unternehmen oder Einrichtungen gehören, die ihren Mitarbeitern, Kunden oder sogar der Öffentlichkeit Internet-Zugänge anbieten, wie es in Bibliotheken oder Cafés üblich ist.

Deshalb ist es unwahrscheinlich, dass eine IP-Adresse einem “Gerät” zugeordnet ist und der Anschlussinhaber auch der Angeklagte ist, wie die Kläger behaupten. Die meisten, wenn ich sogar alle, IP-Adressen zeigen auf einen WLAN-Router oder ein anderes Netzwerkgerät. Obwohl ein Provider den Name des Anschlussinhabers herausgeben kann, kann die Urheberrechtsverletzung durch den Inhaber, ein Familienmitglied, Mitarbeiter, Gast, Nachbar oder einen Eindringling begangen worden sein.

Getagged mit: , ,
Veröffentlicht unter Urheberrecht