The Cult of Done Manifesto

2009/03/05

Mal was leichtes zwischendurch. Nicht ganz ernst zu nehmen, wie ich finde, aber ein Erinnerle, wenn in ständig wiedergekäuten Besprechungen ausser noch mehr Powerpoints, noch mehr Papier und noch mehr heisser Luft nichts passiert, jedenfalls nichts produktives, zielführendes. Gefunden bei http://www.ikiw.org/2009/03/04/the-cult-of-done-manifesto/


The Cult of Done Manifesto by Bre Pettis and Kio Stark. They wrote it in 20 minutes, “because we only had 20 minutes to get it done.”

  1. There are three states of being. Not knowing, action and completion.
  2. Accept that everything is a draft. It helps to get it done.
  3. There is no editing stage.
  4. Pretending you know what you’re doing is almost the same as knowing what you are doing, so just accept that you know what you’re doing even if you don’t and do it.
  5. Banish procrastination. If you wait more than a week to get an idea done, abandon it.
  6. The point of being done is not to finish but to get other things done.
  7. Once you’re done you can throw it away.
  8. Laugh at perfection. It’s boring and keeps you from being done.
  9. People without dirty hands are wrong. Doing something makes you right.
  10. Failure counts as done. So do mistakes.
  11. Destruction is a variant of done.
  12. If you have an idea and publish it on the internet, that counts as a ghost of done.
  13. Done is the engine of more.

Die symbolische Darstellung dazu versteht man meiner Ansicht nach nur, wenn man den jeweiligen Satz daneben legt.
Cult of Done Manifesto


Ein Hoch auf die ISO 8601

2009/03/04

Immer Ärger mit der Zeit

Immer wieder sollen Produktionsdaten zeitlich eingeordnet und in Berichten zusammengestellt werden. Das sind Verbrauchswerte oder erzeugte Produkte. Und immer wieder ist wenigstens für mich der Aufwand ärgerlich, mit Datum, Uhrzeit, Schichtmodellen, Sommer/Winterzeit und so weiter rumzurechnen, bzw. die Daten per SQL irgendwo herauszufischen.

Die Ursache des Aufwands liegt für mich in der Genauigkeit. Der Datentyp Datetime oder auch die Unix time() ist immer bis auf die Sekunde genau. Aber welcher Zeitpunkt gilt für eine ganze Woche? 23:59:59 am Sonntag? 00:00:00 am Montag? Und wenn, wie beim Beispielkunden, die Woche von Sonntag bis Samstag geht und die Daten vom Werk in die Konzernzentrale in einer anderen Zeitzone berichtet werden? Gleiches gilt für Tage (Sommerzeit, Zeitzonen) und Monate.

Wenn ich einen Wochenwert abspeichern möchte, dann mit der Angabe Jahr-Woche. Schichtwerte mit der Angabe Jahr-Monat-Tag-Schicht, usw. Dann kann ich sie auch per SQL einfach selektieren.

Also wie geht das? Dafür gibt es die Schreibweisen der ISO-8601. Ausführliche Beschreibungen gibt es hinter den unten angegebenen Links. Für unsere Zwecke – Produktionsdaten mit Zeitangaben – reichen folgende Konventionen:

Tagesdatum: ’YYYY-MM-DD’ – Eigentlich ’[YY]YY[-]MM[-]DD’, aber wenn man die ’-’ und oder das Jahrhundert weglässt, kann das in einem SQL-Query missverständlich werden. Also: Jahr-Monat-Tag immer mit 4-stelligem Jahr und ’-’ als Trenner.

Die Angaben können von rechts weggelassen werden: YYYY-MM = Monatswert, YYYY = Jahreswert.

Eine Erweiterung der ISO möchte ich mir herausnehmen: ’YYYY-MM-DD"S"S’ für die Schicht, zum Beispiel 2009-02-05S2 = Zweite Schicht am 5.2.2009. Richtig nett wird es nämlich, wenn man sekundengenaue Zeitstempel bei Schichtmodellen verwendet. Dann muss man sämtliche Schichtmodelle archivieren, um vor der eigentlichen Abfrage herauszufinden, welches Schichtmodell an welchem Tag gültig war. Die Beantwortung der Frage, wie hoch die Ausschussrate in allen ersten Schichten der vergangenen 12 Monate war ist damit nicht mehr trivial: Sonderschichten, Sommer/Winterzeit, ausgefallene Schichten („Montags fangen wir immer erst zur Spätschicht an“), usw.

Wochendatum ’YYYY-"W"WW[-D]’ – Das ist eine Kalenderwoche mit optionalem Tag in der Woche. Beispiel: 2009-W07 = Kalenderwoche 7 in 2009 oder 2009-W07-3 = Der dritte Tag in KW7 in 2009. Dabei ist die ISO-Kalenderwoche sehr genau definiert; Montag – Sonntag, erste Kalenderwoche ist die mit mindestens 4 Tagen. Das kollidiert allerdings manchmal mit der Arbeitswoche einiger Firmen.

