software

gestern

Trying something new for git commit-ids

one disadvantage of git is, that its commit-ids are ugly.

b1e7470 (even the short form of b1e74702c83accb73d60e884f7a46fc06d5d51b2) is something nobody can remember. With SVN you can say "i am using svn revision 754". a number with three to six digits for most project can be memorized.

But a commit-id of git is in the short form a seven-digit hex-number, and its "randomly" choosen (by a hash function). SVN numbers a strictly monotone, so you know the project is approximate at 750 commits, and you remember the last digit, so you can say "the commit was 754".

now i am trying something new on the otfbot project: the ver2name function uses the seven-digit version of a git commit-id to generate a fantasy-name.

b1e7470 → Radwalhel

now Radwalhel may be funny enough, so you can remeber it, when someone asks you, which version you are running.

The cool function about ver2name is, that it preserves all important information, so you can convert it back to a git commit-id. So the developer can use the "funny" name to find the git-revision the user is using:

Radwalhel → b1e7470

some more examples:

0000000 ⇔ Babbabbab
8080808 ⇔ Mebmobmob
fffffff ⇔ Zozzazzaz

you see how its working: one hexdigit is mapping to one consonant, the 7th digit is mapping to two vocals. the third vocal is created by a hash of the last two digits, but it carries no additional information and is ignored in parsing the name back to a version.

we will see, if this helps against the confusion caused by git-commit-ids. its an experiment. And its still no solution to the problem, that two consecutive commits have totally different IDs.

Kategorien Software english
Tagged git svn vcs commit names commit-id svn-rev

2 Kommentare

Juli 29, 2010

Django-Projekte: Blog

Nachdem ich eigentlich vom Release absehen wollte gibt es jetzt auf der Python-Software Seite den Blog zum Download. Ich empfehle zwar nach wie vor sich für einen neuen Blog django-basic-apps anzusehen, aber wer möchte kann auch meinen Minimal-Blog verwenden.

Kategorien Software
Tagged django Blog

0 Kommentare

Juni 27, 2010

Tipp: Vim-Modus für Textfelder mit jV

Mit jV kann man ganz normale <textarea> -Textfelder ähnlich wie mit dem vi(m)-Editor bearbeiten.

Es scheinen alle wichtigen Funktionen schon zu funktionieren, inklusive Navigation im Text (3w, t»Buchstabe«, etc.), wiederholten Befehlen (5dd) und sogar visual mode.

Ein weiteres tolles Feature: Tab fügt wenn nicht in den Einstellungen geändert ein Tab ein, statt den Fokus von dem Textfeld weg zu bewegen.

Das einzige was mir gerade beim testen ständig passiert: :w ist natürlich nicht nötig.

Kategorien Tipps Software
Tagged Firefox Extension vim Editor

0 Kommentare

Juni 16, 2010

E-Mail bei neuem Kommentar schicken mit Django

Das schöne an Django ist, dass es einem so viele Dinge abnimmt. Eine Funktion die meinem Blog noch fehlte war bei neuen Kommentaren mir eine E-Mail zu schicken.
Darin vorkommen sollte der Titel des Blogeintrags, der Link zum Blogeintrag, der Kommentar und der Link zum Kommentar.

Es sind genau 3 Zeilen nötig:

def send_comment_mail(sender, comment, request, signal):
    send_mail('Neuer Blog-Kommentar', 'Neuer Kommentar im Artikel "%s".\n%s\n\n%s'%(comment.content_object.title, comment.content_object.get_absolute_url(),comment.get_as_text()), "from@email", ["to@email"], fail_silently=True)
comment_was_posted.connect(send_comment_mail)

Kategorien OpenSource Software
Tagged django Blog Code E-Mail Kommentare

0 Kommentare

Juni 11, 2010

Blogspam

Man sollte meinen ein selbstgebautes Blog wäre nicht so im Visier wie die Standard-Softwares, zumal Django-Comments auch Anti-Spam Felder ("Bitte nicht ausfüllen") verwendet.

