![](https://www.winhistory-forum.net/core/images/avatars/b4/232-b4e73c742627bd847aca3c94d6f6c2075ba42106.webp)
Der Code-Schnippsel-Thread
-
-
-
Bisschen länger.
Synct die Dateien einer .m3u Playlist in einen Ordner. Konvertiert dabei alac files in mp3 mit brauchbarer Qualität. Behält die Ordnerhierarchie bei.
Wenn es jemand benutzen will: Es SYNCT die Playlist und den Ordner. Sprich, es löscht alles was da sonst noch im Zielordner und nicht in der m3u.
Legt einen Cache für checksums in ~/.pushm3ucache/checksums an, der Ordner sollte also existieren, sonst halt ändern.
Ist nützlich wenn man seinen bevorzugten Musikplayer irgendwie mounten kann und dann nen einfachen Sync-Mechanismus ohne nen ganzen Player will, so wie ich, weil beim Galaxy Nexus irgendwie jedes Programm das das theoretisch können sollte abschmiert.
Braucht audiotools (audiotools.sf.net). Code könnte crap sein, hab nicht so den Plan von Python, und womöglich kriegt man was besseres mit rsync hin.Python
Alles anzeigen#!/usr/bin/python import sys import os import audiotools import hashlib import tempfile import base64 import shutil import string sumsfile = "~/.pushm3ucache/checksums" deviceFormats = ["mp3", "m4a"] convertFormat = audiotools.MP3Audio convertQuality = "extreme" def pathize(path): return os.path.abspath(os.path.expanduser(path)) def parsem3u(filename): print "Reading m3u file..." files = [] f = open(filename, 'r') for line in f: if (line[0] != '#'): path = pathize(os.path.join(os.path.dirname(filename), line.strip())) if (os.path.exists(path)): files.append(path) else: print("What the hell is '" + line + "' doing in your .m3u file? " + "I don't know what that is.") return files def printAudiotoolsInfo(): print "pushm3u using audiotools " + audiotools.VERSION print "supported types: " for k, v in audiotools.TYPE_MAP.iteritems(): print k + " with supported compression modes " + str(v.COMPRESSION_MODES) def getNewSums(files): print "Getting new checksums..." checksums = {} for file in files: md5 = hashlib.md5() with open(file, 'r') as f: for chunk in iter(lambda: f.read(128*md5.block_size), b''): md5.update(chunk) checksums[file] = md5.digest() return checksums def getOldSums(): checksums = {} key = "" if os.path.exists(sumsfile): f = open(sumsfile, 'r') for number, line in enumerate(f): if (number % 2 == 0): key = line.strip() else: checksums[key] = base64.b64decode(line.strip()) return checksums def writeSums(checksums): f = open(sumsfile, 'w') for k, v in checksums.iteritems(): f.write(k + '\n' + base64.b64encode(v) + '\n') def filterChanges(files, oldSums, newSums): newFiles = [] for file in files: if file not in oldSums or oldSums[file] != newSums[file]: newFiles.append(file) return newFiles def convert(filename, audio): print "Converting " + os.path.basename(filename) + "..." newFile = tempfile.NamedTemporaryFile().name audio.convert(newFile, convertFormat, convertQuality) newAudio = audiotools.open(newFile) newAudio.set_metadata(audio.get_metadata()) return newFile def getCopyables(files, audios): copyables = [] for file, audio in zip(files, audios): if audio.NAME in deviceFormats: copyables.append(file) else: copyables.append(convert(file, audio)) return copyables def destMap(srcs, newSrcs, dest): if (len(srcs) > 1): prefix = os.path.commonprefix(srcs) print "stripping " + prefix + " from the paths." dsts = map(lambda x : os.path.join(dest, string.lstrip(newSrcs[x], prefix)), srcs) destMap = dict(zip(srcs, dsts)) return destMap def copyAll(origs, news, dests): print "Copying..." for orig, new in zip(origs, news): dest = dests[orig] dir = os.path.dirname(dest) if not os.path.exists(dir): os.makedirs(dir) shutil.copy(new, dest) def getNewSrcs(files, audios): newSrcs = {} for filename, audio in zip(files, audios): if audio.NAME in deviceFormats: newSrcs[filename] = filename else: base, ext = os.path.splitext(filename) newFile = base + '.' + convertFormat.SUFFIX newSrcs[filename] = newFile return newSrcs def delIfEmpty(dirname): if os.listdir(dirname) == []: print "removing empty directory " + path os.removedir(dirname) def visitCrap(dests, dirname, names): for name in names: path = os.path.join(dirname, name) if os.path.isfile(path): if path not in dests.values(): print "removing file " + path os.remove(path) elif os.path.isdir(path): delIfEmpty(path) delIfEmpty(dirname) def deleteCrap(dest, dests): os.path.walk(dest, visitCrap, dests) def pushm3u(src, dest): printAudiotoolsInfo() srcs = parsem3u(src) checksums = getNewSums(srcs) newSrcs = getNewSrcs(srcs, audiotools.open_files(srcs, False)) copyFiles = filterChanges(srcs, getOldSums(), checksums) copyables = getCopyables(copyFiles, audiotools.open_files(copyFiles, False)) dests = destMap(srcs, newSrcs, dest) copyAll(copyFiles, copyables, dests) writeSums(checksums) deleteCrap(dest, dests) # MAIN # if (len(sys.argv) < 3): print "usage: pushm3u source.m3u destination" else: src = pathize(sys.argv[1]) dest = pathize(sys.argv[2]) sumsfile = pathize(sumsfile) pushm3u(src, dest)
-
-
Das ist mal ne coole Sache,danke für den Tipp
-
Code
Alles anzeigen@echo off :a IF X%1==X GOTO e ffmpeg.exe -i %1 -vcodec libx264 -acodec libmp3lame -ab 96k %1.mp4 shift GOTO a :e
Kleine Batch-Datei, auf die man Videodateien zieht, die dann in h264/mp3 bei kleiner Bitrate umgewandelt werden. Sehr praktisch, da sich langsam meine 2TB-Platte für Filme füllt und scheinbar wenige der Leute, die mir Filme geben, einen Sinn für Bitraten haben.
-
Doofe Frage: Warum MP3? Was H.264 decodieren kann, sollte doch auch AAC können und da kann man selbst mit dem schrotten FAAC-Encoder nochmal ein bisschen etwas an Bitrate rausholen.
Nachtrag: http://encodingwissen.de/handarbeit/audio/ffmpeg beschreibt, wie man auch z.B. Nero AAC nutzen kann:
Codeffmpeg -i "D:\Quelle-5.1ch.dts" -vol 509 -acodec pcm_f32le -f wav - | neroaacenc -if - -of "D:\Ziel-5.1ch.m4a" -ignorelength -q 0.3
Nachtrag 2: Okay, das war etwas kurz gedacht, da kommt dann nur die Tonspur raus. Müsste man dann eben nachher nochmal mit dem Video mergen.
-
Überprüfen und Wiederherstellen eines D3D9-LostDevices in SlimDX. Bevor man das alles überhaupt macht, sollte man erstmal gucken, ob das Anwendungsfenster überhaupt noch aktiv ist, sonst kann man Vollbildanwendungen nie verlassen, da die gleich beim Verlassen des Fensters neu erstellte Direct3D9-Geräteschnittstelle sofort den Vollbildmodus wieder aktiviert...
Code
Alles anzeigen/// <summary> /// Gibt zurück, ob die Geräteschnittstelle nicht mehr verfügbar ist. /// Falls sie verloren gegangen ist, wird versucht, sie wiederherzustellen; dies kann mit /// dem übergebenen Flag verhindert werden. /// </summary> /// <param name="resetIfNeeded">Gibt an, ob die Geräteschnittstelle neu erstellt werden /// soll wenn nötig.</param> /// <returns>True, wenn die Geräteschnittstelle nicht mehr verfügbar ist.</returns> /// <seealso cref="http://msdn.microsoft.com/en-us/library/windows/desktop/bb174425%28v=vs.85%29.aspx"/> private bool IsDeviceLost(bool resetIfNeeded) { bool deviceLost = false; // Prüfen, ob DeviceLost festgestellt wurde Result result = _device.TestCooperativeLevel(); if (result == ResultCode.DeviceLost) { Log.Information("Video: Device lost and cannot be reset yet."); // Das Gerät wurde verloren und kann momentan nicht zurückgesetzt werden deviceLost = true; } else if (result == ResultCode.DeviceNotReset) { // Das Gerät ist wieder verfügbar und wurde noch nicht zurückgesetzt deviceLost = true; if (resetIfNeeded) { // Gerät zurücksetzen und prüfen, ob es wieder arbeitsfähig ist Log.Information("Resetting lost device..."); _device.Reset(_presentParams); deviceLost = IsDeviceLost(false); if (deviceLost) { Log.Information("Video: Reset failed, device still lost."); } else { Log.Information("Video: Reset successful, device restored."); // TODO: Texturen und States neu setzen, da diese bei Reset verloren gehen } } } return deviceLost; }
Warum gehen im Code-Tag eigentlich Einrückungen "lost"? -
@echo off
-
ECHO EUDA
-
:EUDA
-
:EUDA
ECHO EUDA
GOTO EUDA -
Überprüfen und Wiederherstellen eines D3D9-LostDevices in SlimDX. Bevor man das alles überhaupt macht, sollte man erstmal gucken, ob das Anwendungsfenster überhaupt noch aktiv ist, sonst kann man Vollbildanwendungen nie verlassen, da die gleich beim Verlassen des Fensters neu erstellte Direct3D9-Geräteschnittstelle sofort den Vollbildmodus wieder aktiviert...Code
Alles anzeigen/// <summary> /// Gibt zurück, ob die Geräteschnittstelle nicht mehr verfügbar ist. /// Falls sie verloren gegangen ist, wird versucht, sie wiederherzustellen; dies kann mit /// dem übergebenen Flag verhindert werden. /// </summary> /// <param name="resetIfNeeded">Gibt an, ob die Geräteschnittstelle neu erstellt werden /// soll wenn nötig.</param> /// <returns>True, wenn die Geräteschnittstelle nicht mehr verfügbar ist.</returns> /// <seealso cref="http://msdn.microsoft.com/en-us/library/windows/desktop/bb174425%28v=vs.85%29.aspx"/> private bool IsDeviceLost(bool resetIfNeeded) { bool deviceLost = false; // Prüfen, ob DeviceLost festgestellt wurde Result result = _device.TestCooperativeLevel(); if (result == ResultCode.DeviceLost) { Log.Information("Video: Device lost and cannot be reset yet."); // Das Gerät wurde verloren und kann momentan nicht zurückgesetzt werden deviceLost = true; } else if (result == ResultCode.DeviceNotReset) { // Das Gerät ist wieder verfügbar und wurde noch nicht zurückgesetzt deviceLost = true; if (resetIfNeeded) { // Gerät zurücksetzen und prüfen, ob es wieder arbeitsfähig ist Log.Information("Resetting lost device..."); _device.Reset(_presentParams); deviceLost = IsDeviceLost(false); if (deviceLost) { Log.Information("Video: Reset failed, device still lost."); } else { Log.Information("Video: Reset successful, device restored."); // TODO: Texturen und States neu setzen, da diese bei Reset verloren gehen } } } return deviceLost; }
Warum gehen im Code-Tag eigentlich Einrückungen "lost"?
damit man nicht triforcen kann -
ich hab zelda nie gespielt
und verstehs deswegen nur halb
edit: achsooo du meinst den ascii-bildkrampenkramramschkramschkrampfmampfhanf -
ich hab zelda nie gespieltund verstehs deswegen nur halb
edit: achsooo du meinst den ascii-bildkrampenkramramschkramschkrampfmampfhanfdann besorg dir mal ein supernintendo!
-
Kleines Behilfs-Util zum generien von hoffentlich nich so schnell knackbaren Passwörtern:
Code
Alles anzeigen""" Util to hash a password securely and generate the sufficient random Salt. """ __author__ = 'Thomas Lercher' __version__ = '0.1' import hashlib import os import binascii def randomSalt(): return binascii.b2a_uu(os.urandom(45)) def hashPassword(password=None, salt=None, sha1Hashed=True): if(password is None): raise RuntimeError('The Password cannot be empty') if(sha1Hashed): hashed_password = xstr(salt) + password else: hashed_password = xstr(salt) + hashlib.sha1(password).hexdigest() return hashlib.sha256(hashed_password).hexdigest() def xstr(s): if s is None: return '' return str(s)
-
Code
(echo -ne '\xfd'; dd if=/dev/random bs=1 count=5 2>/dev/null; echo -ne "\xaf\xfe") | xxd | awk '{print $2$3$4$5}' | sed -r 's/([^$]{4})/\1:/g' | tr -d '\n'; echo :
Generiert ein Präfix für eine Unique Local Address.
Man kann auch gleich noch die Addresse für ein Netzwerkinterface generieren:Codelinux% ipv6calc --quiet --in prefix+mac $((echo -ne '\xfd'; dd if=/dev/random bs=1 count=5 2>/dev/null; echo -ne "\xaf\xfe") | xxd | awk '{print $2$3$4$5}' | sed -r 's/([^$]{4})/\1:/g' | tr -d '\n'; echo :) $(ip addr show dev $INTERFACE | grep "link/ether" | awk '{print $2}') bsd% ipv6calc --quiet --in prefix+mac $((echo -ne '\xfd'; dd if=/dev/random bs=1 count=5 2>/dev/null; echo -ne "\xaf\xfe") | xxd | awk '{print $2$3$4$5}' | sed -r 's/([^$]{4})/\1:/g' | tr -d '\n'; echo :) $(ifconfig $INTERFACE | grep $EUDA | awk '{print $2}') ### OpenBSD: $EUDA==lladdr; FreeBSD: $EUDA==ether; $NetBSD: $EUDA==address:
Allerdings ist gandro für den Großteil dieses "Codes" verantwortlichHier noch die alte Variante die nur auf Big-Endian-Architekturen funktioniert:
Spoiler anzeigen
Code(echo -ne '\xfd'; dd if=/dev/random bs=1 count=5 2>/dev/null; echo -ne "\xaf\xfe") | hexdump -e '"%x"' | sed -r 's/([^$]{4})/\1:/g'; echo :
OpenBSD:Codeipv6calc --quiet --in prefix+mac $((echo -ne '\xfd'; dd if=/dev/random bs=1 count=5 2>/dev/null; echo -ne "\xaf\xfe") | hexdump -e '"%x"' | sed -r 's/([^$]{4})/\1:/g'; echo :) $(ifconfig $INTERFACE | grep lladdr | awk '{print $2}')
Linux: -
WHF-Ruleset für HTTPS Everywhere:
-
-
Bash
#!/bin/sh PROFILE=`netcfg current` ROUTER=`ip route show | grep "default via" | awk '{print $3}'` while true; do if ! ping -c 1 $ROUTER ; then netcfg -d $PROFILE netcfg $PROFILE fi sleep 60 done
Weil der Broadcom-Treiber unter Linux nach wie vor Müll ist und wpa_supplicant allein keine toten Verbindungen erkennt.
-
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!