Die Wochentagskodierung mit angehängtem -D zu verwenden sollte man sich gut überlegen. Hier ist die Umrechnung oder der Vergleich mit den anderen Tages-Kodierungen wie YYYY-MM-DD oder YYYY-DDD nicht so einfach. Am besten verwendet man so häufig wie möglich die gleiche Kodierung, um sich Umrechnungen und kombinierte Abfragen (UNION) zu sparen.

Uhrzeiten ’HH[:MM[:SS]]’ – Uhrzeiten können laut ISO mit einem Leerzeichen oder „T“ dazwischen an jedes Tagesdatum angehängt werden. Wieder kann von rechts weggelassen werden: HH:MM = Minute, HH = Stunde.

Zeitspannen, „P“ – Zwei Datum/Zeitangaben können laut ISO mit einem „P“ kombiniert werden, um die Zeitspanne zwischen ihnen zu kodieren. Beispiele: 2000P2008 = Jahre 2000 bis 2008, 2007-01P2007-03 = Erstes Quartal 2007, 2008-W10P2008-W19 = Wochen 10-19 in 2008 komplett.

Als Zeitangabe in einer Datenbank ist mir das noch nicht begegnet. Ich würde es auf den ersten Blick auch ungern verwenden, weil ungeschickte Abfragen mit Mustervergleichen versehentlich auch diese Werte liefern könnten.

SQL-Abfragen für ISO-8601 Datums- und Zeitangaben

Wenn wir jetzt eine große Tabelle mit gemischten Datumswerten haben, zum Beispiel meine geliebten Energie- und Verbrauchszahlen als Tages-, Wochen- und Monatssummen; wie kriegen wir dann die gewünschten Daten heraus? Das hängt von der verwendeten Datenbank ab.

Am komfortabelsten ist MySQL, weil es automatisch von String in Datum umrechnet. Wir nehmen eine Tabelle mit den Spalten tagname, zeit und wert. Zeit ist als varchar() definiert und kann alle oben angegebene Datumsformate enthalten.

Beispiele:

(1) Alle Tageswerte der letzten sieben Tage:

select * from isozeit
where zeit like ’____-__-__’
and zeit > subdate(now(), interval 7 day)

Der Mustervergleich ’____-__-__’ selektiert das Tagesformat, das nach obigen Konventionen eindeutig ist. Deshalb die Pflicht, den ’-’ zwischen die Felder zu schreiben.

(2) Wochenwerte dieses Jahres:

select * from isozeit
where zeit like concat(year(now()), ’-W__’)

Die Abfrage ist sicher, weil sie optional angehängte Wochentage (’-D’) ausblendet.

(3) Werte mehrerer Wochen, z.B. Woche 10-19, wie oben erwähnt:

select * from isozeit
where time like ’____-W__’
and zeit between concat(year(now()), ’-W10’) and concat(year(now()), ’-W19’)

Die Wochennummern kann man natürlich auch relativ berechnen. Leider ist das „-W“ im between-Teil allein nicht ausreichend, um angehängte Wochentage auszuschliessen, daher das zusätzliche like ’____-W__’.

(4) Wochenwerte der vergangenen Woche:

select * from isozeit
where zeit = date_format(subdate(now(), interval 1 week), ’%x-W%v’)

Hier glänzt MySQL richtig. Date_format() kann nämlich verschiedene Wochenzählweisen und liefert dann Jahr und Woche entsprechend.

Beispiel:

select date_format(’2008-12-31’, ’%x-W%v’), date_format(’2009-01-01’, ’%x-W%v’),
date_format(’2008-12-31’, ’%X-W%V’), date_format(’2009-01-01’, ’%X-W%V’)

liefert:

’2009-W01’, ’2009-W01’, ’2008-W52’, ’2008-W52’

’%x-W%v’ ist also die europäische (und ISO-)Zählung; ’%X-W%V’ die US-/UK-Zählung.

Bei anderen DBs wird es etwas komplizierter. MS-SQL kennt datepart(), aber die Art der Wochenzählung kann nur global eingestellt werden. Könnte man den Wochencode auch aus year() und week() zusammensetzen, zum Beispiel mit

concat(year(subdate(now(), interval 1 week)), ’-W’, week(subdate(now(), interval 1 week)))

Leider nicht. Wenn die Woche 1 des aktuellen Jahres im vergangenen Jahr beginnt, liefert year() möglicherweise bereits das aktuelle Jahr und week() 0. Beweis:

select yearweek(’2009-01-01’), year(’2009-01-01’), week(’2009-01-01’)

(5) Tageswerte der vergangenen Woche, z.B. für einen Wochenreport:

select * from isozeit
where zeit like ’____-__-__’
and zeit
between from_days(to_days(now()) - (7 + weekday(now())))
and from_days(to_days(now()) - (1 + weekday(now())))

Uff. Das ist nicht ganz einfach, aber die scheinbar einfachere Lösung,