Falsch gedacht. Heute Nacht 34 Spam-Kommentare ...

Blog-Spam

Update: mein selbstgebautes Captcha hilft hingegen bisher zuverlässig.

Kategorien SPAM Software
Tagged SPAM Blogspam django Blog Captcha

0 Kommentare

Juni 10, 2010

neue Blogsoftware

Nachdem Wordpress mich immer mehr angenervt hat, habe ich mir jetzt eine eigene Blogsoftware mit Django gebaut. Diese enthält nicht mehr Funktionen als nötig, und ich weiß wie ich sie erweitern kann, falls ich mal mehr Funktionen haben möchte.

Die größte Arbeit war aus den doch eher umständlichen SQL-Schemata von Wordpress die alten Daten raus zu bekommen und in die viel einfacheren neuen Schemata zu importieren. Zum Beispiel die Relation zwischen einem Tag und einem Post geht über eine Zwischentabelle, außerdem werden Tags und Kategorien in der gleichen Tabelle gespeichert und nur anders gekennzeichnet.

Auch im Wordpress PHP-Code ist nicht so einfach nachvollziehbar, wie zum Beispiel ein Blogpost die zugehörigen Kategorien ermittelt, da sich die Funktion über mehrere Dateien zieht. Daher also lieber umständliches SQL als noch komplizierteres PHP lesen ...

An dieser Stelle muss ich Django stark loben, dieser Blog funktioniert ohne viel Code für die Seiten ("Views"), sondern basiert rein auf generic Views, dem Feed-Framework und dem Django-Comments-System. Später werde ich eventuell noch Django-Trackback für automatische Trackbacks hinzufügen, bis dahin einfach für den Backlink einen Kommentar hinterlassen.

Der meiste Code besteht also aus den Models (der Datenbank-Beschreibung), HTML-Templates mit etwas Logik und der urls.py Datei, wo alles zusammenläuft.

Den Code werde ich vielleicht als OpenSource online stellen, bei Interesse bitte melden, dann geht es eventuell zügiger :).

Update: Ich denke für andere ist es ist sinnvoller django-basic-apps.blog zu verwenden. Daher mache ich erst einmal kein Projekt für meinen Code auf.

Hier noch einige Statistiken:

$ find -iname '*.py'|xargs wc -l
  11 ./manage.py
  94 ./settings.py
  50 ./urls.py
   1 ./content/views.py
   0 ./content/templatetags/__init__.py
  16 ./content/templatetags/entry_extras.py
  35 ./content/models.py
  10 ./content/feeds.py
  16 ./content/admin.py
   0 ./content/__init__.py
   0 ./__init__.py
   7 ./context_processors.py
 240 insgesamt
$ find -iname '*.html'|xargs wc -l
  11 ./templates/comments/list.html
  93 ./templates/comments/base.html
   5 ./templates/404.html
   1 ./templates/feeds/latest_title.html
   2 ./templates/feeds/latest_description.html
  93 ./templates/base.html
  44 ./templates/content/post.html
   9 ./templates/content/entry_list.html
  15 ./templates/content/paginator.html
  14 ./templates/content/entry_detail.html
 287 insgesamt

Kategorien Software Allgemeines
Tagged Blog django wordpress Php

3 Kommentare

Mai 17, 2010

Firefox-Extensions die eingebaut sein sollten

Wenn man im Web sucht, findet man viele Tipps zu interessanten Firefox Extensions, die das Leben einfacher machen und das Surfen kompfortabler, wie AdblockPlus, NoScript, TabMixPlus und ähnliche. Doch alle diese Extentensions sind Geschmackssache und verändern den Browser teilweise radikal. Hier möchte ich ein paar Extensions vorstellen, die Kleinigkeiten nachrüsten, welche selbstverständlich sein sollten:

CuteMenus

