as times goes by

•Dezember 25, 2008 • Kommentar verfassen

Für den/die BenutzerIn ist es immer ganz angenehm, wenn sich auf den Bildschirm was bewegt damit er/sie weiß, das Programm läuft noch, auch wenn es etwas längert dauert.

In der GUI Welt wurden deshalb Dinge wie der Fortschrittsbalken oder die drehende Sanduhr eingeführt. Auf der Konsole helfen simple ASCII-Zeichen das Gefühl das sich was tut zu vermitteln.

Das kann dann beispielsweise so aussehen, wie in den folgenden beiden Beispielen. Statt

for a in `seq 1 100`; do
...

könnte man in einem Skript eine Reihe von Dateien verarbeiten

for file in `ls *.txt`; do
...

Und wenn in der Schleife wirklich was passiert, kann auch auf den sleep Befehl verzichtet werden.

 1 #!/bin/bash
 2 c=(\| \\ – \| / –)
 3 del=\b
 4
 5 echo -n "spinning wheel:  "
 6
 7 for a in `seq 1 100`; do
 8          let i=($a+1)%6
 9          echo -n ${c[$i]}
10          echo -ne $del
11          sleep 0.2
12 done
13
14 echo
15 echo -n "oder:  "
16
17 c=(. o 0 O)
18
19 for a in `seq 1 200`; do
20          let i=($a+1)%4
21          echo -ne $del
22          echo -n ${c[$i]}
23          sleep 0.1
24 done

secure google

•Dezember 19, 2008 • Kommentar verfassen

google anonym und ssl verschlüsselt benutzen? und dann auch noch ohne Werbung? Gibts nicht? Gibts doch:

scroogle, der Screen Scraping Proxy für die Suchmaschine Google, schaltet sich als Zwischeninstanz zwischen deine Suchanfrage und die google Server und lässt damit jeden Versuch bei dir cookies abzuladen, deine IP zu speichern u.ä. ins leere laufen.

Die Startseite mag etwas seltsam ausschauen, aber die Ergebnissseite präsentiert sich dafür umso aufgeräumter, übersichtlicher und zusätzlich vollkommen werbefrei. Nur die automatischen Korrekturvorschläge, bei falsch geschriebenen Suchbegriffen wird leider verschluckt.
Default werden 100 Suchergebnisse (wenn vorhanden) aufgelistet.

Dazu empfehle ich das passende Suchmaschinen plugin für Firefox, denn sonst benutzt man morgen aus Gewohnheit ja doch wieder
‚pure‘ google.

btw: für vimperator:

: dialog searchengines

scroogle ssl auswaehlen und mit schlüsselwort s verknüpfen.
Und gesucht wird zukünftig ueber ‚o‘ + ’s‘ + ‚ suchwort‘

vimperator

•Dezember 18, 2008 • Kommentar verfassen

Ein wunderbares, nein großartiges firefox add-on habe ich heute entdeckt:

vimperator

„Vimperator is a free browser add-on for Firefox, which makes it look
and behave like the Vim text editor. It has similar key bindings, and
you could call it a modal web browser, as key bindings differ according
to which mode you are in.“

Nach der Installation fällt als erstes auf, dass die GUI deutlich
schlanker ist. Die Titelzeile (mit der URL), die Menu- und
Bookmarkleiste sind verschwunden, stattdessen ist am unteren Fensterand die vim typische status line zu erkennen.

Vimperator kennt wie vim zwei modi, den normal modus und den
command-line modus in den mit ‚:‘ gewechsel wird. bringt die
Benutzerin zurück in den normal modus.

Es lohnt sich kurz das quick-start tutorial zu überfliegen um schnell
eine Ahnung zu bekommen, wie sich tabs öffnen und schließen lassen und
wie man zwischen den tabs navigieren kann.

Dann ist, vorrausgesetzt man ist an vim gewöhnt, alles weitere
eigentlich sehr schnell vertraut.