where date_format(zeit, ’%x%v’) = date_format(subdate(now(), interval 1 week), ’%x%v’)

würde bewirken, dass der erste date_format()-Term für jeden Datensatz durchgeführt würde.

Noch etwas flinker wäre vielleicht

zeit between date_format(from_days(to_days(now()) - (7 + weekday(now()))), ’%Y-%m-%d’) and date_format(from_days(to_days(now()) - weekday(now())), ’%Y-%m-%d’)

aber wahrscheinlich wandelt MySQL die from_days()-Terme schon gleich vor dem ersten Vergleich zu Strings. Ich konnte jedenfalls keinen Unterschied messen.

(6) Monatssummen aus Tageswerten bilden:

select tagname, year(zeit), month(zeit), sum(wert) from isozeit
where time like ’____-__-__’
group by 1,2,3
order by 1,2,3

Das ist einfach.

Allerdings weiss man noch nicht, ob auch für alle Tage des jeweiligen Monats Daten vorliegen, die Summe also korrekt ist. Das kann man durch eine zusätzliche Spalte

count(wert) = day(last_day(zeit))

ermitteln. Hier steht 1 für korrekt und 0 für fehlerhaft. Last_day() ist wieder ein Pluspunkt für MySQL. Es liefert das Datum des letzten Tages im angegebenen Monat.

(7) Wochensumme aus Tageswerten? Okay.

select tagname, date_format(zeit, ’%x-W%v’), sum(wert), count(wert) = 7 from isozeit
where zeit like ’____-__-__’
group by 1,2
order by 1,2

Gut, dass Wochen immer sieben Tage haben.

(8) und zum Schluss: Sind die Wochenwerte gleich der Summe der Tagswerte der Woche? Das sieht zunächst einfach aus:

select a.tagname, a.woche, a.summe, b.summe, a.korrekt, a.summe=b.summe
from
( select tagname, date_format(zeit, ’%x-W%v’) as woche, sum(wert) as summe, (count(wert) = 7) as korrekt
from isozeit where zeit like ’____-__-__’ group by 1,2 order by 1,2
) a
join
( select tagname, zeit as woche, wert as summe, 1 as korrekt
from isozeit where zeit like ’____-W__’ group by 1,2 order by 1,2
) b
on a.tagname=b.tagname and a.woche=b.woche

Subselect a kennen wir aus (7). Subselect b sind die Wochenwerte. Nur macht mir auf meinem Rechner MySQL einen Strich durch die Richtung, weil es zwar bei Typen tolerant ist, aber nicht bei Zeichensätzen. Die stimmen bei den Subselects wegen der Berechnung nicht überein, deshalb musste ich bei mir folgendes schreiben:

select a.tagname, a.woche, a.summe, b.summe, a.korrekt, a.summe=b.summe
from
( select
convert(tagname using latin1) as tagname,
convert(date_format(zeit, ’%x-W%v’) using latin1) as woche,
convert(sum(wert) using latin1) as summe,
convert((count(wert) = 7) using latin1) as korrekt
from isozeit where zeit like ’____-__-__’ group by 1,2 order by 1,2
) a
join
( select
convert(tagname using latin1) as tagname,
convert(zeit using latin1) as woche,
convert(wert using latin1) as summe,
convert(1 using latin1) as korrekt
from isozeit where zeit like ’____-W__’ group by 1,2 order by 1,2
) b
on a.tagname=b.tagname and a.woche=b.woche

Das soll an Beispielen reichen. Ähnliche Abfragen für die anderen Formate können ziemlich direkt abgeleitet werden.

Links

Wikipedia (dt): ISO-8601
Wikipedia (en): ISO-8601
The Mathematics of the ISO 8601 Calendar
http://www.dmoz.org/Science/Reference/Standards/Individual_Standards/ISO/ISO_8601/


Ubuntu Pocket Guide zum freien Download

2009/01/28

Keir Thomas, der Autor von Ubuntu Kung Fu, hat jetzt Ubuntu Pocket Guide and Reference herausgegeben; eine Taschenreferenz für die Alltagsfragen von der Installation und Netzwerkkonfiguration bis zum Dateihandling und Paketverwaltung.

Ganz dem Ubuntu-Gedanken folgend, gibt es das Buch zum freien Download als PDF und als gedruckte Ausgabe.


Neues Spielzeug (XAMPP installieren)

2009/01/26

In diesem Teil werden die Werkzeuge installiert, die unsere Ubuntu-VM zur Web-Applikations-Spielwiese machen:

Teil 3: XAMPP installieren

Profis würden jetzt die Pakete einzeln installieren; Apache, MySQL, PHP, Perl. Kann man auch, aber es dauert eine Weile und man muss an vielen Stellen Einstellungen ändern, Dateien verschieben und so weiter.

Deshalb holen wir uns das Komplettpaket XAMPP von Apachefriends.org. Das gibt es für Linux, Windows und Mac, und es ist gerade auf Linux sehr einfach zu installieren.