Url: https://addons.mozilla.org/en-US/firefox/addon/1330/

Fügt den Menus passende Icons hinzu, was sehr der Übersichtlichkeit dient.

Download Statusbar

Url: http://downloadstatusbar.mozdev.org/

Organisiert die Downloads in einer dünnen Leiste über der Statusleiste, statt in einem kleinem Fenster was man im Hintergrund nicht so gut im Auge hat.

Filter Extensions

Url: https://addons.mozilla.org/en-US/firefox/addon/6694/

Ermöglicht es die Extensions nach Suchwort oder nach Status (neu installiert, aktiviert, deaktiviert, etc.) zu filtern. Super wenn man viele Erweiterungen installiert hat!

Linkification

Url: http://yellow5.us/firefox/linkification/

Macht unverlinkte URLs anklickbar.

More Tools Menu

Url: http://trac.arantius.com/wiki/Extensions/MoreToolsMenu

Ebenfalls besonders empfehlenswert für Leute, die viele Erweiterungen nutzen: Alle Menueinträge im Extras(Tools) Menu, die von Extensions hinzugefügt wurden kommen in ein eigenes Menu.

Open in Browser

Url: http://www.spasche.net/openinbrowser/

Ermöglicht es Dateien im Browser anzuzeigen, auch wenn Firefox denkt, dass sie nicht angezeigt werden können und sie daher nur als Download anbietet.

Weave

Url: https://mozillalabs.com/weave/

Synchronisiert den Browser auf verschiedenen PCs.

xclear

Url: https://addons.mozilla.org/en-US/firefox/addon/13078/

Fügt in der URL-Zeile und in der Suchzeile einen (X) Button hinzu, welcher den aktuellen Text aus der Leiste entfernt, und den Eingabefokus auf die Leiste setzt.

Vacuum Places Improved

Url: https://addons.mozilla.org/en-US/firefox/addon/13878/

bereinigt die Places Datenbank alle X Starts, sodass die URL-Zeile wieder schnell funktioniert.

Kategorien Software Allgemeines OpenSource
Tagged Tipps

4 Kommentare

Nov. 19, 2009

Bash-Prompt

Mal ein neuer Post zu praktischen Bash-Prompts, nachdem ich den alten doch wieder um einiges überarbeitet habe.

Ziele:

  • Übersichtlichkeit
  • Möglichst lange Eingabezeilen ohne Umbruch
  • Prompt soll auf verschiedenen Hosts unterscheidbar sein
  • Der Prompt soll möglichst informativ sein.
Lösung:
  • Zweizeiliger Prompt, eine Zeile mit vielen Informationen, eine mit nur einem > und der Eingabe dahinter.
  • Username und Hostname Farbkodiert, geschieht automatisch ueber eine Hashing-Funktion
  • Zeitausgabe ermöglicht es einfach zu sehen wann der Befehl beendet wurde, und damit auch wie lange er gebraucht hat.
  • Smiley in der Ausgabe zeigt ob der Befehl korrekt gelaufen ist (Return Code 0 = kein Fehler)
Um Farben aus hostname/username zu generieren, kann man einfach md5sum als hash-Funktion nutzen, und dann das erste Byte der md5summe ansehen. Das tut die Funktion hashcolor in meiner .bashrc. Dabei habe ich mir noch die Freiheit genommen, die Farben so zu sortieren, dass der Text  "root" eine Rote Farbe bekommt.

die Umgebungsvariable PROMPT_COMMAND darf einen Befehl enthalten, der ist in dem Falle die Funktion Prompt, welche auf der Linux-Konsole nur setps1 aufruft um den Prompt zu ändern, und in X-Terminals aber auch settitle und mittels Escape-Code den Titel des Fensters auf das letzte genutzte Kommando zu setyen.

Der Prompt sieht bei mir jetzt so aus:

12:59:56 :-) username@hostname:~

>

