<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cg</id>
	<title>expecco Wiki (Version 25.x) - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://doc.expecco.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cg"/>
	<link rel="alternate" type="text/html" href="https://doc.expecco.de/wiki/Spezial:Beitr%C3%A4ge/Cg"/>
	<updated>2026-06-06T03:34:37Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31356</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31356"/>
		<updated>2026-06-04T11:23:22Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Was kann eine lokale KI (z.B. ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
&lt;br /&gt;
== Was kann eine lokale KI (z.B. ollama) ==&lt;br /&gt;
&lt;br /&gt;
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen, mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU.&lt;br /&gt;
Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar.&lt;br /&gt;
&lt;br /&gt;
Wichtig: wir sind selbst noch Anfänger und keine [https://en.wikipedia.org/wiki/Susan_Calvin KI Psychologen].&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
 install ollama&lt;br /&gt;
 ollama pull gemma3:8b-it-qat ;; gemma3:8b / gemma3:12b usw.&lt;br /&gt;
 ollama run gemma3:8b-it-qat&lt;br /&gt;
&lt;br /&gt;
=== Sitzung 1 ===&lt;br /&gt;
Hinweise: Wichtig, sonst labert Sie das Modell voll!&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; respond short and concise&lt;br /&gt;
 Understood&lt;br /&gt;
&lt;br /&gt;
Hinweise: Smalltalk/X wissen hat er nicht, aber VW und Pharo sind ähnlich genug.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak.&lt;br /&gt;
 &lt;br /&gt;
 You have come to the right place I have a considerable depth of knowledge regarding Smalltalk...&lt;br /&gt;
Angeber- wir werden sehen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what does the smalltalk expression &amp;quot;self at:4 put:&#039;bla&#039; &amp;quot; mean&lt;br /&gt;
 &lt;br /&gt;
 Sets the character &#039;b&#039; at index 4 of `self` (assuming `self` is a string).&lt;br /&gt;
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und &#039;bla&#039; ist ein String&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to compute the area of a circle given radius&lt;br /&gt;
 &lt;br /&gt;
 ```smalltalk&lt;br /&gt;
 | radius area |&lt;br /&gt;
 radius := 5.0.&lt;br /&gt;
 area := radius * radius * PI.&lt;br /&gt;
 ^area&lt;br /&gt;
 ```&lt;br /&gt;
nicht schlecht. &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to extract a substring&lt;br /&gt;
 &lt;br /&gt;
 `substring:startIndexToEndIndex` (inclusive). E.g., `&amp;quot;hello&amp;quot; substring:2 to:4` yields `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; alternative?&lt;br /&gt;
 &lt;br /&gt;
 `copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `&amp;quot;ell&amp;quot;`.&lt;br /&gt;
besser, aber immer noch falscher Index&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;hello&#039; copyFrom:2 to:4&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;llo&amp;quot;&lt;br /&gt;
war zu erwarten&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; smalltalk uses 1 based indexing. what is the result&lt;br /&gt;
 &lt;br /&gt;
 Correct. The result of `&#039;hello&#039; copyFrom:2 to:4` is `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
soso. Er sieht ein, dass ich korrigiert habe - dann aber dickköpfig.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; in smalltalk the first index is 1 the last is the collection&#039;s size. Not as in Python or C.&lt;br /&gt;
 &lt;br /&gt;
 Precisely. 1-based indexing is core to Smalltalk.&lt;br /&gt;
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 &lt;br /&gt;
 You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `&#039;hello&#039; copyFrom:2 to:4` results in `&amp;quot;ell&amp;quot;`. Thanks for the correction. I am still under development and learning nuances like this.&lt;br /&gt;
soso, eine Nuance. Mal sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;bcd&amp;quot;&lt;br /&gt;
na also; geht doch.&lt;br /&gt;
&lt;br /&gt;
=== Sitzung 2 ===&lt;br /&gt;
&lt;br /&gt;
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat.&lt;br /&gt;
 /clear&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; answer short an concise&lt;br /&gt;
 Okay.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo&lt;br /&gt;
 &lt;br /&gt;
 Acknowledged. I&#039;m ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to&lt;br /&gt;
assist you. Ask away!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: because smalltalk is 1-based indexing, the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 &lt;br /&gt;
 Understood. I will keep in mind Smalltalk&#039;s 1-based indexing when answering your questions about string&lt;br /&gt;
manipulation and other operations&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
 &lt;br /&gt;
 &#039;bcd&#039;&lt;br /&gt;
richtig!&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; given Array #(10 20 30 40) what is the result of array at:3&lt;br /&gt;
 &lt;br /&gt;
 30&lt;br /&gt;
richtig!&lt;br /&gt;
&lt;br /&gt;
Man muss den Context also mit Wissen füllen, dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31355</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31355"/>
		<updated>2026-06-04T10:44:46Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Was kann eine lokale KI (z.B. ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
&lt;br /&gt;
== Was kann eine lokale KI (z.B. ollama) ==&lt;br /&gt;
&lt;br /&gt;
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen, mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU.&lt;br /&gt;
Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar.&lt;br /&gt;
&lt;br /&gt;
 install ollama&lt;br /&gt;
 ollama run gemma3:8b-it-qat&lt;br /&gt;
&lt;br /&gt;
Hinweise: Wichtig, sonst labert Sie das Modell voll!&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; respond short and concise&lt;br /&gt;
 Understood&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak.&lt;br /&gt;
 &lt;br /&gt;
 You have come to the right place I have a considerable depth of knowledge regarding Smalltalk...&lt;br /&gt;
Angeber- wir werden sehen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what does the smalltalk expression &amp;quot;self at:4 put:&#039;bla&#039; &amp;quot; mean&lt;br /&gt;
 &lt;br /&gt;
 Sets the character &#039;b&#039; at index 4 of `self` (assuming `self` is a string).&lt;br /&gt;
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und &#039;bla&#039; ist ein String&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to compute the area of a circle given radius&lt;br /&gt;
 &lt;br /&gt;
 ```smalltalk&lt;br /&gt;
 | radius area |&lt;br /&gt;
 radius := 5.0.&lt;br /&gt;
 area := radius * radius * PI.&lt;br /&gt;
 ^area&lt;br /&gt;
 ```&lt;br /&gt;
nicht schlecht. &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to extract a substring&lt;br /&gt;
 &lt;br /&gt;
 `substring:startIndexToEndIndex` (inclusive). E.g., `&amp;quot;hello&amp;quot; substring:2 to:4` yields `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; alternative?&lt;br /&gt;
 &lt;br /&gt;
 `copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `&amp;quot;ell&amp;quot;`.&lt;br /&gt;
besser, aber immer noch falscher Index&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;hello&#039; copyFrom:2 to:4&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;llo&amp;quot;&lt;br /&gt;
war zu erwarten&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; smalltalk uses 1 based indexing. what is the result&lt;br /&gt;
 &lt;br /&gt;
 Correct. The result of `&#039;hello&#039; copyFrom:2 to:4` is `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
soso. Correct. Dann aber dickköpfig.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; in smalltalk the first index is 1 the last is the collection&#039;s size. Not as in Python or C.&lt;br /&gt;
 &lt;br /&gt;
 Precisely. 1-based indexing is core to Smalltalk.&lt;br /&gt;
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 &lt;br /&gt;
 You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `&#039;hello&#039; copyFrom:2 to:4`&lt;br /&gt;
results in `&amp;quot;ell&amp;quot;`. Thanks for the correction. I am still under development and learning nuances like this.&lt;br /&gt;
soso, eine Nuance. Mal sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;bcd&amp;quot;&lt;br /&gt;
na also. geht doch.&lt;br /&gt;
&lt;br /&gt;
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat.&lt;br /&gt;
 /clear&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; answer short an concise&lt;br /&gt;
 Okay.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo&lt;br /&gt;
 Acknowledged. I&#039;m ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to&lt;br /&gt;
assist you. Ask away!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: because smalltalk is 1-based indexing, the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 Understood. I will keep in mind Smalltalk&#039;s 1-based indexing when answering your questions about string&lt;br /&gt;
manipulation and other operations&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
 &#039;bcd&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; given Array #(10 20 30 40) what is the result of array at:3&lt;br /&gt;
30&lt;br /&gt;
&lt;br /&gt;
Man muss den Context also mit Wissen füllen, dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31354</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31354"/>
		<updated>2026-06-04T10:42:50Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Was kann eine lokale KI (z.B. ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
&lt;br /&gt;
== Was kann eine lokale KI (z.B. ollama) ==&lt;br /&gt;
&lt;br /&gt;
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen, mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU.&lt;br /&gt;
Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar.&lt;br /&gt;
&lt;br /&gt;
 install ollama&lt;br /&gt;
 ollama run gemma3:8b-it-qat&lt;br /&gt;
&lt;br /&gt;
Hinweise: Wichtig, sonst labert Sie das Modell voll!&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; respond short and concise&lt;br /&gt;
 Understood&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak.&lt;br /&gt;
 &lt;br /&gt;
 You have come to the right place I have a considerable depth of knowledge regarding Smalltalk...&lt;br /&gt;
Angeber- wir werden sehen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what does the smalltalk expression &amp;quot;self at:4 put:&#039;bla&#039; &amp;quot; mean&lt;br /&gt;
 &lt;br /&gt;
 Sets the character &#039;b&#039; at index 4 of `self` (assuming `self` is a string).&lt;br /&gt;
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und &#039;bla&#039; ist ein String&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to compute the area of a circle given radius&lt;br /&gt;
 &lt;br /&gt;
 ```smalltalk&lt;br /&gt;
 | radius area |&lt;br /&gt;
 radius := 5.0.&lt;br /&gt;
 area := radius * radius * PI.&lt;br /&gt;
 ^area&lt;br /&gt;
 ```&lt;br /&gt;
nicht schlecht. &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to extract a substring&lt;br /&gt;
 &lt;br /&gt;
 `substring:startIndexToEndIndex` (inclusive). E.g., `&amp;quot;hello&amp;quot; substring:2 to:4` yields `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; alternative?&lt;br /&gt;
 &lt;br /&gt;
 `copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `&amp;quot;ell&amp;quot;`.&lt;br /&gt;
besser, aber immer noch falscher Index&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;hello&#039; copyFrom:2 to:4&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;llo&amp;quot;&lt;br /&gt;
war zu erwarten&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; smalltalk uses 1 based indexing. what is the result&lt;br /&gt;
 &lt;br /&gt;
 Correct. The result of `&#039;hello&#039; copyFrom:2 to:4` is `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
soso. Correct. Dann aber dickköpfig.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; in smalltalk the first index is 1 the last is the collection&#039;s size. Not as in Python or C.&lt;br /&gt;
 &lt;br /&gt;
 Precisely. 1-based indexing is core to Smalltalk.&lt;br /&gt;
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 &lt;br /&gt;
 You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `&#039;hello&#039; copyFrom:2 to:4`&lt;br /&gt;
results in `&amp;quot;ell&amp;quot;`. Thanks for the correction. I am still under development and learning nuances like this.&lt;br /&gt;
soso, eine Nuance. Mal sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;bcd&amp;quot;&lt;br /&gt;
na also. geht doch.&lt;br /&gt;
&lt;br /&gt;
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat.&lt;br /&gt;
 /clear&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; answer short an concise&lt;br /&gt;
 Okay.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo&lt;br /&gt;
 Acknowledged. I&#039;m ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to&lt;br /&gt;
assist you. Ask away!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: because smalltalk is 1-based indexing, the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
Understood. I will keep in mind Smalltalk&#039;s 1-based indexing when answering your questions about string&lt;br /&gt;
manipulation and other operations&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
 &#039;bcd&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; given Array #(10 20 30 40) what is the result of array at:3&lt;br /&gt;
30&lt;br /&gt;
&lt;br /&gt;
Man muss den Context also mit Wissen füllen, dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31353</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31353"/>
		<updated>2026-06-04T10:35:53Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tipps für die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
&lt;br /&gt;
== Was kann eine lokale KI (z.B. ollama) ==&lt;br /&gt;
&lt;br /&gt;
Erste Versuche sind eher ernüchternd. Ohne Zugriff auf lokale Quellen, mit rein antrainiertem Wissen sind die Modelle vermutlich zu klein. Hier eine Konversation mit gemma3:8b-it-qat (8 Mrd, quantifiziert) auf einem Rechner ohne GPU.&lt;br /&gt;
Die Antwortzeiten sind natürlich schlecht, aber mit einer GPU u.U. brauchbar.&lt;br /&gt;
&lt;br /&gt;
 install ollama&lt;br /&gt;
 ollama run gemma3:8b-it-qat&lt;br /&gt;
&lt;br /&gt;
Hinweise: Wichtig, sonst labert Sie das Modell voll!&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; respond short and concise&lt;br /&gt;
 Understood&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are an expert in smalltalk programming, especially in Smalltalk/X, visualworks and Squeak.&lt;br /&gt;
 &lt;br /&gt;
 You have come to the right place I have a considerable depth of knowledge regarding Smalltalk...&lt;br /&gt;
Angeber- wir werden sehen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what does the smalltalk expression &amp;quot;self at:4 put:&#039;bla&#039; &amp;quot; mean&lt;br /&gt;
 &lt;br /&gt;
 Sets the character &#039;b&#039; at index 4 of `self` (assuming `self` is a string).&lt;br /&gt;
Falsche Antwort; Smalltalk verwendet 1-basierte Indices, und &#039;bla&#039; ist ein String&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to compute the area of a circle given radius&lt;br /&gt;
 &lt;br /&gt;
 ```smalltalk&lt;br /&gt;
 | radius area |&lt;br /&gt;
 radius := 5.0.&lt;br /&gt;
 area := radius * radius * PI.&lt;br /&gt;
 ^area&lt;br /&gt;
 ```nicht schlecht. &lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; how to extract a substring&lt;br /&gt;
 &lt;br /&gt;
 `substring:startIndexToEndIndex` (inclusive). E.g., `&amp;quot;hello&amp;quot; substring:2 to:4` yields `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
wieder falsch; 1-basierter index, substring:to: möglicherweise in einem anderen Smalltalk vorhanden. Könnte man durchgehen lassen&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; alternative?&lt;br /&gt;
 &lt;br /&gt;
 `copyFrom:to:` (indexes inclusive). `string copyFrom:1 to:3` gives `&amp;quot;ell&amp;quot;`.&lt;br /&gt;
besser, aber immer noch falscher Index&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;hello&#039; copyFrom:2 to:4&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;llo&amp;quot;&lt;br /&gt;
war zu erwarten&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; smalltalk uses 1 based indexing. what is the result&lt;br /&gt;
 &lt;br /&gt;
 Correct. The result of `&#039;hello&#039; copyFrom:2 to:4` is `&amp;quot;llo&amp;quot;`.&lt;br /&gt;
soso. Correct. Dann aber dickköpfig.&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; in smalltalk the first index is 1 the last is the collection&#039;s size. Not as in Python or C.&lt;br /&gt;
 &lt;br /&gt;
 Precisely. 1-based indexing is core to Smalltalk.&lt;br /&gt;
aha, er könnte es wissen; es fehlt ihm aber offensichtlich an Abstraktionsvermögen. Versuchen wir es mit einem Beispiel:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
 &lt;br /&gt;
 You are absolutely right! My apologies. `copyFrom:to:` includes both endpoints, so `&#039;hello&#039; copyFrom:2 to:4`&lt;br /&gt;
results in `&amp;quot;ell&amp;quot;`. Thanks for the correction. I am still under development and learning nuances like this.&lt;br /&gt;
soso, eine Nuance. Mal sehen:&lt;br /&gt;
&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;bcd&amp;quot;&lt;br /&gt;
na also. geht doch.&lt;br /&gt;
&lt;br /&gt;
Neuer Versuch; eine neue Session. Gib ihm Grundwissen, das er nicht im Modell hat.&lt;br /&gt;
 /clear&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; answer short an concise&lt;br /&gt;
 Okay.&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; you are expert in smalltalk programming, especially smalltalk/x, visualworks and pharo&lt;br /&gt;
 Acknowledged. I&#039;m ready to leverage my knowledge of Smalltalk (including Smalltalk/X, VisualWorks, and Pharo) to&lt;br /&gt;
assist you. Ask away!&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; remember: because smalltalk is 1-based indexing, the result of &#039;hello&#039; copyFrom:2 to4 is &#039;ell&#039;&lt;br /&gt;
Understood. I will keep in mind Smalltalk&#039;s 1-based indexing when answering your questions about string&lt;br /&gt;
manipulation and other operations&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; what is the result of &#039;abcde&#039; copyFrom:2 to:4&lt;br /&gt;
 &#039;bcd&#039;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; given Array #(10 20 30 40) what is the result of array at:3&lt;br /&gt;
30&lt;br /&gt;
&lt;br /&gt;
Man muss den Context also mit Wissen füllen, dann kommt durchaus sinnvolles heraus. Wir sind dran, das zu evaluieren damit möglicherweise sogar eine lokale KI (allerdings mit GPU) hilfreich unterstützen kann.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31352</id>
		<title>Common Keyboard Shortcuts/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31352"/>
		<updated>2026-06-04T08:25:50Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tree/List Organisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In general, keyboard shortcuts perform functions which are also available on popup menus of the individual UI components, and these popup menu are usually context/selection menus. This means, that they typically offer operations on the current selected element within that view. In contrast to eg. Mac OSX, the keyboard shortcuts are context sensitive, and depend on the current focus window. This means that the same shortcut may perform different operations depending on which component has the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
All editing functions can be undone via the &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot; (&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;) menu function, in case you pressed the wrong key or inside another component.&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt; key is labelled &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; on some keyboards (and also inside the &amp;lt;code&amp;gt;&amp;quot;keyboard.rc&amp;quot;&amp;lt;/code&amp;gt; file and the settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Navigating ===&lt;br /&gt;
&lt;br /&gt;
Cursor keys navigate character-wise or word-wise (if &amp;lt;kbd&amp;gt;CTRL&amp;lt;/kbd&amp;gt; is pressed)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-CursorRight&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Next Word&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Moves the cursor to the next word.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-CursorLeft&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Previous Word&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Moves the cursor to the previous word.&lt;br /&gt;
&lt;br /&gt;
=== Selecting ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-w&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Select Next Word&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Shift-CursorKey&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Expand the Selection&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== General Editing ===&lt;br /&gt;
&lt;br /&gt;
These shortcuts usually work in any view (i.e. project tree view, diagram- and text editors).&lt;br /&gt;
Specific operations are found below.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-c&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Copy&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;Copies the selection into the clipboard. The object to be copied depends on the context and selection:&amp;lt;br&amp;gt;- in a text editor, the text-selection is copied.&amp;lt;br&amp;gt;- in the diagram editor, the selected element(s) are copied&amp;lt;br&amp;gt;- in the navigation tree, the selected tree items are copied.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-v&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Paste&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Pastes the clipboard object. This is not always possible, and sometimes simply ignored (for example, if a tree-item is copied and tried to be pasted into a text editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-x&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Cut&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes the selection and puts it into the clipboard (for later pasting)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Del&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the next character (after the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the next word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Backspace&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the previous character (before the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the previous word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last operation. This is a multi-undo. This is the same function as performed by the undo toolbar menu button. This button shows a tooltip, which describes what would be undone if pressed. If you are uncertain, what would be undone, place the mouse over this toolbar button (without pressing) and read the tooltip. Undo for complex operations (tree manipulations, imports etc. are performed via a toolbar button, which shows the kind of operation to be undone in its tooltip).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-y&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Redo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last undo operation. Currently, this works only in text editor windows (i.e. be careful in the diagram editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Find&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Opens a dialog to enter a search string and various options for search (pattern-matching search, wrap at end, etc.). In a text editor, a replace string can be entered for search and replace.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F2&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Rename&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the tree or diagram editor, lets you rename the selected element.&amp;lt;br&amp;gt;In a code editor, it renames a variable.&lt;br /&gt;
&lt;br /&gt;
=== Tree/List Organisation ===&lt;br /&gt;
&lt;br /&gt;
The tree interprets certain shortcuts differently than other views.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorDown) - &amp;quot;&#039;&#039;Move Down&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the bottom.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorUp) - &amp;quot;&#039;&#039;Move Up&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the top.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2190;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorLeft) - &amp;quot;&#039;&#039;Move Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item out of its containing (parent) item and places it below the parent in the list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2192;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorRight) - &amp;quot;&#039;&#039;Move In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item into the tree item right above it. I.e. it makes it a child element of the other item.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorDown) - &amp;quot;&#039;&#039;Move to Bottom&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree to the end of the children list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorUp] - &amp;quot;&#039;&#039;Move to Top&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree to the beginning of the children list.&lt;br /&gt;
&lt;br /&gt;
=== Element Creation (Diagram Editor) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-n&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor: opens a dialog to create a new step. The dialog lets you choose the action which is to be instantiated. If a pin is selected, the dialog filters are preset to only show action blocks with correspondingly typed pins.&amp;lt;br&amp;gt;In the scheme editor: adds a new input or output pin, depending on the currently selected pin&#039;s type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-r&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Replace&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose another action which is to replace the selected action.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Graphic&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose an image which is added as annotation (useful to mark areas of the diagram as &amp;quot;Under Construction&amp;quot; or &amp;quot;Attention Here&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-i&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New InputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new input pin - same as clicking on the &amp;quot;&#039;&#039;Add Input Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-o&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New OutputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new output pin - same as clicking on the &amp;quot;&#039;&#039;Add Output Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
More editing functions are found in every text editor&#039;s, lists or diagram&#039;s right-button menu; some of which do have keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
=== Code Editor ===&lt;br /&gt;
&lt;br /&gt;
For a full list, see [[Code_Editor/en#Editor_Functions_and_Keyboard_Shortcuts|&amp;quot;Editor Functions and Keyboard Shortcuts&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Goto Line&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In text editors: to position the cursor to an entered line number. If the entered number has a sign (+/-), the positioning is relative to the current line. In a diagram editor, a graphic annotation is inserted (see below)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Forward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the next occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-b&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Backward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the previous occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Again&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Repeats the last cut or replace operation in a text editor. For example, to replace a string by another string, first select it, type in the new word, then press &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; to search for the next occurrence and replace again. If the previous operation was a &amp;quot;cut&amp;quot; or &amp;quot;delete&amp;quot;, then &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; searches for the next occurrence and deletes that again.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F4&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Comment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, comments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Uncomment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, uncomments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F6&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Toggle Case&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;toggles the selection between titlecase, uppercase and lowercase (press multiple times)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F9&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;remove the left 4 spaces of the selected line range, or the cursor line (if no lines are seleted).&amp;lt;br&amp;gt;Undent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Shift-Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F10&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;add 4 spaces to the left of the selected line range, or the cursor line.&amp;lt;br&amp;gt;Indent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F11&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F12&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-d;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;DoIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This works in code editors for Smalltalk or the builtin JavaScript actions. It takes the currently selected piece of text and immediately executes it as a program. The result is silently discarded (see below for more).&amp;lt;br&amp;gt;If no text is currently selected, the current cursor line is taken as input.&amp;lt;br&amp;gt;See the &amp;quot;[[Smalltalk Syntax Cheat Sheet]]&amp;quot; for a short syntax summary.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-p;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;PrintIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but the result is pasted after the selection. As an example, in a code editor, type &amp;quot;&amp;lt;code&amp;gt;45 degrees sin&amp;lt;/code&amp;gt;&amp;quot; (without the double quotes), select it, and press &amp;lt;kbd&amp;gt;PrintIt&amp;lt;/kbd&amp;gt;. The result will be pasted after the selection. This also works in a workspace/notepad window.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-q;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;InspectIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but an inspector window is opened on the result.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-B;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-B) - &amp;quot;&#039;&#039;BrowseIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but a class browser is opened on the result&#039;s class, showing all operations (methods) which are implemented by this object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-I;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-I) - &amp;quot;&#039;&#039;Implementors&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Extracts a Smalltalk message name (i.e. the name of an operation) and opens a browser on all methods in the system which implement that message.&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-plus) - &amp;quot;&#039;&#039;Zoom In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a larger font; diagrams are magnified&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-minus) - &amp;quot;&#039;&#039;Zoom Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a smaller font; diagrams are shrunk&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-plus) - &amp;quot;&#039;&#039;Zoom In All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-In all components of the expecco window&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-minus) - &amp;quot;&#039;&#039;Zoom Out All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-Out all components of the expecco window.&lt;br /&gt;
&lt;br /&gt;
=== Customizing Keyboard Shortcuts ===&lt;br /&gt;
&lt;br /&gt;
When expecco starts, it looks for a file named &amp;quot;&amp;lt;code&amp;gt;keyboard.rc&amp;lt;/code&amp;gt;&amp;quot; in the &amp;quot;&amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt;&amp;quot; folder (where the expecco executable is installed). All keyboard shortcuts are defined in this script file. To customize the keyboard shortcuts, take the code there as a guide.&lt;br /&gt;
&lt;br /&gt;
These definitions are the default settings; however, individual users may as well change or add personal preferences&lt;br /&gt;
via the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Keyboard&#039;&#039;&amp;quot; dialog.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31351</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31351"/>
		<updated>2026-06-03T20:40:20Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Datenschutz / Datenfluss */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]). Für die Wahrheit dieser Aussage könne wir nicht garantieren und haften.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie sicher sein wollen, daß keine Information Ihr Haus verlässt empfehlen wir eine eigenem geschlossene in-house KI Umgebung, wie sie bei einigen unserer Kunden bereits existiert. Sie dürfen dann selbstverständlich nur die URLs dieser Umgebung konfigurieren. Expecco kommuniziert ausschließlich mit der von Ihnen eingegebenen KI.&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31350</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31350"/>
		<updated>2026-06-03T20:33:11Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tipps für die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31349</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31349"/>
		<updated>2026-06-03T15:51:58Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
&lt;br /&gt;
Subjektive Zusammenfassung: &lt;br /&gt;
* haiku ist viel schneller in der Antwort und kostet ein Zehntel. Mit Sonnet war nach 3-4 Std Arbeit mein Limit erreicht und ich durfte Stunden Pause machen. Mit Haiku kann man durcharbeiten. Aber ich brauche auch mindestens doppelt so viel Zeit um haiku anzuleiten und seine Fehler wieder auszubügeln.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31348</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31348"/>
		<updated>2026-06-03T14:12:55Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* haiku ist weit &amp;quot;fauler&amp;quot;. Z.B hat sonnet automatisch eine Dokumentation bei neuen Aktionen angelegt, und diese auch aktualisiert. Haiku hingegen musste man explizit eine Regel dazu anlegen (z.B. mit &amp;quot;wenn du eine aktion anlegst oder änderst, aktualisiere die dokumentation&amp;quot;)&lt;br /&gt;
* heiku ist dümmer. Regeln die von sonnet angelegt wurden, können von haiku u.U. nicht befolgt werden, weil sonnet weit mehr generalisieren kann.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31347</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31347"/>
		<updated>2026-06-03T12:14:24Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
* auch wenn es so scheint: das &amp;quot;Ding&amp;quot; ist kein Mensch; lassen sie &amp;quot;bitte, danke, oder Begründungen - es sei denn sie dienen der Entscheidung - weg. Tatsächlich erhöhen sie  den Tokenverbrauch u.U.&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31346</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31346"/>
		<updated>2026-06-03T11:17:03Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze Anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben,  nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eine Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann (dieses konkrete Problem wird nicht mehr auftreten aber Sie sehen den Punkt). Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu Beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird. Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31345</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31345"/>
		<updated>2026-06-03T11:12:12Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben, sie sollten nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eie Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie &amp;quot;editiere nicht die files sondern verwende dazu ein tool&amp;quot;, oder &amp;quot;eine expecco aktion und sag mir vorher welche du nimmst&amp;quot;. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann. Da war Sonnet weit intelligenter hat aber auch länger nachgedacht. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot; oder &amp;quot;remember (in my user memory): bla bla&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
* wechseln sie das Modell oder den level, je nach Komplexität der Aufgabe. Aber bedenken Sie dass Wissen von Session zu Session verloren geht, wenn es nicht erinnert wird.Technisch sind Erinnerungen nichts anderes als das Lesen einer Liste der vormaligen remember Anweisungen. Kosten also auch Tokens. Sie könnten also die Erinnerunge auch einfach neu eintippen ;-)&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31344</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31344"/>
		<updated>2026-06-03T11:04:12Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tipps für die Arbeit mit claudeCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
* welche Funktionalität ist in xxx.ets&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben, sie sollten nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eie Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie bitte editiere nciht die source files sondern verwende dazu ein tool. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann. Da war Sonnet weit intelligenter. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31343</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31343"/>
		<updated>2026-06-03T11:01:06Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erfahrungen und Tippsfür die Arbeit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen.&lt;br /&gt;
* kurze anweisungen, je konkreter desto günstiger.&lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben, sie sollten nicht lange selbst suchen. sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&amp;lt;br&amp;gt;(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren, es hat dann selbst alle möglichen Wege gesucht, eie Nachricht abzusetzen, incl. der Erstellung diverser Shell, curl und Python Scripte... obgleich es eigentlich ein Interface dafür gab, das aber einen Fehler hatte).&lt;br /&gt;
* schränken Sie das Modell in seinen Möglichkeiten ein, z.B. sagen sie bitte editiere nciht die source files sondern verwende dazu ein tool. Sonst kann es passieren dass es anfängt ihre ets zu entpacken um darin nach strings zu suchen, obgleich es das eigentlich einfacher über das interface machen kann. Da war Sonnet weit intelligenter. &lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. Zu beginn der nächsten session sagen sie &amp;quot;read your expecco memory&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31342</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31342"/>
		<updated>2026-06-03T10:50:20Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tipps für die Arbeit mit claudeCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
=== Erfahrungen und Tippsfür die Arbeit ===&lt;br /&gt;
&lt;br /&gt;
Sonnet-4 ist gefühlt weit intelligenter als Heiku-4.5,&lt;br /&gt;
aber auch weit teurer. Ihr Budget kann sehr schnell schmelzen mit Sonnet. Insbesondere wenn man auf medium oder high Intelligenzlevel abeitet. Aber Haiku macht auch weit mehr Fehler und man sollte genau hinschauen was er so generiert. Gefühlt war Sonnet selbst im low level besser als Haiku. Aber der Preis...&lt;br /&gt;
&lt;br /&gt;
Folgende konkrete Tipps aus unseren ersten Erfahrungen, diese Liste wird aktualisiert, und kann auch basieren auf unserer eigenen Dummheit. Ist also u.U.mit Vorsicht zu geniessen.&lt;br /&gt;
&lt;br /&gt;
* geben Sie Haiku Hinweise, z.B. schau mal dort, oder nimm das als Beispiel. Sonnet findet selbst viel besser Lösungen. &lt;br /&gt;
* sagen sie beiden sie sollten wenn sie ein Problem haben, sie sollten nicht lange selbst suchen. Sondern nachfragen ob man ihnen einen Tipp geben kann. Wenn Sie das nicht tun, kann es sein dass Sonnet auch eine viertel Stunde nachdenkt und die Dollars schmelzen wie Eis in der Sonne&lt;br /&gt;
(ist mir passiert, als ein Socket Problem in der Kommunikation auftrat, und er nicht erkannte, das die Antworten von mcp falsch waren).&lt;br /&gt;
* wenn sie feststellen, dass es einen Fehler macht, sagen sie (wörtlich) &amp;quot;remember: mach dies nicht, oder um das zu machen tu das.&amp;quot;&lt;br /&gt;
* sie können diese Erinnerungen sowohl in ihrem UserProfile (also im lokalen Filesystem) als auch in ihren expecco Präferenzen halten. Sagen Sie dazu &amp;quot;remember this in in my expecco memory&amp;quot;. Erinnerungen kann man auch löschen &amp;quot;forget to ...&amp;quot;. So können sie Erinnerungen über claude sessions hinweg halten.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31341</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31341"/>
		<updated>2026-06-03T09:29:09Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tipps für die Arbeit mit claudeCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum Lesen der Jahresumsätze eines Jahres aus der Datenbank&amp;quot;&lt;br /&gt;
* extrahiere aus dem xml Dokument alle budget Einträge und liefere die Summe&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31340</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31340"/>
		<updated>2026-06-02T12:04:13Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tipps für die Arbeit mit claudeCode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
Aktuell sind wir am trainieren, so dass claude z.B. selbst entscheidet ob es besser ist, eine fehlende Aktion als  Diagramm oder als elementare zu definieren. Es ist in der Lage, die Funktionen des unterliegenden Frameworks zu sehen und auch komplexe Aufgaben zu erledigen:&lt;br /&gt;
* &amp;quot;aktion zum lesen der jahresumsätze eines jahres aus der datenbank&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31339</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31339"/>
		<updated>2026-06-02T10:24:46Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Tipps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Tipps für die Arbeit mit claudeCode ==&lt;br /&gt;
Wenn Sie claudeCode verwenden, stehen ihnen noch weit mehr Funktionen zur Verfügung: sie können zum Beispiel im claudeCode Terminal eingeben: &lt;br /&gt;
* &amp;quot;mach mir eine neue Suite in einem neuen Fenster&amp;quot;,&lt;br /&gt;
* &amp;quot;Mache eine Aktion zur Berechnung des Umfangs eines Kreises bei gegebenen Radius&amp;quot;, &lt;br /&gt;
* &amp;quot;Erstelle eine neue suite mit einem Testfall der folgendes macht: &lt;br /&gt;
** 1) webbrowser auf &amp;quot;www.exept.de&amp;quot; öffnen. &lt;br /&gt;
** 2) auf das logo oben links klicken. &lt;br /&gt;
** 3) webbrowser schliessen.&lt;br /&gt;
&lt;br /&gt;
Claude wurde von uns in die Lage versetzt, selbst nach passenden Bibliotheken zu suchen, diese zu importieren, Aktionen zu Generieren und den Testplan anzulegen.&lt;br /&gt;
&lt;br /&gt;
Tatsächlich auch, den Test gleich durchzuführen und das Resultat zu analysieren.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31338</id>
		<title>Common Keyboard Shortcuts/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31338"/>
		<updated>2026-05-30T07:58:51Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* General Editing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In general, keyboard shortcuts perform functions which are also available on popup menus of the individual UI components, and these popup menu are usually context/selection menus. This means, that they typically offer operations on the current selected element within that view. In contrast to eg. Mac OSX, the keyboard shortcuts are context sensitive, and depend on the current focus window. This means that the same shortcut may perform different operations depending on which component has the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
All editing functions can be undone via the &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot; (&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;) menu function, in case you pressed the wrong key or inside another component.&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt; key is labelled &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; on some keyboards (and also inside the &amp;lt;code&amp;gt;&amp;quot;keyboard.rc&amp;quot;&amp;lt;/code&amp;gt; file and the settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== Navigating ===&lt;br /&gt;
&lt;br /&gt;
Cursor keys navigate character-wise or word-wise (if &amp;lt;kbd&amp;gt;CTRL&amp;lt;/kbd&amp;gt; is pressed)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-CursorRight&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Next Word&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Moves the cursor to the next word.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-CursorLeft&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Previous Word&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Moves the cursor to the previous word.&lt;br /&gt;
&lt;br /&gt;
=== Selecting ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-w&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Select Next Word&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Shift-CursorKey&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Expand the Selection&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== General Editing ===&lt;br /&gt;
&lt;br /&gt;
These shortcuts usually work in any view (i.e. project tree view, diagram- and text editors).&lt;br /&gt;
Specific operations are found below.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-c&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Copy&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;Copies the selection into the clipboard. The object to be copied depends on the context and selection:&amp;lt;br&amp;gt;- in a text editor, the text-selection is copied.&amp;lt;br&amp;gt;- in the diagram editor, the selected element(s) are copied&amp;lt;br&amp;gt;- in the navigation tree, the selected tree items are copied.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-v&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Paste&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Pastes the clipboard object. This is not always possible, and sometimes simply ignored (for example, if a tree-item is copied and tried to be pasted into a text editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-x&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Cut&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes the selection and puts it into the clipboard (for later pasting)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Del&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the next character (after the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the next word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Backspace&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the previous character (before the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the previous word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last operation. This is a multi-undo. This is the same function as performed by the undo toolbar menu button. This button shows a tooltip, which describes what would be undone if pressed. If you are uncertain, what would be undone, place the mouse over this toolbar button (without pressing) and read the tooltip. Undo for complex operations (tree manipulations, imports etc. are performed via a toolbar button, which shows the kind of operation to be undone in its tooltip).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-y&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Redo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last undo operation. Currently, this works only in text editor windows (i.e. be careful in the diagram editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Find&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Opens a dialog to enter a search string and various options for search (pattern-matching search, wrap at end, etc.). In a text editor, a replace string can be entered for search and replace.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F2&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Rename&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the tree or diagram editor, lets you rename the selected element.&amp;lt;br&amp;gt;In a code editor, it renames a variable.&lt;br /&gt;
&lt;br /&gt;
=== Tree/List Organisation ===&lt;br /&gt;
&lt;br /&gt;
The tree interpretes certain shortcuts differently than other views.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorDown) - &amp;quot;&#039;&#039;Move Down&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the bottom.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorUp) - &amp;quot;&#039;&#039;Move Up&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the top.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2190;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorLeft) - &amp;quot;&#039;&#039;Move Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item out of its containing (parent) item and places it below the parent in the list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2192;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorRight) - &amp;quot;&#039;&#039;Move In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item into the tree item right above it. I.e. it makes it a child element of the other item.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorDown) - &amp;quot;&#039;&#039;Move to Bottom&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree to the end of the children list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorUp] - &amp;quot;&#039;&#039;Move to Top&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree to the beginning of the children list.&lt;br /&gt;
&lt;br /&gt;
=== Element Creation (Diagram Editor) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-n&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor: opens a dialog to create a new step. The dialog lets you choose the action which is to be instantiated. If a pin is selected, the dialog filters are preset to only show action blocks with correspondingly typed pins.&amp;lt;br&amp;gt;In the scheme editor: adds a new input or output pin, depending on the currently selected pin&#039;s type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-r&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Replace&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose another action which is to replace the selected action.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Graphic&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose an image which is added as annotation (useful to mark areas of the diagram as &amp;quot;Under Construction&amp;quot; or &amp;quot;Attention Here&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-i&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New InputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new input pin - same as clicking on the &amp;quot;&#039;&#039;Add Input Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-o&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New OutputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new output pin - same as clicking on the &amp;quot;&#039;&#039;Add Output Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
More editing functions are found in every text editor&#039;s, lists or diagram&#039;s right-button menu; some of which do have keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
=== Code Editor ===&lt;br /&gt;
&lt;br /&gt;
For a full list, see [[Code_Editor/en#Editor_Functions_and_Keyboard_Shortcuts|&amp;quot;Editor Functions and Keyboard Shortcuts&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Goto Line&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In text editors: to position the cursor to an entered line number. If the entered number has a sign (+/-), the positioning is relative to the current line. In a diagram editor, a graphic annotation is inserted (see below)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Forward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the next occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-b&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Backward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the previous occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Again&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Repeats the last cut or replace operation in a text editor. For example, to replace a string by another string, first select it, type in the new word, then press &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; to search for the next occurrence and replace again. If the previous operation was a &amp;quot;cut&amp;quot; or &amp;quot;delete&amp;quot;, then &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; searches for the next occurrence and deletes that again.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F4&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Comment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, comments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Uncomment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, uncomments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F6&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Toggle Case&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;toggles the selection between titlecase, uppercase and lowercase (press multiple times)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F9&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;remove the left 4 spaces of the selected line range, or the cursor line (if no lines are seleted).&amp;lt;br&amp;gt;Undent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Shift-Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F10&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;add 4 spaces to the left of the selected line range, or the cursor line.&amp;lt;br&amp;gt;Indent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F11&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F12&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-d;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;DoIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This works in code editors for Smalltalk or the builtin JavaScript actions. It takes the currently selected piece of text and immediately executes it as a program. The result is silently discarded (see below for more).&amp;lt;br&amp;gt;If no text is currently selected, the current cursor line is taken as input.&amp;lt;br&amp;gt;See the &amp;quot;[[Smalltalk Syntax Cheat Sheet]]&amp;quot; for a short syntax summary.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-p;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;PrintIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but the result is pasted after the selection. As an example, in a code editor, type &amp;quot;&amp;lt;code&amp;gt;45 degrees sin&amp;lt;/code&amp;gt;&amp;quot; (without the double quotes), select it, and press &amp;lt;kbd&amp;gt;PrintIt&amp;lt;/kbd&amp;gt;. The result will be pasted after the selection. This also works in a workspace/notepad window.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-q;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;InspectIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but an inspector window is opened on the result.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-B;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-B) - &amp;quot;&#039;&#039;BrowseIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but a class browser is opened on the result&#039;s class, showing all operations (methods) which are implemented by this object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-I;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-I) - &amp;quot;&#039;&#039;Implementors&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Extracts a Smalltalk message name (i.e. the name of an operation) and opens a browser on all methods in the system which implement that message.&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-plus) - &amp;quot;&#039;&#039;Zoom In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a larger font; diagrams are magnified&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-minus) - &amp;quot;&#039;&#039;Zoom Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a smaller font; diagrams are shrunk&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-plus) - &amp;quot;&#039;&#039;Zoom In All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-In all components of the expecco window&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-minus) - &amp;quot;&#039;&#039;Zoom Out All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-Out all components of the expecco window.&lt;br /&gt;
&lt;br /&gt;
=== Customizing Keyboard Shortcuts ===&lt;br /&gt;
&lt;br /&gt;
When expecco starts, it looks for a file named &amp;quot;&amp;lt;code&amp;gt;keyboard.rc&amp;lt;/code&amp;gt;&amp;quot; in the &amp;quot;&amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt;&amp;quot; folder (where the expecco executable is installed). All keyboard shortcuts are defined in this script file. To customize the keyboard shortcuts, take the code there as a guide.&lt;br /&gt;
&lt;br /&gt;
These definitions are the default settings; however, individual users may as well change or add personal preferences&lt;br /&gt;
via the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Keyboard&#039;&#039;&amp;quot; dialog.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31337</id>
		<title>Common Keyboard Shortcuts/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31337"/>
		<updated>2026-05-30T07:50:54Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* General Editing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In general, keyboard shortcuts perform functions which are also available on popup menus of the individual UI components, and these popup menu are usually context/selection menus. This means, that they typically offer operations on the current selected element within that view. In contrast to eg. Mac OSX, the keyboard shortcuts are context sensitive, and depend on the current focus window. This means that the same shortcut may perform different operations depending on which component has the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
All editing functions can be undone via the &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot; (&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;) menu function, in case you pressed the wrong key or inside another component.&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt; key is labelled &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; on some keyboards (and also inside the &amp;lt;code&amp;gt;&amp;quot;keyboard.rc&amp;quot;&amp;lt;/code&amp;gt; file and the settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== General Editing ===&lt;br /&gt;
&lt;br /&gt;
These shortcuts usually work in any view (i.e. project tree view, diagram- and text editors).&lt;br /&gt;
Specific operations are found below.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-c&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Copy&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;Copies the selection into the clipboard. The object to be copied depends on the context and selection:&amp;lt;br&amp;gt;- in a text editor, the text-selection is copied.&amp;lt;br&amp;gt;- in the diagram editor, the selected element(s) are copied&amp;lt;br&amp;gt;- in the navigation tree, the selected tree items are copied.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-v&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Paste&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Pastes the clipboard object. This is not always possible, and sometimes simply ignored (for example, if a tree-item is copied and tried to be pasted into a text editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-x&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Cut&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes the selection and puts it into the clipboard (for later pasting)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Del&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the next character (after the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the next word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Backspace&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the previous character (before the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the previous word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last operation. This is a multi-undo. This is the same function as performed by the undo toolbar menu button. This button shows a tooltip, which describes what would be undone if pressed. If you are uncertain, what would be undone, place the mouse over this toolbar button (without pressing) and read the tooltip. Undo for complex operations (tree manipulations, imports etc. are performed via a toolbar button, which shows the kind of operation to be undone in its tooltip).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-y&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Redo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last undo operation. Currently, this works only in text editor windows (i.e. be careful in the diagram editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Find&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Opens a dialog to enter a search string and various options for search (pattern-matching search, wrap at end, etc.). In a text editor, a replace string can be entered for search and replace.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F2&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Rename&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the tree or diagram editor, lets you rename the selected element.&amp;lt;br&amp;gt;In a code editor, it renames a variable.&lt;br /&gt;
&lt;br /&gt;
=== Tree/List Organisation ===&lt;br /&gt;
&lt;br /&gt;
The tree interpretes certain shortcuts differently than other views.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorDown) - &amp;quot;&#039;&#039;Move Down&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the bottom.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorUp) - &amp;quot;&#039;&#039;Move Up&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the top.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2190;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorLeft) - &amp;quot;&#039;&#039;Move Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item out of its containing (parent) item and places it below the parent in the list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2192;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorRight) - &amp;quot;&#039;&#039;Move In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item into the tree item right above it. I.e. it makes it a child element of the other item.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorDown) - &amp;quot;&#039;&#039;Move to Bottom&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree to the end of the children list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorUp] - &amp;quot;&#039;&#039;Move to Top&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree to the beginning of the children list.&lt;br /&gt;
&lt;br /&gt;
=== Element Creation (Diagram Editor) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-n&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor: opens a dialog to create a new step. The dialog lets you choose the action which is to be instantiated. If a pin is selected, the dialog filters are preset to only show action blocks with correspondingly typed pins.&amp;lt;br&amp;gt;In the scheme editor: adds a new input or output pin, depending on the currently selected pin&#039;s type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-r&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Replace&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose another action which is to replace the selected action.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Graphic&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose an image which is added as annotation (useful to mark areas of the diagram as &amp;quot;Under Construction&amp;quot; or &amp;quot;Attention Here&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-i&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New InputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new input pin - same as clicking on the &amp;quot;&#039;&#039;Add Input Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-o&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New OutputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new output pin - same as clicking on the &amp;quot;&#039;&#039;Add Output Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
More editing functions are found in every text editor&#039;s, lists or diagram&#039;s right-button menu; some of which do have keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
=== Code Editor ===&lt;br /&gt;
&lt;br /&gt;
For a full list, see [[Code_Editor/en#Editor_Functions_and_Keyboard_Shortcuts|&amp;quot;Editor Functions and Keyboard Shortcuts&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Goto Line&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In text editors: to position the cursor to an entered line number. If the entered number has a sign (+/-), the positioning is relative to the current line. In a diagram editor, a graphic annotation is inserted (see below)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Forward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the next occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-b&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Backward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the previous occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Again&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Repeats the last cut or replace operation in a text editor. For example, to replace a string by another string, first select it, type in the new word, then press &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; to search for the next occurrence and replace again. If the previous operation was a &amp;quot;cut&amp;quot; or &amp;quot;delete&amp;quot;, then &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; searches for the next occurrence and deletes that again.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F4&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Comment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, comments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Uncomment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, uncomments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F6&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Toggle Case&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;toggles the selection between titlecase, uppercase and lowercase (press multiple times)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F9&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;remove the left 4 spaces of the selected line range, or the cursor line (if no lines are seleted).&amp;lt;br&amp;gt;Undent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Shift-Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F10&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;add 4 spaces to the left of the selected line range, or the cursor line.&amp;lt;br&amp;gt;Indent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F11&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F12&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-d;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;DoIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This works in code editors for Smalltalk or the builtin JavaScript actions. It takes the currently selected piece of text and immediately executes it as a program. The result is silently discarded (see below for more).&amp;lt;br&amp;gt;If no text is currently selected, the current cursor line is taken as input.&amp;lt;br&amp;gt;See the &amp;quot;[[Smalltalk Syntax Cheat Sheet]]&amp;quot; for a short syntax summary.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-p;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;PrintIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but the result is pasted after the selection. As an example, in a code editor, type &amp;quot;&amp;lt;code&amp;gt;45 degrees sin&amp;lt;/code&amp;gt;&amp;quot; (without the double quotes), select it, and press &amp;lt;kbd&amp;gt;PrintIt&amp;lt;/kbd&amp;gt;. The result will be pasted after the selection. This also works in a workspace/notepad window.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-q;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;InspectIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but an inspector window is opened on the result.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-B;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-B) - &amp;quot;&#039;&#039;BrowseIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but a class browser is opened on the result&#039;s class, showing all operations (methods) which are implemented by this object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-I;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-I) - &amp;quot;&#039;&#039;Implementors&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Extracts a Smalltalk message name (i.e. the name of an operation) and opens a browser on all methods in the system which implement that message.&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-plus) - &amp;quot;&#039;&#039;Zoom In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a larger font; diagrams are magnified&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-minus) - &amp;quot;&#039;&#039;Zoom Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a smaller font; diagrams are shrunk&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-plus) - &amp;quot;&#039;&#039;Zoom In All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-In all components of the expecco window&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-minus) - &amp;quot;&#039;&#039;Zoom Out All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-Out all components of the expecco window.&lt;br /&gt;
&lt;br /&gt;
=== Customizing Keyboard Shortcuts ===&lt;br /&gt;
&lt;br /&gt;
When expecco starts, it looks for a file named &amp;quot;&amp;lt;code&amp;gt;keyboard.rc&amp;lt;/code&amp;gt;&amp;quot; in the &amp;quot;&amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt;&amp;quot; folder (where the expecco executable is installed). All keyboard shortcuts are defined in this script file. To customize the keyboard shortcuts, take the code there as a guide.&lt;br /&gt;
&lt;br /&gt;
These definitions are the default settings; however, individual users may as well change or add personal preferences&lt;br /&gt;
via the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Keyboard&#039;&#039;&amp;quot; dialog.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31336</id>
		<title>Common Keyboard Shortcuts/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Common_Keyboard_Shortcuts/en&amp;diff=31336"/>
		<updated>2026-05-30T07:49:07Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* General Editing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In general, keyboard shortcuts perform functions which are also available on popup menus of the individual UI components, and these popup menu are usually context/selection menus. This means, that they typically offer operations on the current selected element within that view. In contrast to eg. Mac OSX, the keyboard shortcuts are context sensitive, and depend on the current focus window. This means that the same shortcut may perform different operations depending on which component has the keyboard focus.&lt;br /&gt;
&lt;br /&gt;
All editing functions can be undone via the &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot; (&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;) menu function, in case you pressed the wrong key or inside another component.&lt;br /&gt;
&lt;br /&gt;
Notice that the &amp;lt;kbd&amp;gt;Alt&amp;lt;/kbd&amp;gt; key is labelled &amp;lt;kbd&amp;gt;Cmd&amp;lt;/kbd&amp;gt; on some keyboards (and also inside the &amp;lt;code&amp;gt;&amp;quot;keyboard.rc&amp;quot;&amp;lt;/code&amp;gt; file and the settings dialog.&lt;br /&gt;
&lt;br /&gt;
=== General Editing ===&lt;br /&gt;
&lt;br /&gt;
These shortcuts usually work in any view (i.e. project tree view, diagram- and text editors).&lt;br /&gt;
Specific operations are found below.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-c&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Copy&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;Copies the selection into the clipboard. The object to be copied depends on the context and selection:&amp;lt;br&amp;gt;- in a text editor, the text-selection is copied.&amp;lt;br&amp;gt;- in the diagram editor, the selected element(s) are copied&amp;lt;br&amp;gt;- in the navigation tree, the selected tree items are copied.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-v&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Paste&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Pastes the clipboard object. This is not always possible, and sometimes simply ignored (for example, if a tree-item is copied and tried to be pasted into a text editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-x&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Cut&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes the selection and puts it into the clipboard (for later pasting)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Del&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the next character (after the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the next word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Backspace&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Delete&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Deletes but does NOT put the deleted object into the clipboard.&amp;lt;br&amp;gt;In a text editor, the selected text is deleted, or if nothing is selected, the previous character (before the cursor) is deleted. With &amp;lt;kbd&amp;gt;CTRL&amp;lt;/KBD&amp;gt;, the brevious word is deleted.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-z&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last operation. This is a multi-undo. This is the same function as performed by the undo toolbar menu button. This button shows a tooltip, which describes what would be undone if pressed. If you are uncertain, what would be undone, place the mouse over this toolbar button (without pressing) and read the tooltip. Undo for complex operations (tree manipulations, imports etc. are performed via a toolbar button, which shows the kind of operation to be undone in its tooltip).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-y&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Redo&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Undoes the last undo operation. Currently, this works only in text editor windows (i.e. be careful in the diagram editor).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Find&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Opens a dialog to enter a search string and various options for search (pattern-matching search, wrap at end, etc.). In a text editor, a replace string can be entered for search and replace.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F2&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Rename&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the tree or diagram editor, lets you rename the selected element.&amp;lt;br&amp;gt;In a code editor, it renames a variable.&lt;br /&gt;
&lt;br /&gt;
=== Tree/List Organisation ===&lt;br /&gt;
&lt;br /&gt;
The tree interpretes certain shortcuts differently than other views.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorDown) - &amp;quot;&#039;&#039;Move Down&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the bottom.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorUp) - &amp;quot;&#039;&#039;Move Up&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree or a testplan&#039;s list of test cases. In a diagram editor, if a step&#039;s pin is selected in the diagram editor, this is moved towards the top.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2190;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorLeft) - &amp;quot;&#039;&#039;Move Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item out of its containing (parent) item and places it below the parent in the list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-&amp;amp;#x2192;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-CursorRight) - &amp;quot;&#039;&#039;Move In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the navigation tree, this moves the selected item into the tree item right above it. I.e. it makes it a child element of the other item.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2193;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorDown) - &amp;quot;&#039;&#039;Move to Bottom&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item(s) down in the navigation tree to the end of the children list.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-&amp;amp;#x2191;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-CursorUp] - &amp;quot;&#039;&#039;Move to Top&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This moves the selected item up in the navigation tree to the beginning of the children list.&lt;br /&gt;
&lt;br /&gt;
=== Element Creation (Diagram Editor) ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-n&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New Step&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor: opens a dialog to create a new step. The dialog lets you choose the action which is to be instantiated. If a pin is selected, the dialog filters are preset to only show action blocks with correspondingly typed pins.&amp;lt;br&amp;gt;In the scheme editor: adds a new input or output pin, depending on the currently selected pin&#039;s type.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-r&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Replace&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose another action which is to replace the selected action.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Graphic&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In the diagram editor, this opens a dialog to choose an image which is added as annotation (useful to mark areas of the diagram as &amp;quot;Under Construction&amp;quot; or &amp;quot;Attention Here&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-i&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New InputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new input pin - same as clicking on the &amp;quot;&#039;&#039;Add Input Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-o&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;New OutputPin&#039;&#039;&amp;quot;.&amp;lt;br&amp;gt;In the scheme editor, this adds a new output pin - same as clicking on the &amp;quot;&#039;&#039;Add Output Pin&#039;&#039;&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
More editing functions are found in every text editor&#039;s, lists or diagram&#039;s right-button menu; some of which do have keyboard shortcuts.&lt;br /&gt;
&lt;br /&gt;
=== Code Editor ===&lt;br /&gt;
&lt;br /&gt;
For a full list, see [[Code_Editor/en#Editor_Functions_and_Keyboard_Shortcuts|&amp;quot;Editor Functions and Keyboard Shortcuts&amp;quot;]].&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Ctrl-g&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Goto Line&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In text editors: to position the cursor to an entered line number. If the entered number has a sign (+/-), the positioning is relative to the current line. In a diagram editor, a graphic annotation is inserted (see below)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-f&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Forward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the next occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;Alt-b&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Backward Search&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Searches for the previous occurrence of the previous search string.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Again&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Repeats the last cut or replace operation in a text editor. For example, to replace a string by another string, first select it, type in the new word, then press &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; to search for the next occurrence and replace again. If the previous operation was a &amp;quot;cut&amp;quot; or &amp;quot;delete&amp;quot;, then &amp;lt;kbd&amp;gt;F8&amp;lt;/kbd&amp;gt; searches for the next occurrence and deletes that again.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F4&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Comment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, comments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F5&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Uncomment&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;In an elementary code editor, uncomments the selection or the current cursor line&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F6&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Toggle Case&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;toggles the selection between titlecase, uppercase and lowercase (press multiple times)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F9&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;remove the left 4 spaces of the selected line range, or the cursor line (if no lines are seleted).&amp;lt;br&amp;gt;Undent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Shift-Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F10&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 4&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;add 4 spaces to the left of the selected line range, or the cursor line.&amp;lt;br&amp;gt;Indent is also possible by selecting a number of lines and pressing &amp;lt;kbd&amp;gt;Tab&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F11&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Undent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;span style=&amp;quot;box-shadow: 1px 1px 2px rgba(0,0,0,0.3);&amp;quot;&amp;gt;&amp;lt;kbd&amp;gt;F12&amp;lt;/kbd&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;Indent by 1&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-d;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;DoIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;This works in code editors for Smalltalk or the builtin JavaScript actions. It takes the currently selected piece of text and immediately executes it as a program. The result is silently discarded (see below for more).&amp;lt;br&amp;gt;If no text is currently selected, the current cursor line is taken as input.&amp;lt;br&amp;gt;See the &amp;quot;[[Smalltalk Syntax Cheat Sheet]]&amp;quot; for a short syntax summary.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-p;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;PrintIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but the result is pasted after the selection. As an example, in a code editor, type &amp;quot;&amp;lt;code&amp;gt;45 degrees sin&amp;lt;/code&amp;gt;&amp;quot; (without the double quotes), select it, and press &amp;lt;kbd&amp;gt;PrintIt&amp;lt;/kbd&amp;gt;. The result will be pasted after the selection. This also works in a workspace/notepad window.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-q;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; - &amp;quot;&#039;&#039;InspectIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but an inspector window is opened on the result.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-B;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-B) - &amp;quot;&#039;&#039;BrowseIt&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Simular to the above, but a class browser is opened on the result&#039;s class, showing all operations (methods) which are implemented by this object.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-I;&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (Ctrl-Shift-I) - &amp;quot;&#039;&#039;Implementors&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Extracts a Smalltalk message name (i.e. the name of an operation) and opens a browser on all methods in the system which implement that message.&lt;br /&gt;
&lt;br /&gt;
=== Other ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-plus) - &amp;quot;&#039;&#039;Zoom In&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a larger font; diagrams are magnified&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-minus) - &amp;quot;&#039;&#039;Zoom Out&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Text in the current focus view is shown in a smaller font; diagrams are shrunk&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift-+&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-plus) - &amp;quot;&#039;&#039;Zoom In All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-In all components of the expecco window&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;kbd&amp;gt;Ctrl-Shift--&amp;lt;/kbd&amp;gt;&#039;&#039;&#039; (= Ctrl-Shift-minus) - &amp;quot;&#039;&#039;Zoom Out All&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;Zoom-Out all components of the expecco window.&lt;br /&gt;
&lt;br /&gt;
=== Customizing Keyboard Shortcuts ===&lt;br /&gt;
&lt;br /&gt;
When expecco starts, it looks for a file named &amp;quot;&amp;lt;code&amp;gt;keyboard.rc&amp;lt;/code&amp;gt;&amp;quot; in the &amp;quot;&amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt;&amp;quot; folder (where the expecco executable is installed). All keyboard shortcuts are defined in this script file. To customize the keyboard shortcuts, take the code there as a guide.&lt;br /&gt;
&lt;br /&gt;
These definitions are the default settings; however, individual users may as well change or add personal preferences&lt;br /&gt;
via the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Keyboard&#039;&#039;&amp;quot; dialog.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31334</id>
		<title>Expecco Overview/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31334"/>
		<updated>2026-05-27T22:56:59Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* What Expecco is Not */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco + expecco ALM = AIDYMO ==&lt;br /&gt;
expecco is the component within the AIDYMO tool suite that is responsible for the development and execution of automation tasks and tests. expecco is a client-side application that runs on the user&#039;s development system or as a &amp;quot;&#039;&#039;test execution slave&#039;&#039;&amp;quot; in a server farm (possibly virtual) or in a Docker container.&lt;br /&gt;
&lt;br /&gt;
expecco ALM is a server application with a web-browser interface and is responsible for the distribution of automation tasks among test slaves in a server farm. It cares for the reservation of test resources, avoids usage conflicts, for archival and revisioning of test suites, log files and test results, monitoring the project, notification of stakeholders etc. Expecco ALM will automatically distribute task among its available expecco &amp;quot;slaves&amp;quot;, downloads suites to them, monitors progress and uploads results.  &lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM can be ordered and used as separate products or used together for a total automated system. However, as a team, these two provide a fully automated execution and quality infrastructure and are available  together as AIDYMO.&lt;br /&gt;
&lt;br /&gt;
== expecco Base System (platform) ==&lt;br /&gt;
expecco is a modular system, consisting of a basic platform and extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) that provide domain specific functions and interfaces.&lt;br /&gt;
&lt;br /&gt;
The basic platform deals with:&lt;br /&gt;
* loading and saving of test suites&lt;br /&gt;
* creation, editing &amp;amp; maintenance of a test suite&lt;br /&gt;
* execution&lt;br /&gt;
* test development with single step, breakpoints and execution of partial sequences&lt;br /&gt;
* test development with &amp;quot;live changes, while the system executes&amp;quot; (i.e. hotswap of code, short turn around times)&lt;br /&gt;
* debugging both on high (diagram-) level and low (script/code-) level&lt;br /&gt;
* seamless multi-language support for Java, Node.JS, Python, C/C++ and other languages&lt;br /&gt;
* monitoring the execution, collecting execution traces and logs&lt;br /&gt;
* collecting all data flows, message packages, intermediate results for later inspection&lt;br /&gt;
* reporting, generating human- and machine readable reports in various formats.&lt;br /&gt;
* interface to expecco ALM (up/download of suites, reports and logs)&lt;br /&gt;
&lt;br /&gt;
Execution of a suite can be both under human supervision, or completely standalone and automated, without human interaction. The first mode is typically used during test development, the later when the test suite goes into production.&lt;br /&gt;
&lt;br /&gt;
Automated unsupervised execution can be controlled by command line arguments or by RPC calls via SOAP or REST. Thus, test execution can be triggered by a cron job (Unix), scheduled tasks (Windows), Jenkins or any other program.&lt;br /&gt;
&lt;br /&gt;
The basic platform contains: &lt;br /&gt;
* expecco IDE&lt;br /&gt;
* libraries (standard library, ODBC, XML and others)&lt;br /&gt;
* Webtest: Browser automation (Selenium Webdriver, HTML5, Smart GWT,etc.)&lt;br /&gt;
* manual tests (user guided test sequences)&lt;br /&gt;
* ports: serial/USB/parallel&lt;br /&gt;
* interfaces (DLL-calls, CSV, etc.)&lt;br /&gt;
* webservices (REST, SOAP, RPC)&lt;br /&gt;
* JavaBridge (to inject and/or execute Java code)&lt;br /&gt;
* .NETBridge (to inject and/or execute DotNET code)&lt;br /&gt;
* NodeJS Bridge (starting with v19.1) (to execute Node/Javascript code)&lt;br /&gt;
* Python Bridge (v19.2) (to execute Python and Jython code)&lt;br /&gt;
* C Bridge (v22.1) (to execute C/C++ code)&lt;br /&gt;
* automatic reports&lt;br /&gt;
* remote control (v23.1) (to control/monitor via browser, Android or IOS)&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
Extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) are available to test various UI-technologies, hard- and software interfaces, protocols and document formats.&lt;br /&gt;
For example:&lt;br /&gt;
* Mobile Testing Plugin for iPhone, Android, Windows CE, Windows-Phone Apps&lt;br /&gt;
* GUI Test &amp;amp; Automation for Java-Swing, SWT and other UI frameworks&lt;br /&gt;
* GUI Test &amp;amp; Automation for Windows Applications (using UIAutomation2)&lt;br /&gt;
* GUI Test for Qt and other C/C++ based UI frameworks&lt;br /&gt;
* GUI Test of VisualWorks applications&lt;br /&gt;
* GUI Test for VNC connections&lt;br /&gt;
* Interface to CAN bus systems (automotive)&lt;br /&gt;
* Interface to SomeIP brokers/clients (automotive)&lt;br /&gt;
* Interface to EDIFACT and SWIFT systems (B2B, finance)&lt;br /&gt;
* Interface to MQTT and OPC systems (manufacturing, IoT, automotive)&lt;br /&gt;
* Integration and execution of functional mockup units (FMU)&lt;br /&gt;
* Import of test specifications (eg. from Excel- or Word documents)&lt;br /&gt;
* Interfaces to specific lab equipment (telecom, automotive)&lt;br /&gt;
&lt;br /&gt;
Plugins typically consist of additional dll- and block libraries that provide the domain specific functions as ready-to-use building blocks. These are inserted into test sequences via drag &amp;amp; drop. The GUI plugins include recording functions, so that user sessions are immediately available as an executable activity diagram.&lt;br /&gt;
&lt;br /&gt;
Other plugins provide integration into the existing QM infrastructure:&lt;br /&gt;
* Polarion Plugin to automate test execution under the Polarion ALM system&lt;br /&gt;
* Quality Center Plugin to interface with HP-QC&lt;br /&gt;
* Jira Plugin, to create issues in a Jira system&lt;br /&gt;
* expecco ALM plugin to interface with our own QM/Test center&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM are immediately available for Windows, Linux based systems in both 32bit and 64bit versions. A macOS version (64bit only) is in beta testing stage and will be available soon (currently upon request). Versions for Solaris and other Unix-based systems are available upon request.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
expecco licenses are available as single user (node-lock or dongle), floating user (using a license manager) or company licenses. expecco can be used in isolated environments without access to a company network or the internet (using single-user or detached license server licenses). Please contact eXept for pricing and conditions.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
In principle, expecco is a &amp;quot;black box&amp;quot; test system, which does not expect or require any instrumentation of the tested system ([[Glossary/en#SUT_.28System_Under_Test.29|SUT = &amp;quot;System Under Test&amp;quot;]]) (i.e. it is not necessary to extend the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] with special code or link special libraries to it).&lt;br /&gt;
However, it allows &amp;quot;code injection&amp;quot; for Java, .NET and Python applications, thus &amp;quot;grey box&amp;quot; and &amp;quot;white box&amp;quot; tests are also possible.&lt;br /&gt;
&lt;br /&gt;
In expecco, test scenarios can be formulated on a high level of abstraction as (activity) diagrams, as &amp;quot;keyword-driven&amp;quot; test sequences or as textual scripts in various programming languages. Scripts can be executed in expecco itself as well as in the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] or other machines (e.g. to stimulate the SUT or to generate load).&lt;br /&gt;
&lt;br /&gt;
The following rough architecture picture gives an overview (not all available plugins are included):&lt;br /&gt;
&lt;br /&gt;
[[Datei:expeccoArchitecture1.png|1000px|thumb|left|expecco architecture (not all plugins shown)]]&lt;br /&gt;
&lt;br /&gt;
(or as PDF: [[Datei:expeccoArchitecture1.pdf]])&lt;br /&gt;
&lt;br /&gt;
== Concept ==&lt;br /&gt;
The basic philosophy of Expecco is that test procedures can be created, maintained and executed by developers and programmers as well as by domain experts and analysts.&lt;br /&gt;
without the need for special programming knowledge.&lt;br /&gt;
However, there must be no restrictions, and an experienced user has all the means at his disposal to create his own code, scripts and advanced functions.&lt;br /&gt;
&lt;br /&gt;
In order to meet both requirements, processes in Expecco can be defined both as activity diagrams (&amp;quot;boxes and arrows&amp;quot;) and as script code in various programming languages.&lt;br /&gt;
This enables a &amp;quot;&#039;&#039;Best of both worlds&#039;&#039;&amp;quot; approach: on the one hand, non-programmers can connect existing action modules to complex scenarios at a high level of abstraction using &amp;quot;&#039;&#039;Drag &amp;amp; Drop&#039;&#039;&amp;quot; or recording of GUI actions,&lt;br /&gt;
on the other hand, it is possible to create missing function modules as script code and make them available as action modules for other actions. Where &amp;quot;script code&amp;quot; stands for JavaScript, Python, Java, Shell/Batch up to C/C++. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Hardcore&amp;quot; developers can of course also define the entire test procedure as a script/program code - however, this may result in the comprehensibility and modular usability being more or less lost for non-programmers. We therefore generally advise only using program code to encapsulate connections to existing frameworks and formulating the actual process as an activity diagram.&lt;br /&gt;
&lt;br /&gt;
In practice, there will be a division of tasks: for the connection to the tested system (SUT - System under Test), special action modules are often required, which a programmer will develop (e.g. connections to protocols, hardware or document formats). The flow of the test scenarios is then defined jointly by developers, testers and analysts using diagrams at a higher abstraction level, with no programming know-how being required for this.&lt;br /&gt;
&lt;br /&gt;
== Expandability ==&lt;br /&gt;
Custom action modules can use a large amount of freely available and already existing code. In this way, connections to protocols, hardware or document formats can be implemented quickly and at low cost. You can interactively integrate code fragments into your scenarios, which are written in JavaScript (Node.js/npm), Python, Java (jar files), C/C++, DotNET (assemblies), R (statistical evaluations), Gnuplot (create graphics) and many more.&lt;br /&gt;
&lt;br /&gt;
== What Expecco is Not ==&lt;br /&gt;
&lt;br /&gt;
Expecco is not a ready to run testsuite for a specific hard- or software system. Exept will help you or even provide such solution or an initial framework, but the majority of expecco users use it to write their own tests. Expecco provides a number of interfaces out of the box to interface to different systems and makes is very easy for users to add interfaces to even propriatrary systems, but there are no ready to execute tests provided. You as a user has to specify and define the test procedures, possibly with the help of the eXept team (if you wish), although expecco provides a lot of support to make this process as cost effective as possible. This includes AI support, inclusion of existing code or the import of textual test descriptions.&lt;br /&gt;
&lt;br /&gt;
Our customer&#039;s test needs span a wide range from document processing, database and transaction processing, hardware interfacing to gui testings. But in any case, some initial effort is required to create building blocks for low level access, followed by actual creation of the high level test scenarios.&lt;br /&gt;
&lt;br /&gt;
Do not expect to get an out-of-the-box ready to run product for your particular problem.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31333</id>
		<title>Expecco Overview/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31333"/>
		<updated>2026-05-27T22:50:08Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* What Expecco is Not */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco + expecco ALM = AIDYMO ==&lt;br /&gt;
expecco is the component within the AIDYMO tool suite that is responsible for the development and execution of automation tasks and tests. expecco is a client-side application that runs on the user&#039;s development system or as a &amp;quot;&#039;&#039;test execution slave&#039;&#039;&amp;quot; in a server farm (possibly virtual) or in a Docker container.&lt;br /&gt;
&lt;br /&gt;
expecco ALM is a server application with a web-browser interface and is responsible for the distribution of automation tasks among test slaves in a server farm. It cares for the reservation of test resources, avoids usage conflicts, for archival and revisioning of test suites, log files and test results, monitoring the project, notification of stakeholders etc. Expecco ALM will automatically distribute task among its available expecco &amp;quot;slaves&amp;quot;, downloads suites to them, monitors progress and uploads results.  &lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM can be ordered and used as separate products or used together for a total automated system. However, as a team, these two provide a fully automated execution and quality infrastructure and are available  together as AIDYMO.&lt;br /&gt;
&lt;br /&gt;
== expecco Base System (platform) ==&lt;br /&gt;
expecco is a modular system, consisting of a basic platform and extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) that provide domain specific functions and interfaces.&lt;br /&gt;
&lt;br /&gt;
The basic platform deals with:&lt;br /&gt;
* loading and saving of test suites&lt;br /&gt;
* creation, editing &amp;amp; maintenance of a test suite&lt;br /&gt;
* execution&lt;br /&gt;
* test development with single step, breakpoints and execution of partial sequences&lt;br /&gt;
* test development with &amp;quot;live changes, while the system executes&amp;quot; (i.e. hotswap of code, short turn around times)&lt;br /&gt;
* debugging both on high (diagram-) level and low (script/code-) level&lt;br /&gt;
* seamless multi-language support for Java, Node.JS, Python, C/C++ and other languages&lt;br /&gt;
* monitoring the execution, collecting execution traces and logs&lt;br /&gt;
* collecting all data flows, message packages, intermediate results for later inspection&lt;br /&gt;
* reporting, generating human- and machine readable reports in various formats.&lt;br /&gt;
* interface to expecco ALM (up/download of suites, reports and logs)&lt;br /&gt;
&lt;br /&gt;
Execution of a suite can be both under human supervision, or completely standalone and automated, without human interaction. The first mode is typically used during test development, the later when the test suite goes into production.&lt;br /&gt;
&lt;br /&gt;
Automated unsupervised execution can be controlled by command line arguments or by RPC calls via SOAP or REST. Thus, test execution can be triggered by a cron job (Unix), scheduled tasks (Windows), Jenkins or any other program.&lt;br /&gt;
&lt;br /&gt;
The basic platform contains: &lt;br /&gt;
* expecco IDE&lt;br /&gt;
* libraries (standard library, ODBC, XML and others)&lt;br /&gt;
* Webtest: Browser automation (Selenium Webdriver, HTML5, Smart GWT,etc.)&lt;br /&gt;
* manual tests (user guided test sequences)&lt;br /&gt;
* ports: serial/USB/parallel&lt;br /&gt;
* interfaces (DLL-calls, CSV, etc.)&lt;br /&gt;
* webservices (REST, SOAP, RPC)&lt;br /&gt;
* JavaBridge (to inject and/or execute Java code)&lt;br /&gt;
* .NETBridge (to inject and/or execute DotNET code)&lt;br /&gt;
* NodeJS Bridge (starting with v19.1) (to execute Node/Javascript code)&lt;br /&gt;
* Python Bridge (v19.2) (to execute Python and Jython code)&lt;br /&gt;
* C Bridge (v22.1) (to execute C/C++ code)&lt;br /&gt;
* automatic reports&lt;br /&gt;
* remote control (v23.1) (to control/monitor via browser, Android or IOS)&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
Extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) are available to test various UI-technologies, hard- and software interfaces, protocols and document formats.&lt;br /&gt;
For example:&lt;br /&gt;
* Mobile Testing Plugin for iPhone, Android, Windows CE, Windows-Phone Apps&lt;br /&gt;
* GUI Test &amp;amp; Automation for Java-Swing, SWT and other UI frameworks&lt;br /&gt;
* GUI Test &amp;amp; Automation for Windows Applications (using UIAutomation2)&lt;br /&gt;
* GUI Test for Qt and other C/C++ based UI frameworks&lt;br /&gt;
* GUI Test of VisualWorks applications&lt;br /&gt;
* GUI Test for VNC connections&lt;br /&gt;
* Interface to CAN bus systems (automotive)&lt;br /&gt;
* Interface to SomeIP brokers/clients (automotive)&lt;br /&gt;
* Interface to EDIFACT and SWIFT systems (B2B, finance)&lt;br /&gt;
* Interface to MQTT and OPC systems (manufacturing, IoT, automotive)&lt;br /&gt;
* Integration and execution of functional mockup units (FMU)&lt;br /&gt;
* Import of test specifications (eg. from Excel- or Word documents)&lt;br /&gt;
* Interfaces to specific lab equipment (telecom, automotive)&lt;br /&gt;
&lt;br /&gt;
Plugins typically consist of additional dll- and block libraries that provide the domain specific functions as ready-to-use building blocks. These are inserted into test sequences via drag &amp;amp; drop. The GUI plugins include recording functions, so that user sessions are immediately available as an executable activity diagram.&lt;br /&gt;
&lt;br /&gt;
Other plugins provide integration into the existing QM infrastructure:&lt;br /&gt;
* Polarion Plugin to automate test execution under the Polarion ALM system&lt;br /&gt;
* Quality Center Plugin to interface with HP-QC&lt;br /&gt;
* Jira Plugin, to create issues in a Jira system&lt;br /&gt;
* expecco ALM plugin to interface with our own QM/Test center&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM are immediately available for Windows, Linux based systems in both 32bit and 64bit versions. A macOS version (64bit only) is in beta testing stage and will be available soon (currently upon request). Versions for Solaris and other Unix-based systems are available upon request.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
expecco licenses are available as single user (node-lock or dongle), floating user (using a license manager) or company licenses. expecco can be used in isolated environments without access to a company network or the internet (using single-user or detached license server licenses). Please contact eXept for pricing and conditions.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
In principle, expecco is a &amp;quot;black box&amp;quot; test system, which does not expect or require any instrumentation of the tested system ([[Glossary/en#SUT_.28System_Under_Test.29|SUT = &amp;quot;System Under Test&amp;quot;]]) (i.e. it is not necessary to extend the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] with special code or link special libraries to it).&lt;br /&gt;
However, it allows &amp;quot;code injection&amp;quot; for Java, .NET and Python applications, thus &amp;quot;grey box&amp;quot; and &amp;quot;white box&amp;quot; tests are also possible.&lt;br /&gt;
&lt;br /&gt;
In expecco, test scenarios can be formulated on a high level of abstraction as (activity) diagrams, as &amp;quot;keyword-driven&amp;quot; test sequences or as textual scripts in various programming languages. Scripts can be executed in expecco itself as well as in the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] or other machines (e.g. to stimulate the SUT or to generate load).&lt;br /&gt;
&lt;br /&gt;
The following rough architecture picture gives an overview (not all available plugins are included):&lt;br /&gt;
&lt;br /&gt;
[[Datei:expeccoArchitecture1.png|1000px|thumb|left|expecco architecture (not all plugins shown)]]&lt;br /&gt;
&lt;br /&gt;
(or as PDF: [[Datei:expeccoArchitecture1.pdf]])&lt;br /&gt;
&lt;br /&gt;
== Concept ==&lt;br /&gt;
The basic philosophy of Expecco is that test procedures can be created, maintained and executed by developers and programmers as well as by domain experts and analysts.&lt;br /&gt;
without the need for special programming knowledge.&lt;br /&gt;
However, there must be no restrictions, and an experienced user has all the means at his disposal to create his own code, scripts and advanced functions.&lt;br /&gt;
&lt;br /&gt;
In order to meet both requirements, processes in Expecco can be defined both as activity diagrams (&amp;quot;boxes and arrows&amp;quot;) and as script code in various programming languages.&lt;br /&gt;
This enables a &amp;quot;&#039;&#039;Best of both worlds&#039;&#039;&amp;quot; approach: on the one hand, non-programmers can connect existing action modules to complex scenarios at a high level of abstraction using &amp;quot;&#039;&#039;Drag &amp;amp; Drop&#039;&#039;&amp;quot; or recording of GUI actions,&lt;br /&gt;
on the other hand, it is possible to create missing function modules as script code and make them available as action modules for other actions. Where &amp;quot;script code&amp;quot; stands for JavaScript, Python, Java, Shell/Batch up to C/C++. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Hardcore&amp;quot; developers can of course also define the entire test procedure as a script/program code - however, this may result in the comprehensibility and modular usability being more or less lost for non-programmers. We therefore generally advise only using program code to encapsulate connections to existing frameworks and formulating the actual process as an activity diagram.&lt;br /&gt;
&lt;br /&gt;
In practice, there will be a division of tasks: for the connection to the tested system (SUT - System under Test), special action modules are often required, which a programmer will develop (e.g. connections to protocols, hardware or document formats). The flow of the test scenarios is then defined jointly by developers, testers and analysts using diagrams at a higher abstraction level, with no programming know-how being required for this.&lt;br /&gt;
&lt;br /&gt;
== Expandability ==&lt;br /&gt;
Custom action modules can use a large amount of freely available and already existing code. In this way, connections to protocols, hardware or document formats can be implemented quickly and at low cost. You can interactively integrate code fragments into your scenarios, which are written in JavaScript (Node.js/npm), Python, Java (jar files), C/C++, DotNET (assemblies), R (statistical evaluations), Gnuplot (create graphics) and many more.&lt;br /&gt;
&lt;br /&gt;
== What Expecco is Not ==&lt;br /&gt;
&lt;br /&gt;
Expecco is not a ready to run testsuite for a specific hard- or software system. Exept may help you or even provide such solution, but the majority of expecco users use it to write their own tests. Expecco provides a number of interfaces out of the box to interface to different systems and makes is very easy for users to add interfaces to even propriatrary systems, but there are no ready to execute tests provided. You as a user has to specify and define the test procedures, possibly with the help of the eXept team (if you wish), although expecco provides a lot of support to make this process as cost effective as possible. This includes AI support, inclusion of existing code or the import of textual test descriptions.&lt;br /&gt;
&lt;br /&gt;
Our customer&#039;s test needs span a wide range from document processing, database and transaction processing, hardware interfacing to gui testings. But in any case, some initial effort is required to create building blocks for low level access, followed by actual creation of the high level test scenarios.&lt;br /&gt;
&lt;br /&gt;
Do not expect to get an out-of-the-box ready to run product for your particular problem.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31332</id>
		<title>Expecco Overview/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Expecco_Overview/en&amp;diff=31332"/>
		<updated>2026-05-27T22:44:55Z</updated>

		<summary type="html">&lt;p&gt;Cg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== expecco + expecco ALM = AIDYMO ==&lt;br /&gt;
expecco is the component within the AIDYMO tool suite that is responsible for the development and execution of automation tasks and tests. expecco is a client-side application that runs on the user&#039;s development system or as a &amp;quot;&#039;&#039;test execution slave&#039;&#039;&amp;quot; in a server farm (possibly virtual) or in a Docker container.&lt;br /&gt;
&lt;br /&gt;
expecco ALM is a server application with a web-browser interface and is responsible for the distribution of automation tasks among test slaves in a server farm. It cares for the reservation of test resources, avoids usage conflicts, for archival and revisioning of test suites, log files and test results, monitoring the project, notification of stakeholders etc. Expecco ALM will automatically distribute task among its available expecco &amp;quot;slaves&amp;quot;, downloads suites to them, monitors progress and uploads results.  &lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM can be ordered and used as separate products or used together for a total automated system. However, as a team, these two provide a fully automated execution and quality infrastructure and are available  together as AIDYMO.&lt;br /&gt;
&lt;br /&gt;
== expecco Base System (platform) ==&lt;br /&gt;
expecco is a modular system, consisting of a basic platform and extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) that provide domain specific functions and interfaces.&lt;br /&gt;
&lt;br /&gt;
The basic platform deals with:&lt;br /&gt;
* loading and saving of test suites&lt;br /&gt;
* creation, editing &amp;amp; maintenance of a test suite&lt;br /&gt;
* execution&lt;br /&gt;
* test development with single step, breakpoints and execution of partial sequences&lt;br /&gt;
* test development with &amp;quot;live changes, while the system executes&amp;quot; (i.e. hotswap of code, short turn around times)&lt;br /&gt;
* debugging both on high (diagram-) level and low (script/code-) level&lt;br /&gt;
* seamless multi-language support for Java, Node.JS, Python, C/C++ and other languages&lt;br /&gt;
* monitoring the execution, collecting execution traces and logs&lt;br /&gt;
* collecting all data flows, message packages, intermediate results for later inspection&lt;br /&gt;
* reporting, generating human- and machine readable reports in various formats.&lt;br /&gt;
* interface to expecco ALM (up/download of suites, reports and logs)&lt;br /&gt;
&lt;br /&gt;
Execution of a suite can be both under human supervision, or completely standalone and automated, without human interaction. The first mode is typically used during test development, the later when the test suite goes into production.&lt;br /&gt;
&lt;br /&gt;
Automated unsupervised execution can be controlled by command line arguments or by RPC calls via SOAP or REST. Thus, test execution can be triggered by a cron job (Unix), scheduled tasks (Windows), Jenkins or any other program.&lt;br /&gt;
&lt;br /&gt;
The basic platform contains: &lt;br /&gt;
* expecco IDE&lt;br /&gt;
* libraries (standard library, ODBC, XML and others)&lt;br /&gt;
* Webtest: Browser automation (Selenium Webdriver, HTML5, Smart GWT,etc.)&lt;br /&gt;
* manual tests (user guided test sequences)&lt;br /&gt;
* ports: serial/USB/parallel&lt;br /&gt;
* interfaces (DLL-calls, CSV, etc.)&lt;br /&gt;
* webservices (REST, SOAP, RPC)&lt;br /&gt;
* JavaBridge (to inject and/or execute Java code)&lt;br /&gt;
* .NETBridge (to inject and/or execute DotNET code)&lt;br /&gt;
* NodeJS Bridge (starting with v19.1) (to execute Node/Javascript code)&lt;br /&gt;
* Python Bridge (v19.2) (to execute Python and Jython code)&lt;br /&gt;
* C Bridge (v22.1) (to execute C/C++ code)&lt;br /&gt;
* automatic reports&lt;br /&gt;
* remote control (v23.1) (to control/monitor via browser, Android or IOS)&lt;br /&gt;
&lt;br /&gt;
== Plugins ==&lt;br /&gt;
&lt;br /&gt;
Extensions (&amp;quot;&#039;&#039;plugins&#039;&#039;&amp;quot;) are available to test various UI-technologies, hard- and software interfaces, protocols and document formats.&lt;br /&gt;
For example:&lt;br /&gt;
* Mobile Testing Plugin for iPhone, Android, Windows CE, Windows-Phone Apps&lt;br /&gt;
* GUI Test &amp;amp; Automation for Java-Swing, SWT and other UI frameworks&lt;br /&gt;
* GUI Test &amp;amp; Automation for Windows Applications (using UIAutomation2)&lt;br /&gt;
* GUI Test for Qt and other C/C++ based UI frameworks&lt;br /&gt;
* GUI Test of VisualWorks applications&lt;br /&gt;
* GUI Test for VNC connections&lt;br /&gt;
* Interface to CAN bus systems (automotive)&lt;br /&gt;
* Interface to SomeIP brokers/clients (automotive)&lt;br /&gt;
* Interface to EDIFACT and SWIFT systems (B2B, finance)&lt;br /&gt;
* Interface to MQTT and OPC systems (manufacturing, IoT, automotive)&lt;br /&gt;
* Integration and execution of functional mockup units (FMU)&lt;br /&gt;
* Import of test specifications (eg. from Excel- or Word documents)&lt;br /&gt;
* Interfaces to specific lab equipment (telecom, automotive)&lt;br /&gt;
&lt;br /&gt;
Plugins typically consist of additional dll- and block libraries that provide the domain specific functions as ready-to-use building blocks. These are inserted into test sequences via drag &amp;amp; drop. The GUI plugins include recording functions, so that user sessions are immediately available as an executable activity diagram.&lt;br /&gt;
&lt;br /&gt;
Other plugins provide integration into the existing QM infrastructure:&lt;br /&gt;
* Polarion Plugin to automate test execution under the Polarion ALM system&lt;br /&gt;
* Quality Center Plugin to interface with HP-QC&lt;br /&gt;
* Jira Plugin, to create issues in a Jira system&lt;br /&gt;
* expecco ALM plugin to interface with our own QM/Test center&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
Both expecco and expecco ALM are immediately available for Windows, Linux based systems in both 32bit and 64bit versions. A macOS version (64bit only) is in beta testing stage and will be available soon (currently upon request). Versions for Solaris and other Unix-based systems are available upon request.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
expecco licenses are available as single user (node-lock or dongle), floating user (using a license manager) or company licenses. expecco can be used in isolated environments without access to a company network or the internet (using single-user or detached license server licenses). Please contact eXept for pricing and conditions.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
&lt;br /&gt;
In principle, expecco is a &amp;quot;black box&amp;quot; test system, which does not expect or require any instrumentation of the tested system ([[Glossary/en#SUT_.28System_Under_Test.29|SUT = &amp;quot;System Under Test&amp;quot;]]) (i.e. it is not necessary to extend the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] with special code or link special libraries to it).&lt;br /&gt;
However, it allows &amp;quot;code injection&amp;quot; for Java, .NET and Python applications, thus &amp;quot;grey box&amp;quot; and &amp;quot;white box&amp;quot; tests are also possible.&lt;br /&gt;
&lt;br /&gt;
In expecco, test scenarios can be formulated on a high level of abstraction as (activity) diagrams, as &amp;quot;keyword-driven&amp;quot; test sequences or as textual scripts in various programming languages. Scripts can be executed in expecco itself as well as in the [[Glossary/en#SUT_.28System_Under_Test.29|SUT]] or other machines (e.g. to stimulate the SUT or to generate load).&lt;br /&gt;
&lt;br /&gt;
The following rough architecture picture gives an overview (not all available plugins are included):&lt;br /&gt;
&lt;br /&gt;
[[Datei:expeccoArchitecture1.png|1000px|thumb|left|expecco architecture (not all plugins shown)]]&lt;br /&gt;
&lt;br /&gt;
(or as PDF: [[Datei:expeccoArchitecture1.pdf]])&lt;br /&gt;
&lt;br /&gt;
== Concept ==&lt;br /&gt;
The basic philosophy of Expecco is that test procedures can be created, maintained and executed by developers and programmers as well as by domain experts and analysts.&lt;br /&gt;
without the need for special programming knowledge.&lt;br /&gt;
However, there must be no restrictions, and an experienced user has all the means at his disposal to create his own code, scripts and advanced functions.&lt;br /&gt;
&lt;br /&gt;
In order to meet both requirements, processes in Expecco can be defined both as activity diagrams (&amp;quot;boxes and arrows&amp;quot;) and as script code in various programming languages.&lt;br /&gt;
This enables a &amp;quot;&#039;&#039;Best of both worlds&#039;&#039;&amp;quot; approach: on the one hand, non-programmers can connect existing action modules to complex scenarios at a high level of abstraction using &amp;quot;&#039;&#039;Drag &amp;amp; Drop&#039;&#039;&amp;quot; or recording of GUI actions,&lt;br /&gt;
on the other hand, it is possible to create missing function modules as script code and make them available as action modules for other actions. Where &amp;quot;script code&amp;quot; stands for JavaScript, Python, Java, Shell/Batch up to C/C++. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;Hardcore&amp;quot; developers can of course also define the entire test procedure as a script/program code - however, this may result in the comprehensibility and modular usability being more or less lost for non-programmers. We therefore generally advise only using program code to encapsulate connections to existing frameworks and formulating the actual process as an activity diagram.&lt;br /&gt;
&lt;br /&gt;
In practice, there will be a division of tasks: for the connection to the tested system (SUT - System under Test), special action modules are often required, which a programmer will develop (e.g. connections to protocols, hardware or document formats). The flow of the test scenarios is then defined jointly by developers, testers and analysts using diagrams at a higher abstraction level, with no programming know-how being required for this.&lt;br /&gt;
&lt;br /&gt;
== Expandability ==&lt;br /&gt;
Custom action modules can use a large amount of freely available and already existing code. In this way, connections to protocols, hardware or document formats can be implemented quickly and at low cost. You can interactively integrate code fragments into your scenarios, which are written in JavaScript (Node.js/npm), Python, Java (jar files), C/C++, DotNET (assemblies), R (statistical evaluations), Gnuplot (create graphics) and many more.&lt;br /&gt;
&lt;br /&gt;
== What Expecco is Not ==&lt;br /&gt;
&lt;br /&gt;
Expecco is not a ready to run testsuite for a specific hard- or software system. Exepct may help you or even provide such solution, but the major users of expecco&lt;br /&gt;
use it to write their own tests. Expecco provides a number of interfaces out of the box to interface to different systems and makes is very easy for users to add interfaces to even propriatrary systems, but there are no ready to execute tests provided. You as a user has to specify and define the test procedures, possibly with the help of the eXept team (if you wish).&lt;br /&gt;
&lt;br /&gt;
Our customer&#039;s test needs span a wide range from document processing, database and transaction processing, hardware interfacing to gui testings. But in any case, some initial effort is required to create building blocks for low level access, followed by actual creation of the high level test scenarios.&lt;br /&gt;
&lt;br /&gt;
Do not expect to get an out-of-the-box ready to run product for your particular problem.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31327</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31327"/>
		<updated>2026-05-26T23:45:27Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via [[Tools_FileBrowser/en|FileBrowser]])&lt;br /&gt;
* Feature: public/private keypair generation via a [[Tools_FileBrowser/en|FileBrowser]] menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed the [[Number_API_Functions|Number]] stack (see also in [[Numeric_Limits/en| Numeric Limits]]):&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. and type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan). Now all test cases produce a result within the precision limits of their type&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31326</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31326"/>
		<updated>2026-05-26T22:09:54Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via [[Tools_FileBrowser/en|FileBrowser]])&lt;br /&gt;
* Feature: public/private keypair generation via a [[Tools_FileBrowser/en|FileBrowser]] menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed the [[Number_API_Functions|Number]] stack (see also in [[Numeric_Limits/en| Numeric Limits]]):&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. and type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=DiagramElements-FreezeValue/en&amp;diff=31325</id>
		<title>DiagramElements-FreezeValue/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=DiagramElements-FreezeValue/en&amp;diff=31325"/>
		<updated>2026-05-26T22:06:27Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Float */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
A so called &amp;quot;&#039;&#039;Freeze Value&#039;&#039;&amp;quot; is a constant value attached to an input pin.&lt;br /&gt;
When executed, that value will be presented to the action. Pins with such a constant input are referred to as &amp;quot;&#039;&#039;frozen pins&#039;&#039;&amp;quot; in expecco.&lt;br /&gt;
&lt;br /&gt;
The freeze value can be either specified as a literal (textual) constant, or be provided by a variable (from an environment which is visible at the time the step is active).&lt;br /&gt;
&lt;br /&gt;
Be aware, that frozen pin values should normally not be consumed; &lt;br /&gt;
i.e. in case the step is executed twice,&lt;br /&gt;
the value should still be present for the second incarnation. This is especially important if a step is executed in a loop or triggered by a step which writes multiple values to an output.&lt;br /&gt;
&lt;br /&gt;
Thus, the diagram editor will automatically change the pin&#039;s behavior to non-triggering and non-consuming (i.e. make it a &amp;quot;&#039;&#039;parameter pin&#039;&#039;&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;You can also change the pin&#039;s behavior via its context menu (&amp;quot;&#039;&#039;Make Parameter Pin&#039;&#039;&amp;quot;) or with  the keyboard shortcut &amp;lt;kbd&amp;gt;CTRL-p&amp;lt;/kbd&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The following describes the data format and syntax used for pin freeze values (which btw. is also used for environment variables).&lt;br /&gt;
In general, the text entered as freeze value is parsed by the input pin&#039;s datatype, or if it is provided by a variable, that variable&#039;s data type.&lt;br /&gt;
&lt;br /&gt;
== Format for Particular Types ==&lt;br /&gt;
&lt;br /&gt;
=== Integer ===&lt;br /&gt;
Integer constants can be entered in one of the following formats:&lt;br /&gt;
&lt;br /&gt;
* decimal (for example: &amp;quot;&amp;lt;code&amp;gt;1234&amp;lt;/code&amp;gt;&amp;quot; , &amp;quot;&amp;lt;code&amp;gt;-1234&amp;lt;/code&amp;gt;)&lt;br /&gt;
* with Smalltalk radix prefix: (for example: &amp;quot;&amp;lt;code&amp;gt;16rCAFE&amp;lt;/code&amp;gt;&amp;quot; , &amp;quot;&amp;lt;code&amp;gt;16r-AA&amp;lt;/code&amp;gt;, &amp;quot;&amp;lt;code&amp;gt;8r100&amp;lt;/code&amp;gt;, &amp;quot;&amp;lt;code&amp;gt;2r101010000&amp;lt;/code&amp;gt;).&lt;br /&gt;
::Any radix between 2 and 36 is allowed.&lt;br /&gt;
* with C radix prefix: (for example: &amp;quot;&amp;lt;code&amp;gt;0xCAFE&amp;lt;/code&amp;gt;&amp;quot; , &amp;quot;&amp;lt;code&amp;gt;-0xAA&amp;lt;/code&amp;gt;, &amp;quot;&amp;lt;code&amp;gt;0b101010000&amp;lt;/code&amp;gt;) (&amp;quot;0x&amp;quot; for hex, &amp;quot;0o&amp;quot; for octal and &amp;quot;0b&amp;quot; for binary).&lt;br /&gt;
::Notice that the C-octal notation (prefix 0) is not supported&amp;lt;br&amp;gt;(ie. &amp;quot;&amp;lt;code&amp;gt;0377&amp;lt;/code&amp;gt;&amp;quot; will be read as 377).&lt;br /&gt;
&lt;br /&gt;
=== Float ===&lt;br /&gt;
&lt;br /&gt;
By default, floats are represented as double-precision IEEE limited precision rationals (64 bit).&lt;br /&gt;
You can force single precision floats by using the &#039;f&#039; exponent indicator (or an &#039;f&#039; suffix). &lt;br /&gt;
&lt;br /&gt;
* double precision (64bit) floats such as: &amp;quot;&amp;lt;code&amp;gt;123.0&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;+123.0&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;-123.0&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;.123&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;123.&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;123.0e+2&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;123.0e-2&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* single precision (32 bit): &amp;quot;&amp;lt;code&amp;gt;123.0f+2&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;-123.0f&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* extended precision (80+ bit): &amp;quot;&amp;lt;code&amp;gt;123.0q+2&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;-123.0q&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* quadruple precision (128 bit): &amp;quot;&amp;lt;code&amp;gt;123.0Q+2&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;-123.0Q&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Do not expect any speed or other advantages when using single precision floats (depends on the CPU). Actually, expect problems due to larger errors, non-stable series computations etc. Use them only if you need to emulate less precise computations.&lt;br /&gt;
&lt;br /&gt;
Extended precision floats may not be supported by all CPU types (these use the underlying machine&#039;s &amp;quot;long double&amp;quot; data type, which is either an 80-bit extended IEEE or a 128-bit quadruple IEEE float (eg. on Sparc CPUs). Not all CPUs do support these and we can not guarantee that future machines will. However, currently all supported architectures do.&lt;br /&gt;
&lt;br /&gt;
Notice that depending on the CPU, quadruple precision arithmetic might be performed by software and will therefore be slow (currently the case for all supported architectures)&lt;br /&gt;
&lt;br /&gt;
=== String ===&lt;br /&gt;
&lt;br /&gt;
If the pin&#039;s datatype is &amp;lt;CODE&amp;gt;String&amp;lt;/code&amp;gt;, then no leading/trailing single quotes are needed.&lt;br /&gt;
&amp;lt;br&amp;gt;In fact, if there are quotes, these will be part of the string. &amp;lt;br&amp;gt;However, &#039;&#039;&#039;quotes are needed&#039;&#039;&#039; if the type is not unambiguously a String type (i.e. Any or a Union type).&lt;br /&gt;
&lt;br /&gt;
By default, NO C-style escape sequences are interpreted - i.e. the string is taken &amp;quot;as-is&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;If you want or need control or non-latin1 characters, either enable the &amp;quot;&#039;&#039;C-Escapes&#039;&#039;&amp;quot; toggle via the freeze-value&#039;s popup menu, or freeze it as &amp;quot;C-String&amp;quot;, which is a pseudo datatype offered in the freeze as menu.&lt;br /&gt;
&lt;br /&gt;
You can then use the escapes:&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\n&amp;lt;/code&amp;gt;&amp;quot; for a newline character&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\r&amp;lt;/code&amp;gt;&amp;quot; for a return character&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\t&amp;lt;/code&amp;gt;&amp;quot; for a tab&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\b&amp;lt;/code&amp;gt;&amp;quot; for a backspace&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\xXX&amp;lt;/code&amp;gt;&amp;quot; for a single byte hex-character code&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\uXXXX&amp;lt;/code&amp;gt;&amp;quot; for a 32bit hex-character code&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\\&amp;lt;/code&amp;gt;&amp;quot; for the &amp;quot;\&amp;quot; character.&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;\0&amp;lt;/code&amp;gt;&amp;quot; for a null character (null byte)&lt;br /&gt;
&lt;br /&gt;
By default, variables of the form &amp;quot;&amp;lt;code&amp;gt;$(xxx)&amp;lt;/code&amp;gt;&amp;quot; are expanded from either an expecco variable or the shell environment. Thus,&lt;br /&gt;
* &amp;quot;&amp;lt;code&amp;gt;$(HOME)/foo/bar&amp;lt;/code&amp;gt;&amp;quot; will expand to the name of a subdirectory &amp;quot;foo/bar&amp;quot; under your home directory (in unix). Or if you have a variable named &amp;quot;HOME&amp;quot; in the expecco environment, to whatever that value is.&lt;br /&gt;
This behavior can be disabled via the freeze value&#039;s popup menu.&lt;br /&gt;
&lt;br /&gt;
In addition, variables of the form &amp;quot;&amp;lt;code&amp;gt;%(xxx)&amp;lt;/code&amp;gt;&amp;quot; are expanded by the value of the input pin named &amp;quot;xxx&amp;quot;. This expansion is also controlled by a flag in the popup menu.&lt;br /&gt;
&lt;br /&gt;
Freeze value expansion can be suppressed either at the pin (see the freeze-menu),&lt;br /&gt;
or globally via a flag in the project or import library. Global disabling is discouraged and only to be used for backward compatibility (in the rare situation, that an older library depends on such freeze values being unchanged).&lt;br /&gt;
&lt;br /&gt;
Be reminded, that these variable expansions are only done for freeze values. If the value comes from another pin, it is passed unchanged.&lt;br /&gt;
&lt;br /&gt;
=== Bytes (ByteArray) ===&lt;br /&gt;
&lt;br /&gt;
Byte data can be entered in multiple forms:&lt;br /&gt;
* Smalltalk format: &amp;quot;&amp;lt;code&amp;gt;#[ 1 2 3 ]&amp;lt;/code&amp;gt;&amp;quot; (spaces between byte values)&lt;br /&gt;
* JSON format: &amp;quot;&amp;lt;code&amp;gt;[ 1, 2, 3 ]&amp;lt;/code&amp;gt;&amp;quot; (commas between byte values)&lt;br /&gt;
* C format: &amp;quot;&amp;lt;code&amp;gt;{ 1, 2, 3 }&amp;lt;/code&amp;gt;&amp;quot; (braces and commas between byte values)&lt;br /&gt;
* hex format: &amp;quot;&amp;lt;code&amp;gt;xxXXxxXX&amp;lt;/code&amp;gt;&amp;quot; (two hex characters per byte; no spaces in-between)&lt;br /&gt;
* hex format: &amp;quot;&amp;lt;code&amp;gt;xx XX xx XX&amp;lt;/code&amp;gt;&amp;quot; (two hex characters per byte; with spaces in-between)&lt;br /&gt;
&lt;br /&gt;
=== Arrays (Sequenceables) ===&lt;br /&gt;
given that elements el1, el2, ... elN can be represented as literal constants (i.e. Strings, numbers, bytes or arrays), a sequence of them can be&lt;br /&gt;
written as:&lt;br /&gt;
* Smalltalk format: &amp;quot;&amp;lt;code&amp;gt;#( el1 el2 ... elN )&amp;lt;/code&amp;gt; (with spaces between elements).&lt;br /&gt;
* JSON format: &amp;quot;&amp;lt;code&amp;gt;[ el1 , el2 , ... , elN ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Geometric Objects (Points and Rectangles) ===&lt;br /&gt;
Points are entered (in Smalltalk syntax) as:&lt;br /&gt;
* &amp;lt;code&amp;gt;&#039;&#039;x&#039;&#039; @ &#039;&#039;y&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Point x:&#039;&#039;x&#039;&#039; y:&#039;&#039;y&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
where &#039;&#039;x&amp;amp;&#039;&#039; and &#039;&#039;y&#039;&#039; are numeric constants (typically integers).&lt;br /&gt;
&lt;br /&gt;
Rectangles (in Smalltalk syntax):&lt;br /&gt;
* &amp;lt;code&amp;gt;(&#039;&#039;xL&#039;&#039; @ &#039;&#039;yT&#039;&#039;) extent:(&#039;&#039;w&#039;&#039; @ &#039;&#039;h&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;(&#039;&#039;xL&#039;&#039; @ &#039;&#039;yT&#039;&#039;) corner:(&#039;&#039;xR&#039;&#039; @ &#039;&#039;yB&#039;&#039;)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Rectangle left:&#039;&#039;xL&#039;&#039; top:&#039;&#039;yT&#039;&#039; width:&#039;&#039;wT&#039;&#039; height:&#039;&#039;hT&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Rectangle left:&#039;&#039;xL&#039;&#039; top:&#039;&#039;yT&#039;&#039; right:&#039;&#039;xR&#039;&#039; bottom:&#039;&#039;yB&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
where &#039;&#039;xL&#039;&#039; and &#039;&#039;y&#039;&#039; are the left and top coordinates, &#039;&#039;xR&#039;&#039; and &#039;&#039;yB&#039;&#039; are the coordinates of the corner (the first pixel outside the rectangle), and &#039;&#039;w&#039;&#039; and &#039;&#039;h&#039;&#039; are the extent (width and height) of the rectangle.&lt;br /&gt;
&lt;br /&gt;
=== Any ===&lt;br /&gt;
To distinguish between strings and non-strings, String-constants for an Any-typed pin or a type which accepts both strings and non-strings (i.e. unions), a string value &#039;&#039;&#039;must&#039;&#039;&#039; be quoted.&lt;br /&gt;
&amp;lt;br&amp;gt;For example:&lt;br /&gt;
* &amp;lt;code&amp;gt;1234&amp;lt;/code&amp;gt; - will be an integer value&lt;br /&gt;
* &amp;lt;code&amp;gt;1234.56&amp;lt;/code&amp;gt; - will be a float value&lt;br /&gt;
* &amp;lt;code&amp;gt;&#039;1234&#039;&amp;lt;/code&amp;gt; - will be a string value&lt;br /&gt;
&lt;br /&gt;
== Variable Expansion ==&lt;br /&gt;
&lt;br /&gt;
Inside a freeze value, variable values can be embedded using the &amp;quot;$(...)&amp;quot; notation,&lt;br /&gt;
unless the freeze value has the &amp;quot;&#039;&#039;No Variable Expansion&#039;&#039; flag set via the freeze value&#039;s popup menu).&lt;br /&gt;
&lt;br /&gt;
=== $(...) Expansion ===&lt;br /&gt;
In addition to the visible environment variables, the following builtin names are allowed:&lt;br /&gt;
* &amp;lt;code&amp;gt;AttachmentsDirectory&amp;lt;/code&amp;gt; - the directory, where all attachments of the suite are located.&lt;br /&gt;
* &amp;lt;code&amp;gt;Attachments&amp;lt;/code&amp;gt; - the same, but a little shorter&lt;br /&gt;
* &amp;lt;code&amp;gt;ExecutionDirectory&amp;lt;/code&amp;gt; - a temporary directory, which vanishes after the execution&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpeccoInstallationDirectory&amp;lt;/code&amp;gt; - the directory, where expecco was installed&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpeccoLibraryDirectory&amp;lt;/code&amp;gt; - the directory, where the libraries delivered with expecco live (first supported in 23.1)&lt;br /&gt;
* &amp;lt;code&amp;gt;ExpeccoPluginDirectory&amp;lt;/code&amp;gt; - the directory, where expecco&#039;s plugins are installed&lt;br /&gt;
* &amp;lt;code&amp;gt;ProjectDirectory&amp;lt;/code&amp;gt; - the temporary project directory&lt;br /&gt;
* &amp;lt;code&amp;gt;HomeDirectory&amp;lt;/code&amp;gt; - the user&#039;s home directory&lt;br /&gt;
* &amp;lt;code&amp;gt;TmpDirectory&amp;lt;/code&amp;gt; - a temporary directory (subfolder of the system&#039;s tmp directory)&lt;br /&gt;
* &amp;lt;code&amp;gt;CurrentDirectory&amp;lt;/code&amp;gt; - the &amp;quot;current&amp;quot; directory (see below)&lt;br /&gt;
* &amp;lt;code&amp;gt;DocumentsDirectory&amp;lt;/code&amp;gt; - the &amp;quot;documents&amp;quot; directory&lt;br /&gt;
* &amp;lt;code&amp;gt;DesktopDirectory&amp;lt;/code&amp;gt; - the &amp;quot;desktop&amp;quot; directory&lt;br /&gt;
* &amp;lt;code&amp;gt;LoginName&amp;lt;/code&amp;gt; - your login name (username under Unix/Linux/OSX)&lt;br /&gt;
* &amp;lt;code&amp;gt;UserName&amp;lt;/code&amp;gt; - your full name (if known, otherwise the login name)&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;&#039;&#039;inPinName&#039;&#039;&amp;gt; - where inPinName is the name of an input pin of the containing compound action&lt;br /&gt;
&lt;br /&gt;
If the script must run somewhere else, you can provide the path at the block&#039;s &amp;quot;&#039;&#039;execDir&#039;&#039;&amp;quot; input pin (or for shell scripts, you can also specify it in the editor, which is effectively defining the directory as a freeze value). The execution directory pathname (provided at the pin) may contain placeholders in the form &amp;quot;$(&#039;&#039;xxx&#039;&#039;)&amp;quot;, where &amp;quot;&#039;&#039;xxx&#039;&#039;&amp;quot; is either a shell environment variable, or one of the above listed builtin placeholder variables.&lt;br /&gt;
&lt;br /&gt;
== Popup Menu ==&lt;br /&gt;
&lt;br /&gt;
Of special interest are the entries:&lt;br /&gt;
&lt;br /&gt;
=== JSON Encoded ===&lt;br /&gt;
The freeze value&#039;s text is a JSON string, and the decoded object is passed to the action as pin-value. Be careful to provide correct syntax here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;Array:&lt;br /&gt;
 [  &amp;amp;lt;element1&amp;amp;gt; , &amp;amp;lt;element2&amp;amp;gt; , ... &amp;amp;lt;elementN&amp;amp;gt; ]&lt;br /&gt;
Object:&lt;br /&gt;
 { &amp;quot;&amp;amp;lt;fieldName1&amp;amp;gt;&amp;quot;: &amp;amp;lt;fieldValue1&amp;amp;gt; , &lt;br /&gt;
   &amp;quot;&amp;amp;lt;fieldName2&amp;amp;gt;&amp;quot;: &amp;amp;lt;fieldValue2&amp;amp;gt; ,&lt;br /&gt;
              ...&lt;br /&gt;
   &amp;quot;&amp;amp;lt;fieldNameN&amp;amp;gt;&amp;quot;: &amp;amp;lt;fieldValueN&amp;amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
Other:&lt;br /&gt;
   true&lt;br /&gt;
   false&lt;br /&gt;
   null&lt;br /&gt;
   &amp;amp;lt;integer&amp;amp;gt;&lt;br /&gt;
   &amp;amp;lt;float&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
A future version may provide additional syntax checks in this editor.&lt;br /&gt;
For now, we assume that most of us will simply copy-paste a JSON string from some other place. Let us know, if that would be a high priority feature in the next version.&lt;br /&gt;
&lt;br /&gt;
=== C-Style Escapes ===&lt;br /&gt;
The freeze value&#039;s text is a string with C-style escape sequences (see above).&lt;br /&gt;
&lt;br /&gt;
=== No Variable Expansion ===&lt;br /&gt;
No variables are expanded inside the freeze value. Use this, to pass strings eg. to shell scripts, which require strings with embedded $(...) sequences.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31324</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31324"/>
		<updated>2026-05-26T22:01:22Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via [[Tools_FileBrowser/en|FileBrowser]])&lt;br /&gt;
* Feature: public/private keypair generation via a [[Tools_FileBrowser/en|FileBrowser]] menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed the [[Number_API_Functions|Number]] stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. and type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31323</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31323"/>
		<updated>2026-05-26T22:00:29Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via [[Tools_FileBrowser/en|FileBrowser]])&lt;br /&gt;
* Feature: public/private keypair generation via a [[Tools_FileBrowser/en|FileBrowser]] menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed the [[Number_API_Functions|Number]] stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** Recognize type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31322</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31322"/>
		<updated>2026-05-26T21:57:32Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via [[Tools_FileBrowser/en|FileBrowser]])&lt;br /&gt;
* Feature: public/private keypair generation via a [[Tools_FileBrowser/en|FileBrowser]] menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed Number stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** Recognize type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31317</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31317"/>
		<updated>2026-05-26T16:45:39Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
Notice that this is not meant as a replacement for a powerful specialized text editor. However, it is light weight, starts fast and provides many utilities for day to day tasks. &amp;lt;br&amp;gt;&amp;lt;small&amp;gt; (actually, its origins go back almost 40 years, long before other systems even had a graphical user interface !).&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;&#039;&#039;Add Text Editor Page&#039;&#039;&amp;quot; menu function in the main menu&#039;s &#039;&#039;Browser&#039;&#039; entry adds additional text editor tabs.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== SSH Remote Login ==&lt;br /&gt;
Starting with expecco 26.1, remote login and remote file transfer via secure sockets is available both via toolbar buttons and the &#039;&#039;Tools&#039;&#039; menu. In addition, keypair generation is provided via the menu.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31316</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31316"/>
		<updated>2026-05-26T16:45:11Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
Notice that this is not meant as a replacement for a powerful specialized text editor. However, it is light weight, starts fast and provides many utilities for day to day tasks (actually, its origins go back almost 40 years, long before other systems even had a graphical user interface !).&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;&#039;&#039;Add Text Editor Page&#039;&#039;&amp;quot; menu function in the main menu&#039;s &#039;&#039;Browser&#039;&#039; entry adds additional text editor tabs.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== SSH Remote Login ==&lt;br /&gt;
Starting with expecco 26.1, remote login and remote file transfer via secure sockets is available both via toolbar buttons and the &#039;&#039;Tools&#039;&#039; menu. In addition, keypair generation is provided via the menu.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31315</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31315"/>
		<updated>2026-05-26T16:43:37Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
Notice that this is not meant as a replacement for a powerful specialized text editor. However, it is light weight, starts fast and provides many utilities for day to day tasks.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;&#039;&#039;Add Text Editor Page&#039;&#039;&amp;quot; menu function in the main menu&#039;s &#039;&#039;Browser&#039;&#039; entry adds additional text editor tabs.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== SSH Remote Login ==&lt;br /&gt;
Starting with expecco 26.1, remote login and remote file transfer via secure sockets is available both via toolbar buttons and the &#039;&#039;Tools&#039;&#039; menu. In addition, keypair generation is provided via the menu.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31314</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31314"/>
		<updated>2026-05-26T16:35:11Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Editing Multiple Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;&#039;&#039;Add Text Editor Page&#039;&#039;&amp;quot; menu function in the main menu&#039;s &#039;&#039;Browser&#039;&#039; entry adds additional text editor tabs.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== SSH Remote Login ==&lt;br /&gt;
Starting with expecco 26.1, remote login and remote file transfer via secure sockets is available both via toolbar buttons and the &#039;&#039;Tools&#039;&#039; menu. In addition, keypair generation is provided via the menu.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31313</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31313"/>
		<updated>2026-05-26T16:23:21Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Embedded VT100 Terminal Emulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;Add Text Editor&amp;quot; menu function in the main menu adds additional text editor tab.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== SSH Remote Login ==&lt;br /&gt;
Starting with expecco 26.1, remote login and remote file transfer via secure sockets is available both via toolbar buttons and the &#039;&#039;Tools&#039;&#039; menu. In addition, keypair generation is provided via the menu.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31312</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31312"/>
		<updated>2026-05-26T16:21:31Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Erase File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;Add Text Editor&amp;quot; menu function in the main menu adds additional text editor tab.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords) as opposed to removal or truncation (which will leave the blocks untouched and only put them onto a freelist unless the OS provides specal mount/disk options. Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31311</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31311"/>
		<updated>2026-05-26T16:20:08Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Truncate File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;Add Text Editor&amp;quot; menu function in the main menu adds additional text editor tab.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== Erase File ===&lt;br /&gt;
Will write zero bytes over an existing file in order to really clear files with security data (such as cryptographic keys or passwords). Not all operating systems will actually make the original data unrecoverable (journalling file systems), so this may not be effective, depending on your OS.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31310</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31310"/>
		<updated>2026-05-26T16:17:36Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Copying Corrupted Files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;Add Text Editor&amp;quot; menu function in the main menu adds additional text editor tab.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files from an old disk or tape with errors.&lt;br /&gt;
It will copy the file block wise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31309</id>
		<title>Tools FileBrowser/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Tools_FileBrowser/en&amp;diff=31309"/>
		<updated>2026-05-26T16:16:12Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Embedded VT100 Terminal Emulator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
The File Browser provides useful functions to search, manipulate and edit files. In expecco, its main use is to provide a simple but powerful editor to look at traces, test data attachments or to edit configuration files. The editor supports Unicode and various common encodings and can also display binary data (hex dumps), bitmap images, XML, HTML and some other common file formats.&lt;br /&gt;
&lt;br /&gt;
The tool&#039;s [http://live.exept.de/doc/online/english/tools/fbrowserV2/TOP.html documentation] is part of the official [http://live.exept.de/doc/online/english/TOP.html Smalltalk/X Online Documentation].&lt;br /&gt;
&lt;br /&gt;
This is an expert tool, which should be used with care.&lt;br /&gt;
Be especially careful to not modify any of expecco&#039;s own configuration or support files (which is of course also true for any other text editor).&lt;br /&gt;
&lt;br /&gt;
== Display Options ==&lt;br /&gt;
&lt;br /&gt;
When double clicking on a file, the File Browser will display the file&#039;s contents in the lower editor pane.&lt;br /&gt;
Usually, it will be displayed as text, but if the file contains a bitmap&lt;br /&gt;
image in one of the common formats (JPEG, TIFF, PNG, GIF, ICO, BMP, etc.)&lt;br /&gt;
it will display the image in the lower pane.&lt;br /&gt;
&lt;br /&gt;
You can also open a preview window (via &amp;quot;&#039;&#039;View&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Preview&#039;&#039;&amp;quot;) which displays a bitmap image file as a thumbnail in a floating window. It immediately follows the current selection without a need for double click&lt;br /&gt;
(use single click or cursor-movement keys in the file-list).&lt;br /&gt;
&lt;br /&gt;
To get a hex dump of the file&#039;s contents, toggle the &amp;quot;&#039;&#039;Hex Display&#039;&#039;&amp;quot; toolbar button in the lower toolbar. Sorry, but the hex-dump is (currently) read only. We may add this to a later version if customers are interested (please place a feature request into expecco ALM).&lt;br /&gt;
&lt;br /&gt;
== File Indexing (Tags) ==&lt;br /&gt;
&lt;br /&gt;
For text files in many common formats, the builtin indexer will be able to determine syntactic constructs contained in the file and display them in the&lt;br /&gt;
index list at the right. Program files written in C, C++, Java, Lisp, Ruby, Smalltalk, and many others, for Makefiles, HTML files etc. are handled.&lt;br /&gt;
It will determine where functions/chapters/classes etc. start and list them.&lt;br /&gt;
Click on an item in that list to quickly navigate to the corresponding syntactic entity.&lt;br /&gt;
&lt;br /&gt;
There are also a number of filters (by name pattern or type). For example, it is possible to only list functions, macros, types, labels etc. of a C program file&lt;br /&gt;
(try the popup menu in the index list for details).&lt;br /&gt;
&lt;br /&gt;
== File Search Operations ==&lt;br /&gt;
&lt;br /&gt;
Press the &amp;quot;&#039;&#039;File Search&#039;&#039;&amp;quot; button in the File Browser&#039;s toolbar menu, to get an extra page (tab) containing a search input form.&lt;br /&gt;
You can search for files by name, contents, non-contents, size or modification time. Both file-name and search-pattern can be regular expressions, and the search be either case sensitive or insensitive.&lt;br /&gt;
&lt;br /&gt;
The search is usually recursive. Use this e.g. to find all files with a particular suffix, which contain a particular string pattern or which have been modified before/after some particular time/date. In many situations, this search is faster than using &amp;quot;find | grep&amp;quot; on Unix, and - unless indexed - also faster than corresponding search functions under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Editing Multiple Files ==&lt;br /&gt;
The &amp;quot;Add Text Editor&amp;quot; menu function in the main menu adds additional text editor tab.&lt;br /&gt;
&lt;br /&gt;
== Embedded VT100 Terminal Emulator ==&lt;br /&gt;
&lt;br /&gt;
The File Browser includes a vt100 emulator, in which shell or cmd consoles are shown. The emulation is not 100% perfect, so please be tolerant when some cursor-movements are not accurate or leave garbage characters on the screen (especially cursor movements at the right/bottom may wrap differently than the &amp;quot;real thing&amp;quot;). For real editor work, use xterm under Unix or a cmd window under MS Windows.&lt;br /&gt;
&lt;br /&gt;
== Advanced File Operations ==&lt;br /&gt;
&lt;br /&gt;
The File Browser offers a number of special file operations which may be seldom needed, but no less useful to have at your command, when needed.&lt;br /&gt;
&lt;br /&gt;
=== File Splitting and Joining ===&lt;br /&gt;
&lt;br /&gt;
File splitting (into a number of smaller files) is useful when you have huge&lt;br /&gt;
files (typically traces, dumps or debug output) which are too large to be edited&lt;br /&gt;
in one piece, too large to be stored on a particular storage device (think of the 4Gb size limit of Windows file systems or USB sticks), or which are too large to be sent via mail or other communication channels (think of mail-attachment size limits).&lt;br /&gt;
&lt;br /&gt;
There are two split functions, to split a large file into pieces by size (e.g. pieces of 1Gb) or to split into pieces by line-number count (eg. pieces with 100k lines each).&lt;br /&gt;
&lt;br /&gt;
The functions are found on the File Browser&#039;s popup menu (select one or multiple files first) under &amp;quot;&#039;&#039;Tools&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;File Operations&#039;&#039;&amp;quot; - &amp;quot;&#039;&#039;Split&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
There are actually two such menu items, &amp;quot;&#039;&#039;Split by Size&#039;&#039;&amp;quot; and &amp;quot;&#039;&#039;Split by #Lines&#039;&#039;&amp;quot;.&lt;br /&gt;
It will split a file named &amp;quot;x&amp;quot; into parts &amp;quot;x.1&amp;quot;, &amp;quot;x.2&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
The reverse operation is &amp;quot;&#039;&#039;Join&#039;&#039;&amp;quot;, which is found under the same submenu. This takes a number of pieces and rejoins them into one big file.&lt;br /&gt;
&lt;br /&gt;
=== Copying Corrupted Files ===&lt;br /&gt;
&lt;br /&gt;
This operation may be helpful to extract as much as possible data from partially broken files. I.e. to copy files form a disks or tapes with errors.&lt;br /&gt;
It will copy the file blockwise and skip over bad blocks when an error is encountered (instead of the regular copy operation, which stops when a read error happens). Instead of stopping, it will retry to copy the bad data block a few times, and then write a block of zeros to the output and continue to copy (or try to copy) the rest of the file or tape.&lt;br /&gt;
&lt;br /&gt;
=== Truncate File ===&lt;br /&gt;
&lt;br /&gt;
This truncates a file to a given size, effectively cutting off the tail of a file.&lt;br /&gt;
&lt;br /&gt;
=== File Differences ===&lt;br /&gt;
&lt;br /&gt;
To generate and display the differences between the two files,&lt;br /&gt;
select two files in the top file list, then right click and choose &amp;quot;&amp;lt;I&amp;gt;More&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Compare with each Other&amp;lt;/I&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Alternatively, choose &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Differences&amp;lt;/I&amp;gt;&amp;quot; from the main menu. If only one file is selected, that operation asks for the name of a second file (useful if the other file is found in another directory). If no 2nd file is selected, the file&#039;s contents is compared against the text editor&#039;s contents.&lt;br /&gt;
&lt;br /&gt;
=== Directory Differences ===&lt;br /&gt;
&lt;br /&gt;
The main menu&#039;s function &amp;quot;&amp;lt;I&amp;gt;Tools&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;File Operations&amp;lt;/I&amp;gt;&amp;quot; &amp;amp;rarr; &amp;quot;&amp;lt;I&amp;gt;Directory Differences&amp;lt;/I&amp;gt;&amp;quot; &lt;br /&gt;
will recursively visit two folders and display information about files missing in either directory or being different.&lt;br /&gt;
&lt;br /&gt;
=== Find Files with Same Contents ===&lt;br /&gt;
&lt;br /&gt;
Quickly searches a recursive folder hierarchy for files containing the same data. This is very fast and can quickly find duplicates, even among thousands of files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Back to [[Online_Documentation#Tools | Online Documentation]].&lt;br /&gt;
&amp;lt;br&amp;gt;Back to [[More_Tools/en | Tools]].&lt;br /&gt;
&lt;br /&gt;
[[Category: Tools ]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31308</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31308"/>
		<updated>2026-05-26T16:13:11Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via FileBrowser)&lt;br /&gt;
* Feature: public/private keypair generation via a FileBrowser menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed Number stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** Recognize type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% speedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31307</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31307"/>
		<updated>2026-05-26T15:31:47Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS, Ruby, Dart and Smalltalk bridges (combined cert+key PEM files supported)&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via FileBrowser)&lt;br /&gt;
* Feature: public/private keypair generation via a FileBrowser menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed Number stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** Recognize type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: file transfer (getFile/putFile) and makeDirectory for all bridges (C, Python, NodeJS, Ruby, Dart, Smalltalk)&lt;br /&gt;
* Feature: defineFunction/callFunction support for NodeJS, Ruby and Smalltalk bridges&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
* Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
* Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
* Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Performance: speedup of cryptographic algorithms (affects key generation and other)&lt;br /&gt;
* Performance: tuned loading of stored ets/elf files (30-40% spedup)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31303</id>
		<title>Release Notes 26.x</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Release_Notes_26.x&amp;diff=31303"/>
		<updated>2026-05-26T13:41:16Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* Release 26.1 (Q2 2026) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See also: [[Release Notes 25.x]]&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Release 26.2 (Q4 2026) ==&lt;br /&gt;
&lt;br /&gt;
== Release 26.1 (Q2 2026) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Feature: &#039;&#039;&#039;NEW&#039;&#039;&#039; [[KI Coding Plugin|&#039;&#039;&#039;AI Coding&#039;&#039;&#039;]] plugin (chat-assistant integration for the activity editor and class browser):&lt;br /&gt;
** supports both &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039;, &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; or &#039;&#039;&#039;Llama&#039;&#039;&#039; as backends, switchable from the settings dialog (Plugins → AI Coding);&amp;lt;br&amp;gt;API keys are stored per provider so you can flip between them without re-entering&lt;br /&gt;
** Toolbar / class-browser menu adapts to the active provider — reads &amp;quot;&#039;&#039;Ask Claude&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;Ask ChatGPT&#039;&#039;&amp;quot;, updates live when the provider is switched&lt;br /&gt;
** Menu actions: Explain code/method, Suggest improvement, Generate test, Generate doc-comment (fills the Documentation tab and pin comments), Find bugs, Custom prompt; &amp;quot;[Apply]&amp;quot; can install proposed code directly into the activity body or compile a proposed helper method into a class&lt;br /&gt;
** Chat window streams responses live (Server-Sent Events) and shows running token count + estimated cost in the title; supports image attachments (screenshots / PNG-JPG files)&lt;br /&gt;
** model, API key, endpoint and max-tokens are configurable via the Claude settings dialog&lt;br /&gt;
* Feature: SSL1.3 support (without external SSL library)&lt;br /&gt;
* Feature: SSL support for C, Python, NodeJS and Ruby bridges&lt;br /&gt;
* Feature: SSH builtin, plus SSH and SFTP clients (both via FileBrowser)&lt;br /&gt;
* Feature: public/private keypair generation via a FileBrowser menu (for easy SSH setup)&lt;br /&gt;
* Feature: Qt-Plugin supports Qt6.8 ([[QT_Testing/en#ExpeccoTestService_Library%3A_Delivery_in_Expecco_Versions|Delivered versions for QT and build environment]])&lt;br /&gt;
* Feature: improved search text box behavior in text editors (type RETURN, CMD-f or CMD-b while box is open) and back to original position button added.&lt;br /&gt;
* Feature: Improved/Fixed Number stack:&lt;br /&gt;
** Enhanced multiprecision numbers (eg. &amp;lt;float&amp;gt;q, &amp;lt;float&amp;gt;Q constants in freeze values)&lt;br /&gt;
** Float32 numbers (&amp;lt;float&amp;gt;f)&lt;br /&gt;
** Integer freezeValues in exponential notation (eg. 1e5)&lt;br /&gt;
** Recognize type specific infinities eg. &amp;quot;inf.0&amp;quot;, &amp;quot;inf.0f&amp;quot;, &amp;quot;inf.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** Recognize type specific NaNs eg. &amp;quot;nan.0&amp;quot;, &amp;quot;nan.0f&amp;quot;, &amp;quot;nan.0q&amp;quot; etc. (useful when parsing/receiving values from the outside world)&lt;br /&gt;
** fixed/added missing trigonometric functions for multiprecision floats and complex numbers (eg. arcTan)&lt;br /&gt;
** inspector (and activitylog as a consequence) show the type of a float (suffix &#039;f&#039;, &#039;q&#039;, &#039;Q&#039; etc.)&lt;br /&gt;
&lt;br /&gt;
* Feature: Workflow editor — improved orthogonal routing of connections:&lt;br /&gt;
** connections now detour around blocks, freeze values and annotation boxes instead of cutting through them&lt;br /&gt;
** connections from a compound block&#039;s input-pin descriptions are bundled into a bus column next to the source pin&lt;br /&gt;
** end-stub avoidance no longer fires on near-misses (strict overlap check, no clearance margin)&lt;br /&gt;
** routing prefers the source-side bend when the source step has multiple sibling pins&lt;br /&gt;
* Feature: Workflow editor — improved naïve autolayout: added horizontal and vertical expansion passes that spread adjacent blocks apart for clearer connection routing&lt;br /&gt;
* Feature: function to upload/download files from/to remote CBridges (for testData and binaries)&lt;br /&gt;
* Performance: execution of elementary Smalltalk and JavaScript actions tuned for speed (Jitter improvements)&lt;br /&gt;
* Feature: OLE for 64 bit architectures&lt;br /&gt;
* Feature: optional HTTPS for the AIDYMO and license server — drop a PEM cert+key into &amp;lt;code&amp;gt;--workDir&amp;lt;/code&amp;gt; (combined &amp;lt;code&amp;gt;server.pem&amp;lt;/code&amp;gt;, or split&amp;lt;code&amp;gt;fullchain.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;privkey.pem&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;cert.pem&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;key.pem&amp;lt;/code&amp;gt;) and the service binds TLS automatically; informational hostname is derived from the certificate (SAN-aware, wildcard- and multi-SAN-safe)&lt;br /&gt;
* Feature: more search options in the [[How_to_Program/en#MethodFinder:_Find_Functions_by_Example | MethodFinder]]. &lt;br /&gt;
*Fix: many fixes related to DPI scaling. I.e. when multiple monitors are configured with different scaling (especially different from 100%). Includes scaling of fonts, bitmap and UI components (widgets).&lt;br /&gt;
*Fix: display of very long lines in a text editor/inspector (workaround a Windows 16bit line limit)&lt;br /&gt;
*Fix: due to a bug in enumeration datatypes, the size of &amp;quot;.ets&amp;quot; files grew over time to huge sizes (some information was redundantly and identically written twice). This had no effect on the execution, but made load/save times almost unacceptably long by storing/reloading unneeded data. When loaded and saved again, this will fix those ets files automatically (there is also a patch for older versions)&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31288</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31288"/>
		<updated>2026-05-25T14:45:12Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Tensorflow) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;).&amp;lt;br&amp;gt;Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models are to be placed into the &#039;&#039;Model Location&#039;&#039; folder, which is found in the Ollama window under &#039;&#039;Settings&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;You can also pull models with &amp;quot;&amp;lt;CODE&amp;gt;ollama pull &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot; or &amp;quot;&amp;lt;CODE&amp;gt;ollama run &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot;. On Windows, the ollama command is typically found in your personal &amp;quot;&amp;lt;CODE&amp;gt;AppData\Local\Programs\Ollama&amp;lt;/CODE&amp;gt;&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
Models to consider (as of May 2026): we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model running on your local machine).&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware that models are huge, typically in the order of tens of gigabytes.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31287</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31287"/>
		<updated>2026-05-25T14:44:47Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models are to be placed into the &#039;&#039;Model Location&#039;&#039; folder, which is found in the Ollama window under &#039;&#039;Settings&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;You can also pull models with &amp;quot;&amp;lt;CODE&amp;gt;ollama pull &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot; or &amp;quot;&amp;lt;CODE&amp;gt;ollama run &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot;. On Windows, the ollama command is typically found in your personal &amp;quot;&amp;lt;CODE&amp;gt;AppData\Local\Programs\Ollama&amp;lt;/CODE&amp;gt;&amp;quot; folder.&lt;br /&gt;
&lt;br /&gt;
Models to consider (as of May 2026): we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model running on your local machine).&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware that models are huge, typically in the order of tens of gigabytes.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31286</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31286"/>
		<updated>2026-05-25T14:33:12Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models to consider: we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model running on your local machine).&amp;lt;br&amp;gt;Models are to be placed into the &#039;&#039;Model Location&#039;&#039; folder, which is found in the Ollama window under &#039;&#039;Settings&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;You can also pull models with &amp;quot;&amp;lt;CODE&amp;gt;ollama pull &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot; or &amp;quot;&amp;lt;CODE&amp;gt;ollama run &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot;. On Windows, the ollama command is typically found in your personal &amp;quot;&amp;lt;CODE&amp;gt;AppData\Local\Programs\Ollama&amp;lt;/CODE&amp;gt;&amp;quot; folder.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware that models are huge, typically in the order of tens of gigabytes.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31285</id>
		<title>KI Coding Plugin</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=KI_Coding_Plugin&amp;diff=31285"/>
		<updated>2026-05-25T14:27:19Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* KI Coding Plugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= KI Coding Plugin =&lt;br /&gt;
&lt;br /&gt;
Das KI Coding Plugin bindet einen Large Language Model (LLM) basierten&lt;br /&gt;
KI-Assistenten in den Activity-Editor (Aktivitäten-Code), den&lt;br /&gt;
Compound-Netzwerk-Editor, den Dokumentations-Editor und in den&lt;br /&gt;
ST/X Class Browser ein.  Das Plugin unterstützt zwei Anbieter, die im&lt;br /&gt;
Einstellungsdialog umschaltbar sind:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Anthropic Claude&#039;&#039;&#039; (claude-opus-4-7, claude-sonnet-4-6, claude-haiku-4-5)&lt;br /&gt;
* &#039;&#039;&#039;OpenAI ChatGPT&#039;&#039;&#039; (gpt-4o, gpt-4o-mini, gpt-4.1, gpt-4.1-mini, gpt-4.1-nano, o1, o3)&lt;br /&gt;
* &#039;&#039;&#039;Ollama&#039;&#039;&#039; (codellama:7b, codellama:13b)&lt;br /&gt;
Je nach gewähltem Anbieter erscheint die Toolbar-Schaltfläche als&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Ask Claude&amp;quot;&#039;&#039;&#039; bzw. &#039;&#039;&#039;&amp;quot;Ask ChatGPT&amp;quot;&#039;&#039;&#039;; das Einstellungs-Tab&lt;br /&gt;
heißt &#039;&#039;&#039;&amp;quot;AI Coding&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Aktivitäten-Editor ==&lt;br /&gt;
&lt;br /&gt;
Im Aktivitäten-Code-Editor erscheint in der Toolbar eine Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit folgenden Aktionen:&lt;br /&gt;
&lt;br /&gt;
* Open KI Window — öffnet das eigenständige Chat-Fenster&lt;br /&gt;
* Explain code — erklärt den Code der aktuellen Aktivität&lt;br /&gt;
* Suggest improvement — schlägt Verbesserungen vor&lt;br /&gt;
* Find bugs — sucht nach Fehlern, Race Conditions, nil-Handling-Problemen&lt;br /&gt;
* Generate doc-comment — generiert eine Aktivitäts-Dokumentation inklusive Pin-Kommentaren und füllt den Documentation-Tab&lt;br /&gt;
* Custom prompt... — freier Prompt; der Aktivitäts-Code wird als Kontext mitgesendet&lt;br /&gt;
* Set model ▸ — Untermenü mit den Modellen des aktiven Anbieters (das aktuell aktive ist mit &#039;&#039;(active)&#039;&#039; markiert)&lt;br /&gt;
* Set provider ▸ — nur sichtbar, wenn API-Schlüssel für mehr als einen Anbieter konfiguriert sind; Untermenü zum Umschalten zwischen Claude und ChatGPT&lt;br /&gt;
&lt;br /&gt;
Code-Vorschläge können mit &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (direkt am jeweiligen&lt;br /&gt;
Code-Block im Chat oder über die obere Apply-Schaltfläche) in den&lt;br /&gt;
Aktivitäts-Body übernommen werden.  Vom KI gelieferte Smalltalk/X&lt;br /&gt;
Hilfsmethoden (Form: &amp;lt;code&amp;gt;Klasse &amp;gt;&amp;gt; selector&amp;lt;/code&amp;gt;) werden nach&lt;br /&gt;
Rückfrage in die genannte Klasse compiliert.&lt;br /&gt;
&lt;br /&gt;
== Compound (Netzwerk) Editor ==&lt;br /&gt;
&lt;br /&gt;
Auf der Toolbar von Compound-Worksheets erscheint dieselbe&lt;br /&gt;
Schaltfläche, beschränkt auf die für Netze sinnvollen Aktionen&lt;br /&gt;
(Open KI Window, Generate doc-comment) — ebenfalls mit den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dokumentations-Editor ==&lt;br /&gt;
&lt;br /&gt;
Der Dokumentations-Tab der Block-Description (Editor für Test-Cases,&lt;br /&gt;
Test-Plans und Aktivitäten) trägt dieselbe Toolbar-Schaltfläche&lt;br /&gt;
&amp;quot;Ask Claude&amp;quot; / &amp;quot;Ask ChatGPT&amp;quot; mit den Einträgen&lt;br /&gt;
&#039;&#039;&#039;Open KI Window&#039;&#039;&#039;, &#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; sowie den&lt;br /&gt;
Untermenüs &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Generate doc-comment&#039;&#039;&#039; analysiert den aktuellen Block (Name,&lt;br /&gt;
vorhandene Beschreibung, Eingangs-/Ausgangs-Pins, Sub-Steps eines&lt;br /&gt;
Compound-Netzes, referenzierte Environment-Variablen) und schlägt&lt;br /&gt;
eine vollständige Block- und Pin-Dokumentation vor.&lt;br /&gt;
&lt;br /&gt;
Ist der Block schreibgeschützt (importierte Library, RTL-Lizenz),&lt;br /&gt;
fragt &#039;&#039;&#039;[Apply]&#039;&#039;&#039; nach, ob der Block freigeschaltet und die&lt;br /&gt;
Dokumentation eingetragen werden soll.&lt;br /&gt;
&lt;br /&gt;
== Class Browser (ST/X) ==&lt;br /&gt;
&lt;br /&gt;
Im Class Browser stehen die Aktionen unter dem &#039;&#039;&#039;AI&#039;&#039;&#039;-Untermenü&lt;br /&gt;
sowie im Selektor-Kontextmenü zur Verfügung.  Die Aktionen&lt;br /&gt;
operieren auf der aktuell ausgewählten Methode (Klasse + Selektor +&lt;br /&gt;
Quelltext werden als Kontext mitgesendet).  &#039;&#039;&#039;[Apply]&#039;&#039;&#039; kann das&lt;br /&gt;
Resultat direkt in die Methode der aktiven Klasse einbauen.&lt;br /&gt;
Auch hier sind &#039;&#039;&#039;Set model&#039;&#039;&#039; und ggf. &#039;&#039;&#039;Set provider&#039;&#039;&#039; als&lt;br /&gt;
Untermenüs verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Chat-Fenster ==&lt;br /&gt;
&lt;br /&gt;
Das eigenständige Chat-Fenster trägt den Titel&lt;br /&gt;
&#039;&#039;&#039;AI Coding [&amp;amp;lt;Produkt&amp;amp;gt; / &amp;amp;lt;Modell&amp;amp;gt;]&#039;&#039;&#039; (z.B.&lt;br /&gt;
&amp;quot;AI Coding [Claude / claude-opus-4-7]&amp;quot;) und zeigt nach jedem Turn&lt;br /&gt;
den Tokenverbrauch und die kumulierten Kosten — sofern Preise für&lt;br /&gt;
das gewählte Modell hinterlegt sind.  Anbieter- und Modellwechsel&lt;br /&gt;
im Einstellungsdialog werden live übernommen.&lt;br /&gt;
&lt;br /&gt;
Das Transkript ist als vertikales Panel von &amp;quot;Karten&amp;quot; aufgebaut:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Prosa-Karten&#039;&#039;&#039; enthalten den fließenden Text der Antwort; Zeilen werden auf die Fenster-Breite umgebrochen.&lt;br /&gt;
* &#039;&#039;&#039;Code-Karten&#039;&#039;&#039; (eingerahmt) entstehen aus markdown-Code-Blöcken (&amp;lt;code&amp;gt;```...```&amp;lt;/code&amp;gt;) und sind als &#039;&#039;&#039;Workspace&#039;&#039;&#039; editierbar — das Standard-Smalltalk-Popup-Menü bietet doIt / printIt / inspectIt, ein &amp;lt;code&amp;gt;TestCase&amp;lt;/code&amp;gt;-&amp;lt;code&amp;gt;simulatedSelf&amp;lt;/code&amp;gt; ist gesetzt, so dass &amp;lt;code&amp;gt;self assert:... equals:...&amp;lt;/code&amp;gt; direkt ausgeführt werden kann.  Lange Blöcke scrollen innerhalb der Karte.  Rechts oben sitzen die Schaltflächen &#039;&#039;&#039;[Apply]&#039;&#039;&#039; (sofern für den Kontext sinnvoll) und &#039;&#039;&#039;[⎘ Copy]&#039;&#039;&#039;; links wird der Sprachtag (smalltalk, python, …) angezeigt.&lt;br /&gt;
* &#039;&#039;&#039;Doku-Karten&#039;&#039;&#039; (volle Breite, Prosa) entstehen aus dem speziellen &amp;lt;code&amp;gt;```doc&amp;lt;/code&amp;gt;-Block, den der Dokumentations-Generator anfordert; Inhalt ist die Vorschlags-Dokumentation für Block- und Pin-Beschreibungen.&lt;br /&gt;
&lt;br /&gt;
Scroll-Lock: solange der Anwender bereits am unteren Ende des&lt;br /&gt;
Transkripts steht, folgt die Anzeige neu eintreffenden Karten&lt;br /&gt;
automatisch; nach manuellem Hochscrollen bleibt die Position stehen.&lt;br /&gt;
&lt;br /&gt;
Bilder können als Anhang versendet werden (Screenshot oder&lt;br /&gt;
PNG/JPG-Datei).  Anhänge funktionieren mit beiden Anbietern; bei&lt;br /&gt;
OpenAI nur mit vision-fähigen Modellen (gpt-4o-Familie).&lt;br /&gt;
&lt;br /&gt;
== Einstellungen (AI Coding) ==&lt;br /&gt;
&lt;br /&gt;
Im Einstellungsdialog unter &#039;&#039;&#039;Plugins → AI Coding&#039;&#039;&#039; (bzw. unter&lt;br /&gt;
&#039;&#039;&#039;Tools → AI Coding&#039;&#039;&#039; im Smalltalk-Launcher) werden konfiguriert:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Provider&#039;&#039;&#039; — Anthropic oder OpenAI.  Beim Wechsel werden API-URL und Default-Modell entsprechend angepasst; der gespeicherte API-Schlüssel des jeweiligen Anbieters wird geladen.&lt;br /&gt;
* &#039;&#039;&#039;API Key&#039;&#039;&#039; — Schlüssel des aktuell gewählten Anbieters.  Die Schlüssel werden pro Anbieter getrennt gespeichert (&amp;lt;code&amp;gt;#claudeApiKey_anthropic&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;#claudeApiKey_openai&amp;lt;/code&amp;gt;), so dass zwischen den Anbietern ohne erneute Eingabe gewechselt werden kann.  Das Setzen des Schlüssels erfolgt ausschließlich über diesen Dialog.&lt;br /&gt;
* &#039;&#039;&#039;Model&#039;&#039;&#039; — ein Modell aus der Liste des aktiven Anbieters oder ein selbst eingegebener Modellname.  Kann auch direkt über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü in den Editor-Toolbars umgeschaltet werden.&lt;br /&gt;
* &#039;&#039;&#039;Max output tokens&#039;&#039;&#039; — maximale Antwortlänge.&lt;br /&gt;
* &#039;&#039;&#039;API URL&#039;&#039;&#039; — nur zu ändern für eigene Proxies / Gateways.  Standard: &amp;lt;code&amp;gt;https://api.anthropic.com/v1/messages&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;https://api.openai.com/v1/chat/completions&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== API-Schlüssel beschaffen ==&lt;br /&gt;
&lt;br /&gt;
* Anthropic: [https://console.anthropic.com console.anthropic.com], Schlüsselformat &amp;lt;code&amp;gt;sk-ant-...&amp;lt;/code&amp;gt;.&lt;br /&gt;
* OpenAI: [https://platform.openai.com/api-keys platform.openai.com/api-keys], Schlüsselformat &amp;lt;code&amp;gt;sk-...&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;sk-proj-...&amp;lt;/code&amp;gt;.  Voraussetzung ist ein aufgeladenes Konto (Mindestbetrag derzeit USD 5).&lt;br /&gt;
&lt;br /&gt;
== Datenschutz / Datenfluss ==&lt;br /&gt;
&lt;br /&gt;
Bei aktivem Anbieter &#039;&#039;&#039;Anthropic&#039;&#039;&#039; gehen die Anfragen direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.anthropic.com&amp;lt;/code&amp;gt;, bei &#039;&#039;&#039;OpenAI&#039;&#039;&#039; direkt an&lt;br /&gt;
&amp;lt;code&amp;gt;api.openai.com&amp;lt;/code&amp;gt;.  Es gibt keinen eXept-seitigen Proxy oder&lt;br /&gt;
Zwischenspeicher.  Mit dem Aktivitäts-Quelltext bzw. den Methoden-&lt;br /&gt;
Quelltexten werden auch Pin-Beschreibungen, Sub-Step-Namen und&lt;br /&gt;
referenzierte Environment-Variablen aus dem Block-Description-Modell&lt;br /&gt;
als Kontext versendet.&lt;br /&gt;
&lt;br /&gt;
Bei Benutzung von Anthropic API-Tokens - wie hier der Fall - werden laut Anthropic die Daten nicht zum Training des KI-Modells genutzt ([https://privacy.claude.com/de/articles/7996868-werden-meine-daten-fur-das-modelltraining-verwendet Anthropic Erkärung dazu]).&lt;br /&gt;
&lt;br /&gt;
== Tipps ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Mehrere Konversationen&#039;&#039;&#039;: der Chat ist ein Singleton — eine neue Anfrage über ein Browser-/Editor-Menü startet jedesmal eine &#039;&#039;&#039;neue&#039;&#039;&#039; Konversation. Folge-Fragen (Klärung, Vertiefung) gehen über das Eingabefeld in derselben Konversation.&lt;br /&gt;
* &#039;&#039;&#039;Vorsicht:&#039;&#039;&#039; Die Größe der übertragenen Daten (auch die aus dem Chatfenster) geht in die Kostenberechnung ein. Deshalb immer eine neue Konversation starten, wenn es um ein neues Thema geht.&lt;br /&gt;
* &#039;&#039;&#039;Modell wechseln&#039;&#039;&#039;: Für schnelle Routine-Antworten Sonnet, für schwierige Refactorings Opus. Über das &#039;&#039;&#039;Set model&#039;&#039;&#039;-Untermenü direkt aus der Toolbar oder über die Settings.&lt;br /&gt;
* &#039;&#039;&#039;Anbieter wechseln&#039;&#039;&#039;: Sind Schlüssel für beide Anbieter konfiguriert, schaltet das &#039;&#039;&#039;Set provider&#039;&#039;&#039;-Untermenü ohne Umweg über den Settings-Dialog um.&lt;br /&gt;
* &#039;&#039;&#039;Code direkt ausführen&#039;&#039;&#039;: In Code-Karten kann markierter Smalltalk-Code per doIt / printIt / inspectIt direkt evaluiert werden — praktisch z.B. um vom Modell vorgeschlagene SUnit-Asserts gleich auszuprobieren, ohne den Code erst in einen Workspace zu kopieren.&lt;br /&gt;
* &#039;&#039;&#039;Custom prompt&#039;&#039;&#039; eignet sich gut für „warum macht Methode X es so und nicht so?&amp;quot; oder „schreib mir einen ParameterizedTest dazu mit folgenden Daten: …&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Plugin]]&lt;br /&gt;
[[Kategorie:Erweiterung]]&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31284</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31284"/>
		<updated>2026-05-25T14:25:06Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models to consider: we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model running on your local machine).&amp;lt;br&amp;gt;Models are to be placed into the &#039;&#039;Model Location&#039;&#039; folder, which is found in the Ollama window under &#039;&#039;Settings&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;You can also pull models with &amp;quot;&amp;lt;CODE&amp;gt;ollama pull &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot; or &amp;quot;&amp;lt;CODE&amp;gt;ollama run &amp;lt;modelName&amp;gt;&amp;lt;/CODE&amp;gt;&amp;quot;. On Windows, the ollama command is typically found in your personal &amp;quot;&amp;lt;CODE&amp;gt;AppData\Local\Programs\Ollama&amp;lt;/CODE&amp;gt;&amp;quot; folder.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31283</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31283"/>
		<updated>2026-05-25T14:22:58Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Ollama) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models to consider: we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model). Models are to be placed into the &#039;&#039;Model Localtion&#039;&#039; folder, which is found in the ollama window under &#039;&#039;Settings&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;You can also pull models with &amp;quot;ollama pull &amp;lt;modelName&amp;gt;&amp;quot; or &amp;quot;allama run &amp;lt;modelName&amp;gt;&amp;quot;. On WIndows, the ollama command is typically found in your personal AppData\Local\Programs\Ollama&amp;quot; folder.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31282</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31282"/>
		<updated>2026-05-25T14:03:13Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Tensorflow) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (eg. &amp;quot;pip install tensorflow&amp;quot;). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models to consider: we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model). Models are to be placed into the &#039;&#039;Model Localtion&#039;&#039; folder, which is found in the ollama window under &#039;&#039;Settings&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
	<entry>
		<id>https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31281</id>
		<title>Installing additional Frameworks/en</title>
		<link rel="alternate" type="text/html" href="https://doc.expecco.de/index.php?title=Installing_additional_Frameworks/en&amp;diff=31281"/>
		<updated>2026-05-25T14:02:38Z</updated>

		<summary type="html">&lt;p&gt;Cg: /* AI (Tensorflow) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If you intent to execute actions written for Java, Node, Python, .NET, C etc.,&lt;br /&gt;
or to test Java-, Windows- or mobile applications, additional frameworks have to be installed on your machine.&lt;br /&gt;
&lt;br /&gt;
Mostly for legal reasons, but also because you will probably want to install a most up-to-date version, we do not bundle those with the expecco installation (except for a python setup, as noted below).&lt;br /&gt;
&lt;br /&gt;
Please make sure that any required framework is installed, and the commands are found by expecco&lt;br /&gt;
(although you will usually get a more or less descriptive warning from expecco later, if anything goes wrong. If in doubt, open the Transcript window and/or start expecco in a console window as &amp;quot;&amp;lt;code&amp;gt;expecco.com&amp;lt;/code&amp;gt; to see any error or warning messages). &lt;br /&gt;
&lt;br /&gt;
If they are already installed, but expecco fails to execute one of them, take a look at the PATH setting and/or the expecco &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; settings. There, click on buttons labeled &amp;quot;?&amp;quot; to verify the installed version(s). &lt;br /&gt;
&lt;br /&gt;
However, the recommendend setup is to only specify the command name in the settings, and ensure that the PATH variable is set correctly, to let expecco find the command via the PATH. &lt;br /&gt;
&amp;lt;br&amp;gt;The PATH should be set in your &amp;quot;&amp;lt;code&amp;gt;.login&amp;lt;/code&amp;gt;&amp;quot; (Unix) or &amp;quot;&amp;lt;code&amp;gt;autoexec.bat&amp;lt;/code&amp;gt;&amp;quot; (Windows) file accordingly.&lt;br /&gt;
&lt;br /&gt;
== Required Frameworks Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Feature !! Required Framework(s)&lt;br /&gt;
|-&lt;br /&gt;
| Java/Groovy Actions || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| NodeJS Actions || node&lt;br /&gt;
|-&lt;br /&gt;
| Python Actions || Python3.x (recommended)&amp;lt;br&amp;gt;or: Python2.x (for older Python code)&lt;br /&gt;
|-&lt;br /&gt;
| Jython Actions || Java JRE (Java Runtime Environment) or JDK and Jython&lt;br /&gt;
|-&lt;br /&gt;
| Iron Python Actions || .NET CLR&amp;lt;br&amp;gt;or: Mono (on non-Windows systems)&lt;br /&gt;
|-&lt;br /&gt;
| Ruby Actions || ruby&lt;br /&gt;
|-&lt;br /&gt;
| Java GUI Automation || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;or: JDK (recommended)&lt;br /&gt;
|-&lt;br /&gt;
| Windows GUI Automation || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| WebTest (Selenium Webdriver) || JRE (Java Runtime Environment)&amp;lt;br&amp;gt;webDrivers matching your web-browser version&lt;br /&gt;
|-&lt;br /&gt;
| Mobile Test (Appium) || JRE (Java Runtime Environment)&lt;br /&gt;
|-&lt;br /&gt;
| Bridged C Actions || C compiler toolchain (GCC, Clang, VisualC, Mingw or Borland)&lt;br /&gt;
|-&lt;br /&gt;
| Octave (Matlab scripts) || GNU Octave or a real Matlab&lt;br /&gt;
|-&lt;br /&gt;
| OCR (VNC, Screen Automation) || Tesseract&amp;lt;br&amp;gt;language specific tessdata files&lt;br /&gt;
|-&lt;br /&gt;
| Vector/Canoe Plugin || .NET CLR&lt;br /&gt;
|-&lt;br /&gt;
| OPC Library || Python3 + opcua package&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Java_Installation&amp;quot;&amp;gt;Java Installation&amp;lt;/div&amp;gt; (for Groovy Actions, Web- and Mobile Testing) ==&lt;br /&gt;
You can either install a plain Java Runtime Environment (JRE) or a full Java Development Kit (JDK). If only a JRE is installed, some functions will not work,&lt;br /&gt;
and we therefore recommend a JDK - typically at its standard location, &amp;quot;&amp;lt;CODE&amp;gt;C:\Program Files\Java\jdk-xxx&amp;lt;/CODE&amp;gt;&amp;quot; (Windows), so it will run out of the box.&lt;br /&gt;
&amp;lt;br&amp;gt;Expecco will try to figure out if and where Java was installed, but it it also possible to specify explicit paths via the settings dialog.&lt;br /&gt;
&lt;br /&gt;
Notice, that due to changed regulations by Oracle (i.e. legal restrictions), we may no longer provide a Java installation bundled with expecco;&lt;br /&gt;
you should navigate to the Oracle (or OpenJDK) website and install it from there.&lt;br /&gt;
&lt;br /&gt;
Also notice, that on most systems, a Java is already installed, but it may be a runtime environment only.&lt;br /&gt;
Please verify, that a JDK is installed for the full set of features.&lt;br /&gt;
&lt;br /&gt;
The expecco installation does include some required jar files (eg. &amp;quot;groovy.jar&amp;quot;, selenium jars and drivers etc.), but you may want to verify that they are the most up-to-date versions. &lt;br /&gt;
&lt;br /&gt;
==== Selenium WebDriver ====&lt;br /&gt;
Especially the Selenium drivers (which are used to remote-control a Webbrowser when testing or automating graphical user interfaces in a browser) depend on the concrete browser version (i.e. Chrome version, Firefox version, etc.). Older drivers do not always work with a newer browser. &lt;br /&gt;
&lt;br /&gt;
The deployed installation package includes a number of drivers for versions which were in use at that time, but especially due to automatic updates, these may be outdated on your machine. Please follow the instructions given by expecco and/or read [[Selenium_WebDriver_Plugin/en#Update_WebDriver|&amp;quot;Update WebDriver&amp;quot;]] when it encounters a problem.&lt;br /&gt;
&amp;lt;br&amp;gt;The GUIBrowser&#039;s connect dialog will check for version compatibility and offer an update function if required.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;DOTNET_Installation&amp;quot;&amp;gt;.NET Installation&amp;lt;/div&amp;gt; (for the .NET bridge, Windows Apps, IronPython Actions and some Plugins &amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;) ==&lt;br /&gt;
&lt;br /&gt;
On Windows, a .NET framework is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;On Unix/Linux systems, you can install &amp;quot;Mono&amp;quot;, which may provide enough functionality for your needs.&lt;br /&gt;
&amp;lt;br&amp;gt;Be aware, that some functions - especially GUI functions - may not be present or may not work perfectly (if at all) under Mono.&lt;br /&gt;
&lt;br /&gt;
Mono can be downloaded from [https://www.mono-project.com/download/stable/ the Mono project web site].&lt;br /&gt;
&lt;br /&gt;
1) for example, the Vector/Canoe plugin requires .NET (among others).&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Node_Installation&amp;quot;&amp;gt;Node Installation&amp;lt;/div&amp;gt; (for Node.js Actions) ==&lt;br /&gt;
&lt;br /&gt;
Goto [ https://nodejs.org/en ] or [ https://nodejs.org/de/download/ ] and select the appropriate package for your machine.&lt;br /&gt;
When asked if additional packages are to be downloaded, answer &amp;quot;yes&amp;quot;. &lt;br /&gt;
(Under Windows, VisualStudio build tools will then also be installed, in case any node module needs to be compiled from C/C++ code).&lt;br /&gt;
&lt;br /&gt;
Open the node interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Node&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;node&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings by clicking on the &amp;quot;?&amp;quot;-button. If found, its version should be shown.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed node while expecco was active), or enter the path to your node interpreter into the path field. You may even have to restart your cmd/shell session, in case the old shell environment does not contain the path to the new installed node.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Python_Installation&amp;quot;&amp;gt;Python Installation&amp;lt;/div&amp;gt; (for Python Actions) ==&lt;br /&gt;
&lt;br /&gt;
Expecco is delivered with an installation package for a relatively new Python version (currently Python 3.11.6 (expecco 23.2)), but of course, new versions are constantly released and the included Python might be outdated.&amp;lt;br&amp;gt;You can (and probably should) download other versions [ https://www.python.org/downloads/ ].&lt;br /&gt;
Notice, that there are both packages for python3.x and python2.7 available, and you may have to install both, depending on the Python code to be executed later (although python2 is more and more becoming obsolete, there may still be frameworks for that old version to be found and used).&lt;br /&gt;
&lt;br /&gt;
You can start by installing a Python3.x version only. &lt;br /&gt;
By the time of writing this document, the most recent Python version is 3.12, but expecco is known to work with older versions.&lt;br /&gt;
Be aware, that there are syntactic differences between Python2.x and Python3.x; for example &amp;quot;&amp;lt;code&amp;gt;print ...&amp;lt;/code&amp;gt;&amp;quot; is a statement in 2.x whereas &amp;quot;&amp;lt;code&amp;gt;print(...)&amp;lt;/code&amp;gt;&amp;quot; is a function call in 3.x.&lt;br /&gt;
&lt;br /&gt;
Open the Python interpreter settings (&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Python&#039;&#039;&amp;quot;) and verify that the &amp;quot;&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;&amp;quot; command is found along your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; variable settings (click on &amp;quot;?&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
[[Bild:PythonSettings.png|700px|PythonSettings]]&lt;br /&gt;
&lt;br /&gt;
=== Python Commands ===&lt;br /&gt;
&lt;br /&gt;
Notice, that there are 3 command fields, which can be set:&lt;br /&gt;
* Python Cmd Path&lt;br /&gt;
:is used if no explicit version is specified in a python action&lt;br /&gt;
* Python3 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python3&lt;br /&gt;
* Python2 Cmd Path&lt;br /&gt;
:is used if the python action explicitly asks for python2&lt;br /&gt;
&lt;br /&gt;
Be aware and reminded, that these are different python interpreter instances: you cannot run both Python2 and Python3 code within the same python interpreter instance.&lt;br /&gt;
&lt;br /&gt;
If not found, either restart expecco (if you installed Python while expecco was active), or enter the full path to your Python interpreter into the path field.&lt;br /&gt;
&lt;br /&gt;
Make sure that the correct Python version is displayed (2.x vs. 3.x) when you click on the &amp;quot;?&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
==== Default cmd paths ====&lt;br /&gt;
&lt;br /&gt;
If no command is specified for one of the Python versions, expecco determines a default path, which is displayed in gray in the corresponding cmd path field.&lt;br /&gt;
&lt;br /&gt;
The following sequence is used until a cmd is found:&lt;br /&gt;
&lt;br /&gt;
*Python-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python3-Cmd-Path&#039;&#039; → &#039;&#039;Python2-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python3-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python-Cmd-Path&#039;&#039; → &#039;&#039;Windows registry entry for Python3&#039;&#039; → &amp;quot;&#039;&#039;python3&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Python2-Cmd is empty:&lt;br /&gt;
: &#039;&#039;Python cmd path&#039;&#039; → &#039;&#039;Windows registry entry for Python2&#039;&#039; → &amp;quot;&#039;&#039;python2&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You can display the effective Python version by clicking on the &amp;quot;?&amp;quot;-button.&lt;br /&gt;
&lt;br /&gt;
=== Debugging python code ===&lt;br /&gt;
&lt;br /&gt;
==== Debugging in expecco ====&lt;br /&gt;
To make your life easier, install a Python debugger; either:&lt;br /&gt;
 pip install debugpy&lt;br /&gt;
or&lt;br /&gt;
 pip install ptvsd&lt;br /&gt;
(they are more or less interchangeable, but &amp;quot;&amp;lt;code&amp;gt;ptvsd&amp;lt;/code&amp;gt;&amp;quot; is outdated (no longer maintained) and replaced by the newer &amp;quot;&amp;lt;code&amp;gt;debugpy&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Without a Python debugger, breakpoints cannot be placed in bridged Python code,&lt;br /&gt;
and you will not get a debugger on Python exceptions&lt;br /&gt;
(you should then see a warning and hint to install &amp;quot;debugpy&amp;quot; on the Transcript and in the info area).&lt;br /&gt;
&lt;br /&gt;
To ensure that the breakpoints are observed, please uncheck the &amp;quot;Disable debugger&amp;quot; checkbox.&lt;br /&gt;
&lt;br /&gt;
=====Problems with debugging=====&lt;br /&gt;
&lt;br /&gt;
======Debugger does not start======&lt;br /&gt;
&lt;br /&gt;
If the path for Python is specified with the variables &amp;quot;&#039;&#039;%ProgramFiles%&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;%ProgramFiles(x86)%&#039;&#039;&amp;quot;, debugpy does not start.&lt;br /&gt;
&lt;br /&gt;
 Python: failed to enable PythonDebugger on port ..: [WinError 2] the system cannot find the file specified.&lt;br /&gt;
&lt;br /&gt;
The remedy is to use the specific path such as &amp;quot;&#039;&#039;C:\Program Files&#039;&#039;&amp;quot; or &amp;quot;&#039;&#039;C:\Program Files (x86)&#039;&#039;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
======Warnings in output======&lt;br /&gt;
&lt;br /&gt;
 Debugger warning: It seems that frozen modules are being used, which may &lt;br /&gt;
 make the debugger miss breakpoints. Please pass -Xfrozen_modules=off&lt;br /&gt;
 to python to disable frozen modules.&lt;br /&gt;
 Note: Debugging will proceed. Set PYDEVD_DISABLE_FILE_VALIDATION=1 to disable this validation.&lt;br /&gt;
&lt;br /&gt;
In Python 3.11, the core modules essential for Python startup are “frozen”. ... &lt;br /&gt;
This reduces the steps in module execution process. Interpreter startup is now 10-15% faster &lt;br /&gt;
in Python 3.11. This has a big impact for short-running programs using Python.&lt;br /&gt;
&lt;br /&gt;
It&#039;s not possible for the debugger to debug frozen modules as the filename is definitely required to hit breakpoints.&lt;br /&gt;
&lt;br /&gt;
To deactivate the warning, set the environment variable PYDEVD_DISABLE_FILE_VALIDATION to 1, as described in the warning. Notice that the bridge needs to be restarted for the environment variable change to be effective (and possibly even expecco, unless you have specified that variable in &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Environment Variables&#039;&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== Debugging in an external IDE ====&lt;br /&gt;
For more in depth debugging, you can run the Python bridge in an external IDE (like PyCharm) and use the debug features of the IDE.&lt;br /&gt;
&lt;br /&gt;
For this, you should save the Python bridge code to a file or copy it to the clipboard using the &amp;quot;&#039;&#039;Copy / Save Bridge Code...&#039;&#039;&amp;quot; button. &lt;br /&gt;
Then open this python file in the IDE, and start in debug mode. &lt;br /&gt;
&lt;br /&gt;
The Expecco Python blocks are called in the line:&lt;br /&gt;
 result = actionFn(actionArgs, actionOutPins)&lt;br /&gt;
&lt;br /&gt;
You can then step into the block code with a breakpoint at these lines.&lt;br /&gt;
&lt;br /&gt;
In order for Expecco to connect to this Python bridge (instead of starting a new one), &lt;br /&gt;
you must first tick the checkbox &amp;quot;&#039;&#039;Connect to already running bridge&#039;&#039;&amp;quot; and terminate any previously running Python bridges (via &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Debugging&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Shutdown all Bridge Connections&#039;&#039;&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== pip2 vs. pip3 vs. pip ===&lt;br /&gt;
To install Python packages, use the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command. However, this command is usually a symbolic link to either &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
You should use &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot; to install packages for python3, and &amp;quot;&amp;lt;Code&amp;gt;pip2&amp;lt;/Code&amp;gt;&amp;quot; for python2. Thus, it is safer to use one of those or &amp;quot;&amp;lt;Code&amp;gt;python3 -m pip install ...&amp;lt;/Code&amp;gt;&amp;quot; instead of &amp;quot;&amp;lt;Code&amp;gt;pip install ...&amp;lt;/Code&amp;gt;&amp;quot; to ensure that the module is installed for the current version.&lt;br /&gt;
&lt;br /&gt;
On some systems, no pip2 command is present by default (and installing python3 will define the &amp;quot;&amp;lt;Code&amp;gt;pip&amp;lt;/Code&amp;gt;&amp;quot; command as an alias to &amp;quot;&amp;lt;Code&amp;gt;pip3&amp;lt;/Code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
To get &amp;quot;pip2&amp;quot; on those systems, execute (on the command line):&lt;br /&gt;
 wget https://bootstrap.pypa.io/get-pip.py&lt;br /&gt;
 python2.7 get-pip.py&lt;br /&gt;
&lt;br /&gt;
Things become even more confusing, if you have multiple python versions installed (for example, python3.7 and python3.9).&amp;lt;br&amp;gt;Then, it is best invoke pip via the python command itself, eg. with:&amp;lt;br&amp;gt;&amp;quot;&amp;lt;code&amp;gt;python3.7 -m pip install ...&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Getting pip ===&lt;br /&gt;
Some Python installers seem to not install pip (at least it happened to us once, that &amp;quot;pip&amp;quot; was not found after a python installation). &lt;br /&gt;
&amp;lt;br&amp;gt;If &amp;quot;python -m pip&amp;quot; gives a warning, do the following:&lt;br /&gt;
* download &amp;quot;https://bootstrap.pypa.io/get-pip.py&amp;quot; (use &amp;quot;&#039;&#039;Save As&#039;&#039;&amp;quot; in a web browser, and save it to the desktop)&lt;br /&gt;
* open a cmd/shell window in that folder.&lt;br /&gt;
* execute &amp;quot;python get-pip.py&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Jython Installation ==&lt;br /&gt;
Jython is a Python interpreter which runs inside a Java virtual machine, and thus has direct access to Java classes and objects.&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, Java needs to be installed on your machine.&amp;lt;br&amp;gt;Then goto [ https://www.jython.org/download.html ], download the Jython installer and run it (choose &amp;quot;standard install&amp;quot; or &amp;quot;full install&amp;quot;).&lt;br /&gt;
&amp;lt;br&amp;gt;Remember the target directory. The jython command will be found there.&lt;br /&gt;
&amp;lt;br&amp;gt;If the &amp;quot;jython&amp;quot; command is not in your PATH, enter its full path in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Jython&#039;&#039;&amp;quot; settings dialog. &lt;br /&gt;
&amp;lt;br&amp;gt;However, it is usually better to add the path to your PATH variable (eg. as setup in the Windows environment settings, autoexec.bat or Unix&#039;s login.rc), and just give &amp;quot;jython&amp;quot;.&lt;br /&gt;
&amp;lt;br&amp;gt;Notice that previous Jython versions were 2.x Pythons, which will sooner or later become outdated. It is recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Iron Python Installation ==&lt;br /&gt;
IronPython is a Python interpreter which runs inside the Common Language Runtime system, and thus has direct access to C# classes (and of yourse all other objects which live inside the CLR world).&amp;lt;br&amp;gt;&lt;br /&gt;
As a prerequisite, you&#039;ll need a .NET CLR (common language runtime) or mono (on Unix systems). On Windows systems, a reasonable CLR Version is usually already installed.&lt;br /&gt;
&amp;lt;br&amp;gt;Then go to [ https://ironpython.net/download ] or [ https://github.com/IronLanguages/ironpython3 ] and follow the instructions.&lt;br /&gt;
&lt;br /&gt;
After the download, IronPython is typically installed in &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython 3.x&amp;lt;/Code&amp;gt;&amp;quot;, and you should enter the path &amp;quot;&amp;lt;Code&amp;gt;C:\Program Files\IronPython x.y\ipy.exe&amp;lt;/Code&amp;gt;&amp;quot; into the IronPython command path field in the python settings dialog (or simply &amp;quot;ipy&amp;quot;, if it is in your PATH).&lt;br /&gt;
&amp;lt;p&amp;gt;Notice that previous IronPython versions were 2.x Pythons, which became obsolete. It is therefore recommended to download or upgrade to a 3.x version (if your code is 3.x compatible).&lt;br /&gt;
&lt;br /&gt;
== Ruby Installation ==&lt;br /&gt;
Goto [ https://rubyinstaller.org/downloads ] and install ruby.&lt;br /&gt;
Then make sure that ruby is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Ruby&#039;&#039;&amp;quot; settings.&amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;C:\Ruby32-x64\bin\ruby.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Ruby action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== Julia Installation ==&lt;br /&gt;
Goto [ https://julialang.org/downloads] and install.&lt;br /&gt;
Then make sure that julia is in your &amp;lt;code&amp;gt;PATH&amp;lt;/code&amp;gt; setting or set the path to the command in the &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;Other&#039;&#039;&amp;quot; settings. &amp;lt;br&amp;gt;Typically it will look like &amp;quot;&amp;lt;code&amp;gt;%LOCALAPPDATA%\Programs\Julia-1.10.4\bin\julia.exe&amp;lt;/code&amp;gt;&amp;quot; on  windows.&lt;br /&gt;
&amp;lt;br&amp;gt;Create a new Julia action and execute it to see if it works.&lt;br /&gt;
&lt;br /&gt;
== C Compiler Toolchain Installation (for C-Actions) ==&lt;br /&gt;
&lt;br /&gt;
For a quick verify if the setup is working, create a new (default) bridged C action and execute it (it should generate a &amp;quot;Hello World&amp;quot; message).&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain Installation ====&lt;br /&gt;
&lt;br /&gt;
You need a C-compiler toolchain to be installed for C-coded actions.&lt;br /&gt;
* On Unix/Linux systems, these are usually already present on the machine (try &amp;quot;&amp;lt;Code&amp;gt;cc --version&amp;lt;/Code&amp;gt;&amp;quot; in a shell window; if you get a reasonable response, you are usually ready to go).&lt;br /&gt;
* On Windows, install one of &amp;quot;Borland&amp;quot;, &amp;quot;VisualC&amp;quot;, &amp;quot;VisualC Redistributable&amp;quot; or &amp;quot;MingGW&amp;quot;.&amp;lt;br&amp;gt;We recommend MingGW.&lt;br /&gt;
* On OSX, you have to install &amp;quot;XCode&amp;quot; or the &amp;quot;Command Line Tools&amp;quot; subset.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Borland (32bit) =====&lt;br /&gt;
* get the free Borland command line tools (see https://borland-c.software.informer.com/5.5) and install them (typically, under &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55&amp;lt;/code&amp;gt;&amp;quot;)&lt;br /&gt;
* ensure that the &amp;lt;code&amp;gt;link.cfg&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;bcc55.cfg&amp;lt;/code&amp;gt; files are present in the &amp;quot;&amp;lt;code&amp;gt;C:\borland\bcc55\bin&amp;lt;/code&amp;gt;&amp;quot; directory.&lt;br /&gt;
* verify the installation by typing &amp;quot;&amp;lt;code&amp;gt;bcc32&amp;lt;/code&amp;gt;&amp;quot;. A help message should appear.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_bcc.bat&amp;lt;/code&amp;gt;&amp;quot;), which tells the bridge how to compile the C-action code (more below).&lt;br /&gt;
&lt;br /&gt;
===== Windows + Visual-C (32 or 64bit) =====&lt;br /&gt;
* similar to above, check for the &amp;quot;&amp;lt;code&amp;gt;cl&amp;lt;/code&amp;gt;&amp;quot; command.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_vc32.bat&amp;lt;/code&amp;gt;&amp;quot;, &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_vc64_redist.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw (32 or 64bit) =====&lt;br /&gt;
* get the mingw64 compiler and install it (best is under &amp;quot;&amp;lt;code&amp;gt;c:\mingw64&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw64&amp;lt;/code&amp;gt;&amp;quot;).&lt;br /&gt;
* verify the installation by typing &amp;quot;gcc --help&amp;quot;.&lt;br /&gt;
* in the expecco settings, goto &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039;&amp;quot; &amp;amp;rarr; &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot; and select the appropriate CC-Script (&amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw32.bat&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;compile_windows_mingw64.bat&amp;lt;/code&amp;gt;&amp;quot;); see below.&lt;br /&gt;
&lt;br /&gt;
When a C-coded action is about to be executed, its C-code will be compiled &#039;&#039;just in time&#039;&#039; using that toolchain. For that, the cBridge executes a configurable batch or shell script.&amp;lt;br&amp;gt;For some commonly used toolchains, corresponding scripts are provided, but you can or may have to add your own script(s), in case you need special compile options, additional link library options or if you want to compile with a compiler not supported by the standard installation (eg. Intel compilers).&lt;br /&gt;
&lt;br /&gt;
If you get compilation errors, take a look at the &amp;quot;compile_xxx&amp;quot; scripts in &amp;quot;&amp;lt;code&amp;gt;packages/exept/expecco/bridgeFramework/cBridge/cLibrary&amp;lt;/code&amp;gt;&amp;quot; under the expecco installation folder.&lt;br /&gt;
&lt;br /&gt;
If required, add your own script to call whatever compiler you need, and select it in the cBridge settings dialog&lt;br /&gt;
(&amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594;  &amp;quot;&#039;&#039;CBridge&#039;&#039;&amp;quot;). You must also add your own script, if special compiler flags or additional standard paths are to be setup.&lt;br /&gt;
&lt;br /&gt;
Notice, that we currently do not provide compilation scripts for C++; however, by declaring entry-functions (as &amp;lt;code&amp;gt;extern &amp;quot;C&amp;quot;&amp;lt;/code&amp;gt;) in your C++ code, these can be called from C.&lt;br /&gt;
&lt;br /&gt;
If no toolchain is installed, you can still see and edit C-code actions, but obviously not execute them.&lt;br /&gt;
&lt;br /&gt;
===== Windows + Mingw32 =====&lt;br /&gt;
Same as above; recommended installation directories are &amp;quot;&amp;lt;code&amp;gt;c:\mingw32&amp;lt;/code&amp;gt;&amp;quot; or &amp;quot;&amp;lt;code&amp;gt;c:\program files\mingw32&amp;lt;/code&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== C Compiler Toolchain at Test-Execution Time ====&lt;br /&gt;
You can tell expecco to embed a pre-compiled object file into the saved &amp;quot;&amp;lt;code&amp;gt;.ets&amp;lt;/code&amp;gt;&amp;quot; suite file (&amp;quot;&#039;&#039;Store Object Files in Project&#039;&#039;&amp;quot; checkbox in the CBridge settings dialog). If checked, C-Bridge actions will be compiled by your current session (using the configured toolchain) and the generated object file(s) will be saved with the suite. When the suite is later executed, no compiler toolchain will be needed on the test machine. Make sure that all required C actions are executed at least once. &lt;br /&gt;
&lt;br /&gt;
Expecco does not include cross compilation support; that means, that only object files for the current architecture can be generated. However, if you load the suite into another architecture&#039;s expecco, additional object files for that other architecture will be generated and added to the &amp;quot;.ets&amp;quot; when saved. So afterwards, object files for both architectures will be present in the ets.&lt;br /&gt;
&lt;br /&gt;
To summarize, if you want to deploy a library with embedded C-actions, which will have to be executed on (say) both a Linux and a Windows machine, where both test-execution machines have no compiler toolchain installed, perform the following steps:&lt;br /&gt;
# load the suite on a Linux machine (with C-compiler toolchain available)&lt;br /&gt;
# ensure that the &amp;quot;&#039;&#039;Store Object Files&#039;&#039;&amp;quot; flag is checked.&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save the suite&lt;br /&gt;
# load the saved &amp;quot;.ets&amp;quot; on a Windows machine (with C-toolchain available)&lt;br /&gt;
# run the suite&lt;br /&gt;
# Save it again.&lt;br /&gt;
The last saved &amp;quot;.ets&amp;quot; will now contain object files for both architectures.&lt;br /&gt;
Be aware, that you may have to repeat the steps for 32 and 64 bit architectures, if the suite is to be executed eventually on both.&lt;br /&gt;
&lt;br /&gt;
Be reminded that this procedure is not needed, if the machine which executes the tests does have a C-toolchain installed. And especially, if it is the same as your development machine.&lt;br /&gt;
&lt;br /&gt;
==== See Also ====&lt;br /&gt;
For more information see &amp;quot;[[Cbridge_setup| CBridge Setup]]&amp;quot; and for&lt;br /&gt;
command line arguments to the cBridge, take a look at &amp;quot;[[Cbridge_setup#CBridge_Command_Line_Arguments| CBridge Command Line Arguments]]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;Cling_Installation&amp;quot;&amp;gt;Cling Installation&amp;lt;/div&amp;gt; (for RootCling Actions) ==&lt;br /&gt;
&lt;br /&gt;
Support for Cling is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot; and currently considered an &amp;quot;&#039;&#039;experimental&#039;&#039;&amp;quot; feature which is not available/enabled in the current deployed version.&lt;br /&gt;
&lt;br /&gt;
Cling (aka &amp;quot;Root Cling&amp;quot;) is a dynamic language system for C/C++.&lt;br /&gt;
Code can be entered in C++, which is dynamically (just in time) compiled to fast machine code.&lt;br /&gt;
&lt;br /&gt;
Cling can be downloaded from the [https://root.cern/cling Cern web site] and/or installed via a package installer:&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- see https://root.cern/download/cling/ --&lt;br /&gt;
Download one of the tar archives and unpack the files into some folder (such as &amp;quot;/opt/cling&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
;Windows&lt;br /&gt;
: Sorry, to our knowledge, there exists no ready-to-install version for Windows at the time of writing this document.&lt;br /&gt;
&lt;br /&gt;
;OS X(Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install cling&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on whether cling is found along your path, or you want to select a particular version,&lt;br /&gt;
specify the cling installation folder in the cling settings dialog &amp;quot;&#039;&#039;Extras&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Settings&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Language Interpreters&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;Cling&#039;&#039;&amp;quot;. &lt;br /&gt;
&amp;lt;br&amp;gt;There, click on the &amp;quot;?&amp;quot; button to verify that cling is found.&lt;br /&gt;
&lt;br /&gt;
== Smalltalk Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Smalltalk is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Smalltalk is already available.&lt;br /&gt;
&lt;br /&gt;
== Scheme Installation ==&lt;br /&gt;
&lt;br /&gt;
Support for bridged Scheme is &amp;quot;&#039;&#039;work in progress&#039;&#039;&amp;quot;, currently disabled and is planned for a future version.&lt;br /&gt;
However, scripted Scheme is already available.&lt;br /&gt;
&lt;br /&gt;
You can configure expecco to either use any standard scheme interpreter (whichever is installed as &amp;quot;scheme&amp;quot; command),&lt;br /&gt;
or to use an explicit implementation. Currently, supported are ChezScheme, ChickenScheme and Racket/MZScheme.&lt;br /&gt;
&lt;br /&gt;
=== Chicken Scheme ===&lt;br /&gt;
&lt;br /&gt;
[https://code.call-cc.org Chicken] can be compiled from [https://code.call-cc.org source] or installed via a package manager.&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: https://chocolatey.org/packages/chicken/&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#microsoft-windows-&lt;br /&gt;
&lt;br /&gt;
;Linux:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#linux&lt;br /&gt;
&lt;br /&gt;
;OS X (mac):&lt;br /&gt;
: brew install chicken&lt;br /&gt;
: or:&lt;br /&gt;
: see https://wiki.call-cc.org/platforms#mac-os-x&lt;br /&gt;
&lt;br /&gt;
=== Chez Scheme ===&lt;br /&gt;
&lt;br /&gt;
See [ https://github.com/cisco/ChezScheme ] for instructions.&lt;br /&gt;
&lt;br /&gt;
A Windows binary and sources of release 9.5.4 are found at [ https://github.com/cisco/ChezScheme/releases/tag/v9.5.4 ].&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GnuPlot_Installation&amp;quot;&amp;gt;GnuPlot Installation&amp;lt;/div&amp;gt; (for Graph Attachments to the Report) ==&lt;br /&gt;
&lt;br /&gt;
Gnuplot makes it easy to add graphs for measurement data or statistics to the&lt;br /&gt;
report and/or to create attachments for them.&lt;br /&gt;
To install gnuplot execute (in a terminal):&lt;br /&gt;
 &lt;br /&gt;
;Linux:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;Windows:&lt;br /&gt;
: -- to be determined and documented --&lt;br /&gt;
: please refer to the official Gnuplot website: http://www.gnuplot.info/download.html&lt;br /&gt;
&lt;br /&gt;
;OS X (Mac):&lt;br /&gt;
: &amp;lt;code&amp;gt;brew install gnuplot&amp;lt;/code&amp;gt;&lt;br /&gt;
: or download a binary package eg. from:&lt;br /&gt;
: &amp;amp;nbsp;https://csml-wiki.northwestern.edu/index.php/Binary_versions_of_Gnuplot_for_OS_X&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;GNU_Octave_Installation&amp;quot;&amp;gt;GNU Octave Installation&amp;lt;/div&amp;gt; (Matlab compatible Scripting) ==&lt;br /&gt;
&lt;br /&gt;
Download: https://octave.org/download&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install octave&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Warning: octave is huge (roughly 1Gb download).&lt;br /&gt;
&amp;lt;br&amp;gt;Also notice: octave needs gnuplot to generate image files from graphs.&lt;br /&gt;
&lt;br /&gt;
If you are already using Matlab, set the path to the matlab executable in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; [[Settings ExternalToolsSettings/en#GnuOctave_Path | &amp;quot;&#039;&#039;External Script Interpreter&#039;&#039;&amp;quot;]] settings.&lt;br /&gt;
&lt;br /&gt;
==Dart Installation==&lt;br /&gt;
Goto [https://dart.dev/get-dart dart.dev] and follow the instructions there.&lt;br /&gt;
&lt;br /&gt;
==R Installation==&lt;br /&gt;
Goto [https://www.r-project.org/ www.r-project.org] and follow the instructions there.&lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install R-base R-base-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Go ==&lt;br /&gt;
For downloads, go to [https://go.dev/dl/ https://go.dev/dl/]. &lt;br /&gt;
&amp;lt;br&amp;gt;OpenSuse users can &amp;quot;&amp;lt;code&amp;gt;zypper install go-devel&amp;lt;/code&amp;gt;&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Make sure that go is in your PATH or else define the full pathname to go in the &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== TCL, and all the others ==&lt;br /&gt;
If you use those, you probably know how to install and update them.&lt;br /&gt;
Follow the usual installation instructions and - unless the interpreter is found along your PATH setting, define the path in the expecco &amp;quot;&#039;&#039;Execution&#039;&#039;&amp;quot; &amp;amp;#8594; &amp;quot;&#039;&#039;External Script Interpreters&#039;&#039; &amp;quot;&amp;amp;#8594; &amp;quot;&#039;&#039;Others&#039;&#039;&amp;quot; settings dialog.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;div id=&amp;quot;OCR&amp;quot;&amp;gt;OCR&amp;lt;/div&amp;gt; (Optical Character Recognition) ==&lt;br /&gt;
In order to extract text from bitmap images,&lt;br /&gt;
an OCR framework is needed. It is also needed if you want to automate the local screen or a VNC screen AND you need to extract text or numeric values from it.&lt;br /&gt;
&lt;br /&gt;
Both open source and commercial frameworks can be found and used.&lt;br /&gt;
Good results are achieved by the free (and open source) &amp;quot;Tesseract&amp;quot; framework,&lt;br /&gt;
which we recommended, unless you already have a more powerful non-free commercial OCR framework at hand&lt;br /&gt;
(although supported, we do NOT recommend capture2Text or GNU-ocrad; they do not provide detailed per-word information and/or delivered poor recognition results. At least at the time this document was written).&lt;br /&gt;
&lt;br /&gt;
Tesseract is hosted at [ https://github.com/tesseract-ocr/tessdoc ] and can be downloaded from [ https://github.com/tesseract-ocr/tessdoc/blob/master/Downloads.md ]. &lt;br /&gt;
&amp;lt;br&amp;gt;Follow the installation instructions there. &lt;br /&gt;
&lt;br /&gt;
;Windows and OS X&lt;br /&gt;
:binaries are found at [ https://github.com/UB-Mannheim/tesseract/wiki ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to recognize national language characters (eg. accents, diareses/Umlauts), you&#039;ll also need language specific Tesseract-Data files. Please also install those for German, French, etc. from [ https://github.com/tesseract-ocr/tessdata ].&lt;br /&gt;
&lt;br /&gt;
== AI (Tensorflow) ==&lt;br /&gt;
These are typically used via Python actions, and installed using a Python package manager (pip). Please refer to Tensorflow web pages for details.&lt;br /&gt;
&lt;br /&gt;
== AI (Ollama) ==&lt;br /&gt;
Goto [https://ollama.com/download ollama.com/download] and get the installer for your operating system. The loaded Setup/Install procedure should install ollama on your local machine as a background service.&amp;lt;br&amp;gt;It will also open an Ollama interactive chat and configuration window, which is not needed in the future, but will be useful to verify that the installation worked and especially to download new models. &lt;br /&gt;
&amp;lt;br&amp;gt;Models to consider: we tried qwen3.6, gemma4 and [https://ollama.com/library/codellama:7b codellama]. We are currently investigating which model is best suited for our AI tasks, but tend to codellama (if you prefer a free model). Models are to be placed into the &#039;&#039;Model Localtion&#039;&#039; folder, which is found in the ollama window under &#039;&#039;Settings&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Cg</name></author>
	</entry>
</feed>