Bequem finde ich, dass ich eigentlich vollkommen auf die maus
verzeichten kann. ‚f‘ (oder ‚F‘) markiert alle links mit einer Zahl –
eingetippen und der link öffnet sich (in einem neuen Fenster). Beim
Konqueror hab ich das auch schonmal gesehen.

so long…

:wq

Debian Pakete bauen

•November 8, 2008 • Kommentar verfassen

Ich brauche ein Debian Paket für pkpgcounter. Beim googlen habe ich dieses sehenswerte Video gefunden, das erläutert, wie man in wenigen Schritten ein python Programm in einem Debian Paket verpackt.

kernel-package…

•Oktober 31, 2008 • Kommentar verfassen

…so heisst das debian paket, indem sich das programm make-kpkg verbirgt.

hat ein wenig gedauert, bis ich das vorhin wieder gefunden hatte.

make-kpkg ermöglicht es einen kernel the debian way zu kompilieren, d,h, das ergebnis ist ein deb paket, das ganz normal über die paketverwaltung installiert werden kann.
in diesem fall mit dpkg -i

und wieder deinstallieren (dpkg -r) und das ist der hauptgrund, warum ich es gegenüber einem make && make modules && cp x nach y usw usf. bevorzuge.


# make-kpkg kernel_image --append-to-version=-`hostname`

/proc/sys/vm/block_dump

•Oktober 25, 2008 • Kommentar verfassen

Für eine Solid State Disk, wie sie in meinem neuen aspire one drin ist, sind zu viele Schreibvorgänge tötlich.

Deswegen wollte ich herausbekommen, welche wie oft auf die „platte“ zugreifen.

Nichts einfacher als das (sagte Piggeldi zu Frederick):

$ cat 1 > /proc/sys/vm/block_dump
$ tail -f /var/log/kern.log

und lesen…

pyosd: ein einfaches beispiel

•Oktober 22, 2008 • Kommentar verfassen

nach einer langen pause mal wieder ein beitrag.

Ich hab gerade pythons On-Screen-Display Bibliothek pyosd entdeckt. Eine simple Schnittstelle zur X On-Screen Display library, die es ermöglicht jede beliebige Nachrichten im X display einzublenden.

Eine gute Anwendung um pyosd auszuprobieren ist mcabber. Mcabber, ein consolenbasierter jabber client, der mittlerweile in Version 0.9.9 vorliegt bietet schon seit Version 0.7.1 die Möglichkeit events wie einkommende Nachrichten oder Statuswechsel der buddies an einen externen Befehl weiterzuleiten. Mcabber liefert z.B. ein einfaches Shellskript aus, das jede Nachricht mit einem nervigen PING ankündigen kann oder ein Skript, dass osd_cat verwendet um die Nachricht auf dem X Display anzukündigen.

Aus der mcabberrc:


 1 # External command for events You can specify a script or
 2 # process to be launched when an event occurs.  Set
 3 # ‚events_ignore_active_window‘ to 1 if you don’t want the
 4 # script to be run for a message to the current active
 5 # window (default: 0).
 6 #
 7 # If ‚event_log_files‘ is set, a file is created and
 8 # contains the body of the message (incoming messages only);
 9 # the file name is the last parameter.  If you enable this,
10 # you can specify the directory mcabber will use to create
11 # these messages with the ‚event_log_dir‘ variable (default
12 # is the system temp dir, or MCABBERTMPDIR environment
13 # variable).  Please note that mcabber won’t delete these
14 # files, it’s your script’s job.
15 #
16 # The command is called the following way:
17 # $events_command MSG IN jabber@id [file]
18 #               (when receiving a message)
19 # $events_command MSG OUT jabber@id  
20 #               (when sending a message)
21 # $events_command MSG MUC room_id [file]  
22 #               (when receiving a MUC message)
23 # $events_command STATUS X jabber@id      
24 #               (new buddy status is X)
25 # See sample script in contrib/ directory.
26 set events_command = ~/.mcabber/eventcmd.py
~