Download und Installation

  • In der VM den Firefox-Browser öffnen, entweder oben in der Mitte des Bildschirms oder über Anwendungen / Internet.
  • apachefriends.org im Browser aufrufen und XAMPP für Linux anwählen. Die Seite am besten mal kurz durchlesen.
  • XAMPP Linux runterladen. Normalerweise speichert Firefox ins Desktop-Verzeichnis, in unserem Fall /home/mes/Desktop.
  • Terminal-Fenster (Shell) öffnen (Anwendungen / Zubehör / Terminal) und ins Download-Verzeichnis wechseln: „cd Desktop“
  • Prüfen, dass das XAMPP-Paket hier liegt: „ls -l“
    Es sollte xampp-linux-1.7.tar.gz oder ähnlich heissen
  • Jetzt folgt der Zauberspruch für die Installation: „sudo tar xvfz xampp-linux-1.7.tar.gz -C /opt“
    Dabei wird das User-Passwort abgefragt; siehe Teil 2.

Das war’s schon. Was ist passiert? Der Inhalt des Pakets wurde in das System-Verzeichnis opt entpackt. Mehr muss man nicht tun, um XAMPP lauffähig zu installieren.

Im einzelnen:
„sudo“ – den folgenden Befehl im „super user“-Modus ausführen, deshalb die Passwortabfrage.
„tar“ – ist ein Standard-Unix Pack/Entpackprogramm. Dateien mit der Endung tar sind seine.
„xvfz“ – sind die Parameter für tar: x = entpacken; v = verbose, viel Ausgabe; f = es folgt ein tar-Dateiname; z = es ist ein komprimiertes tar (.gz).
„xampp-linux-1.7.tar.gz“ – der Paketname
„-C /opt“ – eine Option von tar, bedeutet Auspacken in das folgende Verzeichnis (/opt).

Warum „/opt“? Das ist Konvention. Technisch könnten wir XAMPP und jedes andere Programm in jedem Verzeichnis abspeichern und starten. Aber opt ist das traditionelle Systemverzeichnis für optionale Pakete.

Erststart

Im schon geöffneten Terminal tippen wir: „sudo /opt/lampp/lampp start“

„sudo“ kennen wir schon. „/opt/lampp/lampp“ ist das Startprogramm für XAMPP im Verzeichnis /opt/lampp und „start“ heisst genau das: XAMPP starten. Die anderen Optionen für das Startprogramm sind „stop“ und „restart“.

Es sollte „XAMPP fuer Linux gestartet“ ausgegeben werden. Wenn ja, dann laufen jetzt Apache (Webserver), MySQL (Datenbank) und PHP sollte auch verfügbar sein. Das testen wir im Firefox, indem wir localhost oder 127.0.0.1 aufrufen. Der Splash-Screen von XAMPP sollte erscheinen. Wir klicken auf „Deutsch“ – die Hauptseite von XAMPP erscheint – und danach links auf „Status“.

So sollte es dann auf dem Bildschirm aussehen:
xampp_install_01

Wo ist was?

Das wichtigste Verzeichnis auf unserer VM ist jetzt /opt/lampp/htdocs. Das ist das Web-Hauptverzeichnis. Zum Test erstellen wir eine erste PHP-Seite.

  • Im Terminalfenster ins Web-Verzeichnis wechseln: „cd /opt/lampp/htdocs“
  • Mit einem Editor eine neue Datei anlegen: „sudo gedit info.php“
  • In diese Datei die Zeile „<?php phpinfo(); ?>“ eintippen
  • Abspeichern, und
  • im Firefox „localhost/info.php“ aufrufen.

Wenn alles geklappt hat, sollte folgendes zu sehen sein:

xampp_install_02

Gruppenarbeit (Berechtigungen)

Warum schon wieder sudo bei einem simplen Editor? Weil /opt ein Systemverzeichnis ist, in dem wir als Benutzer mes eigentlich nicht schreiben dürfen. Andererseits muss der Webserver die Dateien auch lesen dürfen. Das heisst: Bei allen Dateien, die wir über den Webserver verarbeiten wollen, müssen wir darauf achten, dass die Leserechte ausreichen.

Der Webserver läuft unter dem User nobody. Wir sind normalerweise als mes angemeldet und mit sudo sind wir plötzlich root, also Systemadministrator.

Welche Berechtigungen bei einer Datei gesetzt sind, sieht man mit „ls -l“.

xampp_install_032

Wichtig für uns: Vor jeder Datei, die der Webserver verarbeiten soll, müssen links in der ls-Liste drei „r“ stehen. Drei, weil es die Lese-Berechtigungen („read“) für den Besitzer, die Gruppe des Besitzers und „other“ sind. Sollten keine drei „r“ dort stehen, kann man sie mit „sudo chmod ugo+r dateiname“ setzen. Alles weitere erklärt die man page für chmod, die man im Terminalfenster mit „man chmod“ ansehen kann. Die Kurzfassung gibt es mit „chmod –help“.

