Alte - und neue Ärgernisse:
Bei der Installation stolpert der Yast Installationsassistent erst einmal wie üblich über meine externe Festplatte
und möchte die auch gerne formatieren statt mein bisheriges Festplattensetup automatisch einzulesen. Gut das war bei vorherigen Versionen auch schon so. Das dann jedoch, nachdem ich dies wie üblich im erweiterten Partitionssetup geändert und entsprechende Mountpunkte für externe Festplatten gesetzt habe, über Softwareauswahl steht "Zugriff auf /media/Pladde1" nicht möglich macht mir das Angst und ich entferne vorsorglich alle externen Festplatten und USB Sticks. Anschleißend starte ich den Installer noch einmal.
Dabei stelle ich fest dass es keinerlei Setup Möglichkeiten mehr für den Bootmanager gibt. Die eigentliche Installation verläuft dann wie immer so schnell oder so langsam wie immer. Je nachdem ob man mit oder ohne Abbilder installiert.
Nach der Installation versuche ich die Softwareauswahl anzupassen. Die meiner Meinung nach in der Softwarevorauswahl angewählten überflüssigen Spiele werden deinstalliert. Am Yast2 scheint sich so gut wie nichts geändert zu haben. Und das Gtk-Frontend schmiert mir auch erst einmal ab. Der Fehler lässt sich übrigens reproduzieren und tritt immer dann auf wenn ich meine Software anpassen möchte und mich das Programm darauf aufmerksam macht, dass für eine Aktion weitere Pakete gelöscht bzw. hinzugefügt werden müssen. Neu ist der Fehler auch nicht. Trat er doch zwischenzeitlich nach einem Patch bereits in den Vorgänger-Versionen 11.2 und 12.1 auf. Fenster die vom Yast2 aus aufgerufen werden, werden genau wie in der Vorgängerversion nicht in der vollen Größe geöffnet. Immerhin habe ich jetzt die Möglichkeit diese mit der Maus in die rechte Größe zu zerren, was ich als störend bei der Systemadministration empfinde. So bleibt mir als Workaround vorerst nichts anderes übrig, als auf das Qt-Frontend auszuweichen. Ich deinstalliere yast2-gnome über den Konsolenbefehl und installiere stattdessen yast2-kde4. Dieses Frontend wurde jedoch seit meinem Einsteig in SuSE (damals hieß das noch so) 9.0 kaum verbessert und bei der Softwareauswahl dauern Konfliktlösungen nachwievor unnötig lange und ist meiner bescheidenen Meinung nach lange nicht so komfortabel. Aber das mag auch Geschmackssache sein.
Neues- und Bewährtes
Opensuse dürfte mit zu den "Early Adoptern" der Software eines gewissen Herrn Poettering gehören. Dessen Systemd mit Journal nun in Version 44 SystemV Init vollständig ersetzt hat. Was nicht so unproblematisch ist wie ich zunächst gedacht hat. In den Releasenotes wird zudem ausdrücklich darauf hingewisen dass System V Init nicht mehr unterstützt wird. Was mich doch ein wenig verwirrt, denn angeblich sollte es doch Abwärtskompatibel sein.
Für den Bootvorgang wird nun Grub 2.0 mit Plymouth eingesetzt, was das den Bootprozess nun wie ein anderes Betriebssystem aus Redmond ausschauen lässt. Ich empfinde das als unnötige Spielerei, da ich beim Booten gerne sehe, was passiert. Zumal ich auch gar nicht so oft boote. Das Yast2 Modul zur Konfiguration von Grub2 wirkt wie mit der heißen Nadel gestrickt und bietet leider keinen Passwortschutz für denselben an. Kein Problem denke ich, wechsele ich auf Grub Legacy und nutze das dort bewährte Tool grub-md5crypt. Ein Wechsel auf dieses Bootsystem führte bei mir allerdings dazu dass das System gar nicht mehr hochkam und den Grub mittels Rescuesystem reparieren gestaltet sich mit vollverschlüsselten Festplatten doch als schwierig. Um Grub2 besser einzurichten hat Community Member
Freunde
Freitag, 7. September 2012
Freitag, 10. August 2012
Autostart a terminal at gnome startup with several tools running
The first thing i do when my linux system is up i open a new terminal and start several tools to monitor my system. Can we start the desktop environment with a shell already running these tools?
Yes we can.
I used this command line:
gnome-terminal --tab-with-profile="Default" -e "systemd-journalctl -f -a" --tab-with-profile="Default" -e htop --tab-with-profile="Default"
and added it as a gnome-session-properties autostart program.
This opens a gnome-terminal with 3 tabs. In each tab running systemd-journalctl, htop and a clear one for further tasks like updating the system. Each tab uses the "Default" profile. The --tab-with-profile="Default" uses this profile in each new tab. The -e Option specifies the program you want to start in this particular tab. Note that if you want to parse options to one of these tools you have to quote them.
You also can combine these tools with pipes and logic operators. If you want for example an autoupdate on a debian based system you could do this by using this autostart command-line:
gnome-terminal -e "sudo apt-get update && sudo apt-get upgrade && sudo apt-get clean && sudo update-command-not-found && sudo -k"
This will update your system as root,- if you have configured your /etc/sudoers file correlatively,- and will close the shell or the tab when the update is finished or cannot be issued.
One last thing that may annoy you is that every time the gnome-terminal does not start in full maximized mode by default. Using gnome-terminal --help-window-options reveals that you simply have to append --maximize to your options.
And it works perfect.
Summary gnome-terminal options:
-e "<Command>" Starts the gnome Terminal with this command executed. Using Quotes is only neccessary if you want to use options or links
several programs together with logical operators.
--tab-with-profile="<Profile>" opens a new tab with the Profile for each time this option is used. After each Option you can pass on the -e to sepcify which
program should be running in each tab.
--maximize start the gnome-terminal maximzed.
Yes we can.
I used this command line:
gnome-terminal --tab-with-profile="Default" -e "systemd-journalctl -f -a" --tab-with-profile="Default" -e htop --tab-with-profile="Default"
and added it as a gnome-session-properties autostart program.
This opens a gnome-terminal with 3 tabs. In each tab running systemd-journalctl, htop and a clear one for further tasks like updating the system. Each tab uses the "Default" profile. The --tab-with-profile="Default" uses this profile in each new tab. The -e Option specifies the program you want to start in this particular tab. Note that if you want to parse options to one of these tools you have to quote them.
You also can combine these tools with pipes and logic operators. If you want for example an autoupdate on a debian based system you could do this by using this autostart command-line:
gnome-terminal -e "sudo apt-get update && sudo apt-get upgrade && sudo apt-get clean && sudo update-command-not-found && sudo -k"
This will update your system as root,- if you have configured your /etc/sudoers file correlatively,- and will close the shell or the tab when the update is finished or cannot be issued.
One last thing that may annoy you is that every time the gnome-terminal does not start in full maximized mode by default. Using gnome-terminal --help-window-options reveals that you simply have to append --maximize to your options.
And it works perfect.
Summary gnome-terminal options:
-e "<Command>" Starts the gnome Terminal with this command executed. Using Quotes is only neccessary if you want to use options or links
several programs together with logical operators.
--tab-with-profile="<Profile>" opens a new tab with the Profile for each time this option is used. After each Option you can pass on the -e to sepcify which
program should be running in each tab.
--maximize start the gnome-terminal maximzed.
Freitag, 9. März 2012
Was heißt hier Wohldefniert?
Zwischendurch auch mal wieder etwas in meiner Muttersprache. Vor einigen Tagen habe ich mich mit einem Freund getroffen. Wir haben über allerlei sinnvolle und weniger sinnvolle Dinge geplaudert. Dabei wurde ich gefragt was es denn in der Mathematik mit der Wohldefiniertheit auf sich hat. Ob man das denn nur so sage oder ob hinter diesem Begriff noch mehr steckt.
Ich möchte das einmal zum Anlass nehmen dies dem geneigtem Leser zu erklären.
In der Mathematik heißt wohldefiniert dass es das beschriebene Objekt auch tatsächlich existiert. (Ein mathematisches Objekt kann eine Zahl, eine algebraische Struktur, eine Funktion oder eine Menge sein. )
Dafür muss durch logische Schlussfolgerung nachgewiesen werden, dass ein solches Objekt auch existiert. Ebenso muss gezeigt werden, dass das gesuchte Objekt eindeutig ist. Dies geschieht ebenfalls durch logische Schlussfolgerungen meist durch den Beweis durch Widerspruch bei dem man einfach das Gegenteil annimmt. Also das es noch mindestens ein weiteres Objekt mit diesen Eigenschaft gibt und daraus einen Widerspruch herleitet.
Ich möchte das einmal zum Anlass nehmen dies dem geneigtem Leser zu erklären.
In der Mathematik heißt wohldefiniert dass es das beschriebene Objekt auch tatsächlich existiert. (Ein mathematisches Objekt kann eine Zahl, eine algebraische Struktur, eine Funktion oder eine Menge sein. )
Dafür muss durch logische Schlussfolgerung nachgewiesen werden, dass ein solches Objekt auch existiert. Ebenso muss gezeigt werden, dass das gesuchte Objekt eindeutig ist. Dies geschieht ebenfalls durch logische Schlussfolgerungen meist durch den Beweis durch Widerspruch bei dem man einfach das Gegenteil annimmt. Also das es noch mindestens ein weiteres Objekt mit diesen Eigenschaft gibt und daraus einen Widerspruch herleitet.
Bleiben wir einfach einmal bei der Null. Upps ich habe "die Null" gesagt, Dabei wissen wir noch gar nicht,- zumindest in diesem Text, dass es die Null gibt. Dass eine Null gibt, fordern wir einfach aus den Axiomen für natürliche Zahlen und fordern hier einfach die folgende Eigenschaft:
Für jedes Element a dass ich aus der Menge der natürlichen Zahlen herausgreife, existiert ein Element e in der Menge der natürlichen Zahlen mit der Eigenschaft:
a+e=a
e+a=a
Nehmen wir an dieses Element e sei doch nicht eindeutig und wir hätten zwei Elemente mit der Eigenschaft, dann würde gelten dass für jedes Element a dass ich aus der Menge der natürlichen Zahlen herausnehme, ein Element e und ein Element e* in der gleichen Menge existieren mit den Eigenschaften:
a+e*=e*+a=a
a+e=e+a=a
Da nun ja auch unser Element e und e* aus eben der gleichen Menge stammen muss ja auch gelten:
e+e*=e
e*+e=e*
Und da wir nun ja e und e* vertauschen dürfen. (Das dass in der Menge der natürlichen Zahlen erlaubt ist, wurde noch nicht gezeigt. Ich setze dass hier ebenfalls vorraus. Der Beweis ist etwas langwieriger und nutzt die komplette Bandbreite der Axiome der natürlichen Zahlen aus.) folgt daraus, dass
e=e+e*
e+e*=e*
Und nun sieht selbst der mathematisch unbegabte Leser, dass offensichtlich
e=e+e*=e*
gilt und damit e=e* ist und wir uns geirrt haben. Es gibt doch nur eine Null und wir können dieses Element beruhigend mit 0 bezeichnen.
Der geneigte Leser mag sich an dieser Stelle fragen, ob es denn überhaupt so etwas wie nicht wohldefinierte Objekte geben kann. Ich möchte daher ein Beispiel bringen bei dem sowohl die Existenz als auch die Eindeutigkeit verletzt sind.
Zu jedem Element x in der Menge der reellen Zahlen (Das waren die wo auch die Zahl Pie enthalten ist.) ist eine Funktion f(x) definiert als die Zahl y in der Menge der reellen Zahlen für die folgendes gilt:
x=y^2
y ist nicht wohldefiniert. denn zum Einen ist zum Beispiel für x=-1 die Gleichung im Reellen gar nicht lösbar. Solch ein Objekt gibt es also gar nicht und die Existenz ist hier verletzt. Und zum Andern erhält man sowohl für x=3 als auch für x=-3 das gleich Ergebnis. Was der Eindeutigkeit widerspricht.
Wohldefiniertheit hat auch nichts damit zu tun, dass man in einer anderen Menge ein Objekt mit den gleichen Eigenschaften vorfindet. Die Wohldefiniertheit eines Objektes bezieht sich immer auf die Menge bzw. die Axiome aus der diese Objekte gefordert werden. Betrachten wir hier die Menge der Matrizen a(ij). Für diese gibt es zwar immer ein Objekt 0(ij) dass bezüglich der Addition die gleichen Eigenschaften aufweist. Und es gilt hier tatsächlich a(ij)+0(ij)=0(ij)+a(ij)=a(ij)
a(ij)+0(ij)=a(ij)
Allerdings kommen wir auch hier mit der Eindeutigkeit in Schwierigkeiten Denn nimmt man einmal die Elemente a(ij) und b(kl) her in der entweder i nicht gleich k oder j nicht gleich l. Oder sogar beiderseits die Dimensionen nicht stimmen, dann können die zugehörigen neutralen Elemente
0(ij) und 0(kl) nicht gleich sein. Denn für ungleiche Dimensionen lassen sich Matrizen nicht addieren.
Für einen Algorithmus heißt das zum Beispiel dass jedes Mal wenn ich meinen Algorithmus starte. Wenn ich oben A reingieße und unten B rausfällt. Das in Abhängigkeit von diesem A das B was da nach jedem Durchlauf unter raus purzelt eindeutig sein muss. Es kann also nicht auf einmal unten C als Ergebnis stehen. Und vor allem dass ich auch jedes mal ein Ergebnis
erhalte und ich mich nicht irgendwo in einer Endlosschleife festgehängt habe. Das heißt die Ergebnismenge eines Algorithmus A ist wohldefiniert. Dies ist im übrigen der gleiche Grund warum ein Computer nicht in der Lage ist Zufälle zu erzeugen. Ein Zufall, zum Beispiel eine Zahl wird immer aus momentan bestehenden Zuständen einer Turing Maschine berechnet. Gelingt es mir den gleichen Zustand noch ein einmal zu erreichen, erhalte ich denselben Zufall. Dieser Umstand führt übrigens auch dazu dass es so etwas wie den unknackbaren Verschlüsselungsalgorithmus niemals geben wird.
erhalte und ich mich nicht irgendwo in einer Endlosschleife festgehängt habe. Das heißt die Ergebnismenge eines Algorithmus A ist wohldefiniert. Dies ist im übrigen der gleiche Grund warum ein Computer nicht in der Lage ist Zufälle zu erzeugen. Ein Zufall, zum Beispiel eine Zahl wird immer aus momentan bestehenden Zuständen einer Turing Maschine berechnet. Gelingt es mir den gleichen Zustand noch ein einmal zu erreichen, erhalte ich denselben Zufall. Dieser Umstand führt übrigens auch dazu dass es so etwas wie den unknackbaren Verschlüsselungsalgorithmus niemals geben wird.
Donnerstag, 16. Februar 2012
etckeeper-ng: Taking the distributed version control to the next level
Update:
A lot has changed since the last time i wrote about this project. First i moved the project to a different github.
Since the project and the code has gotten more complex. i separated etckeepr-ng completely from bashtools and spited up the functions in modularized files. Each function lives in his own file now.
So far i announced version 0.2.1 which is still to buggy for use in a productive environment although i fixed most known bugs i found.
I do have speakable commands now because they are more flexible to add than - options. Type "etckepper-ng help" to view all commands known for etckeeper-ng. There are however some new commands as you might have noticed already. With "reset" at least you are able to reset /etc to the last backed up commit. A smaller command is the "list-excludes" command which simply does a cat on your $EXCLUDEFILE.
Also i wrote etckkerper-ng it is able to parse Variables from the configuration file /etc/keeper.conf
There is a lot todo for now. So if you are a programmer and able to help to hack on etckeeper-ng you are welcome to check out the git repository and ask back for a push request. Also report bugs to me whenever you might find one.
Update: Santas Hacking night :D
I got the -f option working for backup one single file. I strongly recommend using this for doing backups now every time you change a configuration file. It's a lot faster to backup just one file instead of doing this for the whole /etc all the time. Also this might be more secure since you only need to backup files which you are sure about. Before doing a backup use -c option to verify what has changed After verifying these changes add those files to the backup and be certain this changes are ok.
Update: fixed some bugs in the Script today. Also the Script detects a change with the -c Option, the diff is logged to a logfile. So you can see what has changed.
I have completely disabled the -r Option though since this was highly unusable.
Hi girls and guys,
today i present you with a new incarnation of the etckeeper. My Script etckeeper-ng rsyncs the /etc directory into a backup directory. As usual you can find the etckeeper-ng in my github directory and get it from there.
By default the Script syncs the /etc to /root/.etcbackup/. You can change this by editing the $BACKUPDIR variable in the script.
After initializing the Script with -i option it saves a copy of /etc to /root/.etcbackup/etc and a file /root/.etcbackup/content.bak which contains the permissions user and owner of every file in the original /etc directory. All files under $BACKUPDIR than gets under version control by git.
Whenever you have done some changes in the configuration files, you can check them in and commit them to git by using the -b option to etckeeper-ng. The Backup function takes a little bit longer though, since the script also tests whether any permission or ownership or groupship has changed. In this case the Script will ask you, if you would like to restore the original permissions or commit the changed permissions and store them in the content.bak file.
You can list your commits by using the -l option.
However you will be notified that you should define some files like /etc/passwd or /etc/shadow that should not be included in the backup. You can define the /etc/passwd
file from being backed up by issuing the Script etckeeper-ng -e passwd. You have to give the relative path from /etc to say which files you wish to exlclude from being backed up. This will create a file /root/.etcbackup/excludes which will be read by the rsync programm with the --exclude-from option.
Checking if someone has something changed can be archived by using the -c option. This will create a second copy of the backup directory and will rsync the /etc to this particular second copy. The directory can be set by editing the variable $COMPAREDIR. The script will use git status -s and a check function for the permissions to check against content.bak if the user, the group and the permissions of all files are genuine.
If someone or yourself by accident change the permissions of a particular file you can reset this by using the -C option. Note: It's a capital C.
And finaly restoring the /etc directory can be archived by using the -r
were you can use HEAD restoring from the latest commit or the md5sum which is listed after "commit" when you using -l
Hope this script makes the live a little bit easier for you.
And please tell me if you find any bugs.
That's all folks.
A lot has changed since the last time i wrote about this project. First i moved the project to a different github.
Since the project and the code has gotten more complex. i separated etckeepr-ng completely from bashtools and spited up the functions in modularized files. Each function lives in his own file now.
So far i announced version 0.2.1 which is still to buggy for use in a productive environment although i fixed most known bugs i found.
I do have speakable commands now because they are more flexible to add than - options. Type "etckepper-ng help" to view all commands known for etckeeper-ng. There are however some new commands as you might have noticed already. With "reset" at least you are able to reset /etc to the last backed up commit. A smaller command is the "list-excludes" command which simply does a cat on your $EXCLUDEFILE.
Also i wrote etckkerper-ng it is able to parse Variables from the configuration file /etc/keeper.conf
There is a lot todo for now. So if you are a programmer and able to help to hack on etckeeper-ng you are welcome to check out the git repository and ask back for a push request. Also report bugs to me whenever you might find one.
Update: Santas Hacking night :D
I got the -f option working for backup one single file. I strongly recommend using this for doing backups now every time you change a configuration file. It's a lot faster to backup just one file instead of doing this for the whole /etc all the time. Also this might be more secure since you only need to backup files which you are sure about. Before doing a backup use -c option to verify what has changed After verifying these changes add those files to the backup and be certain this changes are ok.
Update: fixed some bugs in the Script today. Also the Script detects a change with the -c Option, the diff is logged to a logfile. So you can see what has changed.
I have completely disabled the -r Option though since this was highly unusable.
Hi girls and guys,
today i present you with a new incarnation of the etckeeper. My Script etckeeper-ng rsyncs the /etc directory into a backup directory. As usual you can find the etckeeper-ng in my github directory and get it from there.
By default the Script syncs the /etc to /root/.etcbackup/. You can change this by editing the $BACKUPDIR variable in the script.
After initializing the Script with -i option it saves a copy of /etc to /root/.etcbackup/etc and a file /root/.etcbackup/content.bak which contains the permissions user and owner of every file in the original /etc directory. All files under $BACKUPDIR than gets under version control by git.
Whenever you have done some changes in the configuration files, you can check them in and commit them to git by using the -b option to etckeeper-ng. The Backup function takes a little bit longer though, since the script also tests whether any permission or ownership or groupship has changed. In this case the Script will ask you, if you would like to restore the original permissions or commit the changed permissions and store them in the content.bak file.
You can list your commits by using the -l option.
However you will be notified that you should define some files like /etc/passwd or /etc/shadow that should not be included in the backup. You can define the /etc/passwd
file from being backed up by issuing the Script etckeeper-ng -e passwd. You have to give the relative path from /etc to say which files you wish to exlclude from being backed up. This will create a file /root/.etcbackup/excludes which will be read by the rsync programm with the --exclude-from option.
Checking if someone has something changed can be archived by using the -c option. This will create a second copy of the backup directory and will rsync the /etc to this particular second copy. The directory can be set by editing the variable $COMPAREDIR. The script will use git status -s and a check function for the permissions to check against content.bak if the user, the group and the permissions of all files are genuine.
If someone or yourself by accident change the permissions of a particular file you can reset this by using the -C option. Note: It's a capital C.
And finaly restoring the /etc directory can be archived by using the -r
were you can use HEAD restoring from the latest commit or the md5sum which is listed after "commit" when you using -l
Hope this script makes the live a little bit easier for you.
And please tell me if you find any bugs.
That's all folks.
Dienstag, 7. Februar 2012
Sind wir jetzt per Sie?
Gut dass sich ein Laden der sich hauptsächlich von Arbeitslosen ernährt ironischer Weise "PerZukunft" nennt kann man vielleicht noch irgendwie verstehen. Drinnen kann man, ganz nebenbei gesagt auch meinen Namen nicht korrekt aussprechen. Werde abwechselnd von den Damen Herr Prumps, Herr Prost oder auch gerne mal Herr Ropst gennannt.
Aber diese Per-siflage geht draußen auch weiter. Als Alternative sehe ich auf einem Plakat dass vor allem ein "Erfolg per Hochschulstudium" gebraucht wird, während ich in einem U-Bahnhofe "per Kamera" überwacht werde.
Schnell fahre ich mit der U-Bahn in die Bibliothek wo man mich fragt, als ich ein Buch vorbestelle, ob ich denn "per E-Mail" darüber Bescheid bekommen möchte wenn dieses aus dem Magazin verfügbar ist. Es ginge auch "per SMS" sagt man mir, während ich mich frage ob es nicht schöner klingt, wenn man mir dieses auch mittels einer E-Mail mitteilen könnte.
Das Buch unterm Arm komme ich noch einer Zahlungsaufforderung eines größeren Onlinehauses nach, welche ich"per Rechnung" erhielt und bin froh darüber das die Überweisung "per Sofort" geschieht. Das dass "per" hier sogar völlig sinnlos ist, sei nur nebenbei erwähnt. Danach trinke ich einen Kaffee am Stand eines Bäckers "per Tasse" . (Kein Witz) 2 Anrufe in Abwesenheit von jemanden der mir sowie so schon längere Zeit auf den Keks geht. Er erklärt mir er hätte mich nun schon die ganze Zeit über versucht "per Handy" zu erreichen. Ich antworte: "Na dann ist ja gut. Und ich habe gedacht, du hättest versucht mich auf dem Handy zu erreichen."
Mein Freund der gerade ein Reise per äh entschulden Sie mich nach Indien macht schreibt mir:
dass er nun per Boot auf einem Fluss zu Monkey Island fahre. Ich korrigiere seine Grammatik und ernte von jemanden dafür ein +1. Wenigstens etwas.
Aber diese Per-siflage geht draußen auch weiter. Als Alternative sehe ich auf einem Plakat dass vor allem ein "Erfolg per Hochschulstudium" gebraucht wird, während ich in einem U-Bahnhofe "per Kamera" überwacht werde.
Schnell fahre ich mit der U-Bahn in die Bibliothek wo man mich fragt, als ich ein Buch vorbestelle, ob ich denn "per E-Mail" darüber Bescheid bekommen möchte wenn dieses aus dem Magazin verfügbar ist. Es ginge auch "per SMS" sagt man mir, während ich mich frage ob es nicht schöner klingt, wenn man mir dieses auch mittels einer E-Mail mitteilen könnte.
Das Buch unterm Arm komme ich noch einer Zahlungsaufforderung eines größeren Onlinehauses nach, welche ich"per Rechnung" erhielt und bin froh darüber das die Überweisung "per Sofort" geschieht. Das dass "per" hier sogar völlig sinnlos ist, sei nur nebenbei erwähnt. Danach trinke ich einen Kaffee am Stand eines Bäckers "per Tasse" . (Kein Witz) 2 Anrufe in Abwesenheit von jemanden der mir sowie so schon längere Zeit auf den Keks geht. Er erklärt mir er hätte mich nun schon die ganze Zeit über versucht "per Handy" zu erreichen. Ich antworte: "Na dann ist ja gut. Und ich habe gedacht, du hättest versucht mich auf dem Handy zu erreichen."
Mein Freund der gerade ein Reise per äh entschulden Sie mich nach Indien macht schreibt mir:
dass er nun per Boot auf einem Fluss zu Monkey Island fahre. Ich korrigiere seine Grammatik und ernte von jemanden dafür ein +1. Wenigstens etwas.
Abonnieren
Posts (Atom)