Schlagwort-Archive: script

Incompetech-Downloader für die Kommandozeile

Kennt ihr das Problem? Ihr entwickelt ein Spiel, macht youTube-Videos, spielt Rollenspiele oder seit einfach Musik-Fetischisten und wollt daher immer neue Musik haben, möglichst gemafrei?
Das Schlüsselwort lautet Royalty Free Music.
Der main approach to Royalty Free Music ist wohl Kevin MacLeod von , der seine gesamte Musik kostenlos zur Verfügung stellt. Solange man ihn in den Credits erwähnt, ist seine Musik völlig frei zur Verwendung. Was macht man nun, wenn man gern ein Lied verwenden möchte? Man sucht sich das entsprechende Lied auf der Website heraus oder hört es sich dort an.
Nun gibt es aber Jäger und Sammler wie mich. Ich möchte bei so einer Gelegenheit immer gern alles auf ein mal haben. Also habe ich, auch aus spendengründen, einmalig die $48 bezahlt, um die gesamte Sammlung herunterladen zu dürfen.
Ich wurde prompt von ihm mit einer persönlichen Dankesmail belohnt, das erlebt man nur äußerst selten, danke dafür :). Der eher unschöne Nachteil war, dass diese Collection, im Februar „gekauft“, das letzte mal November letzten Jahres aktualisiert wurde. Seitdem wurden viele neue Titel veröffentlicht, die ich nun hätte per Hand laden müssen. Nicht zuletzt sieht man auf der Webseite nur die neuesten 19 Tracks aufgezählt, mehr nicht.
Meine Idee: ein Incompetech-Downloader. Sowas gab es schon, allerdings ging der bei mir gar nicht, veraltet und naja… nicht wirklich schön geschrieben.
Darum habe ich einfach mein eigenes Projekt ins Leben gerufen.
Hier gehts lang
Dieser Downloader ist, wie sollte es auch anders sein, für die Kommandozeile ausgelegt und vollständig in Python geschrieben. Er ist für Python 2 konzipiert und wird unter Python 3 bislang nur Fehler werfen, jedoch plane ich ihn später auch dahingehend anzupassen.
Außerdem werde ich nach und nach verschiedene Filter-Mechanismen einbauen.
Derzeit kann man beispielsweise nur nach Alphabet und nach Erscheinungsdatum herunterladen, wobei man die Liste optional auch von unten nach oben abarbeiten kann.
Die Tracks können entweder alle in einem Ordner abgelegt werden, oder in Unterordner nach ihrem Genre einsortiert werden.
Mehr ist bislang nicht drin, jedoch plane ich eine starke Erweiterung, beispielsweise das ausschließliche Laden eines bestimmten, wählbaren Genres oder das Suchen nach Schlüsselworten. In welchem Zeitrahmen mir das möglich sein wird weiß ich nicht, aber er funktioniert auch bisher schon einwandfrei.
Ihr könnt ihn gern verwenden. Da er vollständig ohne Abhängigkeiten klar kommt, kann er auf einer simplen Out-of-the-box-Installation von Python 2.7 angeworfen werden.
Um die Liste der Argumente zu sehen zu bekommen, startet den Downloader mit dem Argument –help.
Und jetzt viel Spaß damit :).

Squasher – Bash shell script zur Erstellung von Festplatten-Abbildern unter Linux

In den letzten Tagen habe ich meine Bash Shell Scripting Kenntnisse erweitert, sodass ich mir endlich eine schöne Applikation aufsetzen konnte, die das Erstellen von Festplattenabbildern via Linux-Kommandozeile möglichst erleichtert. Dazu genutzt wird dd, welches ja der Alleskönner unter Linux zum Thema Datei/Gerätesicherung, insbesondere von ganzen Festplatten, ist. Da die entstehende Datei dann allerdings genau so groß ist wie die Festplatte und das unter Umständen viel zu groß ist, habe ich noch das Squash-Komprimierungssystem benutzt, welches die Daten nicht nur komprimiert, sondern auch noch on-the-fly mountbar ist, sodass man jeder Zeit auf seine Daten zugreifen kann. Eine genaue Anleitung zur Datensicherung/Auslesung inkl. meines Squasher-Scriptes folgt nun:

1. Wiping empty space

Ein wenig zur Praxis: Werden Dateien/Daten auf einer Festplatte gelöscht, werden sie nicht gleich richtig „gelöscht“, sondern nur deren Dateiindex in der logischen Sektion der Festplatte, in der die Positionen aller Dateien auf der Festplatte stehen. Das ganze läuft unter dem Motto: ich kenne deinen Namen nicht, also kenne ich dich nicht mehr. Aus den Augen, aus dem Sinn. Die Datei existiert praktisch weiter. Zumindest solange, bis die Platte neue Daten darüber schreibt. Da diese Dateien aber bei einer kompletten Plattensicherung mit gesichert werden, aber ja eigentlich nicht mehr gebraucht werden, können wir sie praktisch überschreiben. Optimalerweise mit Daten, die sich viel besser komprimieren lassen, also 0-en. Dann wird das Festplattenabbild um so kleiner. Man nehme also das Zielgerät, welches man sichern möchte, und binde es ein:

sudo mount device zielpfad

Zum Beispiel:

sudo mount /dev/sda1 /mnt

Sollte das ganze ohne Fehler ablaufen, findet ihr den gesamten Platteninhalt nun im Zielpfad, oder in meinem Beispiel unter /mnt.
Dorthin verfrachten wir nun eine Datei, welche ausschließlich 0-en enthält und den gesamten freien Speicher der Platte belegen wird, sodass wirklich alle gelöschten Daten vernichtet sind. Dazu nutzen wir, oh Wunder, dd:

dd if=/dev/zero of=/mnt/tmp.zero bs=4M

Das ganze zeigt praktisch keine Ausgabe und blockiert die Konsole solange, bis die Platte restlos voll ist. Dann gilt es nur noch, die tmp.zero-Datei zu löschen (siehe Plattenstrategie oben):

rm /mnt/tmp.zero

Jetzt noch die Platte aushängen:

sudo umount /mnt

Noch ein wenig zur Erklärung der obigen Vorgänge: /dev/zero ist ein von Linux bereitgestelltes Gerät, welches ausschließlich 0-en ausgibt, egal, wie lange man daran nuckelt. Daher ist es sehr praktisch zur Befüllung von Speicher mit 0-en. Zur Anwendung von dd betrachte man sich bitte das dd-manual, welches beispielsweise direkt vom Ubuntu-Wiki und vielen Anderen zur Verfügung gestellt wird.

2. Saving harddrive

Jetzt greift mein squasher ein: sämtliche Kompression und Sicherung an einen frei wählbaren Ordner übernimmt der squasher. Und das sogar mit einer hübschen Fortschrittsanzeige. Klingt praktisch, oder?
Ladet euch ersteinmal mein Wunderwerk herunter: Squasher
Das ganze jetzt in einen Ordner eurer Wahl gelegt und ausführbar gemacht, beispielsweise mit:

chmod 755 squasher.sh

Um das Script zu nutzen, muss allerdings noch etwas nachinstalliert werden, nämlich die für das eigentliche squashing und das Auslesen des Squash-Systems nötigen Tools:

sudo apt-get update
sudo apt-get install squashfs-tools

Und außerdem, falls nicht sowieso längst vorhanden, die Bash shell:

sudo apt-get install bash

Jetzt sollte alles funktionieren :).
Das Script nimmt als ersten Parameter das Gerät, von welchem ein Backup erstellt werden soll. Der zweite Parameter, welcher optional ist, nimmt die Zieldatei an. Wird keine Zieldatei angegeben, wird die Ausgabe in squasher.squash gespeichert. Wir führen das Script also folgendermaßen aus:

sudo ./squasher.sh /dev/sda2 festplatte.squash

Wichtig dabei ist, dass das Script mit root-Rechten ausgeführt wird, denn sonst wird dd nicht korrekt arbeiten. Aber keine Angst, dass Script warnt euch, falls es nicht als root ausgeführt wird. Es erwartet euch nach kurzem eine wunderhübsche Fortschrittsanzeige, die wie folgt aussieht:

dd: xxx MB, ab,cd MB/s; squashed: ef,ghI

Beispiel:

dd: 250 MB, 65,0 MB/s; squashed: 235M

Die Erklärung dazu: Die dd-Ausgabe im ersten Teil des Fortschrittsbalkens gibt an, wie viel Daten dd schon kopiert hat und wie schnell dd gerade arbeitet. Die squashed-Angabe gibt dazu an, wie groß das squash-Archiv gerade ist. Optimalerweise sind die dd-Werte mit denen der Squash-Ausgabe nicht kompatibel, squash müsste eigentlich immer kleiner sein.
Hinweis: Man kann nicht nur einzelne Partitionen sichern, sondern problemlos auch ganze Festplatten auf einen Rutsch. Dazu einfach die gesamte Platte zum Sichern angeben, also:

sudo ./squasher.sh /dev/sda

Einzig und allein das Auslesen macht hinterher den Unterschied.

3. Reading through treasures

Und beim Auslesen sind wir auch schon angekommen. Wir haben nun ein optimalerweise schön kleines squash-Archiv (im Vergleich zur Originalplatte!) und wollen Daten auslesen, ohne das Archiv erst wieder auf eine physikalische Platte zu schreiben? In voller Größe? Keine Sache:

sudo mount festplatte.squash /mnt

Über die „read-only“-Ausgabe beschweren wir uns nicht weiter. Ja, das System kann im Nachhinein nicht mehr verändert werden, aber das wollen wir ja auch nicht, wir wollen nur Lesen, also was solls. im Ordner /mnt finden wir jetzt das dd-Image, welches von unserem zu sichernden Ziellaufwerk/unserer zu sichernden Partition erstellt wurde.

3.1 Reading partitions

Fangen wir mit dem einfachen an: Das Auslesen von Partitionen. Das ist nämlich ein Witz:

sudo mount /mnt/festplatte.squash.img /mnt2