Automatischer Start

Leider müssen wir XAMPP bei jedem Start der VM neu starten („sudo /opt/lampp/lampp start“). Das ist hinderlich, deshalb benutzen wir die immer noch geöffnete Shell (das Terminalfenster), um XAMPP automatisch mit Ubuntu zu starten:

  • Wechseln ins Verzeichnis /etc: „cd /etc“
  • Die Datei rc.local in einen Editor laden: „sudo nano rc.local“
  • vor „exit 0“ die Zeile „sudo /opt/lampp/lampp start“ einfügen
  • Beenden mit Strg-X, speichern bestätigen mit J

Jetzt die VM neu starten, um den Autostart zu testen.

Was haben wir getan? Die Datei „/etc/rc.local“ enthält Befehle, die beim Start von Ubuntu ausgeführt werden. Normalerweise ist sie leer, aber aufgerufen wird sie trotzdem. Wir haben einfach die Zeile eingefügt, die wir sonst per Hand eintippen müssten.

Linux-Profis werden hier möglicherweise die Nase rümpfen; wenn sie diese Anleitung überhaupt lesen. Ja, es gibt andere Wege, Programme beziehungsweise „Dienste“ beim Systemstart zu starten. Aber wir bauen eine Spielwiese und beschränken uns auf die einfachste Methode.

Und nu?

Well, die Spielwiese läuft. Am besten jetzt eine Kopie der VM erstellen, denn so rein und frisch kriegen wir sie nie wieder zusammen. Der nächste Teil, Installation von Drupal in der VM, erscheint nicht hier, sondern im Blog Doku-Hotline meiner Frau, für die ich diese kleine Anleitung eigentlich geschrieben habe.


Die Sandkiste einrichten und aufräumen (Ubuntu VM)

2009/01/24

Die VM aus Teil 1 ist erzeugt, die virtuelle Installations-CD eingelegt. Jetzt folgt:

Teil 2: Ubuntu in der portablen VM installieren, entrümpeln und updaten

Ubuntu-Linux installieren

Wir starten die VM und warten auf den Startbildschirm. Zwischendurch meldet sich VirtualBox mit Meldungen zum Host-Key (dazu gleich) und der Bildschirmauflösung, die wir ignorieren können.

Währenddessen eine kurze Werbeeinblendung: Wenn wir in das VM-Fenster klicken gehen Tastatur und Maus nur noch in die VM. Damit ergibt sich gleich die Frage, wie man wieder rauskommt. Jede Virtualisierung hat irgendeine Tastenkombination dafür. Bei VirtualBox ist es von Haus aus die rechte Strg-Taste. Diese Einstellung kann man im VirtBox-Fenster ändern (Datei / Globale Einstellungen / Eingabe). Welche Taste eingestellt ist, sieht man im Fenster der VM ganz unten rechts. Hellgrüner Pfeil: Tastatur und Maus gehen in die VM, dunkelgrüner Pfeil: Eingabe geht zum Host. Ende der Werbung, weiter mit dem Hauptfilm.

Beim Start fragt Ubuntu einiges ab: Dialogsprache, Zeitzone und Tastatur. Deutsch ist okay, auch wenn wir später lauter englischsprachige Software installieren. Die Festplatte, unsere vDisk, will Ubuntu vollständig nutzen, was auch so in Ordnung ist.

Folgt die „Wer sind Sie?“-Seite. Ich schlage folgende Einstellungen vor:

ubuntu_vm_install-021

Passwort bitte selbst ausdenken und gut merken.

Bei „automatisch anmelden“ das Häkchen setzen, dann läuft die VM ohne Passworteingabe bis zum benutzbaren Desktop hoch.

Danach startet die Installation und das dauert wirklich eine ganze Weile. Wenn dabei das Licht ausgeht: Das ist der Bildschirmschoner, den man durch Tastendruck oder Mausbewegung unterbrechen kann. Zur Erinnerung: Mit dem Host-Key kommt man mit der Maus wieder aus dem VM-Fenster raus.

Schliesslich fordert Ubuntu den Neustart. Vorher müssen wir aber die Installations-CD auswerfen:

  • Im Menü des VM-Fensters unter Maschine / schliessen / Ausschalten die VM beenden
  • Im Steuerfenster von Virtual Box in den Einstellungen der VM das CD-ISO-Image abtrennen (Häkchen entfernen bei „CD/DVD-Laufwerk einbinden“)

Jetzt die VM neu starten. Ubuntu sollte hochfahren und irgendwann den Desktop anzeigen. Alle Meldungen zu Aktualisierungen und so weiter können wir erst mal ignorieren; dazu kommen wir später.

Gasterweiterungen

