Sonntag, 27. November 2011

Software-Center, Fortschritt, Suchen, Löschen

In einem früheren Blogeintrag hatte ich bereits erwähnt, dass zwischen dem Software-Center und mir keine Liebe auf den ersten Blick entflammte, aber die Beziehung dennoch solide ist.

Jetzt, also ca. 6 Wochen später, finde ich das Software-Center immer noch ok. Aber mehr auch nicht. Es gibt ein paar Sachen, die mich doch stören, die drei "größten" Störungen sind:


Fortschritt - Was mich eigentlich am meisten stört, ist die Fortschrittanzeige. Also nicht, dass es eine gibt, sondern dass man eigentlich gar nichts sieht. "Gar nichts" bezogen darauf, was im Hintergrund läuft. Also ob noch der Download erfolgt, ob installiert wird oder was auch immer. Es mag vielleicht nicht essentiell wichtig sein, aber ich weiß halt nun mal gerne, was da gerade läuft. So wie die Aktualisierungsverwaltung oder Synaptic es halt auch darstellen.


Suchen - Was ich weiterhin nicht sooo prall finde ist die Suche. Also ich habe bis jetzt zwar alles gefunden, aber ich finde es störend, dass nicht alle Treffer zum bisher eingetippten Suchbegriff angezeigt werden. Richtig aufgefallen ist mir das letzthin, als ich ein Totem-Plugin gesucht habe. Tipp man bis "totem-p", wird nur das Totem-ARTE-Plugin gezeigt (ist das wirklich so wichtig ;-) ?). Wenn man "totem-plugins" getippt hat, wird das Paket "totem-plugins" gezeigt und ab "totem-plugins-" (also ein - mehr) die Pakete "totem-plugins-dvb-daemon" und "totem-plugins-extras". Eine tiefere Logik ist da in meinen Augen echt nicht zu erkennen...

Löschen - Aus dem Software-Center heraus kann man nur "normal" Pakete entfernen. Die Option "purge" (also das restlose entfernen inklusive Konfigurations-Dateien) gibt es nicht. Das mag vielleicht auch nicht essentiell wichtig sein, stört mich aber. Ab und an installiere ich mal ein Programm aus Neugier oder auch zum Testen eines Wiki-Artikels. In den meisten Fälle brauche ich die Softeware dann aber nicht mehr bzw. doch nicht, also soll sie auch restlos von der Platte. Geht aber via Software-Center nicht.

Ich bin zwar noch nicht so weit, dass ich Synaptic wieder installierte, aber ich benutzte öfter apt-get als früher. Das hilft mir zwar bei der Suche auch nicht, aber kann wenigsten vollständig Löschen und zeigt den Fortschritt vernünftig an.

Mal sehen, was die künftigen Versionen des Software-Center so mit bringen. Aktuell mag es ja für Einsteiger komfortabel(er) sein, aber für fortgeschrittenen Nutzer ist es in meinen Augen "zu dünn".

Samstag, 26. November 2011

Schnelles Mehrfach-Umbenennen auf der Kommandozeile


Heute habe ich angefangen, alle Fotos nach Jahren in Ordner zu sortieren. Dabei stieß ich auf folgendes Problem: Es gab eine Reihe von Fotos mit gleichem Dateinamen, aber anderem Motiv. Dies ist dadurch bedingt, dass Verwandte bzw. Bekannte von mir eine Kamera hatten, welche das gleiche Namensschema wie meine verwendet (konkret: DSCNxxxx.JPG).

Zusammenführen in den gleichen Ordner geht also nicht ohne Umbenennen. Dabei schwebt mir eine "einfache Änderung des Dateinamens vor, z.B. sowas wie DSCN0001.JPG nach DSCN0001_foo.JPG. Nur für das manuelle Umbenennen via Nautilus & Co. sind es zu viele Dateien. Hilfsprogramme, wie sie das Wiki von ubuntuusers.de listet wie z.B. pyRenamer oder rename erscheinen mir ein wenig übertrieben. Zumal ich sicher war, dass es auch ganz einfach mit der Kommandozeile geht.

Leider sind meine Skills auf der Kommandozeile nicht sooo prall, so dass die Suchmaschine meiner Wahl herhalten muss. Damit ist auch schnell die Lösung gefunden

