PVA: Pluginsystem für Carola

Goldene Zeiten für alle Voice Assistenten Fans unter Euch. Sofern Ihr Java könnt, seid Ihr nun in der Lage Carola um neue Funktionen zu erweitern.

PVA: Pluginsystem für Carola

Im GitHub Pluginsverzeichnis ist ein Beispiel, daß Euch die Möglichkeiten aufzeigt. Ihr könnt reine Kommandoausführung machen, also auf Sprachbefehle lauschen und ausführen, oder Ihr erstellt einen periodischen Dienst, der die ganze Zeit im Hintergrund arbeitet, oder beides 😉

Vor ein paar Tagen habe ich ja auf die neue Prozessüberwachung hingewiesen, die wurde jetzt umgeschrieben, so daß Sie als Plugin arbeitet. Das führte dazu, daß wir die „nervigen“ Audiowarnungen abschalten können, wenn die Ursache bekannt ist.

Was müssen wir machen um ein Plugin zu schrieben?

Nicht so viel wie man denken würde. Erstmal brauchen wir die nötigen Kommandos und Texte:

command:“schalte|warnung|aus“,“SILENCELOADWARNING“,““
command:“schalte|warnung|ein“,“UNSILENCELOADWARNING“,““

text:“de“,“HEALTHRESPONSETURNEDOFF“,“es erfolgen keine weiteren audiowarnungen mehr“
text:“de“,“HEALTHRESPONSETURNEDON“,“Sprachwarnungen eingeschaltet“

Und dann natürlich den Plugincode:

 



package plugins.files;

import plugins.Plugin;
import io.Dos;
import server.PVA;
import hash.StringHash;
import hash.TwoKeyHash;

public class LoadTask extends Plugin {

	private String getFilter = ":silence:";
	private String setFilter = ":silence:";
	private TwoKeyHash validValues = new TwoKeyHash(); // this way we get multiply options for an argument 
	
	public LoadTask() {
		System.out.println("Class LoadTask Constructor called");
	}
	
	public void init(PVA pva) {
		this.pva = pva;
		info.put("hasThread","yes"); // Das sagt dem Pluginloader, das wir einen Prozess laufen lassen wollen
		info.put("hasCodes","yes");  // Das sagt dem PVA Task, daß wir Kommandos verarbeiten
		info.put("name","LoadTask"); // Ein eindeutiger Name, könnte auch de.linux-am-dienstag.LoadTask sein.
		vars.put("silence","no");    // hier merken wir uns, ob wir Sprachwarnungen ausgeben wollen: JA!
		validValues.put("silence","yes","ok"); // Dieses Plugin prüft, ob die Variable "Silence" geändert werden darf und wenn ja wie
		validValues.put("silence","no","ok");
	}
	
	public StringHash getPluginInfo() {
		return this.info;		// wir geben unsere Infos an den PluginManager damit der etwas über uns weiß.
	}

	public String  getVar(String name) {
		if ( getFilter.contains(":"+name+":") )   // Wir prüfen, ob die Variable "name" ausgelesen werden darf.
			return vars.get(name);            // Wenn JA, ann gibt Inhalt zurück
		return ""; // war wohl nichts.
	} 

        // Hier prüfen wir, ob eine bestimmte Variable von außen geändert werden darf. Das KANN man so machen, muß man aber nicht.

	public boolean setVar(String name,String value) {
		if ( getFilter.contains(":"+name+":") && validValues.get(name,value).equals("ok")  )  {
			vars.put(name,value);
			return true;
		}
		return false;
	}
	
	// getActionCodes() gibt alle Kommandos aus, die in der Config für dieses Plugin eingetragen sein sollten, ergo auf was es so hört:

	public String[] getActionCodes() {  return "SILENCELOADWARNING:UNSILENCELOADWARNING".split(":"); };

        // hier führen wir Kommandos aus. Dazu prüfen wir, ob wir das Kommando kennen. 
        // Optional gibt es noch den rohen text der Eingabe, so daß dort Infos ausgelesen werden können.
	public boolean execute(String actioncode, String rawtext) { 
		try {
			if ( actioncode.equals("SILENCELOADWARNING") ) {
				log("schalte warnung aus");
				setVar("silence","yes");
				pva.say( pva.texte.get( pva.config.get("conf","lang_short"), "HEALTHRESPONSETURNEDOFF") );
	
			} else if ( actioncode.equals("UNSILENCELOADWARNING") ) {
	
				log("schalte warnung ein");
				setVar("silence","no");
				pva.say( pva.texte.get( pva.config.get("conf","lang_short"), "HEALTHRESPONSETURNEDON") );
	
			} else return false;
	
			return true;
		}  catch (Exception localException) {
			localException.printStackTrace();
			return true;
		}
	};

	Float lastState = Float.parseFloat("0");
	
       // hier starten wir den eigentlich Überwachungsprozess und lesen die Load aus und berichten über unsere Funde via Sprachausgabe:
	public void run() {
		try {
			String load = "";
			int time = 0;
			boolean inform = false;

			while ( true ) {
				if (isInterrupted()) {
					return;
				}

				Float f = Float.parseFloat( dos.readPipe("cat /proc/loadavg").split(" ")[0].trim() );
				long  c = Long.parseLong( dos.readPipe("grep -c processor /proc/cpuinfo").trim() );
				
				if ( f > c && ( lastState < c || time > 60 ) ) {
						if ( vars.get("silence").equals("no") ) pva.say( pva.texte.get( pva.config.get("conf","lang_short"), "HEALTHRESPONSEHELPHELP") );
						time = 0;
						inform = true;
					
				} else if ( f > ( c*80/100) && ( lastState < ( c*80/100) || time > 60 ) ) {
						if ( vars.get("silence").equals("no") ) pva.say( pva.texte.get( pva.config.get("conf","lang_short"), "HEALTHRESPONSE80P") );
						time = 0;
						inform = true;
				} else if ( f < ( c/2 ) && lastState > (c/2) && inform ) {
						if ( vars.get("silence").equals("no") ) pva.say( pva.texte.get( pva.config.get("conf","lang_short"), "HEALTHRESPONSEOK") );
						inform = false;
				}	

				lastState = f;
				time++;
				sleep(1000L);

			}
		} catch (Exception localException) {
			localException.printStackTrace();
		}
	}
}

