Lizenzfreies - Unsere Contributions
Wir bei Heeg haben über die Jahre Dutzende von Tools und Erweiterungen für Cincom Smalltalk erstellt, die uns bei kleinen oder größeren Problemen weitergeholfen haben.
Diese "Contributions" stellen wir der Smalltalk-Community zur Verfügung – auf der jeweiligen Cincom Smalltalk CD.
Dieses Paket enthält Erweiterungen für Lint (Code Critic), so dass es einfacher ist, neue Regeln zu erstellen und bestehende Regeln zu korrigieren.
AllEncodings enthält Definitionen für weitere Encoder, einschließlich EBCDIC und CP950.
Das Paket BackgroundColor fügte Methoden im Systemmenü des Startprogramms hinzu, mit denen ein Benutzer die Hintergrundfarbe der Fenster eines Images ändern kann. Dadurch kann ein Benutzer die Fenster verschiedener Images, die zur gleichen Zeit auf demselben Computer laufen, leicht identifizieren.
Wenn der CustomSkinCreator geladen wird, erzeugt er automatisch ein Paket "BackgroundColor-Skins", das alle Skin-Klassen und alle Registrierungsmethoden enthält. Dieses Paket kann einfach entladen und neu erstellt werden, um die Skins zu aktualisieren. Dieses Paket sollte nicht im Store veröffentlicht werden. Da die Skin-Klassen sehr viel replizierten Code enthalten und nicht einfach verwaltet werden können, ist es einfacher, sie einfach automatisch zu generieren. Der einzige Parameter zu einem Skin ist die Farbe und der Name der Farbe. Der CustomSkinCreator erstellt dann sowohl eine DefaultSkin-Unterklasse als auch eine Registrierung für einen Native-Skin mit einem farbigen Symbol.
Unterstützung für ByteOrderMarks hinzugefügt. Die Schnittstelle zur Verwendung der neuen Funktion ist in EncodedStreamConstructor implementiert. Diese Klasse ist nicht wirklich sichtbar. Ihre Objekte werden mit der Methode Filename>withEncoding: erstellt.
Diese Methode berücksichtigt nun neue Symbole:
#utf32 (neue UTF32Encodierung)
#utf32WithBOM
#utf16WithBOM
#utf8WithBOM
#autoDetect (dies ist das interessanteste. Es prüft die Datei und wählt zwischen #utf32WithBOM, #utf16WithBOM, #utf8WithBOM und Standard [wenn keine BOM vorhanden ist]).
#autoDetectOr<Symbol> (Es prüft die Datei und wählt zwischen #utf32WithBOM, #utf16WithBOM, #utf8WithBOM und <Symbol> aus [wenn keine Stückliste vorhanden ist], wichtigstes Beispiel: #autoDetectOrUtf8)
Der BOM-Support selbst ist in einer neuen Klasse ByteOrderMarkedStream implementiert. Diese Klasse ist ein Geschwisterteil von EncodedStream. Sie haben eine gemeinsame neue Oberklasse WrappingStream.
Dieses Paket definiert eine Schnittstelle für den plattformunabhängigen vollständigen Zugriff auf die Zwischenablage. Damit können beliebige Daten aus der Zwischenablage gelesen werden oder auf die Zwischenablage geschrieben werden. Dazu wird eine Abstraktionsebene angeboten, um Smalltalk-Objekte zu veranlassen, sich selbst in Daten der Zwischenablage zu konvertieren und aus Daten der Zwischenablage zu instanziieren.
Dieses Paket definiert einen Wrapper, der automatisch die Größe bestimmter Spalten eines DataSets anpasst, um die volle Breite des Widgets zu nutzen.
Dieses Bundle ist eine Sammlung von Verbesserungen, die das Debugging in VisualWorks erleichtern.
Es umfasst:
- DebuggerFarben - färben Sie die Stack-Frames im Debugger ein, um Overrides und den ausgewählten Kontext zu sehen
- RBRecursionJumpBack - Springt zurück an den Anfang einer Rekursion, direkt im Debugger, ohne dass man durch eine endlose Liste von Stackframes scrollen muss
- DebuggerAdditions
- Deaktivieren von Haltepunkten und Anhalten bei gedrückter Umschalttaste
- stellt #printTopOfStackToTranscript: zur Verfügung, um den Stack in das Transcript zu drucken.
- shift-option-bluebutton klicken, um eine Liste der Widgets zu sehen, um sie zu inspizieren
- GraphicsContextInspector - Senden Sie #inspectContext an einen GraphicsContext, um zu sehen, wo sich der Beschneidungsbereich befindet und in welchem Bereich der Kontext gerade zeichnet
- Inquisitor - senden Sie #inquisition an ein beliebiges Objekt, um Änderungen an den Instanzvariablen des Objekts zu untersuchen
- ProbeEnabler - fügt dem Launcher unter Debug->Probe Enabler ein Tool hinzu, mit dem One-Shot-Probes in einem einfachen Fenster erneut scharfgeschaltet werden können.
FixedFormat implementiert die Funktionalität, die zum Auslesen von Text-Dateien mit fester Breite benötigt wird. Die Klasse FixedLine, die eine Textzeile darstellt, und Unterklassen müssen lediglich Zugriffsmethoden implementieren, die Zeichenketten von einer bestimmten Position in der Zeile zurückgeben.
Die Implementierung in der Klasse ExampleLine zeigt weitere Einzelheiten.
Dieses Paket erweitert das Standard AdHocQueryTool. 'VisualLauncher->Tools->Datenbank->AdHoc SQL' verwendet die Klasse GHAdHocQueryTool anstelle des alten Tools.
Funktionen:
- SQL-Befehlshistorie:
- Blättern Sie durch die Liste der erfolgreich ausgeführten Befehle
- Befehlsverlauf als Textdatei speichern und laden
- Fehlerberichterstattung:
- Fehlermeldungstext an der richtigen Stelle in den Befehlstext einfügen (ähnlich wie Compiler-Fehlermeldungen in Code-Ansichten)
- Zwischenablage
- Kopieren Sie den Textinhalt einer Zelle, Zeile, Spalte oder Tabelle in ein Format, das einen einfachen Import in Tabellen von MS Word oder Excel ermöglicht.
- Text für Tabelleninhalte als Textdatei speichern (bei Angabe der Erweiterung '.csv' durch Semikolon, sonst durch Tabulator getrennt)
- Inspizieren
- Inspektoren am Anwendungsmodell, TableAdaptor
- Bequeme GUI
- Verwenden Sie eine einzige Schaltfläche für Verbinden/Trennen
- Benutzername und Verbindungszeichenfolge in der Fensterbeschriftung anzeigen, falls verbunden
- Ergebnis-Dimension: Ein neues Textfeld zeigt die Anzahl der Spalten/Zeilen einer Ergebnistabell
Dieses Paket ermöglicht, BOSS-Dateien zu lesen und zu schreiben, die mit VisualWorks 2.5.x und 3.x kompatibel sind. Diese Funktionalität deckt hauptsächlich die Namensraumbehandlung für ältere BOSS-Formate ab.
Der Anwendungsentwickler muss die Namespaces registrieren, die die Klassen von Objekten in BOSS-Dateien enthalten. Wir prüfen nur lokale Bindungen - d.h. wir prüfen keine importierten Bindungen. Dies geschieht, da wir keine Kontrolle über Importe in Namespaces haben und wir Namenskonflikte vermeiden wollen, wenn es im Bild Klassen mit gleichem Namen, aber unterschiedlichen Namespaces gibt.
Um einen Namensraum zu registrieren, rufen Sie die Klassenmethode registerNamespace: in der Klasse BOSSCompatReader auf, d.h:
BOSSCompatReader registerNamespace: Heeg
Die Verwendung des kompatiblen BinaryObjectStorage verwendet die gleichen Methoden wie das reguläre BinaryObjectStorage.
Beispiele:
Lesen von Objekten:
CompatibleBinaryObjectStorage onOld: 'written-by-vw252.bos' asFilename readStream
Schreibobjekte:
CompatibleBinaryObjectStorage onNew: 'to-be-read-by-vw252.bos' asFilename writeStream
Dieses Paket protokolliert die Zeit in der Änderungsdatei jede Minute, so dass es einfacher ist, bei der Wiederherstellung die richtige Stelle in einer Änderungsliste zu finden. Es protokolliert auch, wann ein Pundle veröffentlicht wurde.
Unterstützung für das Lesen und Schreiben des Textdateiformats CSV (Comma Separated Value). Ein einfaches Anzeigeprogramm ist enthalten.
Dieses Paket bietet zwei Möglichkeiten zur Verwendung von CSV-Dateien:
1. Jede Zeile stellt ein Array dar. Verwenden Sie CsvReader und CsvWriter.
2. Jede Zeile repräsentiert ein Objekt, eine Instanz einer Unterklasse von CsvLine. Verwenden Sie CsvFileReader oder CsvReaderWriter.
Dieses Paket implementiert Basisklassen zur Vereinfachung der Arbeit mit Excel.
Es bietet Eingabe und Ausgabe über COM.
Dieses Paket implementiert einen Suchdialog für VisualWorks Texteditoren, der den einfachen Suchdialog von ParagraphEditor ersetzen soll. Die Verwendung dieses erweiterten Suchen-Dialogs ist konfigurierbar. Siehe VisualWorks Einstellungen, Seite "Extras> Suchen-Dialog".
Funktionen sind aus verschiedenen Anwendungen bekannt, die mit Text arbeiten, wie z.B. Editoren oder Internet-Browsern. Die angebotenen Grundfunktionen sind
+ Eingabefeld für Suchbegriff, kombiniert mit einer Combobox, die sich eingegebene Suchbegriffe merkt
+ Optionskontrollkästchen zur Auswahl
- Groß-/Kleinschreibung beachten/nicht beachten
- Wortsuche
- Wildcard-Match
- Suche nach regulären Ausdrücken, wobei die Suchzeichenfolge als regulärer Ausdruck interpretiert wird, der zutrifft
(diese Funktion erfordert Regex-Support-Paket von der Distribution)
+ Suchtasten mit Steuerung der Suchrichtung (Suche vorwärts oder rückwärts)
Der neue FindDialog bleibt so lange geöffnet, wie der Benutzer ihn nicht mit einer zusätzlichen Schaltfläche Abbrechen schließt (im Gegensatz zum Standard-Dialog von ParagraphEditor, der eine einzelne Anfrage akzeptiert, den Suchvorgang schließt und verarbeitet). Der Benutzer kann mit der Suche nach Vorkommnissen der Suchzeichenfolge fortfahren, während der Dialog geöffnet bleibt und den zugrunde liegenden Texteditor die Auswahl anhand der gefundenen Übereinstimmungen verfolgen lässt.
Eine Besonderheit ist die Treffersuche: Der Dialog sucht automatisch nach dem nächsten und dem vorherigen Treffer und aktiviert entsprechend Suchschaltflächen. Dadurch erhält der Benutzer eine sofortige Rückmeldung, ob es sinnvoll ist, eine nächste oder vorherige Suche anzufordern. Der typische Dialog nach einer erfolglosen Suche ("keine Treffer mehr gefunden") ist für diese Implementierung nicht notwendig.
Fügt InputFields zu Einstellungen hinzu, die formatierte Zahlen anzeigen, wie es Eingabefelder in normalen Anwendungen können.
Dieses Paket richtet einen speziellen Namensraum für GH-Beiträge ein
Sie enthält lediglich den Namensraum 'Heeg'.
Dieses Paket liefert besser Navigationsunterstützung für Pragmas im SystemBrowser für die ausgewählte Methode, indem es zwei einfache Funktionen zur Verfügung stellt:
- Zeige alle Methoden, die das gleiche Pragma verwenden
- z.B. alle Methoden die <foo: > enthalten
- Zeige alle Methoden, die das Symbol des Pragmas verwenden, aber nicht in Form eines Pragmas
- z.B. alle Methoden, die nicht <foo: > verwenden, dafür aber #foo oder #foo:
- so wie in Pragma allNamed: #foo in: self
Beide Funktionen sind im SystemBrowser in das Methoden-Menü integriert und erweitertn die Sender/Implementor Untermenüs.
Dieses Paket implementiert ein allgemeines Hilfsmenü für SequenceController. Wenn Sie beim Öffnen des Kontextmenüs die Umschalttaste (<shift>) gedrückt halten, erscheint ein lokales Menü anstelle des von der Anwendung definierten Menüs. Dies bedeutet, dass jeder Listenbereich die folgenden Zwischenablage- und Inspektionsfunktionen ausführen kann:
- Auswahl kopieren : Anzeigetext des/der ausgewählten Listenelement(e) in die Zwischenablage kopieren
- Liste kopieren : Anzeigetext aller Listenelemente in die Zwischenablage kopieren
- Find... : Suche und Auswahl eines Listenelements, das der vom Benutzer angeforderten Zeichenfolge entspricht (erfordert Paket GHFindDialog)
- Modell inspizieren / Ansicht inspizieren / Controller inspizieren / Fenster inspizieren : Einen Inspektor auf Modell/Ansicht/Steuerung/Fenster öffnen
- Von der Liste entfernen : Ausgewählte(s) Element(e) aus der Liste entfernen (nicht aus dem Modell)
Dieses Paket beschleunigt das Parsen von XML-Dateien durch Zwischenspeichern des Inhalts der DTD. Der Cache hat zwei Funktionen, er speichert den Inhalt der DTD-Datei und speichert auch das geparste DTD-Objekt im Cache. Auf diese Weise wird die DTD nur einmal geparst und es ist möglich, das Herunterladen der DTD überhaupt zu vermeiden.
Um den Cache mit einer DTD-Datei vorzufüllen, speichern Sie sie mit #cacheFileContent:underPublicKey:systemID:
Um die xhtml entities dtd vorzuladen, verwenden Sie folgenden Aufruf:
SAXDriver new
cacheFileContent: aString
underPublicKey: '-//W3C//ENTITIES Special for XHTML//EN'
systemID: 'http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent'.
Anzeigeverbesserungen für Browser und Tools mit Store-Bezug:
- Anzeige von Bundles und Paketen mit Versionsstring (bei Änderungen in roter Farbe) im SystemBrowser,
- Filter für das 'Loaded Items'-Tool, das über das Menü 'Store->Loaded Items' im VisualLaunchers geöffnet wird.
Die folgende Funktionalität wird von diesem Tool zusätzlich zu dem bestehenden Tool bereitgestellt:
+ die Liste der Elemente im Tool kann über ein zusätzliches Filtermenü unterhalb der Liste gefiltert werden,
+ der Standardfilter ist 'modifiziert anzeigen'.
+ die Pundles in der Liste zeigen auch die Versionsinformationen,
+ die Liste bietet auch einen Menüpunkt 'Veröffentlichen ...' und einen Menüpunkt 'Geänderte Methoden...', wenn die Bedingungen zutreffen.
Dieses Bundle enthält ein Programmierwerkzeug für VisualWorks:
GHUndeclaredBrowser - ist ein Tool zum Anzeigen und Bearbeiten des 'Undeclared' Namensraums.
Das Tool kann über das 'Tools'-Menü im VisualLauncher gestartet werden, und hat online
Hilfe verfügbar über seine Menüleiste 'Hilfe -> Hilfe öffnen...'.
Dieses Paket enthält ein Status-Element für den Systembrowser, das die aktuelle Anzahl der nicht deklarierten Variablen auflistet.
Dieses Paket bietet die Möglichkeit, Drucker, Papierformat, Papierausrichtung und Anzahl der Kopien zu den Einstellungen von VisualWorks hinzuzufügen. Das bedeutet, dass Sie diese Einstellungen nicht jedes Mal vornehmen müssen, wenn Sie den Druckdialog öffnen.
Wenn Sie etwas im Druckdialog ändern, werden diese Einstellungen ebenso gespeichert, wie wenn Sie die VisualWorks Einstellungen ändern.
GHXhtmlSupport bietet die folgenden Funktionen
- GHXhtmlDTDPreloader, der die XHTML-DTDs dem XMLParser zur Verfügung stellt, so dass dieser sie nicht jedes Mal herunterladen muss
- GHXhtmlDecoder, der zur Dekodierung von Xhtml-Zeichenketten durch Auflösung von HTML-Entities wie Ä verwendet werden kann. Er verwendet den XML-Parser zusammen mit den XHTML-DTDs, um die HTML-Entitäten korrekt zu dekodieren.
- GHXhtmlDifferences, was HTML Strings vergleichen kann und im Ergebnis <del> und <ins> verwendet, um die Unterschiede hervorzuheben
Anwendung
GHXhtmlDTDPreloader preloadDTDs "automatically executed during postload"
GHXhtmlDecoder decodeString: 'Äncödüng'.
GHXhtmlDecoder decodeString: '<p>Äncödüng</p>'.
GHXhtmlDifferences wordDifferencesBetween: '<p>test1</p><p>test2</p><p>test3</p>' and:'<p>test</p><p>test3</p><h1>test3</h1>'
Dieses Bundle enthält verschiedene Werkzeuge, die dabei helfen, HTML in VisualWorks zu verarbeiten:
- Unterstützung für die Zwischenablage, um Text2.Document als HTML zu lesen oder zu schreiben
- LibCurl um HTTP-Requests mittels libcurl durchzuführen
- GHSpeedUpXMLParser um XML/HTML zu parsen, ohne die DTD laden zu müssen
- GHSimpleXmlAndHtmlParser
- parst HTML auf sehr fehlertollerante Art und Weise. Berücksichtigt auch, dass in HTML nicht alle Elemente geschlossen werden.
- enthält eine an CSS angelehnte XML Query API
- xmlElement findAllMatching:'.foo a img.bar'
- xmlElement findFirstMatching:'p[data-description=foo]'
- HtmlRenderer, um HTML von und nach Text2.Document zu konvertieren
Dieses Paket modifiziert den Inspektor so, dass er neben jedem Objekt ein chinesisches Zeichen anzeigt, um identische Objekte schnell identifizieren zu können.
Isam Toolbox bietet einen einfachen, schnellen und zuverlässigen Persistenzmechanismus für Sammlungen, die die Methode des sequentiellen Indexzugriffs verwenden.
L10n ist ein Werkzeug zum Übersetzen der UserMessages
enthält MultiDictionary und DiscriminatedMultiDictionary
Diese Paketversion basiert auf dem PetitParser von Lucas Renggli. Sie enthält Korrekturen, die erforderlich sind, um es erfolgreich zu laden.
Rtf enthält einen RTF-Parser und -Renderer zusammen mit Tests und Unterstützung für die Zwischenablage.
Rtf enthält einen RTF-Parser und -Renderer zusammen mit Tests und Unterstützung für die Zwischenablage.
EncodedStreams werden so rekonstruiert, dass sie komponiert werden können. Die wichtigste neue Klasse ist WrappingStream.
Diese Funktionen wurden für die Unterstützung von ByteOrderMark entwickelt. Es stellte sich heraus, dass das Konzept auch für die Verbesserung der URI-Unterstützung sehr hilfreich war.
Dieses kleine Paket ermöglicht das Schreiben vollständiger Stacks, z.B. in Ausnahmehandlern oder in anderen Situationen, in denen die Fehlersuche sehr schwierig ist.
Es wurde im Kontext von ObjectStudio8 von Georg Heeg entwickelt, kann aber auch an anderer Stelle nützlich sein, insbesondere zur Unterstützung.
Beispiele für die Verwendung:
Kurz bevor etwas Kritisches passiert, in einem Workspace ausführen:
[(Core.Delay forSeconds: 10) wait.
Kernel.Prozessor verbosePrintAllOnFile] forkAt: 100
oder wenn Sie wissen, dass das Debuggen unmöglich ist und der Meldende sogar nicht funktioniert: Geben Sie UnhandledException>defaultAction
thisContext verbosePrintOnFile.
ObjectMemory quit.
oder Sie könnten <shift> und <alt> gedrückt halten, wenn ein Fehler auftritt, dann wird der Prozessdump geschrieben und das Image beendet.
Im public repository
Diese Contributions können Sie im public store finden - sie sind evtl. nicht mehr in der aktuellen Version von Cincom Smalltalk nutzbar.
Die Anleitung, wie man sich mit dem Public Store verbindet, finden Sie auf der Cincom Website.
Bundle All SmalltyPy kombiniert das Basisprodukt, die Tests und die Beispiele, die zeigen, wie man die beiden Welten von Cincom Smalltalk und Python verbindet.
Nach der Installation wird dem Launcher ein neues Menü 'Python' hinzugefügt, das schnelle Links zum Hilfesystem bietet.
Während des Ladens dieses Bundles aus dem Store kann es vorkommen, dass ein Dialog meldet, dass keine Python-Installation vorhanden ist.
Wenn dies passiert ist, installieren Sie bitte Python 3.7 oder 3.8 und versuchen Sie erneut, 'All SmalltyPy' zu laden.
Wenn Sie ein Image mit geladenem SmalltyPy starten, kann es sein, dass die Protokolle im Transkript anzeigen, dass beim Start kein Python gefunden werden konnte.
Stellen Sie in diesem Fall sicher, dass Python 3.7 oder 3.8 korrekt installiert ist und dass Sie 'python -V' oder 'python3 -V' von einer Befehlszeile oder einem Terminal aus ausführen können.
Versuchen Sie, das Image erneut zu starten.
Um die Tests und die Beispiele auszuführen, müssen bestimmte Python-Module installiert sein. Führen Sie den folgenden Ausdruck aus, um sicherzustellen, dass alles installiert und/oder aktualisiert ist:
PythonConnect.componentsLoader installierenAlleKomponenten
Einige Module sind nur für bestimmte Plattformen verfügbar, weshalb einige Tests unter MacOSX fehlschlagen können.
Schauen Sie sich das Paket GHPythonConnect-Tests an, das grundlegende Nutzungsmuster zeigt, wie SmalltyPy mit Python-Code, der in SUnit-Tests eingebettet ist, zusammenarbeiten kann.
Das Paket 'SmalltyPy-Beispiele' enthält Anwendungen, die aus einem VisualWorks- und einem Python-Teil bestehen. Bitte lesen Sie die Paketkommentaren für alle zusätzlichen Voraussetzungen.
SmalltyPy wurde unter Linux, Windows und MacOSX getestet und ist nur mit den 64Bit-Versionen von VisualWorks und Python kompatibel.
Erweitert die Kernklassen um nützliche Methoden.
Copyright (c) 2005-2007 Adrian Kuhn und Mauricio Seeberger, mit Beiträgen von Tudor Girba, Markus Hofstetter, Matthias Junker, Adrian Lienhard, Martin von Löwis und Michael Meyer. CodeFoo ist unter einer Creative Commons Attribution-ShareAlike 3.0-Lizenz lizenziert. Das langfristige Ziel von CodeFoo ist es, dass sein Code von den Herstellern aufgegriffen und in deren Smalltalk-Distributionen aufgenommen wird.
Georg Heeg eK hat es unter VisualWorks 8.3.2 zum Laufen gebracht.
Dakar Testing ist ein völlig neuer Rahmen zum Testen Ihrer Anwendung mit Unit-Tests. Sie fügt eine Verbindung zwischen einer Methode und ihren Tests hinzu.
EINLEITUNG
=============
In der Erwägung, dass Einheitstests bekanntlich zu den besten Praktiken gehören in Software-Entwicklung, sie werden wegen der Schwierigkeiten nur selten eingesetzt sie zu schaffen und zu erhalten. In der Tat, wenn man Software schreibt, Entwickler müssen oft zwischen dem Entwicklungsprozess und der Testprozess, der irgendwie beunruhigend ist. Das Ziel dieser Anwendung ist es, den Arbeitsablauf des Entwicklers zu verbessern, was mehr Effizienz und weniger Störung.
Das Frost-Projekt war ursprünglich als eine in Smalltalk geschriebene Java-IDE geplant. Da die ursprünglichen IBM-Java-Compiler und die IDE in Smalltalk geschrieben wurden, war dies nicht so eine verrückte Idee, wie man derzeit erwarten könnte. Später waren die Ziele der Frost-Entwickler, Java-Code in ein Smalltalk-Image zu importieren.
Diese Version bietet den neuesten Stand von 2004.
Diese Bundle fasst das große Paket von John Borden und die von xp veröffentlichten Pakete zusammen. 35 der 36 Tests funktionieren gut, ein Fehler.
Was funktioniert?
- einfache .class-Dateien lesen (FrostClassFilesTest)
- einfache .java-Dateien lesen (kein Test)
- einfachen Java-Bytecode übersetzen (FrostBytecodeTest)
- einfachen Java-Quellcode übersetzen (FrostSourcecodeTest)
- einfache Java DoIts (FrostEvaluationTest)
Was funktioniert nicht?
- korrekte Namespace-Auflösung in komplexen Beispielen
- AWT und Co.
- viele andere Dinge
Was ist noch zu tun?
- alte proprietäre Namespace-Erinnerungen entfernen
- viele Standorte an VW 7.x-Namensräume anpassen
- viele Overrides bereinigen
- viele viele Bugs entfernen
- GUI in RB integrieren
- Anpassung an neuere Java-Versionen als 1.0.2
Umgebung:
- VisualWorks 7.3
Installieren:
- Java 1.0.x nach <dir> installieren
- packen Sie <dir>\lib\classes.zip in <dir>\lib\classes\
- Starten Sie das Bild mit Frost
- Frost.JavaReader class>>defaultClassPath bearbeiten, um
Ihr Klassenverzeichnis
- Frost ausführen.JavaReader initialisieren
- Führen Sie die Tests in Package FrostTests aus (derzeit 36 ausgeführt, 0 fehlgeschlagen, 1 Fehler)
Verwendung:
- werfen Sie einen Blick auf die Tests in Package FrostTests
Die Arbeit wurde von Chris Burkert durchgeführt
Georg Heeg
Parcel GHFractalExplorer enthält Unterstützung für die einfache Implementierung der MandelbrotSet-Berechnung und -Anzeige.
Zur Vereinfachung steht die abstrakte Klasse IterativeGraphicsPart zur Verfügung, z.B. durch Puffern aller Anzeigeaktivitäten auf einer privaten Pixmap. Die Klasse IterativeImagePart verbessert dieses Pufferverhalten, indem sie ein Bild für den gleichen Zweck verwendet. Schauen Sie sich ihre Unterklassen für Beispiele an, und in ihrem Klassenprotokoll 'Beispiele' für Hilfe bei der Benutzung.
Einige konkrete Unterklassen sind hinzugefügt worden, um zu zeigen, wie einfach es ist, diese Klassenbibliothek zu benutzen.
Ausführen:
Heeg.FractalExplorer öffnen
um alle verfügbaren Teile zu untersuchen. Die Anwendung bietet ein 'Hilfe'-Menü mit einigen Gebrauchsanweisungen.
Wenn Sie den AcceleratedCMandelbrotPart verwenden wollen, müssen Sie zuerst die C-Bibliothek installieren. Schauen Sie sich den Klassenkommentar in THAPIMandel an.
Einige Hinweise zum theoretischen Hintergrund der in diesem Programm verwendeten Formeln finden Sie in:
'A First Course In Chaotic Dynamical Systems' von Robert L. Deveney,
Addison-Wesley 1992, ISBN 0-201-55406-2,
Es sollte auf jeder VisualWorks-Plattform funktionieren.
Vorraussetzungen:
GHNamespaces
DLLCC
AT MetaNumerics (zur Unterstützung komplexer Zahlen)
MatriX
Dieses Paket enthält eine Erweiterung zu SystemError, um einen zugrundeliegenden Fehler auf Unix-basierten Systemen besser dokumentieren zu können.
Der SystemError printString wird wie folgt aussehen:
a SystemError(#'exception occured', SIGSEGV at: 0xFFFFFFFFFFFFFFFFFFFFFFFF)
Die Dekodierung des Signalnamens ist der Zusatz dieser Erweiterung.
Die Erweiterung wurde mit VW8.3.2 und VW9.0 getestet.
Mit Growl können Sie Growl-Benachrichtigungen verschicken.
Growl new notify: 'Hello' description: 'Hello World!'
Growl new notify: 'Hello' description: 'Hello World!' image: '~/Pictures/hello.jpg'
Ein einfacher EXIF-Scanner.
Verwendung
exif := JpegScanner parse: 'Z:\Photos\1979\1.JPG'
beantwortet ein Dictionary der Eigenschaften. Unterstützte Eigenschaftsnamen:
#Make
#Model
#DateTime
#DateTimeOriginal
#DateTimeDigitized
#ResolutionUnit
#YResolution
#XResolution
#YCbCrPositioning
#Orientation
#GPSAltitude
#GPSAltitudeRef
#GPSImgDirection
#GPSImgDirectionRef
#GPSLatitude
#GPSLatitudeRef
#GPSLongitude
#GPSLongitudeRef
#GPSTimeStamp
Wenn mehr Eigenschaften benötigt werden, sollte #addField:to: unter Verwendung von EXIF-Spezifikationen erweitert werden, die unter folgender Adresse zu finden sind:
http://www.exif.org/specifications.html
http://www.exif.org/Exif2-2.PDF
Dieses Paket wurde ursprünglich von Michel Bany erstellt. Georg Heeg hat ein Beispiel und Vorbedingungen hinzugefügt.
Erste öffentliche Veröffentlichung eines einfachen Raytracing-Codes. Der Code kann gestartet werden mit:
RayTrace.RayTraceBeispiele example1
Dieser Code wird unter der Open-Source-Lizenz des MIT unter http://minnow.cc.gatech.edu/squeak/32 veröffentlicht.
Wenn Sie irgendwelche Änderungen vornehmen, lassen Sie es mich bitte wissen - david@simberon.com
Heeg-Anpassungen:
Eine RaytraceCamera wurde dem Paket hinzugefügt, sie wird im Paket 'Ray Tracing UI' erklärt.
Versuchen Sie:
RaytraceCamera openScene: RaytraceCamera exampleScene2 size: 320@200
für ein kleines Beispiel.
Wenn Sie in RB eine Klasse auswählen, erhalten Sie eine Liste von Methodenkategorien (oder Protokollen). Mit diesem Paket wird dieses Konzept auf die Spitze getrieben. Neue Protokolle werden dynamisch auf der Grundlage des Klasseninhalts hinzugefügt. Hier ist eine Liste einiger Protokolle, die Sie in diesem Paket finden:
- HaltUsage: listet die Methoden mit Haltepunkten oder Stopps auf.
- Erforderlich: listet die Methoden auf, die implementiert werden müssen, um Ihre Klasse zu konkretisieren (zeigt die Verantwortlichkeiten der Unterklasse und die Methoden, die gesendet, aber nicht implementiert werden)
- Gelöscht: listet die Methoden auf, die gelöscht wurden.
Wenn ein Protokoll keine Methode enthält, wird es nicht angezeigt.
Es ist einfach, eigene dynamische Protokolle zu schreiben. Werfen Sie einen Blick auf die Klasse DynamicProtocol. Ihnen sind nur durch Ihre Phantasie und Bedürfnisse Grenzen gesetzt.
Zeigt die Klassen, die normalerweise alphabetisch sortiert sind, in hierarchischer Form im RefactoringBrowser
RBToolBarCustomization stellt eine Klasse RBToolBarCustomActions zur Verfügung, die ihr 'Aktionen'-Protokoll scannt, wenn die Klasse initialisiert wird. Bei der Initialisierung scannt diese Klasse nach allen Instanzmethoden, die mit 'action' beginnen und die 2 Pragmas #name und #icon haben. Diese Methode muss ein RBCommand definieren, das ausgeführt wird, wenn das Toolbaricon gedrückt wird
nachdem Sie Aktionen hinzugefügt haben, initialisieren Sie einfach die Klasse und öffnen Sie einen neuen Browser mit dem neuen Werkzeugleistenelement
self initialize
Dieses Paket verwendet den XMLParser, um das DOM aus einer SVG-Zeichenfolge zu lesen, die dann in einem zweiten Durchgang in ein SVGDokument konvertiert wird, wobei das Ergebnis mit Cairo angezeigt wird.
Die Verwendung des XMLParser stellt sicher, dass jede SVG-Datei zumindest gelesen werden kann, während im zweiten Durchlauf möglicherweise einige der verfügbaren Attribute und Eigenschaften übersprungen werden.
Die Hierarchie der SVGO-Objekte wurde erweitert, die Behandlung einiger der Attribute wurde verfeinert.
Nichtsdestotrotz werden einige auf der W3C-Website (https://www.w3.org/TR/2011/REC-SVG11-20110816/) beschriebene SVG-Features nicht unterstützt, z.B. Animation und Interaktivität.
Während die Unterstützung für alle CSS-Farbkonstantennamen verfügbar ist, ist die Verwendung von Einheiten aus der realen Welt nicht implementiert.
Der in der vorherigen Version verwendete SmaccParser ist weiterhin verfügbar. Er wurde von Annick Fron, annick.fron@afceurope.com (http://www.afceurope.com) entwickelt, mit einigen Teilen aus Scarab und früheren Arbeiten an SVG im öffentlichen Repository.
Die Tests für den Parser sind ebenfalls noch im Paket enthalten. Die Syntax ist nicht vollständig, zum Beispiel wird das xmlns-Attribut nicht behandelt, aber das Paket enthält nicht weniger als 200 Beispiele.
Um Beispiele zu sehen, schauen Sie sich im SVGViewer-Tests-Paket die Klasse TestParseAndDraw an.
Zu Testzwecken wurde die Anbindung an die externe Bibliothek Librsvg beibehalten.
SXOR-Kompatibilität kann verwendet werden, um XML-Methoden, die sxor-Objekte speichern, in Methoden mit literalen Arrays zu konvertieren, die slar-kodierte Objekte speichern.
Das wird nur für die Kompatibilität in seaBreeze verwendet.
Verwendung:
Ausführen:
SxorToSlar.ConverterUI öffnen
1. Klicken Sie auf "convert", um alle sxor-Methoden in slar-Methoden umzuwandeln. slar-Methoden erhalten das Suffix _slar.
dies dauert eine Weile, da es alle Methoden im System durchsucht.
2. (optional) klicken Sie auf "Durchsuchen", um die sxor-Methoden und die neuen slar-Methoden zu vergleichen
3. Klicken Sie auf "umbenennen", um die sxor-Methoden durch die slar-Methoden zu ersetzen.
Dies ist eine neue Implementierung von Tar. Sie implementiert sowohl das Lesen als auch das Schreiben von Tar-Dateien.
Die abstrakte Klasse TarFile mit ihren Unterklassen TarReadFile und TarWriteFile bietet das SequenceableCollection-Protokoll für den Zugriff auf die Inhalte, die TarredReadStream- oder TarredWriteStream-Instanzen sind.
Ein TarGzArchiver wird ebenfalls zur Verfügung gestellt.
Fügt dem Verhaltensinspektor ein Filterfeld hinzu. (das über den Methoden-Tab im Inspektor angezeigt wird)
Das Paket fügt Dienstprogramme für den Zugriff auf zeitbezogene Dateieigenschaften auf Unix-Plattformen hinzu.
Siehe Instanzprotokoll Utilities" für weitere Einzelheiten.
ValueInterface wurde von Steven T. Abell geschrieben. Er kann unter info@brising.com erreicht werden.
Siehe auch ObservedUserInterface, eine auf Widgetry (neue VisualWorks GUI) basierende Variante von ValueInterface.
Diese beiden Frameworks wurden auf der Smalltalk Solutions 2007 vorgestellt.
Schicken Sie eine E-Mail an athomas@cincom.com, wenn Sie sich an der Präsentation erfreuen möchten.
Georg Heeg eK hat Unterstützung für das Code-Tool CanvasViewer hinzugefügt
Dieses Paket enthält einen Reader für die von VerboseProcessDump geschriebenen stack.txt-Dateien.
Verwendung:
LogViewer open
Die Zork-Analyse kann Typ- und Coverage-Informationen dynamisch ermitteln, während Code ausgeführt wird. Diese Version setzt John Brants Method Wrappers Base voraus. Sie wurde auf VW9.0 getestet.
Der ursprüngliche Analysis-Browser wurde von Michel Tilman (mtilman@acm.org) geschrieben. Er wurde durch eine Integration der Codecoverage-Analysemaschinerie in den normalen SystemBrowser ersetzt.
- Es werden Menüpunkte zum Installieren/Deinstallieren von Abdeckungsanalyse-Wrappern für Pundle/Klasse/Protokoll/Methode bereitgestellt.
- Die Installation/Deinstallation für ausgewählte Pundles instrumentiert alle Instanz- und Klassenmethoden, die zu den ausgewählten Pundles gehören.
- Bei der Installation/Deinstallation für eine einzelne Klasse oder Protokolle werden entweder Instanz- oder Klassenmethoden instrumentiert.
Die Ergebnisanzeige der Coverage-Prozentsätze wird zu den Listenelementen der Pundles/Klassen/Protokoll/Methodenlisten hinzugefügt; Prozentsätze für eine Klasse werden im Klassenhierarchiemodus nicht angezeigt.
Derzeit verlangsamt die Ergebnisanzeige für Bundles aufgrund umfangreicher Berechnungen den SystemBrowser-Betrieb, daher ist ein Setting verfügbar, um die Bundle-Anzeige standardmäßig ausschaltet (Settings -> Zork-Analysis -> Display Coverage Values for Bundles); Verwendung auf eigene Gefahr!
Die Anzeige der Coverageanalyse-Ergebnisse für Klassen erfolgt nach einer weiteren Einstellung: (Settings -> Zork-Analysis -> Display Instance and Class Coverage Values for Classes). Standardmäßig werden entweder Instanz- oder Klassenabdeckungswerte angezeigt, wie z.B. '[28%] Array'. Bei eingeschalteter Einstellung sieht die Anzeige wie folgt aus: '[28%/70%] Array'.
Coverageanalyse-Ergebnisse werden in jedem geöffneten SystemBrowser angezeigt.
Wenn eine Methode mit Coverage-Informationen ausgewählt wird, wird ein zusätzlicher Tab 'Coverage' als CodeTool zur Verfügung gestellt, mit dem die gesammelten Informationen für die Methode analysiert werden können. Anweisungen in der Methodenquelle werden mit einem grünen Hintergrund angezeigt, wo die Abdeckungsinformationen gesammelt wurden. Die Statements zeigen ihre gesammelten Typinformationen in einem Hover-Hilfefenster an. Beim Klicken in ein solches Statement öffnet sich entweder ein Broweser über den ermittelten Typ (also die Klasse), oder, falls mehrere Typen ermittelt wurden, ein Menü mit allen verfügbaren Typen (d.h. Klassennamen).
Einzelheiten zur Implementierung:
- für die Anzeige der Prozentwerte für PundleModels wurden einige Methoden aus dem Paket 'SUnitToo(lsoverage)' wiederverwendet.
BITTE versuchen Sie nicht, beide Coverage-Tools gleichzeitig zu laden!
(Verfasser: Ralf Propach, Roland Wagener, Georg Heeg eK)
Verwendung
=========
1) Starten Sie den SystemBrowser vom VisualLauncher aus. Wählen Sie ein Pundle, oder eine Klasse, oder ein Protokoll, oder eine Methode, und wählen Sie 'Install Coverage' aus dem entsprechenden Listenmenü. Als erste Rückmeldung wird der anfängliche Prozentsatz der Abdeckung der ausgewählten Elemente in den Listen '[0%]' vor jedem Element angezeigt.
2) Führen Sie den Code, den Sie gerade instrumentiert haben (d.h. führen Sie die Anwendung aus, an der Sie interessiert sind, führen Sie einige Tests durch, was auch immer).
3) Die Aktualisierung im Browser sollte fast augenblicklich stattfinden, wenn Sie das Pundle, das den instrumentierten Code enthält, erneut auswählen. Untersuchen sie nun die Ergebnisse:
- für eine instrumentierte Methode zeigt der Coverage-Tab die gesammelten Informationen an,
- Bewegen Sie den Mauszeiger über ein Statement im Codefenster, um den/die gefundenen Typ(en) in einem Hover-Hilfefenster zu sehen,
- Klicken Sie auf ein Statement, um direkt zu einem einzelnen ermittelten Typ zu navigieren, oder wählen Sie den gewünschten Typ aus dem Menü;
- klicken Sie auf die Zurück-Schaltfläche des Browsers, um wieder zur gewählten Methode zurückzukehren.
- grün gefärbter Code bedeutet: diese Anweisungen der Methode wurden ausgeführt,
- Code, der nicht farbig ist, bedeutet: die Anweisungen wurden nicht ausgeführt
- es wird keine Schwebehilfe angezeigt, da keine Informationen gesammelt wurden.
4) Deinstallieren Sie die Coverageanalyse-Wrapper, wenn Sie fertig sind. Dies kann wahlweise für eine einzelne Methode, ein Protokoll oder eine Klasse oder für den gesamten Code eines Pundle erfolgen. Beim Schließen des SystemBrowser-Fensters werden Wrapper NICHT deinstalliert! Wenn Sie das Image speichern, werden auch installierte Wrapper gespeichert. (Zu Ihrer Information: "Refactory.Wrappers.MethodWrapper nuke" ist eine "last ditch"-Methode zum Entfernen von Wrappern aus Ihrem Image, wenn Sie nicht mehr wissen, welcher Code instrumentiert wurde).
Instrumentierter Code läuft etwa 6 Mal langsamer als normaler Code.
Bekannte Einschränkungen
====================
Diese Entwicklung ist im Fluss, an einigen Stellen besteht Refaktorisierungsbedarf.
- Gegenwärtig gibt es keine Sicherheitsvorkehrungen, die verhindert, dass Methodnen analysiert werden, die vom Tool selbst genutzt werden. Dies kann zu Problemen führen, daher sollten Sie entweder Kernel-Klassen nicht analsieren, bis dies behoben ist, oder Sie gehen das Risiko ein, aber speichern Sie vorher ihr Image (was ohnehin vor jeder Analyse ratsam ist!).
- Nicht alle Smalltalk-Konstrukte werden unterstützt; z.B. wird 'thisContext' nicht erkannt.
- Die Hypertext-Funktionalität ist derzeit eher ad-hoc (so auch die Implementierung).
- In früheren Versionen hatte der PDP-Debugger Probleme bei der Auswahl bestimmter Stack-Frames in Methoden mit installierten Wrappern innerhalb eines #eval: durch den Analyse-Browser-Wrapper. Dies wird derzeit untersucht.
Weitere Informationen
===============
Die Webseite von Michel Tilman beschreibt die VW2.5-Implementierung und hat ein Bild der 5i.3-Version:
http://users.pandora.be/michel.tilman/Smalltalk/
Der ESUG2000-Konferenzbericht von Niall Ross beschreibt das Werkzeug im Abschnitt über Meta-Programmierung, Bericht über "Building Run-Time Analysis Tools using Pluggable Interpreters":
http://www.esug.org/summerschools/2000_Southampton/report/ESUG2000publicV2.pdf
Veraltete Contributions
Diese Contributions sind veralted und werden nicht mehr angeboten.
Eurydike ist ein schemaloser, objektrelationaler Mapper, der für eine einfache Anwendung konzipiert wurde. Sie brauchen keine Tabellen-Deskriptoren oder irgendetwas anderes zu schreiben, um ein Mapping zwischen Objekten und Tabellen zu beschreiben. Mit Eurydike ist es möglich, jedes beliebige Objekt in einer SQL-Datenbank zu speichern und über ein Wurzelobjekt namens ObjectSpace darauf zuzugreifen. Aus Leistungsgründen können primitive Objekte wie Zeichenketten, Symbole, Zahlen und byteencodierte Objekte wie ByteArray oder UninterpretedBytes nicht direkt als eigenständiges Objekt gespeichert werden, sondern nur als Variablen eines anderen komplexen Objekts.
Ein ObjectSpace definiert die Wurzel der Objekte, die in Ihrer Datenbank verbleiben sollen. Sie müssen ObjectSpace unterklassifizieren und die Klassenmethode #connectionProfile implementieren. Diese Methode muss eine Instanz von Eurydike.ConnectionProfile zurückgeben und enthält die Datenbankverbindungsinformationen wie Umgebung, Benutzer und Kennwort. Sie können dann die benötigten Instanzvariablen oder Zugriffsmethoden zu Ihrem ObjectSpace hinzufügen. Normalerweise werden Sie nur mit der Standardinstanz Ihres ObjectSpace sprechen. Diese kann abgerufen werden, indem Sie die Nachricht #default an Ihre ObjectSpace-Klasse senden. Ihre Änderungen am ObjectSpace oder an allen referenzierten Objekten werden in der Datenbank gespeichert, indem Sie #commit an Ihre ObjectSpace-Instanz senden.
Angenommen, wir haben eine PersonObjectSpace-Klasse mit der Instanz-Zugriffsmethode #person, dann könnte ein Beispielcode wie folgt aussehen:
| space |
space := PersonObjectSpace default.
space person
name: 'Winnie';
lastName: 'Puuh';
yourself.
space commit
Weitere Beispiele finden Sie unter den Klassen AddressManagementSpace und AddressManagementTestCase.
Dieses Paket fügt dem aktuellen Image die Nachrichtenkataloge hinzu, die Teil der Heeg-Contributions sind.
Auszug aus dem VW-Installer Framework für WikiWorks4SSP
In VisualWorks 7.10 erfordert WikiWorks4SSP die Installation von Web Application Server (Legacy).
WikiWorks4SSP mit CSS-Unterstützung wurde an Web Toolkit angepasst.