Das osd_cat Shellskript lässt sich schnell mit python und pyosd ersetzen:


 1 #!/usr/bin/python
 2 #—————————————
 3 #
 4 #
 5 # Filename:    eventcmd.py
 6 # Description: OSD for mcabber events
 7 # Date:        10/22/08
 8 #—————————————
 9
10
11 import pyosd
12 import sys
13 import os
14 from random import randint
15
16 # use xfontsel to select a font
17 FONT = "-*-fixed-*-*-*-*-15-*-*-*-c-90-*-*"
18 COLOR_MSG="darkgreen"
19 COLOR_STATUS="yellow"
20 POSITION = pyosd.POS_BOT
21 ALIGN = pyosd.ALIGN_RIGHT
22 TIMEOUT = 10
23 MAXOFFSET = 100
24 # maximum number of characters to display
25 # 0: nothing from the message is displayed
26 MAXCHARS = 0
27
28
29 MSG_FROM = msg from %s
30 MSG_SAYS = %s: %s
31 OFFLINE = %s offline
32 ONLINE = %s online
33
34
35 def display(str, color):
36     “‘ Show OSD message “‘
37
38     ods = pyosd.osd(font="fixed", timeout=TIMEOUT)
39
40     ods.set_colour(color)
41     ods.set_font(FONT)
42     ods.set_align(ALIGN)
43     ods.set_pos(POSITION)
44
45     # change position randomly, so that
46     # new messages don’t cover old ones.
47     offset = randint(0,MAXOFFSET)
48     ods.set_vertical_offset(offset)
49
50     ods.display(str)
51     ods.wait_until_no_display()
52
53
54
55 def main(e, w, b, f=None):
56     “‘ identify mcabber message “‘
57
58
59     if e == "MSG":
60         if w == "IN":
61             if f and MAXCHARS:
62                 print "using line"
63                 line = file(filename).readline().rstrip(\n)
64                 file.close
65
66                 if len(line) >= MAXCHARS:
67                     line = line[:maxchars] + ""
68
69                 msg = MSG_SAYS % (b, line )
70                 os.remove(filename)
71             else:
72                 msg = MSG_FROM % b
73
74             display(msg, COLOR_MSG)
75
76     elif e == "STATUS":
77         if w == "_":
78             display(OFFLINE % b, COLOR_STATUS)
79         elif w == "O":
80             display(ONLINE % b, COLOR_STATUS)
81
82
83
84 if __name__ == __main__:
85
86     event = sys.argv[1]
87     what = sys.argv[2]
88     buddy = sys.argv[3]
89
90
91     if len(sys.argv) > 4:
92         filename = sys.argv[4]
93         main(event, what, buddy, filename)
94     else:
95         main(event, what, buddy)
96
97     sys.exit(0)

thunderbird plugin

•Juli 28, 2008 • Kommentar verfassen

Für gewisse Dinge benutze ich nicht mutt. In diesen Fällen kommt für mich (zur Zeit) dann nur thunderbird in Frage.
(Wer es genau wissen will: die Auto-Vervollständigung in thunderbird, die sich Adressen, die ich einmal verwendet habe merkt, ist für mich das ausschlaggebenste Argument.)
Das tolle, oder eines der tollen Dinge an thunderbird ist, dass er, wie firefox, über extensions erweitert werden kann.

Eines der schrecklichsten Dinge an thunderbird ist der Editor. Besonders dann, wenn ich mutt im Hinterkopf habe, der es mir erlaubt jeden belieben Editor zu verwenden. z.b vim.

Aber auch für dieses Problem existiert natürlich bereits eine Lösung in Form einer extention.
External Editor Extension heisst das gute Stück, dass es ermöglicht jeden beliebigen Editor mit thunderbird zu kombinieren. Kurz einrichten und im composer STRG-E tippen und der heißgeliebte vim präsentiert mit meine mail.

fast wie mutt…

screenshots von der konsole

•Juni 12, 2008 • Kommentar verfassen