Die Gasterweiterungen sind Komponenten von Virtual Box, die uns das Leben erleichtern. Unter anderem Bildschirmtreiber, so dass wir höhere Auflösungen als 800×600 einstellen können. Diese Software liegt als ISO-Image vor und kann so als virtuelle CD eingebunden werden:

  • Im Menü des VM-Fensters Geräte / Gasterweiterungen installieren… klicken
  • Wenn nach „Ausführen“ gefragt wird: Nein. Bei Linux müssen wir das manuell machen
  • Im Ubuntu-Menü Anwendungen / Zubehör / Terminal klicken. Es öffnet sich ein Kommandozeilenfenster (das unter Linux Shell heisst)
  • „cd /cdrom“ wechselt in das Vezeichnis des Gasterweiterungs-ISO
  • „sudo ./VBoxLinuxAdditions-x86.run“ startet die Installation. Das geforderte Passwort ist das, was wir oben bei der Installation ausgesucht haben.

So sollte es nach der Installation aussehen:

ubuntu_vm_install-071

Wie man sieht muss man auch Linux nach manchen Änderungen neu starten. Das geht mit dem roten Knopf ganz oben rechts im Ubuntu-Bildschirm.

Nach dem Neustart dürfte das VM-Fenster jetzt deutlich größer sein. Das ist auch notwendig, damit einige der Systemdialoge überhaupt auf den Bildschirm passen.

Entrümpeln

Mit Entrümpeln ist gemeint, überflüssige Software zu löschen. Ubuntu Desktop wird mit reichlich Programmen geliefert, zum Beispiel dem kompletten Open Office-Paket. Ich lösche für meine MES-Versuche nur die Spiele. Das Office lasse ich erst mal drauf, falls ich später mal eine Exceltabelle bearbeiten will.

  • Aktualisierung ignorieren
  • Anwendungen / Hinzufügen/entfernen… klicken
  • „Liste aktualisieren?“: Ja. Dazu muss der Host eine Internetverbindung haben.
  • Im Anzeigefilter „Anzeigen:“: „nur installierte Anwendungen“ auswählen
  • In der Liste der Kategorien „Games“ anklicken. Im Hauptfenster werden die Pakete angezeigt.
  • Durch entfernen der Häkchen in der Paketliste werden die Pakete zum löschen vorgemerkt
  • Durchgeführt werden die Löschungen erst beim Klick auf „Änderungen anwenden“.
    Es wird wieder das Passwort aus der Installation benötigt.

Es lohnt sich, nach dem Entrümpeln neu zu starten.

Update

Unser System ist garantiert nicht auf dem neuesten Stand. Das meldet es auch beim Start durch „Aktualisierungen verfügbar“. Jetzt, nach Gasterweiterungen und Entrümpeln, bringen wir den Rest auf Vordermann.

  • Update starten durch Klick auf den roten Pfeil oben rechts. Dafür muss unser Hostrechner eine Internet-Verbindung haben.
  • Ruhig alles installieren, was vorgeschlagen wird, auch wenn es etwas länger dauert
  • Noch einmal neu starten.

Wir haben jetzt einen virtuellen Arbeitsplatz-PC mit Ubuntu-Linux.

Backup

Einen virtuellen PC zu sichern ist viel einfacher als bei einem physikalischen. Man fährt die VM runter und kopiert die vDisk-Datei. So wie wir installiert haben, liegt die vDisk mit dem Namen mes-play.vmdk unter d:\Portable-VirtualBox-Win32\data\.VirtualBox\HardDisks\ Bitte den Punkt im Verzeichnisnamen beachten.

Die Datei sollte jetzt ca. 3,5GB groß sein. Wenn wir sie unter einem neuen Namen ins gleiche Verzeichnis kopieren und im Virtual Box Manager „aktualisieren“ klicken, taucht sie in der Liste auf.

Der Gag dabei: Wir können jederzeit eine neue VM erzeugen und die kopierte vDisk oder gar eine Kopie der Kopie dort einbinden, und so stets auf eine gesicherten Stand zurückgreifen.

Ich empfehle, schon um die Zeit für Neuinstallationen zu sparen, vor größeren Aktionen auf der VM die vDisk zu kopieren.

Im Teil 3 geht es dann um die Installation von Webserver, Datenbank und Skriptsprache, sprich: Apache, MySQL und PHP.


Virtuelle Sandkiste zum Mitnehmen (portable VM)

2009/01/23

Anforderung meiner Frau: „Mach mir doch mal eine VM zum Mitnehmen, wo ich <insert beliebige Webanwendung, Drupal, WordPress, Wiki> installieren und rumzeigen kann“. Okay. Virtuelle Maschine ist klar. Portabel, also vom USB-Stick oder der Moibilplatte einfach laufen lassen  ist schon schwieriger.

Virtualisierungs-Lösungen wollen entweder auf dem Hostrechner installiert werden oder haben keine akzeptable Oberfläche. Bis auf VirtualBox. Das gibt es jetzt auch portabel (danke Caschy). Und es ist für private und Testzwecke frei verfügbar.