Die .bashrc dazu:
# If running interactively, then:
if [ "$PS1" ]; then
    ## aendert den xterm-Titel in das zuletzt benutzte Kommando usw.
    xtitle() {
        echo -ne "\033]0;[$(history 1 | cut -b 8-30)] $USER@$HOSTNAME:$PWD\007";
    }
    setps1() {
        if [ $? -eq 0 ];then smiley=":-)"; else smiley=":-(";fi
        export PS1="\t $smiley \[`hashcolor $USER`\]\u\[$grey\]@\[`hashcolor $HOSTNAME`\]\H\[$grey\]:\[$yellow\]\w\n\[$normal\]> "
    }
    if [ "${TERM}" != "linux" ]; then
        prompt() {
            setps1
            xtitle
        }
    else
        prompt() {
            setps1
        }
    fi
    PROMPT_COMMAND='prompt'
fi

normal='\e[0m' black='\e[0;30m' bblack='\e[1;30m' red='\e[0;31m' bred='\e[1;31m' green='\e[0;32m' bgreen='\e[1;32m' yellow='\e[0;33m' byellow='\e[1;33m' blue='\e[0;34m' bblue='\e[1;34m' purple='\e[0;35m' bpurple='\e[1;35m' blue2='\e[0;36m' bblue2='\e[1;36m' white='\e[0;37m' bwhite='\e[1;37m' grey='\e[0;39m' bgrey='\e[1;39m'

bgnorm='\e[0;0m' bgblack='\e[0;40m' bgred='\e[0;41m' bggreen='\e[0;42m' bgyellow='\e[0;43m' bgblue='\e[0;44m' bgpurple='\e[0;45m' bgblue2='\e[0;46m' bggrey='\e[0;47m'

function hashcolor { case $(echo $1|md5sum|cut -b 1) in 0)echo -en $red;; 1)echo -en $bblue;; 2)echo -en $green;; 3)echo -en $bgrey;; 4)echo -en $yellow;; 5)echo -en $byellow;; 6)echo -en $blue;; 7)echo -en $bred;; 8)echo -en $purple;; 9)echo -en $bpurple;; a)echo -en $blue2;; b)echo -en $bblue2;; c)echo -en $grey;; d)echo -en $bgreen;; e)echo -en $white;; f)echo -en $bwhite;; esac }

Die interessanten Manpages zu dem Thema sind:
  • man console_codes erklärt die Escape Codes z.B. für Farben oder auch um den Titel eines X-Terminals zu ändern.
  • man bash erklärt, dass man Farbcodes in \[...\] einschliessen sollte, damit sie den Zeilenumbruch im Prompt nicht kaputt machen.

Kategorien Software Linux
Tagged Bash Prompt color farben

3 Kommentare

April 16, 2009

Paxle Suchframework released

Paxle ist ein komplettes, modulares Suchframework auf OSGi-Basis, bei dem alle funktionalen Komponenten sauber voneinander getrennt sind und deshalb einzeln ersetzt werden können. Metasuchfähigkeit ist über die Definition mehrerer Suchprovider möglich. Zusätzlich zur Anbindung externer Quellen enthält Paxle auch einen Suchprovider der eine durch Crawling des Internets erzeugte lokale Datenbank auf dem Computer des Nutzers abfragt. Die Datenbankerstellung ist ebenfalls von Paxle abgedeckt, allerdings lassen sich auch andere DBs mit Paxle betreiben. Paxle hat eine wenig restriktive Lizenz und ist Open-Source-Software im Sinne der OSI und FSF.

Kategorien Software OpenSource
Tagged Suchmaschine Suchmaschinen Paxle

1 Kommentar

Feb. 25, 2009

exceptions.TypeError: Error when calling the metaclass bases

Wenn Python diesen komischen Fehler anzeigt, heißt das oft dass man versucht ein Modul (statt einer Klasse) zu instanziieren.

Kategorien Software Kurz bemerkt
Tagged Python metaclass TypeError

0 Kommentare