Die Load auslesen ist jetzt nicht so dramatisch schwer, so das das Plugin recht kurz ist. Da kann man natürlich auch viel umfangreichere Anwendungen schreiben.

Falls Euch der Javacode nichts sagt, wird es langsam Zeit mal Java zu lernen, daß ist recht einfach 😉

Ein cooles Plugin wäre eine Anbindugn an ChatGPT 😉 Vielleicht will ja mal wer oder fragt doch ChatGPT mal, der braucht doch auch Code 😉

Classic Editor is back

Ich hab es wirklich versucht, aber der neue Editor „Gutenberg“ von WordPress ist eine Qual. Das tut in der Seele weh. Wie kommt man nur auf sowas? Alleine schon die Optik hat mit Texte schreiben nichts zu tun. Diese Blocktechnik ist was für Facebook-Timelime-Kids u.V. .

Classic Editor reaktivieren

Da mit Gutenberg jeder seine eigenen schlimmen Erfahrungen gemacht hat oder noch machen wird, wenden wir uns produktiveren Dingen: Wie wird man ihn los?

Das ist zum Glück ganz einfach!

Im Dashboard unter Plugins „Installieren“ auswählen und in das Suchfeld „Editor“ eingeben. Kommt als erster Treffer mit über 1 Million Installationen „Classic Editor“ 😀 Alles mit OK bestätigen und Fertig.

Ich habe so das Gefühl, daß wird mit weitem Abstand das beliebteste Plugin werden.

Meine wenig positive Meinung  werde ich hier nicht zurückhalten: WP werdet die Typen los, die das verbrochen haben!

Die Aussichten bis 2020

Da die Menschheit ja bei wichtigen Entscheidungen immer die schlechtere Option wählt, haben besorgte Blogschreiber WP geforkt und lassen es ohne Gutenberg weiter laufen. GGF. muß man das in Zukunft als Option wählen, wenn man einfach nur Blogs schreiben will. Im Gutenberg habe ich nicht mal die Rechtschreibkontrolle gefunden, und das viele unnötige rumgeklickte um substanzielle Funktion zu erreichen. Wo es doch vorher super funktioniert hat. Das kommt bestimmt aus der Ecke der Handy und Tablelike-Benutzer mit Minibildschirmen. Als wenn das die Hauptgruppe der Blogschreiber wäre. Das wäre mir viel zu anstrengend mit den virtuellen Tastaturen. Wobei, „Diktieren“ ist ganz nett, führt aber meiner Erfahrung nach zu schlechtem Satzbau, so daß man viel editieren muß.

GPG Pluginschwachstellen

Was bekommt man, wenn man von einer tollen Sicherheitslücke liest, ein lustiges Bild sieht und einen Bug im Grafikprogramm meldet ?

Selbstgemachtes GPG Schwachstellen Logo 🙂

Na ist doch klar, nur Platz #3 in der Reihenfolge der Websites, die über die Schwachstelle berichten 😀

Kurzfassung

Deswegen auch jetzt nur die Kurzfassung: Außer der EFF und dem ForscherSebastian Schinzelaus Münster, weiß noch keiner, was die gefunden haben. Sie empfehlen aber trotzdem die Plugins für Thinderbird & Co. zu entfernen.

Ich vermute, daß man eine Email bauen kann, die den Plugins Kryptoanweisungen unterjubelt, welche die Ausführen  und an den Absender zurück schicken. Ansonsten müßte man ja nicht davor warnen, daß die installiert sind. Vor GPG/PGP an sich, wird ja nicht gewarnt, nur davor die Plugins zu benutzen. Die Autoren müssen auch alles Code aus der gleichen Quelle geklaut haben, weil sonst nicht AppleMail, Outlook und Thunderbird gleichermaßen betroffen wären.

Aber bislang ist das reine Spekulation. Warten wir auf mehr…

Upates: (12:08)

Und da haben wir auch schon den ersten Collateralschaden:

http://www.tagesschau.de/inland/e-mail-verschluesselung-101.html

Die Tageschauredakteure haben die Meldung komplett auf Links gedreht und verbreiten grade, daß die Verschlüsselung gekackt wurde. Leider VERKACKT Leute 😀 Nicht die Verschlüsselung wurde geknackt, sondern die Plugins sind ausnutzbar um auf die verschlüsselten Emails zuzugreifen. Das genau sollen die zwar können, aber nicht, wie ich annehme, fremdbestimmt 😉

Wahrheit: 0  Collateral: 1

Upates: (14:04)

Die Katze ist aus dem Sack. Die Plugins in den Emailprogrammen dekodieren eingebettete Ciphertexte in HTML Emails und leiten die dekodierten Inhalte via HTML Bildlink zu einem eigenen Server aus.
War ja klar, daß die Krypto nicht das Problem sein konnte.

Voraussetzung für so einen Angriff ist aber, daß der Angreifer den verschlüsselten Text einer an das Opfer gesendeten Email hat. Alles-Überwacher wie die NSA haben sowas natürlich auf Lager liegen.

… und so gings weiter …. EFail: Die Katze ist aus dem Sack