jedes mal gimp starten um schnell einen screenshot zu machen das dauert mir einfach zu lange.
Im gimp immer laufen lassen verbraucht zu viel RAM.

Aber zum Glück gibt es für screenshots eine kleine und schnelle Lösung. Das Programm xwd aus dem Paket x11-apps erstellt screenshots auf der Konsole.

xwd -out screenshoot.png

und der Cursor verändert sich zu zu einem Kreuz, mit dem das gewünschte Fenster angeklickt werden kann.

Sonnenaufgang berechnen mit perl

•Mai 31, 2008 • 2 Kommentare

Berechnung des Sonnenaufgangs mit Perl, basierend auf http://lexikon.astronomie.info/zeitgleichung/

Jetzt würde ich nur noch gerne wissen, wie ich möglichst einfach bestimmen kann, ob a dem Tag Sommer- oder Winterzeit gilt.

#!/usr/bin/perl -w
#---------------------------------------
#
# Filename: sonne.pl
# Description: Berechnung von Sonnenauf- und Untergang.
# Date: 05/24/08
#---------------------------------------

use strict;
use Math::Trig 'acos';

my $day = 150;

my $zeitzone = 1;

# kontrolle:
# http://lexikon.astronomie.info/zeitgleichung/sunscript.html

# berlin
my $breite = 52.5;
my $laenge = 13.5;

my ($a, $u) = &risingSun($breite, $laenge, $day);

print "Aufgang: ". &toMinute($a) . "\t" . $a ."\n";
print "Untergang: ". &toMinute($u) . "\t" . $u ."\n";

###################################################
# Berechnet Zeitpunkt des Sonnenauf- und untergangs fuer einen
# bestimmten Tag des Jahres.
# Die Berechnung basiert auf http://lexikon.astronomie.info/zeitgleichung/

# Parameter:
# breite: geographische Breite in Bogenmaß
# laenge: geographische Länge in Grad
# day: Tag des Jahres.
#
# returns:
# (aufgang, untergang) als dezimalwert.
# fuer den Referenzbreitengrad 15°E. (MEZ)
sub risingSun {
###################################################
my $breite = shift;
my $laenge = shift;
my $day = shift;

my $PI = 3.1415926536;
my $RAD = $PI/180.0;

my $B = $breite * $RAD;

my $zeitgleichung = -0.171 * sin(0.0337 * $day + 0.465) - 0.1299 * sin(0.01787 * $day - 0.168);

my $deklination = 0.4095 * sin(0.016906 * ($day - 80.086));

# daemmerung, wenn sonne 50 bogenminuten unterhalb des horizonts
my $h = -0.0145;
my $tmp = (sin($h) - (sin($B) * sin($deklination))) / (cos($B) * cos($deklination));

if (abs($tmp) > 1) {
# Mitternachtssonne o.ae.
warn("Sonne erreicht nie die geforderte Hoehe $h");
return -1;
}

my $zeitdifferenz = 12 * acos( $tmp )/ $PI;

# Mittlere Ortszeit:
my $a_ort = 12 - $zeitdifferenz - $zeitgleichung;
my $u_ort = 12 + $zeitdifferenz - $zeitgleichung;

# 15. Breitengrad fuer MEZ.
my $a = $a_ort + (15 - $laenge ) * 4/60 + $zeitzone;
my $u = $u_ort + (15 - $laenge ) * 4/60 + $zeitzone;

return ($a, $u);
}

###################################################
# wandelt einen dezimalwert in eine Zeitangabe der
# Form HH:MM:SS
sub toMinute {
###################################################
my $time = shift;

my $stunde = int($time);
my $minuten = ($time - int($time)) * 60;
my $sekunden = int(($minuten - int($minuten)) * 60);
$minuten = int($minuten);

return sprintf("%2d:%02d:%02d", $stunde, $minuten, $sekunden);
}

update: erst jetzt fällt mir auf, dass es auch Perl Modul dafür gibt.