Dienstag, 26. September 2017

JMeter-CSV, logische Transaktionen aus mehreren Requests, die Shell und ich.

Lösung:
( grep -v '^timeStamp' results.csv | awk --field-separator=';' '{ print $6";"$1";"$2";"$3 }' \
| sort | while read a; do OP=`echo "$a" | cut -d ';' -f 4`; TS=`echo "$a" | cut -d ';' -f 2`; \
TM=`echo "$a" | cut -d ';' -f 3`; if [ "$OP" = getConfiguration ]; then echo '`'; echo -n \
"$TS \`expr $TM"; else echo -n " + $TM"; fi; done | grep -v '^`' | tr -d '\n' ; echo '`' ) | \
while read b; do eval "echo $b"; done | sort >transaction-timings.dat

Versuch, das lesbar zu machen...
( grep -v '^timeStamp' results.csv \
    | awk --field-separator=';' '{ print $6";"$1";"$2";"$3 }' \
    | sort \
    | while read a; do \
        OP=`echo "$a" | cut -d ';' -f 4`; \
        TS=`echo "$a" | cut -d ';' -f 2`; \
        TM=`echo "$a" | cut -d ';' -f 3`; \
        if [ "$OP" = getConfiguration ]; then \
            echo '`'; \
            echo -n "$TS \`expr $TM"; \
        else \
            echo -n " + $TM"; \
        fi; \
    done \
        | grep -v '^`' \
        | tr -d '\n'; \
        echo '`' ) \
        | while read b; do \
            eval "echo $b"; \
          done \
              | sort >transaction-timings.dat

Freitag, 3. März 2017

Shell-Funktion des Tages: gitp

Musste gerade sein:
gitp() {
        test -n "$1" || { git; return 1; }
        ARG1=$1
        shift
        git p$ARG1 "$@"
}

Freitag, 17. Februar 2017

Noch etwas Nostalgisches: Intel 5100 "shiloh" WLAN-Karte mit OS/2

Für meine OS/2-Installation hatte ich seinerzeit ein Thinkpad t500 auf ebay erstanden. Die Installation war grundsätzlich problemlos, allerdings gelang es mir zunächst nicht, das gute Stück an den WLAN zu bekommen, weil es keinen "stabilen" Treiber für die verbaute Intel 5100 "shiloh" gibt.
Nachdem ich einen Artikel des Blonde Guy gefunden hatte, der beschrieb, wie man genau dieses Modell doch zum Laufen bringt, also machte ich mich noch einmal an die Arbeit.

Am Ende hat es - zumindest einigermaßen -  funktioniert. Wirklich stabil ist es leider nicht, hin und wieder ist mir das System mit einem TRAP C um die Ohren geflogen. Dank JFS ist das zum Glück heute kein großes Drama mehr (allerdings sollte man nicht die Gefahr einer durch beim Absturz offene INI-Dateien unterschätzen, die einem die WPS komplett unbrauchbar machen kann [1]). Das habe ich nun gemacht:

Die Treiber, die später verwendet werden, sind GenMAC und GenMU. Um sicher zu gehen, habe ich die erst einmal komplett deinstalliert und auch alle Netzwerkkarten außer der Kabel-Verbindung aus der Konfiguration gelösch. Außerdem - wie im o.g. Artikel vorgeschlagen - wird das XWLAN-Applet entfernt.

Dann habe ich das Basispaket für GenMAC heruntergeladen und installiert:

Danach folgt die Installation von GenMU, wobei ich nur für "meine" Karte den Treiber installiert habe:

Außerdem habe ich dhclient per yum installiert und nach dem Reboot im BIOS kontrolliert, dass unter Power der Batteriebetrieb auf Maximum Performance gestellt und Intel SpeedStep aktiviert ist.

Nach Abschalten und wieder Einschalten des Rechners (notwendig!) habe ich dann das XWLAN-Applet neu installiert, indem ich aus dem Installationsverzeichnis instwgt aufgerufen habe. Ich verwende die neueste XWLAN-Version. Nach der Installation habe ich eCenter neu gestartet und das Widget hinzugefügt. Dabei ist wichtig, dass die WLAN-Karte im XWLAN-Applet beim Systemstart immer deaktiviert ist, das stelle ich an dieser Stelle schon einmal ein.
Jetzt muss die Karte in der MPTS-Konfiguration eingetragen werden:


Der Laptop hat zwei Netzadapter, einen mit Kabel und einen ohne. Nachdem ich beiden das TCP/IP-Protokoll hinzugefügt habe, setze ich die Nummer auf "0" für die Kabelverbindung und "1" für die drahtlose, so dass immer zunächst versucht wird, über Kabel eine Verbindung herzustellen.

 Standardmäßig ist die Kabelverbindung auf DHCP vorkonfiguriert. Das führt dazu, dass, wenn beim Booten keine Netzwerkverbindung existiert, der Startvorgang lange blockiert ist, weil er versucht, über DHCP eine Verbindung herzustellen.

Weil ich meine Kabelverbindung immer im selben Netz zu hause verwende, habe ich die nun im TCP/IP-Applet auf "manuell" umgestellt und Adresse, Gateway und DNS-Server fest eingetragen:


Sollte ich mal von woanders eine Draht-Verbindung brauchen, kann ich die notwendigen Einstellungen auch immer noch von der Kommandozeile ohne Neustart vornehmen, die Kommandos sind ganz ähnlich wie unter Unix. 


Nach einem weiteren Neustart kann ich nun meine WLAN-Karte in Betrieb nehmen. Ich stelle dabei zunächst die wpa_supplicant-Konsole auf "sichtbar", so dass ich sehen kann, was passiert. Nachdem ich ein gültiges Profil angelegt habe, (WPA funktioniert bei mir, WPA2 nicht), aktiviere ich nun die Karte im Applet. Wenn es funktioniert hat, höre ich ein "Piep", und ein Dialog öffnet sich, und fragt mich, ob ich die primäre Netzverbindung (die kabelgebundene) deaktivieren möchte, um die drahtlose zu aktivieren. Wenn das passiert, hat es funktioniert, ich klicke auf "Ja" und bin fertig.

Wenn nun auf der Konsole der Versuch, die Verbindung aufzunehmen, in eine Schleife läuft, weiß ich, dass es nicht funktioniert und schalte die Karte über das Applet wieder ab. Das wiederhole ich 2..3 Mal, falls es nicht vorher schon funktioniert hat.

Wenn es dann immer noch nicht funktioniert hat, deaktiviere ich im Applet und schalte danach mit dem Schiebeschalter die WLAN-Karte physikalisch ab. Nach ein paar Sekunden schalte ich sie per Schiebeschalter wieder ein, warte wieder ein paar Sekunden und aktiviere sie wieder übers Applet. Das habe ich bei mir bisher nie mehr als zweimal wiederholen müssen, bis es am Ende geklappt hat.

Einmal ist mir direkt beim Herstellen der Netzwerkverbindung das System mit TRAP C um die Ohren geflogen, einmal im laufenden Betrieb danach. Ob das Ganze am Ende stabil genug ist, wird sich über die Zeit herausstellen.



[1] Erste Hilfe beim Komplettverlust der WPS besteht im Erzeugen einer neuen. Aus dem "Technical Document # - 3071019" von IBM zu diesem Thema, Abschnitt "Method 1--Rebuilding the Desktop":

4. Change to the OS/2 directory; then type the following commands, pressing Enter after each:
  CD\OS2
  MAKEINI OS2.INI INI.RC
  MAKEINI OS2SYS.INI INISYS.RC

5. Type the following and press Enter after each to delete the hidden file, WP?ROOT.?SF:
  ATTRIB -h -s -r \WP?ROOT.?SF
  DEL \WP?ROOT.?SF

Freitag, 27. Januar 2017

Früher war alles besser: Common Desktop Environment auf Linux

Rechter Monitor mit Panel und einer GTK2-App
Unter Linux bevorzuge ich Leichtes. Umgebungen wie Gnome oder KDE sind mir zu schwergewichtig und auch aus verschiedenen Gründen nicht wirklich sympathisch - die eine zu wenig auf meine Bedürfnisse anpassbar, die andere riecht zu sehr nach Redmond. Folglich bin ich seit vielen Jahren vorwiegend mit WindowMaker unterwegs (das dort verlinkte Theme "NeXT-Retro" ist übrigens immer noch in Benutzung), und in der letzten Zeit habe ich wieder verstärkt Gefallen an Enlightenment gefunden. Beide sind leicht, schnell und vollkommen konfigurierbar.

Eine dritte Option ist in der letzten Zeit aber auch noch dazu gekommen, quasi die Mutter aller Gnome und KDEs: Common Desktop Environment, kurz CDE, dessen Code vor einigen Jahren Open Source wurde und nun hinreichend alltagstauglich unter Linux ist. So kann man den zarten Retro-Charme der 90er Jahre genießen und sich sozusagen auf Augenhöhe mit Windows-Benutzern wähnen :)



Freilich ist für diesen Spaß etwas Handarbeit notwendig. Hier ist, was ich gemacht habe, um mein hier gezeigtes Setup hinzubekommen. Fangen wir an mit Build und Installation:

Rechter Monitor mit ein paar CDE-Apps
  1.  Der CDE-Quellcode muss selber übersetzt werden. Den kann man von der Projektseite bei Sourceforge herunterladen. Bei mir war das Release 2.2.4.
  1. Vor dem Übersetzen empfehle ich allen, die mehr als einen Bildschirm benutzen, noch einen Xinerama-Patch des Fenstermanagers dtwm einzuspielen, damit Fensterpositionierung und Maximieren von Fenstern normal funktioniert. 
  2. Danach funktioniert die Build-Anweisung auf Sourceforge ganz prima. Wer wie ich auf Redhat und 64bit unterwegs ist, sollte zusätzlich noch diesen Wiki-Artikel lesen. 
  3. Bei mir wurden die manpages nicht mit installiert. Das habe ich dann per Hand gemacht: cd cde-<VERSION>/doc/C/; sudo cp -r man/* /usr/dt/man/
  4. Ein bekanntes Problem des Common Desktop Environment auf Linux ist, dass sie manchmal aufgrund von Problemen mit dem rpcbind-Service nicht startet. Bei mir (ein RHEL7-Derivat) hilft es, einmal nach Start des Rechners als root den Dienst per Hand neu zu starten: systemctl restart rpcbind.service - warum das nötig ist, und warum gerade das hilft, ist mir schleierhaft, aber ohne geht es nicht. 



Linker Monitor mit Systray und einer GTK3-App
Das hier sind nun meine Einstellungen und Anpassungen:
  1. Um GTK- und QT-Anwendungen das richtige Aussehen zu geben, benutze ich das GTK3-Theme Solaris Colours, allerdings in einer von mir leicht modifizierten Form, um mit meinem CDE-Farbschema besser zu harmonieren.
  2. Für den System Tray oben links benutze ich stalonetray, und zum Umschalten der Tastaturbelegng xxkb.
  3. Zum Starten der Umgebung benutze ich den gdm und habe dafür eine Datei cde.desktop erzeugt, die in /usr/share/xsessions liegt.
  4. Die verweist wiederum auf ein Startskript cdesession.sh, das in /usr/local/bin liegt. 
  5. Den System Tray und xxkb starte ich über ein Skript $HOME/bin/CDEInit.sh, das ich über $HOME/.dt/sessions/sessionetc aufrufe. Es ist etwas hakelig, dafür zu sorgen, dass das oben links in der richtigen Anordnung erscheinen zu lassen, daher enthält das Skript ein paar Kniffe. 
  6. In der Konfiguration des Fenstermanagers, .dt/dtwmrc, kann man einiges an Tastaturabkürzungen einstellen, wovon ich ausgiebig Gebrauch gemacht habe. Interessanterweise muss man, um das Fenstermenü (Alt-Space) zu konfigurieren, eine entsprechende X-Ressource in $HOME/.Xdefaults setzen, das ist schon etwas merkwürdig, funktioniert aber. 
  7. Ich wollte auf Ctrl-Esc eine Art Fensterliste haben. Mit Bordmitteln ging das nicht, ich habe aber ein nettes Programm gefunden, das ich auf diese Kombination gelegt habe: find_window.
  8. Die Icons, die man im Panel sieht, sind letztlich CDE-"Apps", die man sich im CDE-Appmanager zusammenbasteln muss. Blöderweise braucht man Icons im .bm Format in verschiedenen Größen. Ich habe dazu ein paar wenige Sachen im Netz gefunden und den Rest selber gebastelt.
  9. Die ganzen oben genannten Konfigurationsdateien für xxkb, dtwm, die Icons sowie die Desktop-Datei und Hilfsskripte gibt es hier in einem tar-Archiv zum Herunterladen.
  10. Der Rest ist die übliche Spielerei mit den mitgelieferten Tools. Ärgerlich ist, dass man Änderungen am Farbschema erst nach Logout und wieder Login zu sehen bekommt. Zum Glück geht das auf moderner Hardware ziemlich schnell.
Fazit: CDE hat etwas. Ich mag dieses etwas altmodische Design. Da ich ohnehin meist auf der Kommandozeile oder mit Tastatur-Abkürzungen untewegs bin, funktioniert das auch leidlich gut. Es gibt einiges, was man nicht einstellen kann, z.B. Verschieben von Fenstern auf andere Desktops per Tastaturabkürzung, horizontal und vertikal maximieren etc., und der Fenster-Fokus beim Wechseln zwischen den Desktops ist eher so naja, aber dafür hat man so ziemlich alles von Stirnrunzeln bis Bewunderung bei den Kollegen sicher, die einem über die Schulter schauen :)