for i in *.JPG; do mv "$i" "`basename $i .JPG`_foo.JPG"; done

Ganz einfach, eigentlich. Dieser Einzeiler stammt übrigens Debian Administration Seite (Link), wo man auch noch weitere Einzeiler und Tipps zum Umbenennen auf der Kommandozeile findet.

Die Verwendung der for-Schleife im Kombination mit basename ist übrigens recht universell einsetzbar und nicht nur auf das obige Beispiel in Kombination mit mv beschränkt.

Montag, 7. November 2011

Blogger - Posts nach Tag per RSS / Atom abonnieren

Blogger, also der Anbieter dieses Blogsystems, ermöglicht es auch, Posts aus einem Blog nach deren Tag zu abonnieren. Um das raus zu finden musste ich auch ein bisschen gogglen - und deswegen teile ich auch das Ergebnis hier :-)

Angenommen, ihr wolltet für meine Blog nur Artikel per RSS oder Atom abonnieren, die mit dem (fiktiven) Tag "FooBar" getaggt sind. Dann sähe die Adresse für den Atom-Feed so aus:

http://noisefloor-net.blogspot.com/feeds/posts/default/-/FooBar

Und die für den RSS 2.0 Feed so:

http://noisefloor-net.blogspot.com/feeds/posts/default/-/FooBar?alt=rss

Das war's schon.

Skatepark Walmerod / Molsberg

Ende Oktober 2011 war das Wetter nochmal gut und halbwegs warm - da kann man auch nochmal das Skateboard auspacken und ein wenig rollen gehen.

Die Wahl fiel diesmal auf den Skatepark, welcher zwischen Walmerod und Molsberg liegt. 10 Minuten mit dem Auto fahren und ich bin da. Das ich das letzte Mal hier war ist auch schon ein ein bisschen her, daher hatte ich die Rampen nicht mehr so ganz genau in Erinnerung.

Es gibt zwei unterschiedliche hohe Quarterpipes, eine Spineramp, eine Funbox und ein flaches Grindrail. Alles gebaut von Concrete Rudolph. Der Bodenbelag ist feiner Teer, rollt sehr gut.

Kommen wir mal zur Beschreibung der Rampen - darum soll es hier ja gehen. Die sind alle aus Beton und zusätzlich noch gestrichen. Allesamt sind diese sehr smooth, d.h. es rollt echt gut. Sehr gut sind auch die Übergänge vom Flat in die Rampe. Alles Edelstahlplatten, welche sehr genau eingepasst sind. Von daher hat nur ein minimales "Geruckel", wenn man auf rauf oder von der Rampe runter fährt. Auch sehr gut.

Was nicht so gut ist, ist die Funbox. Das Grundlayout, zwei Banks mit Corner, zwei Quarter mit Corner, ist zwar voll ok bzw. sogar eigentlich sehr gut - aber die Funbox ist nach meinem Erachten für die Größe des Parks zu hoch (auch wenn es auf den Fotos nicht danach aussieht). Dadurch bedingt ist auch, dass zumindest die Quarters sehr steil sind und man auch ziemlich viel Schwung braucht, um oben auf oder über die Funbox zu kommen.


Die Spineramp ist auch ziemlich hoch geraten - und schmal. Also man bekäme schon genug Schwung, um rauf und rüber zu kommen. Aber mehr als ein paar simple Liptricks sind da nicht drin, weil eben zu schmal.

Das Grindrail ist hingegen ziemlich flach (ist auf den Fotos übrigens gar nicht zu sehen), steht aber leider auf einer abfallenden Fläche. Dadurch ist es recht schwer, die Geschwindigkeit bei der Anfahrt gut zu kontrollieren.

Die Quarterpipes sind ok. Durch den guten Belag kommt man bei beiden bis oben. Bei der höheren (der orangen) muss man aber schon ziemlich pushen , wenn man für einen Liptrick richtig Schwung braucht.

Insgesamt ist der Skatepark auch nicht sonderlich groß. Was eigentlich auch überhaupt nicht schlimm ist. Nur stehen dadurch die Rampen relativ eng, was in Anbetracht der Höhen dieser das Fahren nicht einfacher macht.