Wir bauen uns also eine VM, tun ein freies Betriebssystem drauf, weil wir keine Kauflizenzen über haben und installieren den ganzen LAMP-Kram: Webserver, Datenbank, Skriptsprache.

Teil 1: Eine portable VM

… und dabei heisst portabel nicht nur „läuft auch von USB-Stick / Mobil-Platte“, sondern auch „läuft mit verschiedenen Virtualisierungs-Paketen“.

Benötigt werden:

  • portable Virtual Box (Verzeichnis); wähle Folder mit der höchsten Versionsnummer, z.B. VirtualBox v2.2.4, darin den Starter, z.B. Starter v3.1.0 und darin die Datei, die auf -Win32.exe endet, z.B. Portable-VirtualBox_v2.2.4-Starter_v3.1.0-Win32.exe
  • Ubuntu-Installations-ISO-Image (Verzeichnis); wähle „Desktop Edition“, „latest Version“, „32 bit“.

Download

Zuerst laden wir die Pakete herunter in unser Download-Verzeichnis.

portable Virtual Box ist ein selbstentpackendes Exe. Wir starten es und geben als Ziel am besten das Hauptverzeichnis an. Bei mir D:\. Es entsteht das Verzeichnis Portable-VirtualBox-Win32. Dieses Verzeichnis wird unser „Mitnehm“-Verzeichnis. Alles was sich hier ansammelt kommt  später auf unsere Mobil-Platte.

Alsdann starten wir im Verzeichnis Portable-VirtualBox-Win32 die Portable-VirtualBox.exe. Beim ersten Mal soll man sich registrieren, kann das Fenster aber auch einfach mit abbrechen schliessen.

Bevor wir aber eine neue VM anlegen, basteln wir uns eine virtuelle Festplatte dafür. Das VirtualBox-Fenster lassen wir offen.

Virtuelle Festplatte erstellen

Wichtigster Teil einer virtuellen Maschine ist ihr Festplatten-Image (vDisk). Das ist eine Datei, die von der VM als Festplatte angesehen wird. Jedes Virtualisierungspaket hat seine eigenen Formate, aber inzwischen unterstützen die meisten Pakete das VMDK-Format von VMWare. Wenn unsere portable VM dieses Format verwendet, können wir sie zum Beispiel auch auf VMWare und Qemu laufen lassen.

Netterweise kann Virtual Box dieses Format auch erzeugen, aber nicht mit seinem „Manager für virtuelle Medien“, sondern mit dem Kommandozeilen-Tool VBoxManager.exe, das sich in Portable-VirtualBox-Win32\app32\ befindet.

vDisk im VMDK-Format anlegen:

  1. Kommandozeilen-Fenster öffnen (Start, Ausführen, cmd.exe) und ins Verzeichnis Portable-VirtualBox-Win32\app32\ wechseln
  2. das Image erzeugen mit „VBoxManage.exe createhd -filename mes-play.vmdk -format VMDK -size 8000 -register“.
    -size 8000 legt die maximale Größe auf knapp 8GB (8000MB) fest, -register registriert die vDisk im „Manager für virtuelle Medien“
  3. Im VirtualBox-Fenster unter Datei den „Manager für virtuelle Medien“ aufrufen. Im Tab Festplatten sollte unsere neu erzeugte vDisk wie folgt auftauchen:
    virtboxport_mes-play_054
    Wie, nur 1 MB? Ja, die VMDK-Datei wird später bei Benutzung automatisch größer, eben bis zur maximal eingestellten Größe. VMWare enthält einige Tools, um VMDK-vDisks zu vergrößern, verkleinern und wie physikalische Platten anzukoppeln. Aber das brauchen wir erst mal nicht.
  4. Nun im Tab CD/DVD-Abbilder das Ubuntu-ISO hinzufügen:
    virtboxport_mes-play_061
  5. Jetzt den Medien-Manager schliessen

VM anlegen und starten

Jetzt können wir die eigentliche VM anlegen.

  1. Das VirtualBox-Fenster ist ja noch offen. Mit Neu eine neue VM anlegen.
    Name: MES-Playground,
    Betriebssystem: Linux,
    Version: Ubuntu
  2. Als Speicherplatz ist alles oberhalb von 384MB verwendbar. Je mehr Speicher desto besser. Aber bitte bedenken, dass sobald die VM läuft, der Speicher für die VM vom physikalischen Speicher für den Host abgeht. Für unsere Mini-VMs sind 500MB prima.
  3. Unter virtuellen Festplatten wird uns die eben erzeugte vDisk angeboten

Fertig. Unsere VM steht in der Liste. Da wir Linux darauf installieren wollen, schieben wir eine virtuelle CD in das virtuelle Laufwerk: Klick auf „CD/DVD-Laufwerk“, „CD/DVD-Laufwerk einbinden“ aktivieren und bei „ISO-Abbild“ das eben im Medien-Manager verknüpfte Ubuntu-ISO auswählen.

