Master Control
- Projekt
- Ein Script um Abläufe in der Echt-Welt zu automatisieren.
- ☞︎ full_power wird dadurch noch besser!!1!
- An meinem Computer hängt eine USB-Festplatte,
- die iTunes Bibliothek ist auf eben dieser Platte.
- Also muss ich erst die Platte anschalten, bevor ich iTunes starte..
- Davor sollte ich aber noch mit dem Bluetooth Audio Device verbinden..
- Und am Ende, schalte ich erst den Strom ab, oder hänge ich zuerst die Platte aus?!?
- Aber erst alle Programme die auf die Platte zugreifen schließen!
- ... *seufz* ...
- Ziel
- Eine Lösung die mir das Nachdenken abnimmt und so Fehler verhindert :)
- Irgendwas, das die Abhängigkeiten auflöst, und eigenständig laufen kann.
- Werkzeuge
-
-
full_power
-
python3
-
Apple Script
mit eingebettet, für z.B. den Bluetooth Audio Dialup, oder um Scripte explizit im neuen Terminal-Fenster zu starten.
-
- Features
-
-
Schaltet Strom.Kennt meine Funksteckdosen, und weiß was an welcher Steckdose angeschlossen ist.
-
Verbindet mit meinem Bluetooth Audio Gerät.Schaltet aber zuerst den Strom für die Stereoanlage an.
-
USB-Festplatten ein- und aushängen.mount ☞︎ Strom an.unmount ☞︎ Erst alle Programme schließen, Platte aushängen und dann den Strom aus.Kann aber auch Platten die nicht an einer Funksteckdose hängen mounten.☞︎ Holt sich das Passwort zum entsperren aus der Keychain.
-
Startet Programme.Erst auf die Platte mit der Musik drauf warten, dann iTunes starten..Und währenddessen die wird die Stereoanlage eingeschaltet..
-
Power Management.Ausschalten, Neustarten, Ausloggen, Standby, Bildschim aus/sperren/-schoner ...
-
Gruppen für alle Elemente.z.B. alle Steckdosen aus.
-
- Service
-
Zusätzlich lassen sich mit Helfer-Scripten
noch ein paar Dinge generieren:
- eine zsh completion.
- ein plist-File für einen Alfred Workflow.
- Umsetzung
- Natürlich habe ich mittels Klassen alles Modular aufgebaut.
-
Es gibt eine Abstrakte-Basis-Klasse
(abc), die die Methoden
full()
sowienull()
verlangt. - Abhängigkeiten ☜︎
- Instanzen bekommen beim Erstellen die Abhängigkeiten, die sie selbst zum starten benötigen mit übergeben.
-
In jeder Klasse selbst existieren zwei Listen:
below
undabove
. -
Der Konstruktor sieht nun so aus:
def __init__(self, *depends): self.below = [] self.above = [] for elem in depends: self.below.append(elem) elem.above.append(self)
- Zack, noch eine Methode, um in beiden Richtungen durch diesen simplen Baum zu iterieren..
-
Und dann noch
argparse
drum rum geschnallt, fertig! - Versionen
- Das Projekt existiert schon länger als sein Git-Repo..
- ☞︎ Gleich beim Entwickeln von full_power habe ich mir schon Alfred Workflows zusammengeklickt.
- Zwei Beispiele:
- Die kann man mit der Alfred Remote verknüpfen, so lässt sich dann alles vom Telefon aus bedienen.
- Das ganze wird aber sehr schnell undurchsichtig und ist schwer zu pflegen.
-
☞︎
Der nächste Versuch war ein längliches
bash
-Script. Zunächst recht verheißungsvoll. - Da darin das überprüfen von Abhängigkeiten eher schwierig ist, wurde fast alles von Hand ausformuliert.
- Dies potenziert den Aufwand mit jedem neuen Feature, und zieht massiv Bugs nach sich :(
-
☞︎
Also wieder ans Reißbrett, und so entstand die oben
beschriebene Version in
python
. - Links
-
Repository
-
☞︎ full_power