Letztendlich ist (fast) jeder Skatepark besser als keiner. Und man kann in dem in Walmerod / Molsberg auch ganz gut umher cruisen. Aber wer ernsthaft auf den Rampen tricksen will sollte schon halbwegs gut fahren und Erfahrung in ähnlichen Skateparks haben. Sonst ist das alles ein wenig zu hart. Anfänger werden auf den Rampen jedenfalls keinen wirklichen Spaß haben.

Fall der Park mal erneuert werden sollte noch ein Tipp an die Planer: manchmal ist weniger (in diesem Fall Höhe der Rampen) auch mehr...

Zum Abschluss noch zwei Fotos, die alle Rampen aber nicht das Grundrail zeigen. Beim  1. Foto stehe ich auf der blauen Quarter, beim 2. auf der orangen.



Sonntag, 6. November 2011

Sick Of It All "Nonstop" - Rezension & Rückblick

Sick Of It All wurde 1986 gegründet, also feiert man dieses Jahr das 25-jährige Bandjubiläum. Das schaffen nicht so viele Bands, und schon gar nicht aus dem Hardcore und Punkrock Umfeld.

Zusätzlich ist SOIA nach wie vor populär und beliebt. Seit über 20 Jahren ist SOIA die Band, die mit New York Hardcore gleichgesetzt wird. Dabei ist SOIA "everybody's darling", Lichtgestalt der Szene und Messlatte für andere (neue) Hardcorebands - und das durchweg und ausschließlich im positiven Sinne!

Aber nichts desto trotz ist es so, dass ich bisher keine CD von SOIA besessen habe. Ich hatte mal eine, die habe ich aber wieder verkauft. Grund: irgendwie kann ich aus irgendeinem Grund deren Musik nicht einfach so hören. Gleichzeitig ist aber SOIA die Band, die ich am häufigsten live gesehen habe. Mindestens 4x (vielleicht auch 5x? Ist teilweise lange her...). Und zwar 2008 und 2010 auf dem Mach1 Festival und mindestens zweimal Mitte der Neunziger des letzten Jahrhunderts.

Dabei ist mir das Konzert 1995 in der Zeche Karl in bester Erinnerung geblieben. Grund: Rückblickend war das eine Hardcore Supershow. Erste Vorgruppe waren die damals noch unbekannten H2O (wobei der Sänger Toby während der Show pausenlos Biohazard, damals eine ganz große Nummer, durch den Kakao gezogen hat), dann kam CIV (wer sie nicht kennt: ein weiteres Urgestein des NYHC) und dann der Headliner Sick Of It All. Hardcore de luxe, der Saal kocht non-stop. Ein guter Abend!

Aber ich schweife ab... Es geht ja eigentlich um die Ende Oktober 2011 erschienene SOIA CD "Nonstop". Die habe ich mir auch gekauft. Nicht, dass ich diese jetzt nur noch höre. Wahrscheinlich eher nicht. Aber ich denke, dass ist ein "must have" in der Plattensammlung des Hardcore-geneigten Menschen.

"Nonstop" enthält dabei keine neuen Tracks. Viel mehr ist es ein "Best of" Album, wobei alle Tracks neu aufgenommen wurden. Dadurch klingen die Songs alle frisch und sind in Teilen etwas schneller und härter, wie SOIA die Songs eben auch live performt. Insgesamt sind 21 Tracks auf dem Longplayer, aus allen "Epochen" der Band.

Fazit: Wer Hardcore hört, keine Allergie gegen NYHC hat und nicht eh' schon alle CDs von Sick Of It All besitzt, der sollte sich "Nonstop" zulegen.


Samstag, 5. November 2011

Bottle, WTForms und Datei-Uploads

Wer Webanwendung schreibt kommt wahrscheinlich auch irgendwann mal an den Punkt, wo dem Anwender die Möglichkeit gegeben wird, Dateien auf den Server hoch zuladen. Natürlich bietet mein derzeit favorisiertes WSGI-Framework Bottle auch Funktionen an, um dies zu realisieren. Ebenso bietet mein derzeit favorisiertes HTML Form Framework WTForms eine entsprechende Klasse an. Um die "Hochzeit" der beiden geht es in diesem Blogeintrag.