virtboxport_mes-play_07

Nun können wir die VM starten und das Ubuntu Linux darauf installieren. Die Anleitung dazu folgt im nächsten Teil: Ubuntu installieren, entrümpeln und updaten.

Weitere Links

  • Virtual Box original (Verzeichnis) (Version Windows 32bit), wenn man es auf dem eigenen Rechner installieren will
  • VMWare (Homepage) läuft auf Windows und Linux. Der freie VMWare-Server ist eine sehr brauchbare Lösung, wenn man zum Beispiel ein paar virtualisierte Entwicklungs- oder Testsysteme hat. Gute GUI-Unterstützung. Leider benötigt es reichlich Resourcen, muss installiert werden und belegt reichlich Plattenplatz.
  • Qemu für Windows (download) und für Linux (download) ist eine Virtualisierungs-Lösung wie Virtual Box, aber grafisch/GUI nicht so komfortabel unterstützt. Dafür kann es diverse Prozessoren simulieren, läuft ohne Installation auf Windows und Linux und unterstützt ebenfalls VMDK-Disks. Ich habe es sogar auf meinem eeePC nutzen können.

Zeitverschiebungen

2009/01/08

Schön, wenn man im (proprietären, ziemlich teuren) Report-Tool namens Business Objects einen Filter wie ’sampled last year‘ einstellen kann. Das entbindet einen von der eigenen Rumrechnerei mit Zeitschemata.

Intelligent ist es auch, wenn das (proprietäre, nicht minder teure) Datenaufzeichnungs-Tool Simatic-IT Historian seine Messwerte in UTC-Zeit abspeichert, damit man Daten aus verschiedenen Zeitzonen vergleichen kann.

Blöd nur, wenn das Report-Tool das irgendwie nicht mitbekommt und deshalb zum Beispiel die in Deutschland (UTC+1) aufgezeichneten Daten zwischen 2008-12-31 23:00:00 und 23:59:59 angeblich nicht mehr in 2008 liegen, sondern schon in 2009.

Schon fehlt in der Monatsübersicht des vergangenen Jahres der Dezember, denn dessen Monatswert wird – logisch – auf 31.12. 23:59:59 geschrieben, schliesslich kann die Summe nicht älter sein als der letzte Messwert.

Und nu?

Eigentlich sollte man nur diesen komfortablen Filter ’sampled last year‘ anpassen müssen. Leider ist der – prost proprietär – geschützt, verrammelt und verriegelt. Kommt man nicht ran.

Also neuen Filter erstellen, beziehungsweise eine dynamische Variable. Business Objects hat dieses sehr clevere Universe-Konzept, in dem die ganzen Komfort-Features für die Report-Erstellung abgelegt sind und dieses Universe kann man mit einem (proprie… – wir sagten es schon) Tool namens Designer ändern. Wer auf die Idee gekommen ist, die Begriffe ‚Universe‘ und (hoffentlich itelligent) ‚Designer‘ zu verwenden, hatte offenbar Humor.

Das Jahresende nach Business Objects

Unsere Messwerte werden mit UTC-Unix-Zeitstempel gespeichert, also brauchen wir eine dynamische Variable im Universe, die den UTC-Wert der letzten Sekunde des vergangenen Jahres in Sekunden seit 1970-01-01 00:00:00 enthält.

Dem System liegt ein MS-SQL-Server zugrunde, also basteln wir erst mal die richtige Formel zusammen, die immer den aktuell richtigen Wert liefert. Zum Beispiel: ’select datediff(second, ‚1970-01-01 00:00:00′, dateadd(year, datediff( year, 0, getdate() ), 0)) – 1‘.

Das liefert den Wert 1230767999, dessen Richtigkeit die Seite Unix-Time-Conversion bestätigt.

090108_zeitverschiebung-2

Nun greifen wir uns per Designer das aktuelle Universe und fügen ein ‚General Time Object‘ hinzu:

  • In dem Zweig General Time Objects / Condition Objects ein neues Objekt erstellen
  • Name und Typ einstellen und den SQL-Ausdruck aus dem Versuch mit dem SQL Query Browser hineinkopieren
  • Unter Tabellen unbedingt eine zum PPA gehörende Tabelle auswählen, sonst schlägt die Syntaxprüfung fehl
  • Bei Eigenschaften „Kennzahl“ einstellen, also Skalar, das sind die rosa Böppel
  • Bei Erweitert die Benutzung mindestens in Bedingungen erlauben

090108_zeitverschiebung-3

  • Um das Jahr als ganzes selektieren zu können noch eine Variable StartVorigesJahr einfügen, die die erste UTC-Sekunde des vergangenen Jahres liefert. Der SQL-Ausdruck dafür ist übrigens ‚datediff(second, ‚1970-01-01 00:00:00′, dateadd(year, datediff( year, 0, getdate() )-1, 0))‘

Jetzt das Universe abspeichern und exportieren, damit die Berichte im Repository darauf zugreifen können.