Project Godus – möglicher Linux Support [Update]
Dezember 19, 2012 um 8:15 nachmittags | Veröffentlicht in Games, Ubuntuusers | Hinterlasse einen KommentarFür all diejenigen, die das Herzschlagfinale bis jetzt noch nicht miterlebt haben: Project Godus, das aktuell in der Entwicklung befindliche Werk von Peter Molyneux (Populous, Dungeon Keeper, Black&White) hat vor ein paar Stunden sein Kampagnenziel auf Kickstarter erreicht (450.000 GBP).
Pünktlich dazu haben sie weitere Stretch-Goals veröffentlicht. Linux- und OUYA-Support sollen kommen, wenn die Kampagne in den verbleibenden 40 Stunden noch mindestens 100.000 GBP einnimmt. Geht auf die Kickstarter-seite und schaut auch das Prototyp-Video an.
Auch wenn 100.000 im Vergleich viel sind, so hat das Projekt in den letzten paar Tagen mehr als 150.000 GBP Unterstützung eingefahren. Noch etwas mehr und Linux ist wieder um ein Großartiges Spiel reicher – ganz unabhängig von Steam.
[UPDATE] Das Stretch-Goal Linux-Support wurde auf 525.000 GBP heruntergesetzt. Aktuell stehen wir bei 521,364 GBP und 74 Minuten. [/UPDATE]
[UPDATE 2] Was für ein Herzschlagfinale. Eineinhalb Minuten vor der Deadline springt der Counter auf exakt 525.000 GBP. Die Kampagne endet mit 526.523 GBP. Godus kommt auf Linux! [/UPDATE 2]
=-=-=-=-=
Powered by Blogilo
Alternativen zu youtube-dl
Dezember 13, 2012 um 9:28 nachmittags | Veröffentlicht in Bash, Free Software/Open Source, Multimedia, Programmieren, Ubuntuusers | 15 KommentareIch mag youtube-dl. Es ist einfach zu benutzen, ist plattformunabhängig (Python) und braucht nicht viele Ressourcen (Terminal-Anwendung).
Leider mag youtube-dl mich zur Zeit nicht. Sobald ich versuche ein Video herunterzuladen schaufelt die Anwendung meinen Arbeitsspeicher voll, sodass alles andere in den Swap ausweichen muss. Das führt dazu, dass das System innerhalb von Sekunden nicht mehr reagiert. Am längsten überlebt noch die Maus, welche sich etwa eine halbe Minute lang stark ruckelnd bewegen kann. Danach ist auch sie tot und das Einzige das hilft ist ein Hard-Reset. Keine wünschenswerte Situation.
Ich habe bereitsyoutube-dl -Uals sudo ausgeführt um ein update des Scripts zu erzwingen. Das hat leider nichts geholfen. Der Streaming-Dienst ist auch egal. Ob YouTube, Vimeo oder sonst was, das Problem ist immer gleich.
Logischer Schritt: ich schaue mich nach Alternativen um. Wenn man perapt-cache search
nach youtube sucht, werden einem bereits eine Liste an Programmen angeboten, welche in der Lage sind Videos von Streaming-Services herunterzuladen. Darunter befinden sich
- clive
- cclive
- fatrat
- slimrat
- nicovideo-dl
- get-flash-videos
- metacafe-dl
- nomnom
clive
Speziell clive hat meine Aufmerksamkeit erregt. Es ist ein Terminal-Tool, welches sich für Streaming-Services eignet, die ihre Videos in einem Flash-Player abspielen. Es ist leichtgewichtig, hat eine Vielzahl an praktischen Optionen und verhält sich allgemein sehr wie ich es von youtube-dl gewohnt bin.
Ein einfachesclive <video_url>
lädt das Video an der angegebenen URL herunter. An sich kann man damit leben. Allerdings hat clive eben mehrere interessante Funktionen, mit denen man sich gerne spielt. Dazu gehört einmal der Schalter -F. Damit erhält man eine Liste von verfügbaren Formaten und Qualitätsstufen in denen das Video vorhanden ist. Diese Liste kommt im Formathd|mobile|sd
Die durch “|” getrennten Optionen kann man dann in einem zweiten Aufruf dem Schalter -f angeben, welcher dann dafür sorgt, dass clive das Video in der gewünschten Qualität herunterlädt.
Da es etwas unbequem ist für jedes Video zwei Programm-Aufrufe zu starten, habe ich ein einfaches Skript geschrieben, welches diese Aufgabe abnimmt:
#!/bin/bash
VIDEO_URL="$1"
TEMP_FILE=".video-dl_temp_file"
clive -F "$VIDEO_URL" > "$TEMP_FILE"
CHOICES=$(cat "$TEMP_FILE" | tail -n1)
echo -n "Choose format (${CHOICES%% *}|best): "
read FORMAT
clive "$VIDEO_URL" --format="$FORMAT"
--filename-format="%t_$FORMAT.%s"
rm -f "$TEMP_FILE"
Was passiert hier?
VIDEO_URL=”$1“
Wir speichern die angegebene URL in einer Variable.
TEMP_FILE=”.video-dl_temp_file“
Der Einfachheit halber brauchen wir eine temporäre Textdatei, in welcher wir Informationen speichern können. Der Punkt am Anfang des Dateinamens bedeutet, dass die Datei versteckt ist. Sie wird also im Dateibrowser, oder per ls nicht angezeigt. Die Datei wird am Ende des Skripts wieder gelöscht.
clive -F “$VIDEO_URL” > “$TEMP_FILE“
Hier holen wir uns die möglichen Formate, in denen das Video vorliegt und schreiben diese Ausgabe in die temporäre Datei. Da es sich hierbei um zwei Zeilen handelt und nur die zweite Zeile relevant ist, brauche ich:
CHOICES=$(cat ”$TEMP_FILE” | tail -n1)
Diese Zeile gibt mir den Inhalt der temporären Datei aus (cat), schneidet die letzte Zeile ab (tail) und speichert die gewünschte Zeile in der Variablen CHOICES.
Als Nächstes fragen wir den Nutzer, welches Format bevorzug wird:
echo -n “Choose format (${CHOICES%% *}|best): “
wobei
${CHOICES%% *}
dafür sorgt, dass hinter der Liste nichts mehr steht. clive gibt hier nochmal die Adresse des Videos aus. Dieser Ausdruck schneidet sie weg.
Dann lesen wir die Wahl des Nutzers ein:
read FORMAT
Nun ist es an der Zeit endlich das Video herunterzuladen:
clive ”$VIDEO_URL” –format=”$FORMAT”
–filename-format=”%t_$FORMAT.%s“
–filename-format gibt die Formatierung des Dateinamens an. %t und %s sind dabei Platzhalter, welche für den Titel und das Suffix der Datei stehen. Zusätzlich zu den Platzhaltern kann man noch beliebig weitere Vorgaben für den Dateinamen machen. Ich füge zwischen Dateinamen und Suffix noch das Format der Datei ein.
Nachdem die Video-Datei sicher auf der Platte liegt lösche ich noch die temporäre Datei:
rm -f “$TEMP_FILE“
Fazit
Bis jetzt habe ich clive mit YouTube und Vimeo getestet. Beides funktionierte sehr gut und machte keine Probleme. Das Skript ist natürlich ausbaufähig. Zur Zeit kann es immer nur mit einem Video gleichzeitig umgehen und möglicherweise findet man noch einen besseren Weg als die Informationen in einer temporären Datei zu speichern. Für meine aktuellen Zwecke reichts.
clive steht unter der GPLv3.
=-=-=-=-=
Powered by Blogilo
Ein Dungeon Keeper-Klon für Linux
Dezember 1, 2012 um 11:41 vormittags | Veröffentlicht in Games | Hinterlasse einen KommentarWer hat Dungeon Keeper gespielt? Hand hoch! Ja, Sie mit dem vielen Geld bitte vorkommen!
Für mich ist Dungeon Keeper (besonders der 2. Teil) eine Perle der Spielgeschichte. Eines der ersten Spiele in welchem man aus Sicht des Bösen die Helden verkloppen konnte. Die Gott-Sicht, die Peter Molyneux auch in seinen späteren Spielen gerne einsetzte, machte Dungeon Keeper für einem Werkzeug für Kreative. Dungeon umgraben, neue Gegenden erkunden, neue Räume bauen, Kreaturen anlocken und den Gegner auf gefinkelte Art oder mit Brute Force besiegen. Besonders in den Pet-Dungeons konnte man die Sau rauslassen. Das erste konnte man sogar ohne eine einzige Kreatur gewinnen (Imps ausgenommen). Ein Beispiel für kreatives und originelles Spielen.
Leider ist Bullfrog, die Firma hinter Dungeon Keeper, bei der Produktion des 3. Teiles in die roten Zahlen geraten, wurde insolvent und von einem anderen Studio gekauft: EA Games. Dass EA Games Hemmungen dabei hat originelle Spiele zu produzieren sollte allgemein bekannt sein. Daher liegt Dungeon Keeper zur Zeit auf Eis.
Eigentlich Schade ein solch gutes Konzept verkommen zu lassen. Das haben sich zum Glück auch ein paar Leute aus dem Vereinigten Königreich gedacht. Die kleine Firma Subterranean Games arbeitet nun schon seit gefühlt zwei Jahren an den Grundlagen eines Dungeon Keeper Klons. Mit War for the Overworld möchten die Entwickler die besten Eigenschaften aus den Spielen Dungeon Keeper, Overlord, StarCraft und Evil Genius in einem DRM-freien Titel zusammenführen. Inzwischen haben sie einen “Proof of concept” herausgebracht und streben im Rahmen einer Kickstarter-Kampagne eine Finanzierung von 150.000 GBP an. Nach erst zwei Tagen sind bereits über 22.000 GBP zusammengekommen. Die Kampagne läuft noch bis zum 3. Jänner 2013.
Warum veröffentliche ich das auch hier im Planeten? Dungeon Keeper und Dungeon Keeper 2 waren damals ausschließlich Windows-Spiele. Man bringt sie aber inzwischen mit Wine (oder PlayOnLinux) ohne Probleme zum Laufen. War for the Overworld wird auf der Unity-Engine basieren, welche ja seit Version 4 nativ Linux unterstützt. Daher wird WFTO auch nativ für Linux/Mac OS/Windows produziert. Eine gute Chance ein vielversprechendes Spiel auf die Linux-Plattform zu holen.
Peter Molyneux selbst ist im übrigen nicht an der Sache beteiligt. Er wandelt zur Zeit auf den Spuren von Populous, dem ersten God-View Spiel überhaupt. Eine Art Remake unter seiner Führung ist zur Zeit ebenfalls auf Kickstarter vertreten: Project Godus. Hier ist eine Linux-Unterstützung allerdings noch fraglich.
=-=-=-=-=
Powered by Blogilo
PengPod – KDE Plasma Active auf 10”-Tablet
November 24, 2012 um 8:25 nachmittags | Veröffentlicht in GNU/Linux, Ubuntuusers | 5 KommentareWer Aaron Seigos Blog in den letzten Monaten verfolgt hat, der weiß, dass das voller Enthusiasmus angekündigte KDE Plasma Active-Tablet Vivaldi musste einen herben Rückschlag hinnehmen. Seigo ist zwar wieder auf der Suche nach einem neuen Hardware-Partner, die Produktion von Vivaldi wurde aber auf unbestimmte Zeit verschoben. In diese Lücke scheint nun PengPod zu springen.
Auf der Crowdfunding-Plattform indiegogo läuft noch bis zum 2. Dezember ein Projekt, welches sich die Produktion eines Tablets mit Android oder Linux zur Aufgabe gemacht hat. Das Projekt möchte drei verschiedene Geräte herstellen:
- Den PengPod 700 – Ein Tablet mit 7” Display
- Den PengPod 1000 – Ein Tablet mit 10” Display
- Den PengStick – Ein Mini-PC auf USB-Stick
Auf all diesen Geräten wird Android 4.0 oder ein System mit Linux 3.0 laufen. Mit 1 GB Ram und einer Auflösung von 1024×600 (bzw. 800×480 beim PengPod 700) ist die Hardware nicht unbedingt marktführend, für unter $200 aber ganz gut. Der eingebaute Chipsatz (Allwinner A10) soll Full-HD unterstützen, was in Kombination mit dem HDMI-Slot interessant sein kann. Die CPU läuft mit 1.2 GHz und der interne Speicher von 8 GB ist mittels SD-Karten erweiterbar. Standardmäßig wird Android installiert, man kann jedoch gegen $5 Aufpreis Linux vorinstalliert, bzw. gegen $8 Aufpreis eine 8GB SD-Karte mit Linux-Image zum Dual-Boot bekommen. Den Bildern nach setzt auch das PengPod unter Linux auf KDE Plasma Active als grafische Oberfläche.
Das Projekt ist zur Zeit auf 70% seines angepeilten Zieles angekommen. Auch wenn ich mir sicherlich ein Vivaldi zulegen werde, sobald es in Produktion geht, ist das PengPod einen Blick wert.
P.S.: Ich weiß natürlich, dass Android ein Linux-Fork ist. Eben deswegen spricht man aber im Allgemeinen vom Android-Kernel.
=-=-=-=-=
Powered by Blogilo
Kommt ein Quantal geflogen – eine Upgrade-Geschichte
Oktober 25, 2012 um 3:22 vormittags | Veröffentlicht in Kubuntu, Ubuntuusers | 1 KommentarNachdem Quantal Quetzal nun seit einer Woche erschienen ist, wollte auch ich mein System aktualisieren. Wie jedes Mal versuche es mit einem direkten Upgrade. Jedes Mal bin ich gezwungen das System danach neu aufzusetzen, weil das System mehr oder weniger unbenutzbar wurde. So geschehen seitdem ich mit Kubuntu 7.04 (Feisty Fawn) das erste Mal diese Distribution ausprobiert habe. Jedoch jedes Mal gebe ich ihm eine neue Chance. Zu den normalen Paketquellen zählen bei mir Wine, VirtualBox, Medibuntu und Kubuntu.org. Da immerhin die komplette Desktopumgebung aus einem alternativen PPA stammt erwarte ich mir gar nicht, dass alles glatt läuft.
Normalerweise macht einen die Paketverwaltung von Tag 1 weg auf die neue Version aufmerksam. Precise Pangolin jedoch war eine LTS-Version und macht daher von sich aus nur auf LTS-Versionen aufmerksam. Wenn man also nicht bis 14.04 Tormented Taurus oder Touchy Troll warten will, muss man bei den Softwarepaketquellen seinen Willen kundtun über jedes Upgrade informiert zu werden.

