Blog Image

Linux^2

What you may find here

In this blog you'll mainly find all things Linux - problems, solutions, reports, rants, tips & tricks etc. with the occasional off-topic entry thrown in. You never would have guessed looking at the URL, huh?
In diesem Blog findet ihr hauptsächlich Themen rund um Linux - Probleme, Lösungen, Berichte, Meinungen, Tips & Tricks und dazwischen ein paar überhaupt nicht dazu passende Einträge. Wärt ihr bei der URL nie drauf gekommen, ne?

Mailt mal! Email me!

Weiterentwicklung…

gsm-ussd Posted on Di, Juni 01, 2010 16:44:26

Selbst kleine Skripte werden, wenn man sie in die große weite Welt entlässt, mit der Zeit ziemlich groß. Mit zur Zeit über 1500 Zeilen ist gsm-ussd für das, was es kann, eigentlich nicht besonders groß, aber es wird mir langsam etwas unübersichtlich. Das mag auch an meinem eigenen Unvermögen liegen, ist aber grundsätzlich ein paar Designentscheidungen geschuldet. Den meisten davon war ich mir zu Beginn noch nicht mal bewußt, bin ihnen aber trotzdem gefolgt:

  • Möglichst wenig externe Abhängigkeiten
  • Möglichst eine einzelne Datei
  • Möglichst keine Konfiguration
  • Einfache Installation

An Abhängigkeiten ist – außer perl als Skriptsprache – nur noch Expect.pm dabei, welches in den mir bekannten (großen) Distributionen im Repository steckt. Zu Beginn verwendete ich beispielsweise noch Log::Log4Perl, habe dies aber durch eine eigene kleine DEBUG()-Funktion ersetzt. Ansonsten kann gsm-ussd als einzelne Datei an beliebiger Stelle im Verzeichnisbaumk stehen und wird funktionieren. Eine Konfigurationsdatei existiert nicht. Zur Installation stehen zusätzlich ein RPM und ein DEB Paket parat.

Diese Entscheidungen bringen aber auch Probleme mit sich.

  • Testen wird schwieriger
  • Wiederverwendung wird schwieriger
  • Weniger Flexibilität in der Entwicklung

Änderungen an bestehendem Code sind schwerer zu testen, ob sie Regressionen verursachen. Ideen eigene Programme für SMS-Versand/Empfang (gsm-sms) oder ein reines PIN/PUK-Setz-Programm (gsm-pin) wären auf der bestehenden Basis nicht schwer zu erstellen, würden aber duplizierten Code und damit erhöhten Pflegeaufwand bedeuten.

Kurz: Der ursprüngliche Ansatz war korrekt für ein einfaches, kleines Skript, wie gsm-ussd auch begonnen hat. Mittlerweise passen sie aber nicht mehr.

Meine Konsequenzen:

  • Der 0.3er Zweig von gsm-ussd wird erhalten bleiben, aber nur noch reinem Bugfixing vorbehalten sein. Im git-Repository wird das der Branch „v0.3“ sein.
  • In der weiteren Entwicklung werde ich den Code wesentlich stärker modularisieren und objektorientiert designen. Der Entwicklung kann im git-Repository im Zweig „dev“ gefolgt werden. Intern wird dieser Zweig 0.4er Versionsnummern bekommen.
  • Hat der neue Code dann eine gewisse Stabilität gewonnen, wird er in einem Schlag zum Master übernommen und dann unter der Versionsnummer 0.5.x weitergeführt werden.

Solltet ihr also in nächster Zeit keine großen Ankündigungen zu gsm-ussd auf freshmeat.net oder so finden, keine Bange. Die Entwicklung stoppt nicht, sondern konzentriert sich erst mal auf eine solide Basis für weitere Ideen.



gsm-ussd 0.3.2 – Nicer behaviour!

gsm-ussd Posted on Di, Juni 01, 2010 07:55:14

v0.3.2 is out.

Two distinct changes went into gsm-ussd..

First: After entering the PIN, the modem first has to register in its net. gsm-ussd waits for that and only proceeds if the modem reports a successful registration, but some modems are a bit too optimistic. They might be freshly registered, but USSD queries still time out. Now, gsm-ussd waits for another turn if the modem just registered to give it time so settle, so that USSD queries can succeed.

Second: If several programs are using one and the same serial interface, the data coming from the modem get corrupted. After all, a serial interface is a point-to-point connection; having more than the modem and one program on the interface has to break. In Linux, access to serial interface is regulated by lock files saved in /var/lock. Sadly, up to now gsm-ussd did not adhere to this convention, so if there was still a picocom running (for debugging purposes), both stepped over each other, ruining everything in the progress. This bug is done now, gsm-ussd will create lock files or quit if one already exists.

Here the new files for download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0_all.deb

And an overview about all downloadable versions :
http://linux.zum-quadrat.de/downloads/index.html.

The public git repository can be found at
http://github.com/JochenHoch2/gsm-ussd.git
or
git://github.com/JochenHoch2/gsm-ussd.git

Have fun,
Jochen



gsm-ussd 0.3.2 – Netteres Verhalten!

gsm-ussd Posted on Di, Juni 01, 2010 07:43:59

v0.3.2 ist raus.

Zwei konkrete Neuerungen sind in gsm-ussd eingeflossen.

Die direkt Bemerkbare: Wenn man gsm-ussd mit Option „–pin X“ startet, muss sich das Modem nach erfolgreicher Freischaltung erst im nächsten verfügbaren/gewünschten Netz registrieren. Seit einigen Versionen wartet gsm-ussd da auch geduldig ab – aber nicht geduldig genug. Wie die Erfahrung zeigt, schlagen sofort nach erfolgreicher Registrierung abgesetzte USSD-Abfragen gerne fehl. Daher legt gsm-ussd, wenn die Registrierungsprüfung mindestens einmal fehlgeschlagen ist, bei erfolgreicher Prüfung noch eine kleine Ehrenrunde ein, bevor es fortfährt. Das Modem bekommt so Zeit, sich ans Netz anzukuscheln (oder umgekehrt?) und die Abfragen funktionieren dann auch.

Die nur indirekt Bemerkbare: Arbeiten mehrere Programme gleichzeitig mit einer seriellen Schnittstelle, kommt es zu Problemen. Ist ja eigentlich auch schon vom Namen her logisch: Eine serielle Verbindung ist immer eine Punkt-zu-Punkt-Verbindung. Was erwartet man also, wenn es außer Modem und gsm-ussd einen weiteren Endpunkt wie beispielsweise picocom gibt? Korrekt: Datensalat. 🙂
Das Problem war allerdings nicht picocom, sondern gsm-ussd. Es ist Konvention, bei Zugriff auf eine serielle Schnitstelle unter /var/lock Lockfiles dazu anzulegen. gsm-ussd hält sich jetzt an die Konvention, so dass sich picocom und gsm-ussd nicht mehr gegenseitig auf die Zehen steigen.

Hier die Dateien zum Download:

http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0.tar.gz
http://linux.zum-quadrat.de/downloads/gsm-ussd-0.3.2-0.noarch.rpm
http://linux.zum-quadrat.de/downloads/gsm-ussd_0.3.2-0_all.deb

Einen Überblick über alle gsm-ussd bezogenen Downloads sind hier:
http://linux.zum-quadrat.de/downloads/index.html.

Und das komplette git-Repository findet sich unter
http://github.com/JochenHoch2/gsm-ussd.git
oder
git://github.com/JochenHoch2/gsm-ussd.git

Viel Spaß damit und sagt Bescheid, wenn ich was kaputtgemacht habe,
Jochen