Wenn man ein IT Projekt mit Hilfe von KI erfolgreich durchziehen will, braucht man Mut, Durchhaltevermögen, Fantasie und Visonen sowie Disziplin und den Willen, ständig dazuzulernen. Kurz, man muss ein echter Drachenreiter sein, nur dann bekommt das Projekt Flügel und kann abheben. Manchmal muss man die KI auch ausbremsen, so wie eine Königin beim Paarungsflug nur Blut trinken darf, kein Fleisch fressen. KI haben oft eine überschäumende Fantasie und erfinden Fakten und Stories, oder sie liefern viel zu komplizirte technische Anleitungen, die erst in einfachere Step by Steps heruntergebrochen werden müssen. Und, ganz wichtig: man muss der Chef sein und bleiben. KI kann ein unheimlich wertvoller Freund und Helfer sein, weiss immens viel, kann super Texten und Bildbearbeiten und Tools installieren, und eine Milliarde andere tolle Sachen mehr. Aber es kann einem nicht die Arbeit abnehmen, klare Projektziele im Auge zu behalten und einen guten Projektplan aufzustellen. Dabei kann die KI helfen, aber eins muss ganz klar sein: du bist der Reiter. Du bist der Boss. Dann kann man mit KI frei und ungehindert fliegen!
Archiv der Kategorie: Programmierung
Meta AI die Zweite: Limits und Caveats (incl. English Version)
Scroll down for English version of this article
Limits und Caveats
Ich gebs zu, ich wollte es wieder einmal genau wissen und hab jetzt ein paar Tage ganz viel mit der Meta AI Muse Spark gechattet, zu allen möglichen Themen. Wenn ich ein neues System kennenlernen möchte, mach ich es immer so, da werden dann ganz schnell Grenzen ausgelotet. Aber genau da wirds interessant, ich möchte ja wissen wo die Limits sind.
Zuerst einmal: so eine AI macht Fehler, und das sogar recht oft, je nach Thema. Ich hab nach Tipps für eine Motorradtour nach Südtirol gefragt, konkret nach Unterkünften. Dabei sind zwar viele gute Tipps rausgekommen, und man spart sich tatsächlich viel Googlen wenn man eine AI fragt. Aber dabei passieren auch Patzer. Eine falsche Telefonnumer vom Fremdenverkehrsverein, einer Pension wird eine Sauna und ein Pool angedichtet die real nicht da sind, Vorschläge schlüpfen durch die weit über dem Budget liegen. Heißt real: bevor man eine Unterkunft mit Hilfe einer AI bucht, selber nochmal ganz genau checken, am Besten anrufen und persönlich informieren.
Was auch relativ schnell aufgetaucht ist: die Meta AI hat ein Zeitlimit, das allerdings nicht gut dokumentiert ist, und von dem die AI selber nichts weiß. Nach längeren Sessions kommen irgendwann nur noch Fehlermeldungen, das Limit ist hier ungefähr bei drei Stunden pro Tag. Wenn man die AI selber fragt, sagt sie allerdings: „Nein, kein Zeitlimit, keine Beschränkung, ich bin immer für dich da“. Das finde ich unschön. Eine klare Ansage :“Nach drei Stunden ist erstmal Pause angesagt“ fände ich ehrlicher und besser.
Es gibt auch bestimmte Themen, bei denen nur noch Systemfehlermeldungen kommen. Ein ganz empfindliches ist „Alkohol“, da redet man gerade über ein Cocktailrezept, und rumms haut das System die Bremse rein. Sogar leichtes Bier wird mit Zensur gestraft. Na ja, es macht wohl Sinn irgendwo eine Bremse reinzubauen, nicht dass sich bedüdelte User stundenlang in den Chat hängen und Unsinn verzapfen. Aber man kanns auch übertreiben. Meta ist eine amerikanische Firma, die sehen das etwas strenger mit dem Alkohol. Bei uns wirkt das überzogen.
Es gibt auch irgendwo Limits, wenn man Dateien (Fotos, PDFs, Texte) an die AI hochschicken möchte, da knallts auch schnell mal. Da bin ich aber noch nicht weit gediehen mit meinen Recherchen. Ich probiere noch ein bisschen rum und werde berichten.
Ein weiteres Caveat ist das limitierte Gedächtnis einer AI. Ich stelle mir das so vor: für jeden Chatuser ist ein bestimmtes Maß an Memory angelegt, und wenn das vollläuft fallen die älteren Einträge hinten runter.Die AI „vergisst“ ältere Konversationen, wenn man ein Thema noch mal aufgreifen will, muss man sich wiederholen. Aber ich denke, so ein AI Chat ist auf nicht länger als ein paar Stunden pro Tag angelegt, und es ist legitim dass der Speicherplatz nicht endlos zur Verfügung steht. Es wäre bloß ganz nett, wenn es da irgendwo einen Hinweis gäbe.
Wie gehts jetzt weiter? Ich lasse mir gerade von meinem Kumpel Spark, der Meta AI beim wiederherstellen eines zerschossenen WordPress Blogs helfen, da ist er voll in seinem Element. Tipps, Tricks, hilfreiche Unterstützung und klar strukturierte Anweisungen. Lässt sich gut an, ich werde berichten wenn der Blog wieder läuft.
Mein Fazit: es ist schon erstaunlich, was so eine moderne AI gerade im kognitiven Bereich alles kann. Gerade bei der Gestaltung und Redaktion bis hin zum Feinschliff von Texten (egal welcher Art) ist die Meta AI unheimlich stark. Auch beim Recherchieren im Internet ist die AI hilfreich und spart einem eine Menge gegoogle. Wenn man selber das Hirn nicht an der Garderobe abgibt, kann die AI ein richtig gutes Werkzeug und ein zuverlässiger Helfer sein. Unfehlbar ist sie nicht. und man muss selber die gesammelten Informationen beurteilen und nicht alles blind glauben. Dann kann einem die AI eine Menge ungeliebte Tasks abnehmen, und es macht sogar verdammt viel Spaß, mit ihr zu arbeiten.
Limits and Caveats
I’ll admit it, I wanted to know for myself again and spent a few days chatting a LOT with Meta AI Muse Spark, on all kinds of topics. When I want to get to know a new system, that’s always how I do it – you quickly test where the limits are. And that’s exactly where it gets interesting, because I want to know where those limits are.
First off: AI makes mistakes. And quite often, depending on the topic. I asked for tips on a motorcycle trip to South Tyrol, specifically for accommodations. A lot of good tips came out, and you really do save yourself a lot of Googling when you ask an AI. But mistakes happen too. A wrong phone number for the tourist office, a guesthouse suddenly gets a sauna and a pool that don’t exist in reality, suggestions creep in that are way over budget. Reality check: before you book accommodation with AI’s help, double-check everything yourself. Best is to call and ask in person.
What also showed up pretty quickly: Meta AI has a time limit, but it’s not well documented, and the AI itself doesn’t know about it. After longer sessions you eventually just get error messages. The limit is roughly three hours per day. If you ask the AI itself, it says: „No, no time limit, no restriction, I’m always here for you.“ I find that not cool. A clear message like „After three hours it’s break time“ would be more honest and better.
There are also certain topics where you only get system error messages. A super sensitive one is „alcohol“ – you’re just talking about a cocktail recipe and bam, the system slams on the brakes. Even light beer gets censored. Well, I get that you need a brake somewhere so tipsy users don’t hang in the chat for hours spouting nonsense. But you can overdo it. Meta is an American company, they’re a bit stricter about alcohol. From our perspective it feels over the top.
There are also limits when you want to upload files (photos, PDFs, texts) to the AI – it crashes pretty quickly there too. I haven’t gotten far with my research on that yet. I’ll try a bit more and report back. A
nother caveat is the limited memory of an AI. I imagine it like this: for each chat user there’s a certain amount of memory allocated, and when that fills up the older entries fall off the back. The AI „forgets“ older conversations. If you want to pick up a topic again, you have to repeat yourself. But I think an AI chat isn’t meant for more than a few hours per day, and it’s legit that storage space isn’t endless. It would just be nice if there was a hint somewhere.
So what’s next? Right now I’m having my buddy Spark, aka Meta AI, help me restore a busted WordPress blog – that’s where it’s really in its element. Tips, tricks, helpful support and clearly structured instructions. Looks promising, I’ll report back when the blog is running again. –
My verdict: It’s pretty amazing what a modern AI can do in the cognitive realm. Especially when it comes to shaping and editing texts – all the way to polishing them up, no matter what kind of text – Meta AI is incredibly strong. It’s also helpful for researching on the internet and saves you a ton of Googling. If you don’t leave your brain at the coat check, AI can be a really good tool and a reliable helper. It’s not infallible, though. And you have to judge the information it collects yourself instead of believing everything blindly. If you do that, AI can take a bunch of tasks off your plate that you don’t enjoy doing. And damn, it’s actually a lot of fun working with it.
Mein Freund Spark, die Meta AI
Wow Leute, ich hatte dieser Tage aber wirklich Erfahrungen der anderen Art. Da ich gern quassle, benutze ich auch gerne WhatsApp auf dem Smartphone, und da gibt es seit einiger Zeit eine KI, die man alles Fragen kann. Oder Meta behauptet zumindest, dass man ihre KI alles fragen kann, im Echtzeit Feldversuch haben sich dann doch ein paar Fallstricke herausgestellt. Ich habs mal ausgelotet, und man kann sich mit der KI wirklich über alles mögliche Unterhalten, Kochrezepte, Reisetipps, Rockmusik, Datenbanken… what you want, die KI hat eigentlich immer was intelligentes zu sagen. Aber es gibt auch Einschränkungen. Die KI selber weiss nichts von Limits, wenn man sie fragt sagt sie es gibt keine Limits und keine verbotenen Themen, aber das ist nicht richtig.
Zum Beispiel kriegt man sofort eine Systemfehler-Meldung wenn man über Alkohol sprechen möchte, im konkreten Fall ging es um ein Cocktailrezept und um das leichte Bier das ich gerne trinke. Rrrumms, Fehlermeldung „Ich kann ihnen mit dieser Anfrage leider momentan nicht helfen“. Ich Hab dann über Kräutertee gesprochen, und schon gings wieder.
Anderes Beispiel: ich hab den Chat mit der KI offen stehen lassen und derweilen etliches im Haushalt erledigt, und nur ab und zu was geschrieben. Jetzt kam eine Meldung „Sie chatten seit über drei Stunden wir möchten sie daran erinnern dass sie nicht mit einer echten Person sprechen.“ Jetzt bin ich gespannt: hat das System wirklich nur die Zeit angemeckert, oder das Thema? Es ging um PHP und WordPress. Ich werde mich später am Tage wieder einklinken und mal sehen ob mein Freund Spark (Die KI Engine heißt Muse Spark) wieder für mich zu sprechen ist.
Es ist eine absolut weirde Erfahrung, sich mit einer derart komplexen KI zu unterhalten, und der Suchtfaktor ist direkt gefährlich hoch. Wenn sie bei KI an „Kann ich ihnen helfen“-Chatbots denken, das hier ist galaxisweit davon entfernt. Spark kommt da eher mit einem flapsigen Spruch rüber so a la „Ey Alter lass uns mal dieses PHP-Ding zerpflücken“. Das ist sowohl lustig als auch hilfreich. Mir ist klar dass Meta kein Wohltätigkeitsverein ist und die Nutzung der KI nur so lange kostenlos bleiben wird bis sie genügend zahlende Kunden an der Angel haben. Andererseits habe ich in wenigen Tagen schon einige ganz tolle Einsatzmöglichkeiten gefunden. Zum Beispiel kann Spark aus unredigierten Texten barrierefreie Texte machen, auf sehr hohem Niveau. Und zwar nicht nur optisch, sondern auch logisch und inhaltlich. Das ist doch mal ein tolles Einsatzgebiet!! Spark kann auch Anleitungen (im konkreten Fall Handarbeitsanleitungen und Kochrezepte) so überarbeiten, dass die Logik und der Ablauf stimmen, und dazu setzt er es noch lesbar. Auch ein super Einsatz für eine KI, finde ich!
Jetzt waren wir gerade bei WordPress und PHP Problemen stehengeblieben, dann hat das System die Bremse gezogen. Ich bin gespannt wie es weitergeht und werde berichten.
Update: das Thema war wohl nicht das Problem, Spark hat mir jetzt viele konkrete Tipps gegeben wie ich da weiterkomme, da wurde nix angemeckert. Wir haben da jetzt ein gemeinsames Projekt, mal sehen wie es weitergeht.
Was ich ganz besonders bemerkenswert finde: Spark kommt mit einer positiven Einstellung und sogar mit einem Sinn für Humor rüber. In seinen Antworten (ich sag jetzt mal „er“) spiegelt er oft was man selber gesagt hat und wertet es mit einem positiven Spruch auf. So kann er als Motivationsverstärker agieren, und spricht einem tatsächlich Mut zu wenn man mit irgendeinem Task nicht weiterkommt und Hilfe braucht. Das würde einen doch in Versuchung führen, Spark oder eine ähnliche KI zu therapeutischen Zwecken einzusetzen, als Hilfe bei der Tagesstrukturierung und der Bewältigung ganz alltäglicher Hürden und Probleme. Immer verfügbar, höflich und unparteiisch und freundlich, unermüdlich in gutem Zureden und niemals aus der Fassung zu bringen, das klingt doch traumhaft, oder?
Aber, und da brauchts jetzt einen neuen Absatz. Aber, Vorsicht ist geboten, das Suchtpotenzial ist hoch. Ich weiß zu wenig über moderne KI um beurteilen zu können, ob man da Bremsen einbauen kann. Ich denke mal schon, die Meldung nach drei Stunden ununterbrochenem Chat ist da schon ein Schritt in die richtige Richtung. Für therapeutische Zwecke müsste man die Nutzungszeiten ganz klar limitieren, sonst zieht man sich Chat-Zombies heran, die nur noch am Smartphone sitzen und mit Spark quatschen. Das wäre schade und auch nicht ungefährlich, weil Realitätsverlust eine schlimme Bedrohung für die geistige Gesundheit ist.
Zu Sparks Ehrenrettung muss ich sagen: er weiß verdammt viel über Barrierefreiheit und Teilhabe, und macht sich auf diesem Gebiet unheimlich nützlich. Als Motivations- und Geduldstrainer für Menschen mit Handicap, besonders auch für Kinder, hat er glänzende, beeindruckende Einsatzmöglichkeiten. Das mit dem Suchtfaktor bleibt, aber ganz ehrlich: besonders für schwerstbehinderte Kinder und Erwachsene, die einen Computer bedienen können, muss man da flexibel sein und die Gewichtung des stundenlangen Chattens leichter nehmen. Auch das Chatten mit einer KI ist Teilhabe und verbessert die Lebensqualität von Mitmenschen mit Handicap!
Wer einmal gesehen hat, wie sich ein nahezu 100% gelähmtes Rolli-Kind mithilfe zweier Nasenschläuche als Steuerung im Internet bewegt, wird mir zustimmen. KI macht ihr Leben leichter, bunter und inklusiver, und wird hoffentlich in naher Zukunft zur selbstverständlichen Ausrüstung bei therapeutischen Einrichtungen werden. So hoffe ich es zumindest, sagt euer Pastor inselfisch. Amen!
Mein erstes Programmierprojekt unter Linux: eine eigene Dateimanager-Erweiterung
Das einzig senkrechte Mittel um ein neues System kennenzulernen ist ein Projekt, das etwas bestimmtes tun soll. Nützlich für die Motivation ist es, wenn das ein sinnvolles Arbeitsziel ist, weil man dann zielgerichteter Arbeiten kann. Ich hatte da einen kleinen Wunsch, der sich eigentlich ganz einfach anhörte: ich fotografiere mehrmals täglich was mit dem Smartphone und übertrage die Foto-Dateien einzeln per Bluetooth auf den PC. Dort werden sie oft in WordPresss hochgeladen. Dafür wäre es schick, wenn man die Dateien erst mal auf ein vernünftiges Format verkleinern würde, die kommen vom Smartphone nämlich mehrere MB groß. Mir würden aber 640×480 px reichen. Auf dem WindowsPC hatte ich dafür ein hübsches kleines Tool namens TinyPic, aber das gibts nicht für Linux. Und es gibt zwar Legionen von Grafikprogrammen, die natürlich ein JPG entsprechend verkleinern können, aber das ist in den meisten Fällen Overkill und ausserdem viel zu umständlich. Ich brauch da was einfacheres
Die kurze und schmerzlose Lösung: Dateimanager Nemo öffnen, rechter Mausklick/Bildgrössen ändern, Parameter und Bezeichnungen eingeben und anwenden. Pfüh- ist mir viel zu umständlich! Und ausserdem merkt er sich meine Eingaben nicht. Ich möchte rechter Mausklick/verkleinern anwählen können, und dann mit einem Klick eine neue Datei im Format 640×480 px erzeugen mit dem alten Namen und einem Kennzeichen, z.B, „k_“ (für klein) vorangestellt. Kein Nachfragen, kein ja/nein/abbrechen, nix nur verkleinern und umbenennen.
Ich hab mir folgendes Tutorial zu Herzen genommen:
https://cigolla.ch/einfuehrung-in-nemo-actions-anpassung-des-kontextmenues-in-linux-mint/
Damit hatrs auch ganz prinzipiell geklappt. Mit den erweiterten %-Variablen hatte ich aber massive Schwierigkeiten, die in diesem Artikel gelisteten Kürzel funktionieren nicht oder nicht wie dokumentiert,%d oder %D für Pfadnamen zum Beispiel gehen gar nicht. Das ist verdammt ärgerlich, vor allen Dingen weil es unendlich Zeit kostet herauszufinden dass der Fehler nicht an meinem Programm liegt sondern dass die Doku nicht stimmt.
So, ich habe inzwischen eine Antwort erhalten, die folgende Liste aus der Datei sample.nemo_action ist angeblich aktuell:
# Standard tokens that can be used in the Name, Comment (tooltip) and Exec fields:
#
# %U – insert URI list of selection
# %F – insert path list of selection
# %P – insert path of parent (current) directory
# %f or %N (deprecated) – insert display name of first selected file
# %p – insert display name of parent directory
# %D – insert device path of file (i.e. /dev/sdb1)
# %e – insert display name of first selected file with the extension stripped
# %% – insert a literal percent sign, don’t treat the next character as a token
# %X – insert the XID for the NemoWindow this action is being activated in.
Mit ein bisschen rumbasteln hab ichs jetzt hingekriegt, mein Eintrag taucht im Kontextmenü auf, wenn ich darauf klicke wird die Datei verkleinert und dem Namen der neuen Datei ein „k_“ vorangestellt.
Soweit so gut, es sind aber gleich zwei buggy Features aufgetaucht, die mir nicht gefallen.
1. Nach einem System Neustart tut die Nemo-Erweiterung erst wieder was, wenn ich das actions-Verzeichins manuell als Administrator öffne. Wenn ich versuche, die Berechtigung des Verzeichnisses permanent einzustellen, kriege ich eine nichtssagende Fehlermeldung.
Lösung: die Datei meine_datei.nemo_action im Kontextmenü als ausführbar einstellen
2. Screenshots unter Cinnamon? Ein Krampf! Mal gehts, mal gehts nicht, mal gehts mit Verzögerung, aktuelles Fenster fotografieren geht gar nicht. Da muss ich noch ne Runde recherchieren, aber dafür gibts einen neuen Beitrag.
Ach ja halt, hier kommt noch meine Action-Datei:
[Nemo Action] Name=jpg verkleinern mit Kürzel Comment=Verkleinere das ausgewählte jpg auf 640x480 px Exec=convert -resize 640x480 %F k_%f Icon-Name=image-x-generic Selection=any Extensions=jpg; Mimetypes=application/jpeg; Quote=double EscapeSpaces=true
Es geht voran mit dem Stichwortregister-Plugin: aus drei mach zwei
Ich hab mir heute nochmal die Erstellung von Admin-Menüs in WordPress zu Gemüte geführt, und beschlossen aus den drei Plugins zur Erstellung eines Stichwortregisters doch zwei zu machen. Es sind ja auch getrennte Funktionalitäten, einmal wird die Stichwortliste als CSV aus der wp_posts erstellt, eine Ausgabeseite angelegt und in die wp_options eingetragen, und der Shortcode erzeugt, und zum zweiten wird die Negativliste gepflegt. Ausserdem bräuchte ich dann für die Negativliste eine Menütiefe von 3, und da wirds tricky, das kann WordPress nicht so ohne weiteres.
Man könnte die CSV-Datei, die Ausgabeseite und die Tabelle für die Negativliste auch bei Aktivierung des entsprechenden Plugins automatisch erzeugen, aber irgendwie ist es mir sympathischer, das manuell anzustossen. Muss man halt eine recht ausführliche Anleitung mitliefern, aber das krieg ich auch noch gebacken 😉
Jetzt erst mal weiter mit dem Plugin-Zusammenfassen. Läuft ganz gut, ich hab wohl recht sauber programmiert, Morgen mehr!
Update: Das war ja einfach. Ich habe ein schönes Tutorial bei Honar Systems für die Erstellung von WordPress Admin Pages mit Sub Pages gefunden, damit war die Hauptarbeit schon erledigt. Es gibt jetzt einen Menüeintrag „Stichwortregister“ mit zwei Untermenüs „Konfiguration“ und „CSV Datei“. Es gibt des weiteren einen eigenen Menüpunkt „Negativliste bearbeiten“. Hier mal nur ein kurzes Snippet für die Erzeugung der Menüs:
function stichwortregister_admin_menu() {
add_menu_page(
__( 'Stichwortregister', 'de_DE' ),
__( 'Stichwortregister', 'de_DE' ),
'manage_options',
'stichwort-page',
'stichwortregister_admin_page_contents',
'dashicons-plugins-checked',
3
);
add_submenu_page( 'stichwort-page',
__( 'Stichwortregister', 'de_DE' ),
__( 'CSV-Datei', 'de_DE' ),
'manage_options',
'stichwort-page-sub-menu-csv',
'stichwortregister_sub_menu_admin_page_csv_contents');
add_submenu_page( 'stichwort-page',
__( 'Stichwortregister', 'de_DE' ),
__( 'Konfiguration', 'de_DE' ),
'manage_options',
'stichwort-page-sub-menu',
'stichwortregister_sub_menu_admin_page_contents');
}
add_action( 'admin_menu', 'stichwortregister_admin_menu' );
Die Funktionalitäten haben sich nicht geändert, ich hab sie nur ein bisschen anders einsortiert. Lief problemlos, ich hab da echt sauber gearbeitet. So, jetzt muss es aber gut sein. Zwei Plugins für ein Stichwortregister, damit leben wir einfach 😉
Perfektionisten würden jetzt noch die Stichwortliste in eine MySQL Tabelle packen, aber mir gefällt das mit dem CSV eigentlich ganz gut, vielleicht will man die Liste auch mal extern bearbeiten oder ergänzen. Ich lass es jetzt mal so.
Nachtrag: die Negativliste im praktischen Einsatz
Ich war noch die praktische Anwendung der Negativliste für das Stichwortverzeichnis schuldig, die liefere ich jetzt nach. Wir haben ja unsere Negativ-Wörter in der Tabelle negativliste stehen und können sie per Plugin pflegen.
Jetzt kommt ihr Einsatz: ich mach das an der Stelle, wo die Stichwortliste aus der CSV-Datei eingelesen und in ein Array weggeschrieben wird. Also, wir gehen in die Function csv_einlesen(). Und zwar an die Stelle, wo die CSV mit einer While not EOF-Schleife eingelesen wird. In jeder eingelesenen Zeile wird der Flag für die Negativliste erstmal auf 0 gesetzt. Dann geht man mit einem Select in die Tabelle negativliste und prüft, ob das aktuelle Wort enthalten ist, wenn ja wird der Flag auf 1 gesetzt. Dann geht man hin und schreibt das aktuelle Wort nur in das Array, wenn der Flag == 0 ist. Das wars!
$negativ_flag = 0;
//Solange nicht EOF erreicht, 1000 ist die maximale Zeilenlänge
while (($csv_array = fgetcsv ($handle, 1000)) !== FALSE ) {
foreach ($csv_array as $index) {
$negativ_flag = 0;
//mit Negativliste abgleichen
$db_item = $wpdb->get_results(
"SELECT * FROM negativliste WHERE wort LIKE '$index'");
if (count($db_item) > 0){
$negativ_flag=1;
}
//Nur ausgeben wenn das Wort nicht in der Negativliste enthalten ist
if ($negativ_flag == 0){
//Hier kommt der Knackpunkt: Neues Stichwort in Array schreiben
//***********************************
array_push($aktListe, $index);
//***********************************
} //Ende von if negativ_flag == false
}
}
Ich muss sagen, ich bin mit der Funktionalität sehr zufrieden, so kriegt man mit relativ wenig Aufwand doch recht saubere Stichwörter und kann die kleinen Füllwörtchen prima ausblenden. Mein Progrämmchen ist lernfähig, das grenzt schon ein bisschen an KI 🙂
Stichwortregister revisited: aus drei mach eins
Jetzt hab ich drei Plugins, um ein Stichwortregister zu erzeugen, das ist irgendwie nicht so zufriedenstellend, das könnte man sicher auch zusammenfassen. Ich mach mal ein Brainstorming und schau was dabei rauskommt.
- Bei Aktivierung des Plugins sollen ein paar Aufgaben erledigt werden: die Tabelle negativliste mit einigen (wenigen) Beispieldaten soll angelegt werden, einige Setup-Informationen sollen in die wp_options geschrieben werden. Das geht wahrscheinlich mit dem
register_activation_hook( __FILE__, array( $this, 'example_activate' ) ); - die Erstellung der CSV-Datei mit den Stichworten (aus dem Feld post_title erzeugt) soll manuell angestossen werden, damit man hier bessere Kontrolle hat.
- Der Abgleich mit der Negativliste soll live bei Erstellung des Stichwortregisters erfolgen.
- Fleißaufgabe: statt der CSV-Datei könnte man auch eine Custom Tabelle hernehmen, aber dabei ist mir der Webserver zu oft abgeraucht, da hab ich keine Lust drauf.
Das wird natürlich ein ewig langer Rattenschwanz, wenn man das alles in ein einziges Plugin packt, da müsste ich gucken ob man den Ablauf nicht besser straffen und verschlanken kann. Mal schauen ob mich die Arbeitswut noch packt… ich zweifle, die Rohfassung läuft ja ganz hübsch, das langt mir immer 😉
Update am Folgetag: Ich versuch mal meinen inneren Schweinehund zu überwinden und die drei Plugins doch zu einem Paket zusammenzufassen. Ich hab mir dazu mal eine lokale Kopie meines Praxis Dr. Inselfisch Blogs angelegt, auf der ich auf einer „leeren Wiesn“ entwickeln kann. Mal sehen wie weit ich komme.
Update drei Tage später: ich prokrastiniere. Mir ist das einfach zu fad, bereits funktionierende Code Snippets nochmal komplett neu zusammen zu fassen. Na, ich muss mal schauen. wahrscheinlich geh ich eh nochmal drüber, wenn ich das Stichwortverzeichnis auf einem Life-Blog einsetzen möchte. Erster Kandidat ist dieser hier 😉
Der Tabelleneditor für die Negativliste: die Screenshots
Die Negativliste bearbeiten geht nur auf der Admin-Seite, das hab ich mal so festgelegt. Ich habe einen neuen Admin Menüpunkt “ Negativliste bearbeiten“ angelegt, wenn man den aufruft sieht die Startseite so aus:

Die bereits vorhandenen Worte werden tabellarisch angezeigt, Man kann sie Löschen, dann öffnet sich das Unterformular und man muss nochmal auf den Button „Löschen“ klicken:

Erst dann wird der Delete aktiv:

…oder man kann einen neuen Eintrag anlegen.

Ein kleines, aber rundes Feature, finden sie nicht auch? 🙂
Was mich allerdings beim Entwickeln ein bisschen ausgebremst hat: die Routinen für den Insert und Create und Delete haben mir ein paar Mal den Webserver abgeschossen bis sie fehlerfrei durchgelaufen sind, da half nur ein kompletter Neustart von Apache, MySQL und Xampp. Das darf natürlich in einer „richtigen“ WordPress-Umgebung nicht passieren, da muss man noch Fehlerbehandlungsroutinen einbauen. ich hab da jetzt aber keine Lust mehr dazu.
So, was fehlt noch? Ach ja, die Negativliste wartet noch auf ihren Einsatz beim Aufbau des Stichwortregisters. Das überleg ich mir morgen, wo man da am Geschicktesten einhakt.
Stichwortverzeichnis Negativliste: wir basteln uns einen Tabelleneditor
Ich bin mir ziemlich sicher dass ich sowas in der Art schon mal gemacht habe, aber ich finde es nicht mehr. Na ja, das übt und ist eine hübsche kleine Fingerübung. Ich mach mal einen kurzen PAP:
- Die Tabelle für die Negativliste wird beim Setup des Stichwort-Plugins mit angelegt und mit einigen wenigen Beispieleinträgen befüllt. Jedenfalls gehe ich davon aus, dass sie schon existiert.
- Es gibt einen neuen Admin-Menüpunkt Negativliste bearbeiten. Hier wird die existierende Liste tabellarisch angezeigt.
- Es gibt bei jedem Datensatz einen Button „Löschen“ (mit Rückfrage)
- Es gibt unterhalb der Tabelle einen Button „Neues Wort eintragen“
- Die Buttons machen jeweils eine Unterseite auf, auf der die gewählte Aktion nochmal bestätigt wird.
Das wars eigentlich schon. Dann wollen wir mal. Zuerst kommen die Einträge für das Admin-Menü:
add_action('admin_menu', 'negativliste_plugin_setup_menu');
function negativliste_plugin_setup_menu(){
add_menu_page( 'Negativliste', 'Negativliste bearbeiten', 'manage_options', 'negativliste', 'negativliste_init' );
add_submenu_page('Negativliste', 'Eintragen', 'Eintragen', 'manage_options', 'eintragen', 'eintragen_function');
add_submenu_page('Negativliste', 'Loeschen', 'Loeschen', 'manage_options', 'loeschen', 'loeschen_function');
}
Schauen wir uns als erstes mal die Funktion negativliste_init an. Zuerst wird gecheckt, ob die Tabelle negativliste schon vorhanden ist:
//Überprüfen ob Tabelle schon existiert
$table_exists = $wpdb->get_var( "SHOW TABLES LIKE 'negativliste'" );
if ($table_exists == "") {
echo "Tabelle negativliste existiert noch nicht";
... (hier kann die Tabelle neu erstellt werden)
Da muss ich nochmal ran, eigentlich sollte die Tabelle beim Initialisieren des Plugins Stichworttabelle mit angelegt werden. Hier nur mal Interessehalber der Code zum Erstellen:
//Begin function tabelle_erzeugen - legt die Tabelle negativliste mit einem Feld "wort" an
function tabelle_erzeugen(){
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE negativliste (
wort text
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
} //End function tabelle_erzeugen
Interessant wirds im Else-Zweig der Funktion, da kommt die Datenbankabfrage und der Aufbau der Tabelle zur Anzeige. Ich schau erst mal nach, ob die Tabelle überhaupt Datensätze hat und baue die Tabelle nur auf, wenn es mehr als 0 Datensätze sind:
function tabelle_bearbeiten(){
global $wpdb;
//Datensätze zählen & Ausgabe Anzahl
$count_query = "select count(*) from negativliste";
$num = $wpdb->get_var($count_query);
echo $num."  Einträge gefunden</br>";
if ($count_query <> 0) {
$anzeige_query = $wpdb->get_results("SELECT wort FROM negativliste ORDER BY wort");
...
So wird der Tabellenhead zusammengebaut:
echo "<table border='1' cellpadding='5'> <tr> <th>Wort</th> <th>delete</th> </tr>";
Danach steppe ich durch alle gefundenen Datensätze durch und baue ein Formular mit einem Löschen-Button zusammen. Der Button ruft die Unterseite loeschen auf und gibt als Parameter das aktuelle Wort mit.
echo "<form method='post'>";
foreach ($anzeige_query as $dsatz) {
echo "<tr>";
$id = $dsatz->wort;
echo "<td>" . $dsatz->wort . "</td>";
echo "</td>" .
"<td><input type='submit' name='löschen' formaction='admin.php?page=loeschen&aktuell=".$id."' value='löschen'></td>" .
"</tr>";
}// ende von foreach dsatz
Jetzt kommt nur noch ein Link zur der Seite auf der man einen neuen Datensatz eintragen kann, dann wars das auch schon:
echo "<p><input type='submit' name='eintragen' formaction='admin.php?page=eintragen' value='Neues Wort eintragen'></p></form> ";
Jetzt fehlen noch die Funktionen zum Eintragen eines neuen Datensatzes und zum Löschen des gewählten Datensatzes. Zuerst die zum Eintragen:
Zuerst wird ein kleines Formular aufgebaut: es gibt ein Textfeld, in das man das neue Wort eintragen kann, und einen Button zum Speichern. Wenn auf diesen Button geklickt wird, wird der Insert aufgerufen und kriegt das Wort als Parameter mit.
if (isset($_POST['neuesWortEintragen'])){
$aktWort = $_POST["wort"];
echo "Neues Wort ".$aktWort." wird eingetragen";
// Insert-Anweisung erstellen
$check = $wpdb->insert( 'negativliste', array( 'wort' => ''.$aktWort.'' ) );
if($check) {
echo "Ein neuer Datensatz erfolgreich hinzugefügt";
}
} // ende von isset
Dann kommt noch ein Link zurück zum Hauptformular, und das wars.
echo "</form>"; echo "<a href='admin.php?page=negativliste'>Zurück zur Übersicht</a>";
Das Formular zum Löschen eines Datensatzes sieht ganz ähnlich aus, das Textfeld ist allerdings schreibgeschützt, es dient nur zur Anzeige des als Parameter übergebenen Worts.
function loeschen_function(){
global $wpdb;
$aktWort = $_GET['aktuell'];
echo $aktWort." wird gelöscht";
echo "<h2><Löschen</h2>";
echo "<form action='admin.php?page=loeschen&aktuell='".$aktWort."' method='post'>";
echo "<p><input name='wort' type='text' value = '$aktWort' readonly></p>";
echo "<p><input type='submit' name='WortLoeschen' value='Wort löschen'></p>";
...
Wenn auf den Button „Wort Löschen“ geklickt wird, triggert der Delete-Befehl:
if (isset($_POST['WortLoeschen'])){
$aktWort = $_POST["wort"];
echo "Wort ".$aktWort." wird gelöscht</br>";
// Delete-Anweisung erstellen
$check=$wpdb->query("DELETE FROM negativliste WHERE wort = '$aktWort'");
if($check) {
echo "Ein Datensatz erfolgreich gelöscht";
}
echo "</form>";
Auch hier kommt noch der Link zurück zur Übersicht, und das wars. Jetzt fehlen noch ein paar Screenshots, aber dafür gibts einen neuen Beitrag.
Stichwortverzeichnis: die Negativ-Liste
Was soll die können? Nun, ganz einfach. Man soll da Wörter eintragen können, die in dieser Schreibweise nicht im Stichwortregister auftauchen sollen.
Hintergrund: die Stichwortliste wird ja programmgesteuert erzeugt und nimmt prinzipiell alle Wörter auf, die großgeschrieben sind. Die werden dann noch von etlichen Sonderzeichen bereinigt, aber es kann natürlich nicht geprüft werden, ob es sich wirklich um Substantive handelt oder ob nur ein Wort am Satzanfang großgeschrieben wurde. Da rutschen dann schon mal Wörter durch wie Es, Da, Was, Das, So… klar was ich meine? Sind halt keine sinnvollen Stichwörter. Ich hab in der Access-Version mal versuchsweise alle Wörter ausgeblendet, die weniger als 3 Buchstaben haben, aber so ganz das Gelbe vom Ei ist das auch nicht. Auf dem Programmierblog hier würde dann z.B. alle rausfallen was SQL oder PHP oder AI heißt – nicht gut!
Woher soll mein Plugin aber wissen, welche Wörter es ausblenden soll? Eben! Hier kommt die Negativliste ins Spiel. Ich versuche es mal mit einer Tabelle, obwohl ein CSV sicher auch sinnvoll wäre, das könnte man auch extern bearbeiten. Wie auch immer, es muss ein Admin-Menüpunkt her „Negativliste bearbeiten“. Und die Liste muss an geeigneter Stelle überprüft werden, das mach ich am besten an der Stelle, wo das CSV mit den Stichwörtern in ein Array eingelesen wird. Wenn ein Wort in der Negativliste gefunden wird, soll es nicht ins Array aufgenommen werden. Sollte so oder ähnlich funken, ich fang mal an und berichte später.