Letztendlich ist das alles kein großes Ding - die jeweiligen Dokumentationen (Link und Link) sind zwar kurz, aber aussagekräftig. Aber ich kann ja trotzdem ein paar Stolpersteine aus dem Weg räumen.

Dazu im folgenden eine kleine Beispielapplikation. Diese besteht aus drei Dateien:
  • myapp.py, welche die eigentliche Applikation ist
  • forms.py, welche die Definition der Formularklasse enthält
  • formtemplate.tpl, welche das Template für die Formulardarstellung enthält
Die Datei "forms.py" sieht dabei so aus:

# -*- coding: utf-8 -*-

import re
from wtforms import Form, FileField, TextField, SubmitField,\     validators

class AttachmentForm(Form):
    attachment = FileField(u'Datei',
        [validators.regexp(r'.+\.(jpg|pdf|png|docx|doc|txt)$',
        flags=2,
        message=u'Es sind nur Dateien mit der Endung jpg, pdf,\
        png, docx, doc und txt erlaubt!')])
    textfield = TextField(u'Bemerkung',
            [validators.Required(
             message=u'Es muss ein Text eingegeben werden!'),
             validators.Length(max=50,
             message=u'Der Text darf nicht länger als 50 Zeichen\
             sein.')])
    send = SubmitField(u'Senden')

    def validate_attachment(form, field):
        if field.data:
            field.data = re.sub(
                r'[^a-zA-Z0-9_.-]', '_', field.data)

Der Regex-Validator kann natürlich nach belieben geändert (oder weg gelassen) werden. Gleiches gilt für das Textfeld namens "textfield", welches hier jedoch verwendet wird, um später den Unterschied Formulardaten und Upload-Daten deutlich zu machen (siehe unten). Der Validator "validate_attachment" ist auch optional - aber hier durchaus sinnvoll. Es validiert nämlich nicht, sondern ersetzt einfach alle (Sonder-) Zeichen im Dateinamen, welche später Probleme machen könnten, durch einen Unterstrich.

Das Template "formtemplate.tpl" sieht so aus:

<html>
<head>
<title>Datei-Upload</title>
</head>
<body>
<h2>Datei-Upload</h2>
%if errors:
<p class="fehler">Die Eingabe enthält <a href="#fehler">Fehler</a></p>
%end
<form action="/upload" method="post" enctype="multipart/form-data">
<ul>
<li>{{!form.attachment.label()}}<br/> {{!form.attachment(size=75)}}</li>
<br/>
<li>{{!form.textfield.label()}}<br/> {{!form.textfield(size=50)}}</li>
</ul>
<p>{{!form.send()}}</p>
</form>
<p>Hinweis: Alle Zeichen im Dateinamen, welche nicht im Bereich a-z, A-Z, 0-9, _, - und . enthalten sind, werden durch einen Unterstrich _ ausgetauscht. Dies betrifft also auch die Zeichen ä, ö, ü und ß sowie das Leerzeichen.</p>
%if errors:
<p style="color: #ff0000;">Fehler:</p>
%for k,v in errors.iteritems():
<p>{{!form[k].label}}: {{!v[0]}}</p>
%end
%end
</body>
</html>

Auch hier gibt es nicht außergewöhnliches. Es gibt ein rudimentäres HTML-Gerüst, das Formular an sich inklusive Hinweistext und die Anzeige von Fehlern im Formular, sofern dieses Fehler hat.

Die Hauptdatei "myapp.py" sieht so aus:

#!/usr/bin/env python

import os
from bottle import route, template, request, run, debug
import forms

PATH = '/home/noisefloor/attachment'

@route('/upload')
@route('/upload', method='POST')
def upload():
    req = request.forms
    data = request.files.get('attachment')
    form = forms.AttachmentForm(req)
    try:
        form.attachment.data = data.filename
    except:
        form.attachment.data = None
    if not req or not form.validate():
        return template('formtemplate.tpl',
            form=form,errors=form.errors)
    else:
        raw = data.file.read()
        with open(os.path.join(PATH, data.filename),'wb') as f:
            f.write(raw)
        return u'Datei {0} gespeichert, Bemerkung: {1}'.format(
            data.filename, form.textfield.data)