Normal Releases – Ich will mein System alle 6 Monate neu
Sobald das System vermeldet hat, dass es ein Upgrade gibt, kann es losgehen. Zuerst informiert der Upgrade-Manager darüber, welche Pakete aktualisiert, neu installiert oder entfernt werden. Mehrere Stunden lang werden neue Paketversionen heruntergeladen und installiert. Da es sich im Normalfall um mehrere Gigabyte handelt kann das etwas dauern. Eine Woche nach dem Erscheinen sollten die Server wieder etwas entlastet sein. Trotzdem dauerte der gesamte Vorgang über 5 Stunden. Abhängig davon, wieviele Pakete man auf seinem System installiert hat, kann alleine das für ein frisches Aufsetzen sprechen.
Und siehe da: bis auf ein einzelnes Paket hat alles funktioniert. Das System startet, läuft und schnurrt. Das einzelne Paket, das Schwierigkeiten gemacht hat ist ptex-bin. Das ist zum Glück ein Übergangspaket für texlive-lang-cjk. Ein einfaches deinstallieren beendet die Fehlermeldung bei jedem Vorgang, der mit der Paketverwaltung zu tun hat (dpkg, apt-get, …).
Ich gebe zu, ich bin positiv überascht. Sofern nicht noch irgendwelche Fehler auftreten genieße ich mal meinen GIMP mit Einfenster-Modus. Auch KTorrent hat ein paar nette kleine Überarbeitungen erfahren. Bin gespannt, was noch auf mich wartet.
=-=-=-=-=
Powered by Blogilo
Bash – Bedingte Ausführung mit if und die while-Schleife
Juli 4, 2012 um 8:12 nachmittags | Veröffentlicht in Bash, GNU/Linux, Programmieren, Ubuntuusers | 8 KommentareWie jede vernünftige Programmiersprache hat auch die Bash eine Möglichkeit Code nur dann abzuarbeiten wenn bestimmte Bedingungen eintreffen. Für alle, die mit Programmierung nicht viel zu tun haben: if wird in den meisten Programmiersprachen dazu verwendet das Programm bestimmte Dinge machen zu lassen, abhängig vom Zustand. Grundsätzlich gibt es für die Auswertung eines Audrucks in wahr und falsch das Kommando test. Allerdings ist if normalerweise ein klein wenig übersichtlicher zu verwenden. Ein Beispiel in C:
if( is_closed(WienerWald) ) {
gehe_zu(McDonalds);
}
else {
gehe_zu(WienerWald);
}
Dieses Codestück versucht zu ermitteln ob ein bestimmtes Restaurant geschlossen ist. Wenn es geschlossen ist, wird ein anderes Restaurant besucht. Wenn es nicht geschlossen ist, dann wird das fragliche Restaurant besucht. Die Funktion is_closed() liefert uns entweder wahr oder falsch zurück. Dies sind die einzigen Werte die das if selbst auswerten kann. Auf dieser Grundlage wird dann entschieden welcher Code ausgeführt wird. Wenn der Ausdruck wahr zurückliefert, dann wird der Code gleich nach dem if ausgeführt. Wenn der Ausdruck falsch zurückliefert, dann wird der Code nach dem else ausgeführt. Ist der Ausdruck falsch und es gibt jedoch kein else, wird das ganze if einfach übersprungen. So funktioniert das if in allen (mir bekannten) Programmiersprachen. Aus welchen Datenbeständen das Programm diese Information abfragt ist hier uninteressant. Es soll nur die bedingte Ausführung gezeigt werden.
In Bash ist die Syntax ähnlich:
if [ is_closed $WienerWald ]
then
gehe_zu $McDonalds
else
gehe_zu $WienerWald
fi
Wichtig dabei zu beachten ist, dass um die eckigen Klammern Leerzeichen stehen müssen, sonst wird ein Fehler ausgegeben und das if versagt. Ich weiß leider selbst nicht, warum die Bash hier so pickig ist. Bei den Klammern handelt es sich um eine Kurzform des Kommandos test, welches für die eigentliche Auswertung des Ausdrucks zuständig ist.
Vergleich zwischen Zahlen
Zwischen den Klammern kann grundsätzlich alles stehen was irgendwie zu wahr oder falsch abgeleitet werden kann. So können auch Zahlen oder Zeichenketten verglichen werden:
if [ $i -lt 10 ]
then
echo "0$i"
else
echo "$i"
fi
Dieses if fragt ab ob die Variable $i kleiner (lt = lesser than) ist als der Wert 10. Ist dies der Fall wird der Zahl eine führende Null vorangestellt, ist dies nicht der Fall, dann nicht. Das kann nützlich sein, wenn man bei formatierten Aufzählungen die Formatierung beibehalten will:
08 - ... 8 - ...
09 - ... statt 9 - ...
10 - ... 10 - ...
Außer lt gibt es noch folgende Befehle zum Vergleichen von zwei Zahlenwerten:
eq = equal = Gleichheitne = not equal = Ungleichheitle = lesser or equal = kleiner oder gleichge = greater or equal = größer oder gleichgt = greater than = größer als
Vergleich zwischen Zeichenketten
Auch Zeichenketten, sogenannte strings, können verglichen werden. Hier gibt es mehrere Möglichkeiten:
if [ $str = "Auto" ]
vergleicht ob die Zeichenkette, welche in der Variable $str gespeichert ist, der Zeichenkette “Auto” entspricht. Wenn dem so ist, dann ist der Ausdruck wahr.
Jetzt wirds ein bisschen kompliziert:
if [ $str != "Auto" ]
vergleicht ebenfalls die Variable $str und die Zeichenkette “Auto“. Dieser Ausdruck ist dann wahr, wenn die beiden Zeichenketten nicht übereinstimmen. Das Rufzeichen agiert hier als Anzeige dafür, dass der gewünschte Vergleich nicht erfolgreich sein soll, damit die Bedingung erfüllt ist.
Als dritte Möglichkeit eine Zeichenkette in einem if zu verwenden kommt die Abfrage ob in der Zeichenkette überhaupt etwas steht:
if [ $str ]
fragt ab ob irgendein Zeichen (egal welches oder wieviele) in der Variable gespeichert sind. Ist mindestens ein Zeichen vorhanden, dann ist der Ausdruck wahr. Ist die Zeichenkette leer (= “”), dann ist der Ausdruck falsch. Zum selben Ergebnis kommt dieser Ausdruck:
if [ -n $str ]
Der Befehl -n prüft ob die Länge der Zeichenkette in der angegebenen Variable nicht Null (non zero) ist. Hingegen
if [ -z $str ]
prüft genau das Gegenteil: -z fragt ob die Länge Null (zero) ist.
UND, ODER und NICHT
Wie jede brauchbare Programmiersprache bietet die Bash bei if auch die Möglichkeit mehrere Ausdrücke hintereinander auszuwerten, ohne jedesmal ein neues if zu benötigen. Der Code
if [ $i -lt 10 ]
then
if [ $j -lt 10 ]
then
...
fi
fi
lässt sich kürzer so schreiben:
if [ $i -lt 10 -a $j -lt 10 ]
then
...
fi
Das -a (UND) sorgt dafür, dass der Gesamtausdruck nur dann wahr ist, wenn beide Seiten (also links vom -a und rechts davon) jeweils wahr sind. In den meisten Programmiersprachen ist es so, dass zuerst die linke und dann die rechte Seite ausgewertet werden. Sollte die linke Seite bereits falsch sein, wird normalerweise die rechte Seite nicht mehr ausgewertet. Ist im allgemeinen auch nicht notwendig, da der gesamte Ausdruck dann sowieso falsch ist, wenn eine Seite falsch ist. Wahrer als falsch kann es nicht mehr werden. Die Bash hingegen wertet beide Seiten aus. Egal ob der Gesamtausdruck bereits falsch ist oder nicht.
Ähnlich funktioniert das ODER (-o). Hierbei soll geschaut werden ob eine der beiden Seiten wahr ist. Wenn zumindest eine wahr ist, ist der Gesamtausdruck wahr. Auch hier sollte normalerweise der rechte Ausdruck nicht mehr angesehen werden, wenn der Linke bereits wahr ergeben hat. Die Bash machts trotzdem:
if [ $i -lt 10 -o $j -lt 10 ]
Zu guter Letzt im Reich der sogenannten logischen Operatoren gibt es noch das NICHT. Dieses wird als Rufzeichen dargestellt (wie auch schon bei den Vergleichen der Zeichenketten). Seine Aufgabe ist es ein wahr in ein falsch umzukehren und vice versa:
if [ ! $i -lt 10]
Dieser Ausdruck ist dann wahr, wenn $i gerade nicht kleiner ist als 10. Selbstverständlich kann dieses Verhalten auch mit einem anderen Befehl erreicht werden. Im konkreten Fall wäre ein
if [ $i -ge 10 ]
gleichwertig. Das Rufzeichen hat trotzdem seine Existenzberechtigung, weil es manche Ausdrücke wesentlich übersichtlicher werden lässt, da es weniger zu schreiben gibt.
Arbeiten mit Dateien und Ordnern
Es ist mit if in der Bash auch möglich direkt mit Dateien zu interagieren. Ein einfaches
if [ -e datei ]
prüft ob eine Datei mit Namen “datei” existiert. Dabei wird sich immer auch das aktuelle Verzeichnis bezogen. Man kann natürlich auch einen kompletten Pfad angeben, dann ist es egal in welchen Ordner man sich befindet:
if [ -e /Pfad/zur/datei ]
Bisher kann “datei” jedoch sowohl Ordner als auch reguläre Datei sein. Um zwischen diesen Möglichkeiten zu unterscheiden gibt es eigene Befehle:
if [ -f datei ]
prüft ob eine reguläre Datei mit Namen “datei” im aktuellen Verzeichnis liegt. Ist das der Fall, ist das Ergebnis wahr. Es kann natürlich auch ein Ordner mit dem Namen “datei” im aktuellen Verzeichnis liegen. Dann liefert dieser Ausdruck falsch, da ein Ordner mit diesem Namen zwar existiert, aber ein Ordner keine reguläre Datei ist. Hingegen mit
if [ -d ordner ]
wird konkret geprüft ob ein Ordner mit Namen “ordner” an dieser Stelle existiert. Hier gilt dasselbe wie bei Dateien: existiert ein Ordner mit angegebenem Namen, ist der Ausdruck wahr. Existiert kein Ordner mit diesem Namen (egal ob eine Datei mit diesem Namen existiert oder nicht) ist der Ausdruck falsch.
if [ -x executable ]
prüft ob die angegebene Datei ausführbar ist. Das kann ein Programm, ein ausführbares Script oder ein Ordner sein.
Soviel zu den wichtigsten Vergleichen bei der Verwendung von if. Eine vollständige Auflistung gibt es auf der GNU-Infopage zu Bash.
while
Zum Abschluss noch ein Hinweis: das if lässt sich mit drei kleinen Änderungen in eine Schleife verwandeln. Eine Schleife ist ein Gebilde dessen Code mehrmals ausgeführt wird bis eine bestimmte Bedingung eintritt:
while [ $i -lt 10 ]
do
echo $i
((i++))
done
Diese Schleife gibt die Zahlen von n (ein Wert der vorher festgelegt wurde) bis 9 aus. Die '((' und '))' lassen uns ungehindert arithmetische Ausdrücke ausführen. i++ bedeutet, dass der Wert, der in $i gespeichert ist um 1 erhöht wird.
- Das Wort
ifmuss also durch einwhileersetzt werden thenmuss durchdoersetzt werdenfimuss durchdoneersetzt werden
Als Ausdruck in den Klammern ist alles möglich das auch im if möglich ist.
Wichtig: eine while-Schleife verfügt nicht über ein else.
=-=-=-=-=
Powered by Blogilo
Firefox – Wie man einen aufdringlichen Kleinen Panda in die Schranken weist
Juli 4, 2012 um 5:47 nachmittags | Veröffentlicht in Free Software/Open Source, Internet, Ubuntuusers | 2 Kommentare2012, das Jahr für welches so mancher Pseudo-Prophet im Namen der Maya das Ende der Welt vorausbefürchtet, lieferte uns auch ein paar andere wichtige Ereignisse. So war es das Geburtsjahr von Firefox 10 … äh 11. Nein 12. Ach ja, 13 ist auch schon da. 14 soll auch bald da sein … Zum geplanten Ende der Welt soll uns die Version 17 Seligkeit bringen. Hoffen wir die Außerirdischen verwenden IE.
So viele Witzchen man auch machen kann über die rivalisierenden Browser, so viele Macken haben sie jeweils. Und obwohl der Firefox auf meinem Laptop noch vor Chromium und Rekonq der Browser meiner Wahl ist, erkenne ich seine diversen Mängel (hoher Speicherverbrauch, aufgeblähter Code, …) durchaus an. Einem seiner Mängel kann man aber durchaus einen Riegel vorschieben.
Das Problem ist einfach geschildert: Wenn in einem Programm (außer einem Webbrowser) ein Link angeklickt wird, dann schiebt sich Firefox mit dem neuen Tab in den Vordergrund. In den meisten Fällen will ich aber an dieser Stelle noch weiterarbeiten (eMail fertig lesen, noch mehr Links anklicken, …).
Der FireTray-Versuch
Mein Firefox ist mit dem FireTray-Addon (neben anderen) ausgestattet. Dieses bietet die Möglichkeit Fenster, die wiederhergestellt werden, im Hintergrund zu belassen (Den Haken vor “Active restored Windows” entfernen).
Das bringt den gewünschten Effekt, dass Firefox sich im Hintergrund öffnet, sobald er extern aufgerufen wird. Allerdings hat das auch zur Folge, dass Firefox sich ebenfalls hinter alle offenen Fenster schiebt wenn er durch einen Klick auf das FireTray-Icon wieder hergestellt wird. Da das nicht der gewünschte Effekt war, habe ich die Einstellung wieder aktiviert und mich nach alternativen Lösungen umgesehen.
Das Reich der about:config
Nach einer (erstaunlich kurzen) Recherche im Web (aka Google) fand ich einen Artikel, der genau mein Problem angesprochen hat. Der Artikel How To Stop Firefox From Stealing Window Focus von techsupportalert.com beschreibt die Lösung des Problems unter FF 5.0, sie ist aber auch auf alle späteren Versionen anwendbar. Hier eine kurze Zusammenfassung:
- Man gebe in der Adress-Leiste (Smart Location Bar im FF-Sprech) “about:config” ein und akzeptiere den Warnhinweis.
- Hier öffnet sich nun eine Konfigurationsseite. Am oberen Rand der Seite findet sich eine Filterleiste (“Suchen:”).
- In diese Filterleiste gibt man nun folgende Zeichenkette ein: “browser.tabs.loadDivertedInBackground“
Diese Einstellung wird von haus aus als deaktiviert ausgeliefert (als Wert steht “false“). Um die Einstellung nun zu aktivieren genügt entweder ein Doppelklick darauf oder man macht einen Rechtsklick darauf und wählt den Punkt “Umschalten” aus. So oder so sollte nun als Wert “true” eingetragen sein.
Firefox übernimmt die Einstellung sofort und muss nicht neu gestartet werden. Von nun an bleibt Firefox im Hintergrund wenn er von einem anderen Programm einen Link bekommt, öffnet sich aber im Vordergrund wenn er aktiv (z.B. über das FireTray-Icon) aufgerufen wird.
=-=-=-=-=
Powered by Blogilo
Bash – Filename Expansion, for-Schleife
Juli 3, 2012 um 7:52 nachmittags | Veröffentlicht in Bash, GNU/Linux, Programmieren, Ubuntuusers | 14 KommentareDie Bash ist ja bekanntlich das Schweizer Taschenmesser beim Umgang mit Unixoiden Systemen. Vor 23 Jahren geboren, heute in der Version 4.2 verfügbar, bleibt sie jedoch immer noch für viele ein Mysterium. Primär für Anfänger ist der Umgang mit ihr umständlich und die große Funktionsvielfalt schier erdrückend. Bis man sich hier durchgekämpft und die steile Lernkurve hinter sich gebracht hat, hat sich bereits eine Haarlänge a’la Rapunzel gebildet. Oder ein Bart nach Stallman. Natürlich zähle ich mich selbst bei weitem nicht zu den Gurus unter den Programmierern. Lerne ich jedoch etwas Praktisches, so versuche ich es leicht verständlich weiter zu geben. Heute geht es um Filename Expansion.
Die GNU-Infopage zu Bash-4.2 lässt sich in Kapitel 3.5.3 etwas umständlich über die genaue Wirkungsweise der Filename Expansion aus. Leider ohne ein Beispiel zu geben. Dieses Versäumnis soll nun nachgeholt werden.
Vorbereitung
Nehmen wir an, wir haben eine Variable $file mit folgendem Inhalt:/home/user/datei.png
Für bisher-nicht-Bash-Nutzer, so weise ich einer Variable in Bash eine Zeichenkette (ein Pfad zu einer Datei ist eine solche) zu:file="/home/user/datei.png"
Die Variable $file wird, falls sie noch nicht existiert an dieser Stelle angelegt.
Mit dem Befehl echo kann ich überprüfen, welchen Inhalt die Variable hat:echo $file
Ausgabe: /home/user/datei.png
Man beachte das Dollar-Zeichen wenn die Variable verwendet wird. Nur mit dem Dollar-Zeichen davor kann auf den Inhalt der Variablen zugegriffen werden.
Der Dateiname
Angenommen ich möchte nun aus unserem Dateipfad den Namen der Datei herauslösen. Hierfür muss ich wohl alles wegschneiden, was vor dem Dateinamen steht:/home/user/datei.png
Das Konstrukt um dies zu erreichen sieht in Bash so aus:${file##*/}
Man beachte, dass nach wie vor das Dollar-Zeichen zu Anfang stehen muss. Der Name der Variable ist nun in geschwungenen Klammern eingeschlossen. Die Zeichen dahinter teilen sich in zwei Gruppen auf. Das '##' steht für den Befehl alles von links her wegzuschneiden. Alle weiteren Zeichen, welche darauf folgen, geben an was genau weggeschnitten werden soll.
*/
steht für: alles bis zum Zeichen '/'.
Folgender Befehl:echo ${file##*/}
ergibt also folgende Ausgabe:datei.png
Nun kann man argumentieren, dass in der Zeichenkette/home/user/datei.png
ja viele '/' vorkommen. Das stimmt. Das '##' schneidet eben alles bis zum letzten '/' weg.
Ähnlich funktioniert das Konstrukt${file#*/}
Man beachte das einfache '#'. Dieser Befehl schneidet alles bis zum ersten '/' weg.
Folgender Befehl:echo ${file#*/}
ergibt also folgende Ausgabe:home/user/datei.pngMan beachte das fehlende '/' am Anfang.
Das Suffix
Dieses Spielchen funktioniert natürlich auch von der rechten Seite her. Statt dem '##', bzw. dem '#', verwenden wir hier ein '%%', bzw. ein '%'.
Nehmen wir an, wir haben den kompletten Dateinamen (inklusive Endung) in einer weiteren Variablen gespeichert:file_name=${file##*/}
Einecho $file_name
bringt uns nun folgende Ausgabe:datei.png
Wir wollen nun nur den eigentlichen Dateinamen herausholen, ohne Endung. Dazu müssen wir die Endung wegschneiden:datei.png
Das funktioniert so:${file_name%.*}
Das '%' funktioniert hier als Anweisung die Zeichenkette von rechts her zu beschneiden. Weggeschnitten werden soll '.*', also alles was rechts vom ersten '.' steht.
(Natürlich macht hier die Unterscheidung zwischen erstem und letztem Auftreten eines Zeichens keinen Unterschied, da das Zeichen hier nur einmal vorkommt.)
Anwenden
Manch einer fragt sich sicherlich schon: und wofür brauche ich das? Nun, die Bash ist zwar sehr komplex, wenn man sie jedoch mal ein wenig verstanden hat auch sehr flexibel und effizient. Ich erledige viele Aufgaben, für welche ich mit grafischen Programmen viele Klicks und mehrere Minuten brauche (z.B. Bildbearbeitung mit Gimp), in wenigen Sekunden.
Nehmen wir an, wir wollen von unserem Bild ein Thumbnail für eine Website erzeugen. Das Thumbnail soll etwa ein Fünftel der Größe des Originals haben (also 20%). Hierzu verwenden wir das Programm convert, welches zum Paket imagemagick gehört. Der Befehl sieht dann so aus:file="datei.png"
convert "$file" -resize 20% "${file%.*}_thumb.png"
Damit wird eine neue Datei erzeugt, welche 20% der Größe der Datei datei.png hat und datei_thumb.png heißt. Hier haben wir die Filename Expansion also verwendet um den Dateinamen anzupassen, den wir der neuen Datei gegeben haben.
Auf mehrere Dateien anwenden
Das ist selbstverständlich noch nicht der Weisheit letzter Schluss. Für eine einzelne Datei zeigt sich die Flexibilität von Filename Expansion noch nicht so wirklich. Erst wenn ich mehrere Dateien, mit stark unterschiedlichen Namen bearbeiten will sieht man das Potential.
Nehmen wir also an, wir haben einen Ordner voller Bilder:Geburtstag1.png
Valerie_Donau.jpg
Visitenkarte.png
Zweiwohnschloss.gif
...
Von allen diesen Bildern möchten wir, wie im obigen Beispiel, ein Thumbnail erzeugen lassen. Wir brauchen nun alle Techniken, die wir oben gelernt haben, um dieses Vorhaben elegant umzusetzen. Zu aller erst brauchen wir eine Schleife. Eine Schleife ist ein Konstrukt, welches den Code, der in der Schleife steht, sooft ausführt, bis eine bestimmte Bedingung erreicht ist. Unsere Schleife sieht so aus:
for file in ./*; do ; done
Diese Schleife macht noch nichts. Hier will ich nur den grundsätzlichen Aufbau erklären. for ist das Schlüsselwort mit dem die Schleife beginnt. Danach wählen wir einen Namen für eine Variable, die wir in der Schleife verwenden wollen (hier: file). in ist wieder ein Schlüsselwort, welches wir bei der Schleife brauchen. Danach steht was in die vorher gewählte Variable eingetragen werden soll. ./* steht für “alle Dateien in diesem Ordner”. Wir gehen davon aus, dass in diesem Ordner nur Bild-Dateien enthalten sind.
Da wir unseren Code nicht in ein Shell-file schreiben, sondern direkt auf die Kommandozeile sind die Semikolons zwingend. Nach jedem Befehl muss ein Semikolon folgen.
do leitet den Code der Schleife ein. Der erste Befehl der Schleife folgt gleich auf das do, ohne Semikolon. Mit done wird die Schleife abgeschlossen. do und done sind keine Befehle, deshalb muss auf sie nicht direkt ein Semikolon folgen.
Die Bedingung dieser Schleife ist: gehe alle Dateien in diesem Ordner durch. Für jede Datei in diesem Ordner wird die Schleife also genau einmal ausgeführt. Der jeweilige Name der Datei findet sich in der Variable $file.
Nun schreiben wir den Code unserer Schleife. Zuerst müssen wir den eigentlichen Namen (das Prefix) der jeweiligen Datei finden:
for file in ./*; do prefix="${file%.*}"; done
Danach brauchen wir noch das Suffix (Endung; denn in unserem Ordner liegen ja Bild-Dateien von verschiedenen Typen herum herum):
for file in ./*; do prefix="${file%.*}"; suffix="${file##*.}"; done
Nun können wir den Konvertierungsbefehl aus dem obigen Beispiel einfügen (mit einer kleinen Änderung):
for file in ./*; do prefix="${file%.*}"; suffix="${file##*.}"; convert "$file" -resize 20% "$prefix"_"thumb.$suffix"; done
Für unsere gegebenen Dateien sieht das Ergebnis so aus:
Geburtstag1.png
Geburtstag1_thumb.png
Valerie_Donau.jpg
Valerie_Donau_thumb.jpg
Visitenkarte.png
Visitenkarte_thumb.png
Zweiwohnschloss.gif
Zweiwohnschloss_thumb.gif
...
Diese Schleife hat bei mir für 70 Bilder zu jeweils ca. 5 MB etwa 1:30 min gebraucht. Schaffst du das mit dem Gimp auch?
=-=-=-=-=
Powered by Blogilo
Microsofts Argument gegen DVD-Codecs in Win8
Mai 9, 2012 um 8:48 vormittags | Veröffentlicht in Österreich, Microsoft, Multimedia | Hinterlasse einen KommentarÜber einen Artikel des Standard bin ich auf dieses FAQ von Microsoft gestoßen. Wie viele vermutlich wissen hat Microsoft angekündigt keine DVD-Codecs in Windows 8 zu integrieren. Nach Meldungen sollen solche zwar in den aktuellen Testimages vorhanden sein, in der Verkaufsversion dann aber fehlen. Diese Entscheidung wird damit begründet, dass Windows 8 hauptsächlich auf Geräten ausgeliefert würde die gar kein geeignetes Laufwerk zum Abspielen einer DVD beinhalten. Soweit kann man dem Argument folgen. Bei der Frage
Why can’t I just pay for DVD when I need it?
Übersetzung
Warum kann ich für die DVD-Funktion nicht einfach zahlen wenn ich sie brauche?
gibt Microsoft folgende Antwort:
When we have DVD playback capabilities in software broadly like in Windows 7, there is no way to distinguish whether the PC will ever play a DVD disc but still this cost is carried on every PC. [...]
Übersetzung
Wenn die Möglichkeit zum Abspielen von DVDs so verbreitet wie in Windows 7 einsetzen gibt es keine Möglichkeit zu entscheiden ob der PC jemals eine DVD abspielen wird. Die Kosten dafür sind aber bei jedem PC-Kauf zu zahlen. [...]
Man lasse sich das Argument auf der Zunge zergehen. Microsoft stellt also von sich aus klar, dass die technische Möglichkeit etwas zu tun noch nicht Grund genug sind dafür auch zahlen zu müssen. Das dürfte besonders die RIAA, GEMA, AustroMechana und wie sie nicht alle heißen freuen, die von einer Leerkassettenabgabe bisher ganz gut profitieren. In Österreich besonders die AustroMechana welche sich zur Zeit für recht hohe Abgaben beim Kauf einer Festplatte einsetzt. Denn, so das Argument, jemand der die technische Möglichkeit hat soll auch dafür zahlen.
Um es auf den Punkt zu bringen: Unter all den vorgeschlagenen Modellen zur Honorierung von künstlerischen Werken halte die die sogenannte Kulturflatrate für das beste Modell. Dabei zahlt jeder seinen Beitrag und eine Verwertungsgesellschaft schaut dazu, dass das vorhandene Geld gerecht aufgeteilt wird. ABER. Wenn ich pauschal für Kunst zahlen soll, dann will ich auch das Recht haben sie pauschal zu verwenden. Mit anderen Worten: für jedes Kunstwerk welches ich in meinem Land mit meinem Geld mitfinanziere muss gelten: das Werk geht in eine Art nationale Public Domain über. Wenn der Künstler das nicht will, dann hat er zwei Möglichkeiten: entweder das Werk unter eine spezielle Lizenz stellen oder es bei sich zu Hause im Keller vergraben. In beiden Fällen sehe ich aber auch keine Berechtigung mehr das Werk aus der Kulturflatrate zu bezahlen.
DIe Verwertungsgesellschaften haben bisher immer damit argumentiert, dass für die Künstler ein gleiches Recht gelten muss wie für jede andere Dienstleistung und ihre Werke somit nicht einfach gratis vervielfältigt werden dürften. Das ist für mich ein schiefes Bild. Ich bin der Meinung: gleiches Recht für alle. Der Künstler soll seine Entschädigung bekommen. Doch das wofür ich bezahle will ich auch verwenden dürfen.
=-=-=-=-=
Powered by Blogilo
Mozilla und Facebook verbünden sich [2. UPDATE]
März 31, 2012 um 11:18 nachmittags | Veröffentlicht in 1. April, Free Software/Open Source, Internet, Multimedia, Ubuntuusers | 8 KommentareGerade eben ist eine bedenkliche Nachricht hereingeflattert. Mozilla hat bekannt gegeben, dass sich Facebook mit dem Versprechen einer jährlichen Spende gewissermaßen in die Entscheidungen bei der Entwicklung von Firefox eingekauft hat. Das soll heißen, dass sie den Kurs, den Firefox über die nächsten Jahre nehmen wird, entscheident mitbeeinflußen werden. Mozilla spricht von einer Abmachung welche der Verbreitung von Firefox auf lange Sicht gesehen sehr gut tun wird. Von Facebook selbst gibt es dazu noch keine Informationen.
[UPDATE]
Facebook hat gerade eine Meldung veröffentlicht nachdem sie planen einen Fork von Firefox zu basteln. Der Arbeitsname dieses Forks lautet FaceFox.

Das vorläufige Logo von Facebooks Firefox-Klon “FaceFox”
Er soll den freien Browser und das “Social Network” näher zusammenbringen indem beim Beginn jeder Sitzung automatisch bei Facebook eingeloggt wird und über eine einblendbare Seitenleiste auf News und Freunde direkt zugegriffen werden kann. So soll das Tauschen von Links einfacher werden indem der Link aus der aktuellen Website direkt auf den Avatar eines Freundes gezogen werden kann und dieser dann in dessen Profil erscheint.
Auch an Nutzer die noch kein Facebook-Konto haben wird gedacht: FaceFox soll sich so verhalten als wäre er eingeloggt. Er führt ein lokales Profil welches im Falle einer Registrierung bei Facebook abgeglichen wird. FaceFox 1.0 soll auf Firefox 15.0 basieren. Bis dahin plant Facebook alle angedachten Modifikationen umgesetzt zu haben. Eine erste Alpha soll, auf Firefox 12.0 basierend, ein paar Tage nach dessen Erscheinen verfügbar werden.
Wer sich nun denkt: “das hätte Facebook auch ohne die Spenden haben können” hat damit durchaus Recht. Allerdings hat Facebook bereits weitergedacht. Nach einem Kommentar, den Mark Zuckerberg in seinem eigenen Profil veröffentlicht hat, soll die Entwicklung von FaceFox und Firefox bis zur Version 21.0 (also innerhalb der folgenden 6 Monate nach FaceFox 1.0) zusammengeführt werden und Firefox 21.0 über alle von Facebook bis dahin entwickelten Funktionen verfügen. Danach soll die Entwicklung bei Firefox weitergehen.
Facebook bekommt dadurch seinen eigenen “Haus-Browser” so wie Google Chrome hat, nur ohne die Entwicklung von Grund auf durchführen zu müssen.
[/UPDATE]
[2. UPDATE]
Verdammt, Google macht alles kaputt.
[/2. UPDATE]
=-=-=-=-=
Powered by Blogilo
Bloggen Sie auf WordPress.com. | Theme: Pool von Borja Fernandez.
Einträge und Kommentare feeds.