Fast trivial, findet ihr nicht?
Unter /mnt2 findet ihr jetzt alle gesicherten Daten. Na dann viel Spaß damit :).

3.2 Reading through (hard)drives

Das Auslesen von ganzen partitionierten und gesicherten Platten dagegen erfordert die Installation eines extra Werkzeugs:

sudo apt-get install kpartx

Dieses Werkzeug erlaubt es uns, ein dd-Image mit mehreren Partitionen in seine Ursprungspartitionen zu zerlegen und diese einzubinden. Dazu führen wir aus:

sudo kpartx -a /mnt/festplatte.squash.img

Dieses Kommando bietet uns nun im Ordner /dev/mapper eine Liste von loopback-Geräten an, also unserer Festplatte, beispielsweise loop0 mit einer Partition dahinter, beispielsweise p1. Um nun eine in festplatte.squash.img enthaltene Partition einzubinden, genügt Folgendes:

sudo mount /dev/mapper/loop0p1 /mnt2

Und ihr findet alles, was ihr braucht, in /mnt2

4. Finished!

So, dass wars. Ich hoffe das Tool hilft euch etwas. Nur zur Demonstration, was man beim Sichern einer Platte eigentlich eingeben müsste:

mksquashfs empty_dir festplatte.squash -p 'festplatte.squash.img f 444 root root dd if=/dev/sda1 bs=4M'

Dieses Kommando würde aber auch keine ordentliche Ausgabe liefern, sondern nur eine mksquashfs Ausgabe, die angibt, wieviel bereits gesquashed wurde und welche Kompressionsstärke gerade anliegt. Die dd-Ausgabe sieht man gar nicht. Dazu müsste man ein weiteres Terminal-Fenster öffnen und dort folgendes eingeben:

sudo kill -USR1 $(pidof dd)

Dann wieder zurück in das squash-Fenster, wo auf magische Weise, mitten in der squash-Ausgabe, ein dd-Statusbericht erschienen ist. Nicht gerade schön, oder?
Davon mal abgesehen bietet mein Script auch jederzeit die Möglichkeit zum Abbruch mittels ctrl+c. Dieser Vorgang löscht dann sämtliche Spuren des nicht abgeschlossenen squash-Vorgangs und kehrt wieder in die Konsole zurück, als wäre nichts gewesen. Ein Luxus, wie ich finde…
So, und jetzt viel Spaß beim squashen. Und habt ihr Ideen, Korrekturen oder Wünsche, nutzt die allgegenwärtige Kommentar-Funktion.

Update zum DevPro DeckPrinter

Wieder eine kurze Info:
Der DevPro DeckPrinter hat ein Update bekommen. Dabei wurden folgende Sachen verbessert/geändert:
– er unterstützt nun ein paar neue Switches, wie -w zum Ändern auf Windows Line-Endings und -p zum Definieren des DevPro Pfades, falls das Script nicht im DevPro-Verzeichnis liegt
– das Anzeigen nicht vorhandener Karten wird nun keinen Fehler mehr auslösen, sondern dem Benutzer mitgeteilt und dann ignoriert
– als Wert für den deck-Parameter darf nun auch „-“ übergeben werden, damit alle vorhandenen Decks ausgegeben werden
– der Datenbank-Overhead wurde stark reduziert. D.h. es wird nur noch ein sql-Request durchgeführt und nicht mehr einer für jede Karte. Dadurch wird die Geschwindigkeit des Scripts stark verbessert
– außerdem werden die Level-Informationen der Pendel-Monster nun korrekt angezeigt, und zwar mit blauer und roter Zone (in dieser Reihenfolge)

Der Download-Link im alten Post funktioniert noch einwandfrei, folgt also einfach dem obenstehenden Link zum alten Beitrag und ladet es euch herunter.

DeckPrinter für YGOPro DevPro

In den letzten Tagen habe ich für den Yu-Gi-Oh Online-Simulator YGOPRO mit dem DevPro Interface, zu finden auf YGOPRO.de, einen DeckPrinter gebaut, da es vor Allem für Blinde schwer ist, dieses Programm zu bedienen, nämlich praktisch unmöglich, weshalb ich immer mit sehender Hilfe spiele. Da ich trotzdem gern mal alle Karten eines Decks auf einen Blick sehen würde, inkl. aller Effekte etc, habe ich ein Python-Script gebaut, welches dies realisiert. Es wird einfach in den DevPro-Installationsordner gelegt und ausgeführt, indem man den Decknamen als Parameter übergibt. Es handelt sich hierbei natürlich wieder um ein Kommandozeilen-Script. Für weitere switches siehe man das Argument „–help“.
Das Programm ist multilingual in der Hinsicht, dass es die Sprache zur Ausgabe wählt, welche man in DevPro zuletzt gewählt hat.
Außerdem sollte es mit allen gängigen Python „Compilern“ funktionieren. Für py2exe und cx_Freeze sind jedenfalls diesbezügliche Tweaks enthalten.
Sollte es irgendwo Fehler geben oder Wünsche bezüglich der Features bestehen, schreibt es in die Kommentare.
Ihr findet das Script hier zum Download.