if __name__ == '__main__':
    debug(True)
    run(reloader=True)

Ein paar Anmerkungen sind hier zu machen:

Bottle hält die Daten des Dateiuploads unter request.files vor, während die Formulardaten über request.forms abrufbar sind. Dabei ist zu beachten, dass auch der Dateiname der herauf geladenen Datei nicht in request.forms liegt, sondern in ebenfalls in request.files. Es ist in der Tat nur der eigentliche Name der Datei dort hinterlegt, ohne den (lokalen) Dateipfad, von der die Datei hoch geladen wurde.

Von daher ist auch die Zeile

form.attachment.data = data.filename

wichtig, da so der Dateiname in die Formulardaten geschrieben wird. Ohne diesen Schritt würde das Formular nie validieren, da "attachment" ein Pflichtfeld ist.

Werden die Formular- und Uploaddaten übermittelt und Validiert das Formular, dann wird die Datei lokal gespeichert. Wichtig ist hier, dass der Benutzer, unter dem die Anwendung läuft, auch Schreibrechte in dem entsprechenden Verzeichnis hat.

In einer realen Anwendung würde man die Zeile

raw = data.file.read()

vielleicht nicht alleine so verwenden, da der Upload von sehr großen Dateien zu Problemen wie z.B. einem komplett vollem RAM führen kann. Von daher wird in der Bottle-Dokumentation ebenfalls vor dieser Zeile gewarnt.

In der Beispielanwendung wird das Feld "textfield" nicht weiter verwendet. In einer realen Applikation würde man diese z.B. zusammen mit dem Dateinamen in einer Datenbank speichern.

Zusammenfassend kann gesagt werden, dass die Kombination von Bottle und WTForms auch für Dateiuploads nicht weiter schwierig, sofern man einige wenige Punkte beachtet.

Donnerstag, 3. November 2011

ZZ Top "A Tribute from Friends" - Rezension

Als ich letzthin so durch die CD-Regale eines WalMarts in den USA schlenderte viel mir diese CD auf: ZZ Top "A Tribute from Friends". Kleiner Preis von weniger als 10$ und noch hinreichend "Luft" auf der Kreditkarte - der Kauf ist besiegelt.

ZZ Top habe ich schon ganz ganz früher gehört. Die gehörten so ziemlich zu meinen ersten Platten, neben den frühen Alben von Queen. Gut, heute höre ich beides kaum noch. Aber so gepflegter Blues-Rock a la ZZ Top ist immer noch was feines.

Die CD ist wohl dieses Jahr 2011 erschienen und auch von den drei Jungs von ZZ Top produziert. Könnte natürlich auch eine von den "wir machen nochmal 'ne schnelle Mark auf unsere alten Tage" Nummer sein. Aber - Entwarnung - ist es nicht. Die CD ist gut!

Insgesamt sind 11 Tracks auf der CD, alles Cover-Versionen von ZZ Top Klassikern. Unter den Covernden sind durchaus namhafte Musiker vertreten wie z.B. Steven Tyler, Nickelback, Filter, Wyclef Jean oder auch Duff McKagan.

Musikalisch sind die meisten Tracks recht nah an den Originalen. Teilweise mit etwas modernerem Sound, teilweise mit leichten, individuellen Interpretationen. Aber alles gut zu hören, nichts ist entstellt oder verunstaltet. "Richtig" anders sind nur zwei der 11 Stücke: einmal das von Wyclef Jean, welches, wie auch nicht anders zu erwarten, Hip Hop lastig ist und die Coverversion von "Gimme all your lovin'", performt von Filter.

Letzteres, als der Track von Filter, ist mein absoluter Favorit. Hier gelingt das Kunststück, den Sound und Stil von Filter mit dem Song von ZZ Top so zu "mischen", dass beides voll erkennbar ist. Die Strophe ist eher ruhig und Elektro-lastig, die Refrain knallt dann so richtig. Sehr gut gemacht!

Die CD ist wohl auch in Deutschland erhältlich, jedenfalls hat Amazon sie im Programm. Wer ZZ Top mag oder generell ein Freund des gepflegten Blue Rock ist, dem kann der Kauf durchaus empfohlen werden.