My coding principle
First, create something that works. It doesn't need to be nice or perfect, it should just work (and if possible not introduce big security risks).
Based on that, write tests.
As time passes, slowly fix bugs and beautify the code.
I've (first unconsciously ;) used this for several years now and I think it's a good approach. You quickly get actually working software (which is the most important goal IMHO - there's no sense in perfect software which will never be finished) and gradually make it better. You may have to rewrite it one or two times, but that's actually good since you already have experience then – so you know what you shouldn't do this time etc.
Kaputte Symlinks löschen mit zsh
Ohne for-Schleife oder externe Programme :>
rm *(e{[[ ! -e \$REPLY ]]})
Bootzeit verkürzen
Nur für Leute geeignet, die kein Problem mit bösen Frickellösungen haben ;-)
- Unnötige Daemons / Initskripte rausschmeißen
- In /etc/init.d/udev: udev settle ist in den meisten Fällen nicht nötig (das System kann ruhig weiterbooten, während Hardware erkannt wird)
- Alle für das System nicht absolute notwendigen Daemons/Skripte im Hintergrund starten (z.B. via rc.local statt /etc/rc?.d)
Auf meinem EeePC konnte ich die Zeit zwischen Eingabe des Festplattenpassworts und Loginprompt damit von >25 auf ca. 16 Sekunden verringern. Die rc.local sieht dort aktuell so aus.
Ungelesene Jabber-Nachrichten anzeigen (mcabber + screen/irgendwas)
Da mcabber bei mir in nem Screenfenster im "Hintergrund" läuft und ich regelmäßig irgendwas nicht mitgekriegt hab:
Mit z.B. diesem Shellskripn lässt sich die Anzahl der ungelesenen Nachrichten in eine Datei schreiben, die man dann schön im screen-hardstatus (resp. dem entsprechenden Skript) überprüfen und anzeigen lassen kann… wo sie dann hoffentlich schneller auffällt, als wenn es einmal kurz ne visual bell und dann nichts mehr gibt. In der mcabberrc muss dazu nur events_command auf den Pfad zum obigen Skript gesetzt werden.
Funktioniert natürlich nicht nur mit mcabber und screen, sondern auch mcabber + beliebiger anderer Software (und wenn man gerne fuckup hat, sogar über ssh) ;-)
Locationfoo
Mein zprofile-Snippet
funktioniert in weiterentwickelter Form immer noch, inzwischen ist die
Hauptfunktion aber, nach ~/var/tmp/.actual-location zu schreiben. Denn wenn
der PC ohnehin schon irgendwie weiß, wo man gerade ist, warum sollte man es
dann nicht auch direkt für Software nutzen?
Die Möglichkeiten sind schließlich vielfältig — automatisches setzen z.B. von
Shellparametern wie $MPD_HOST, Verknüpfung mit Todo-Systemen, der bereits
beschriebene Jabberstatus, und halt weiteres ortsabhängiges Zeug.
Auf nemesis (meinem Laptop) wird beispielsweise via uinit ein kleines Skript ausgeführt, welches einige dieser Ideen umsetzt — es kann für jeden Ort beliebige Shellskripte und Executables ausführen und zeigt (in der Annahme, dass es meist ortsabhängige Einträge hat) die "waiting for"-Kategorie aus Getting Things Done an.
Seit vorgestern liegen in /home/derf/bin obendrein noch zwei Skripte mit den Namen "efa" und "goto". efa ist ein Commandline-Client für die Elektronische Fahrplanauskunft des VRR, goto – wenig überraschend, hoffe ich ;-) – ein Wrapper um efa, welcher u.a. ~/var/tmp/.actual-location einbezieht. Die Idee ist denkbar einfach: .actual-location enthält den aktuellen Ort, irgendein Verzeichnis ordnet diesen Orten Städte und Haltestellen zu. So kann ich z.B. im Chaosdorf sitzen und mir mit "goto home" den Fahrplan für die Fahrt nach Hause anzeigen lassen, oder mit "goto c4" noch schnell woanders hin flüchten.
efa kann über die Homepage runtergeladen werden, goto gibts erstmal hier. Und bitte keine Kommentare über das HTML-Parsing in efa, das wird bei Zeiten noch überarbeitet :-)
Sinn dieses Eintrags? Write moar scripts! Es gibt einen Haufen täglicher Routine, die man sich extrem gut vom Computer abnehmen oder verkürzen lassen kann.
Debian Lenny
Gerade im IRC:
<refizul> Joey Gnu vom Gesundheitsministerium teilte am Nachmittag mit:
"Wir sind von dieser Superepidemie völlig übberrascht. Während am Vormaiitag
des heutigen Sonntags die Welt noch normal schien, brach dann zur Essenszeit
der Supervirus Lennicus Debianus aus. Die Straßen sind wie ausgestorben.
Selbst die Trolle scheinen infiziert zu sein - auf den üblichen mailinglisten
herrscht inzwischen Totenstille. Das ist unheimlich."
<refizul> "Problematisch scheint auch die Versorgung der Bevölkerung
mit Gegenmitteln zu werden. Der größte Pharmasoft Hersteller der Welt aus
Redmond hat derzeit nur ein veraltetes Medikament namens Vista im Angebot,
welches zudem noch erhebliche Produktionsfehler aufweist. Gegen das
Universalmittel iks peh, welches inzwischen schon lange über dem Verfallsdatum
liegt, haben sich allerdings inzwischen ergebliche Resistenzen entwickelt, was
die Wi
<refizul> Abhilfe will die Regierung nun durch eine Anregung des
Digitalkreislaufes schaffen. Eine Flächendeckende Versorgung mit 100 MBit
könnte die schlimmsten Auswirkungen abmildern.
<refizul> Ein dauerhafter Erfolg sei aber nur zu erreichen, wenn diese
Maßnahme für die Bevölkerung kostenneutral durchgeführt wird. Die Fensterwehr
empfiehlt als Selbsthilfemaßnahme, dass Bürger sich da, wo es möglich ist, mit
Meshnetzen behelfen, um den Virus Lennicus Debianus einzufangen.
<refizul> Wie ein Sprecher der Forschungsgruppe Spezielle Forensik
(FSF) soeben mitteilte, wurde eine unerwartete Nebenwirkung von Lennicus
Debianus entdeckt: die neulich aufgetretenen Symptome bei der Bundeswehr
scheinen bei Kontakt spontan zu verschwinden. Eine telefonische
Sonderkonferenz berät derzeit international, ob diese Behandlung auch bei den
neulich aufgetauchten Pandemien in Großbritannien, Frankreich und
Kärnten/Österreich anschlägt.
<refizul> Die NASA ist inzwischen zuversichtlich, dass Lennicus
Debianus keine ernsthafte Gefahr darstellt und die Abwehrkräfte stärkt. Mit
hoher Wahrscheinlichkeit wäre der Weltraumunfall bei einem früheren Ausbruch
vermeidbar gewesen.
Noch mehr Home-Management-foobar
Neben pkg, über welches ich ja schon oft genug geschrieben habe, wird mein {Leben,home directory} im wesentlichen noch durch die zsh-Skripte sysmaint und unisync (beide auf der homepage verlinkt) irgendwie organisiert. "Benutzt" wird dabei hauptsächlich sysmaint — es hat Einträge für pkg, unisync und noch einige andere Sachen (wie apt-get update, upgrade etc) und führt diese ab und an aus.
unisync hat einen ähnlichen Zweck wie pkg, benutzt dazu aber keine Repositories, sondern unison. Auf die Weise arbeitet es einfach im Hintergrund, ohne dass man sich um so etwas wie commits kümmern muss, und nebenbei kann man durch den fehlenden Repository-Overhead auch problemlos z.B. die Musiksammlung damit synchron halten.
Auch gibt es keine globale "Paketliste", sondern jeder Host hat eine eigene Liste an Verzeichnissen und dazugehörigen Hosts, was das ganze obendrein noch etwas dezentraler macht.
Die aktuelle Struktur von /home/derf sieht ungefähr so aus:
- bin — executables, im Pfad, von pkg erstellte symlinks auf ~/packages/...
- lib — "Library", permanent gespeicherte Dateien (z.B. Musik, E-Books, Bilder), teilweise mit unisync synchronisiert
- packages — Paketsystem, siehe die Einträge zu pkg und pkg(7)
- stuff — Diverses, via unisync auf fast allen Hosts aktuell
- var — Ebenfalls diverses, aber größtenteils Host-spezifisch (ohne unisync). Enthält u.a. Unterverzeichnisse für gtd, fremde Repositories (die mit sysmaint täglich aktualisiert werden), logfiles und "incoming"
Auf manchen PCs gibt's natürlich noch andere Verzeichnisse, die dann aber auch Host-spezifisch sind. Das home selbst ist also ziemlich aufgeräumt, die Müllhalde wurde erfolgreich nach ~/var und ~/var/tmp verlagert.
Falls sich jemand nach dem Zweck der Sache fragt:
Es macht das Leben einfach leichter. Ich tippe einfach ab und an 'sysmaint' in
meinen Prompt, und muss mir keine Gedanken mehr darum machen, noch schnell
$datei auf $host zu laden. Die relativ feste Strukter erleichtert das Skripten
dabei auch erheblich, und gibt nebenbei noch den Eindruck von Organisation,
was u.U. recht motivierend sein kann ;)
Und es ist natürlich ein guter und interessanter Zeitvertreib, solche Skripte zu schreiben und zu testen.