Monday, 29. May 2006
Ich glaube, )CHECK WS gehört zu den kaum bekannten und daher wenig genutzten Systemkommandos. Ich gebe gerne zu, dass ich es selbst lange nicht mehr verwendet habe.
Warum auch? Denn )CHECK WS wird automatisch beim Laden und Speichern eines Workspaces ausgeführt. Ist was faul im WS, so gibt es Meldungen wie in " Schuld war nur die Platte" beschrieben. Wer wie ich häufig eine Workspace während der Entwicklung und des Testens speichert bekommt also )CHECK WS geschenkt.
Nun gibt es aber noch eine Variante von )CHECK WS, die ich total vergessen hatte: )CHECK WS [ON|OFF] Man muss schon recht verzweifelt sein, um diesen Schalter umzulegen. Denn danach wird nach jeder Ausführung einer APL2-Grundfunktion ("primitive function") der Workspace ausgiebig geprüft. Bei größeren Anwendungen kann man ruhig ein Tasse Kaffee trinken gehen.
Die hiernach angesagte Tuning-Maßnahme wäre dann )CHECK WS OFF. Ich habe selten mit so wenig Aufwand eine Anwendung um das Vielfache beschleunigt. Mit )LOAD und )CLEAR erzielt man übrigens in diesem Falle das gleiche Ergebnis: Diese Kommandos setzen einen gesetzten )CHECK WS Schalter wieder zurück.
Dies alle und noch viel mehr kann im APL Language Reference (S.418) nachgelesen werden.
"Apropos Checkws" vollständig lesen
Wer kennt ihn nicht, den SYSTEM ERROR/CLEAR WS. APL2 ist auch unter Windows inzwischen ein sehr stabiles System, aber manchmal zerreißt es auch das beste System. Ich denke, häufig ist es Windoof, das den Speicher zerbröselt, so dass die Pointer-Verwaltung im APL2 nicht mehr stimmt.
Aber es muss nicht immer der übliche Verdächtige sein.
Ich habe vor einigen Wochen einen CONTINUE geschickt bekommen, der nach dem Laden folgende Meldung ausgab: Checkws: mentry does not point back, ri = 0x350d0 Auf dem Rechner des Entwicklers gab es kurz vor dem SYSTEM ERROR/CLEAR WS eine schier unendlich lange Liste (immerhin ca. 1000 Zeilen) mit solchen Ausgaben und darauf folgend noch Meldungen wie Checkws: points to mentry with different ri, ri = 0xdbda Zu guter Letzt beklagt sich Checkws noch über ein "negative-length object".
Das erste, was ich in einem solchen Fall mache, ist ein WS-Reorg: )CLEAR, )COPY und )SAVE. Das räumt auf und reduziert den belegten Speicher. Dies wollte aber hier nicht die erwartete Heilung bringen. In nerviger Regelmäßigkeit stürzte das APL2 per SYSTEM ERROR ab.
Der Hinweis zur Lösung war dann letztendlich, dass obige Probleme auf anderen Rechnern nicht auftraten. Schuld war wohl die Festplatte. Denn nachdem diese "repariert" wurde, tritt der SYSTEM ERROR nicht mehr auf.
Tuesday, 9. May 2006
In " Was gibt's Neues in CSD8" habe ich folgende Erweiterung vergessen: - Windows XP themes will be recognized and used in all APL2 GUI windows. Tatsächlich habe ich das nicht übersehen oder gar vergessen, nein, viel schlimmer, ich habe die Weitergabe dieser Info unterdrückt. Denn bis heute wusste ich nicht, was das konkret bedeutet und wie ich eine Änderung erfahrbar machen kann.
Jetzt habe ich den Unterschied sichtbar machen können:
Alles klar?
Windows XP Themes können in den "Eigenschaften von Anzeige" (Microsoft deutsch) aktiviert, geändert und gespeichert werden.
Mit dieser Erweiterung sehen APL2 GUI "besser" aus. Das liegt sicher daran, dass sie sich besser in das "look" meiner anderen Desktop-Anwendungen einfügen.
Eine absolut sinnvolle Erweiterung und Schande über mein Haupt, dass ich sie vorher nicht auch nur eines Wortes gewürdigt habe.
Saturday, 6. May 2006
Das waren die guten Nachrichten über "IN". Kann ich also meine korrigierte Variante von "IN" durch die offizielle Version ersetzen? Das wäre erstrebenswert, geht aber nicht. Denn ich habe noch zwei weitere Dinge "verbessert" - verbessert im Sinne der Verwendung von "IN" in meinem APL-Workspace Crawler.
Das INen von großen geschachtelten Variablen kann sehr lange dauern und während dieser Zeit die kompletten CPU-Ressourcen in Anspruch nehmen. Dies kann nicht direkt IN oder )IN angelastet werden, denn der eigentliche Übeltäter ist ⎕TF.
Hierzu ein Beispiel: Auf meinem neuen 2 GHz Rechner dauert das Inen einer 10553x24-Matrix der Tiefe 2 ca. 20 Minuten. Die Größe der Variable ist, gemessen mit "4 ⎕AT", 9.117.824 bzw. 1.744.766. Die Größe der ATF-Datei, die ausschließlich die Variablen enthält ist, ca. 2MB.
Für den meinen Crawler, der sowieso nur nach Funktionen und Operatoren sucht, war das pure Zeit- und Ressourcenverschwendung. Ich habe mir daher die Definition von IN vorgenommen und entsprechend geändert: Hast du gerade eine Variable zur Bearbeitung vor dir, dann gehe zum nächsten Objekt. Einfach und effizient!
Wäre das nicht auch ein Feature für die offizielle Version von "IN". Auch dem APL2 Library Manager würde es gut zu Gesicht stehen: Der Anwender wird vor dem Einlesen komplexer APL2-Variablen aus ATF-Dateien erst mal gefragt, ob er sie wirklich sehen will - oder ähnlich.
"Was nicht ist, kann ja noch werden" vollständig lesen
Thursday, 4. May 2006
Es gibt schon nette Zufälle. Da habe ich mich in einem Vortrag darüber beklagt, dass die externe Funktion "IN" ('FILE' 11 ⎕NA) nicht kompatibel zum Kommando )IN ist. Und keine Stunde später sind zumindest zwei meiner Vorschläge bereits umgesetzt.
Naja, nicht mal ein APL-Entwicklungsteam arbeitet so schnell, obwohl die sonst schon sehr schnell reagieren.
Die wahre Geschichte ist folgende: Ich war eben nicht der Einzige, der Stress mit "IN" hatte. David bekam die gleichen Probleme, als er "IN" für seinen Library Manager einsetzte. Als Entwickler war es für ihn ein leichtes, eine verbesserte Version von "IN" zu erstellen oder anzufordern. Ich habe nur meine eigene, inoffizielle korrigierte Variante.
Diese Änderungen blieben aber undokumentiert. In der Liste der "Enhancements Added" zur CSD8 fehlen entsprechende Einträge, der User's Guide ist hier - "Supplied Workspaces/FILE Workspace/Transfer Group" - ohne Änderung.
Und das ist neu: IN '99 ATFNAME'
IN '''e:\temp temp\name.atf'''
Bis zur CSD8 haben die Leerstellen "IN" zur vorzeitigen Aufgabe gezwungen - zur erkennen am Ergebnis 0.
"Undocumented Features" vollständig lesen
Monday, 1. May 2006
... in CSD8? Kurz geantwortet:
Den APL2 Library Manager:
Ein Werkzeug zum durchforsten von APL2 Workspaces in allen drei Dateiformaten: .APL, .ATF und .ANS. Der APL2LM erspart es mir z.B. das Laden eines Arbeitsbereiches, um dort etwas zu suchen oder anzusehen. Es sieht aus, als ob der APL2LM ein sehr nützliches Werkzeug werden könnte!
Über eine weitere Neuerung habe ich bereits geschrieben: "Calls to APL2", das Arbeiten mit Slave-Interpretern direkt aus einer APL2 Sitzung heraus. Dazu wurden gleich zwei Dinge zum APL2 System hinzugefügt, die externe Funktion APL2PIA und der Hilfsprozessor 200. Der APL2 Library Manager macht reichlich Gebrauch von APL2PIA.
Es gibt noch viele "kleinere" Erweiterungen:
"Was gibt's Neues" vollständig lesen
Sunday, 30. April 2006
Montag, kurz vor Mitternacht, habe ich eine meiner Regeln verletzt und wäre auch fast bestraft worden. "Don't change a running system" vor einer Präsentation. Aber meine Neugierde überwog, und ich installierte kurzerhand die CSD8. Um sicher zu gehen, testete ich nochmals die Anwendung, über die ich am Dienstag reden wollte. Siegessicher starte ich sie, machte die nötigen Eingaben und ... nichts passierte. Das war nicht ok, irgendwas war falsch.
Kurzum: der Grund war ein SQL0818N "Ein Zeitmarkenkonflikt ist aufgetreten". Warum, weshalb? Dienstags um 0 Uhr hatte ich keine Ahnung. Offensichlich eine Verstimmung zwischen APL2 und DB2, denn der Zugriff auf die betroffene DB2-Tabelle funktionierte klaglos im DB2-Befehlszeilenprozessor.
Trotz allen Mutes, bin ich doch immer noch einigermaßen vorsichtig. Ich hatte als Netz und doppelten Boden die CSD7 noch auf der Platte. Das bin-Verzeichnis zurück kopiert, und alles war wieder gut.
Die Lösung des Rätsels gab's am kommenden morgen. Nancy, die Entwicklerin des AP127 ("eine 27-jährige entwickelte diesen AP") hatte dieses Problem schon am Freitag gesehen. Sie schlug gleich zwei Lösungen vor:
1. den AP127 neu binden
2. den AP127 der CSD7 in das aktuelle bin-Verzeichnis zurück kopieren.
"Neu binden" vollständig lesen
Friday, 21. April 2006
Nächstes Jahr jährt sich zum fünfundzwanzigsten mal meine erste Berührung mit APL, dieser fantastischen Sprache. Nachdem ich mich die Jahre vorher mit Cobol, Assembler, Fortran und ähnlichen unangenehmen Dingen auf Computern herumgeschlagen habe, war dieser Erstkontakt der Beginn einer wunderschönen Beziehung mit der Spezies Computer.
Naja, Scherz beiseite. In 25 Jahren sammelt sich so einiges an Arbeitsbereichen, Funktionen, Operatoren und Variablen. Da verliert man schon mal den Überblick.
Wie oft habe ich Workspaces nach einer Funktion durchsucht, von der ich wusste, dass sie existiert, aber ich nicht wusste, wo. Auch kam es vor, dass ich mir absolut sicher war, vor einiger Zeit einen Workspace erstellt zu haben, aber ich wusste nicht mehr, in welchem Verzeichnis ich ihn abgelegt hatte
Über die Jahre haben sich auf meinem Rechner viele Verzeichnisse mit APL-Arbeitsbereichen angesammelt - Ordnung muss sein - und noch mehr Arbeitsbereiche und noch viel mehr Funktionen und Operatoren.
Es kann schon sehr lästig sein und viel Zeit kosten, eine Funktionen in ihrer aktuellsten Version in mehreren Workspaces in verschiedenen Verzeichnissen suchen zu müssen: Workspace laden, Funktion suchen, öffnen, inspizieren, Fix-Zeitpunkt merken, nächsten Workspace laden, Funktion suchen, ...
"Alle meine Funktionen - ein Vorwort" vollständig lesen
Thursday, 20. April 2006
Gemäß den Datumsangaben in meinen Java-Klassen oder den APL2-Funktionen, die auf diese Klassen zugreifen, ist es nun zwei Jahre her ist, dass ich mich mit Java beschäftigt habe. Nicht, weil ich Java so toll finde, sondern um die Schnittstelle vom und zum APL2 zu nutzen. Das hat auch einiges Beständiges gebracht, Funktionen, die ich seitdem regelmäßig genutzt habe.
Java Klassen entwickelt habe ich seitdem nicht mehr. Damit ich es in zwei Jahren leichter habe, wenn ich mich evtl. wieder nach längerer Pause in Java einarbeiten muss, nutze ich diesen Blog als Merkzettel.
Die Installation und Anbindung ans APL2 hat ja reibungslos funktioniert.
Aber, was war das bloß, dass APL2Env_ nicht wie erwartet wollte? Das APL2 Hostwin meinte irgendwelche Klassen zu vermissen. Das kam alles bedeuten. Ich war sicher zu ungeduldig und habe wahrscheinlich was übersehen. Denn ...
Heute morgen habe ich eclipse installiert, einige Klassen von links nach rechts verschoben, "classpath" angepasst und - Überraschung! - APL2Env_ und Genossen zicken nicht mehr.
Hier noch drei weitere Merkposten:
"Das habe ich alles schon mal gewusst" vollständig lesen
Wednesday, 19. April 2006
Nachdem nun klar ist, dass APL2PIA kein "multi-threaded" APL2 ermöglicht, musste ich auch auf meinem neuen Rechner Java installieren, um meine Tools wie auf dem alten Rechner benutzen zu können.
Java installieren und einige Einstellungen vornehmen, testen und ok. Das war alles ganz einfach und ebenso "straight forward". Schließlich habe ich das gerade zum vierten oder fünften mal gemacht. Es lebe die Routine!
Und so geht's (s.a. APL2 User's Guide, S.168):
Java von java.sum.com downloaden. Da ich auch Java Klassen erstellen möchte, wähle ich das SDK, zur Zeit JDK 5.0 Update 6. Ansonsten reicht das Java Runtime Environemnt. Installieren ... und gut bis hier.
Möglicherweise ist Java, in welcher Variante auch immer, bereits installiert. In der Windows Eingabeaufforderung kann man dies mittels "java -version" herausfinden.
Damit ich unter APL2 auf die die Beispielklassen zugreifen und mittels Prozessor 14 ausführen kann, muss ich noch zwei Einstellungen vornehmen.
"Das ist Routine!" vollständig lesen
Tuesday, 18. April 2006
Am Montag, den 17. April 2006, schrieb ich unter " Warum nur, warum ...":
"... mag David den P12 nicht?"
Diese implizite Annahme entbehrt jeder Grundlage.
Weiter unten verstieg ich mich in der Frage:
"Warum also mag David den AP210 so sehr?"
Auch diese inhärente Behauptung entspicht nicht der Wahrheit.
Wahr ist, dass David den P12 hoch schätzt und ihn dem Hilfsprozessor 210 sogar vorzieht.
Die Redaktion entschuldigt sich an dieser Stelle in voraus eilendem Gehorsam für diesen rhetorischen Ausrutscher.
Monday, 17. April 2006
... mag David den P12 nicht? Warum zieht er den anspruchsvollen AP210 einem einfachen "File as Variable" vor?
Wenn ich schon vor einigen Jahren für den P12 die Sicht auf Dateien als Byte-Stream gewünscht habe und dies dann von Nancy auch so vorgesehen wurde, sollte ich dieses Feature zumindest promoten.
Mit dem P12 assoziiert man eine Datei mit einem Variablennamen. Danach kann man auf die Datei fast genauso zugreifen wie auf APL-Variable. Bei der Assoziierung muss man noch eine Struktur für die Variable definieren. Dies kann für flache Dateien eine Vektor von Zeichenvektoren oder Zeichenmatrizen sein.
Das waren die Formate, die für Flatfiles von Anfang an vorgesehen waren. Neu dazugekommen, und das auch nur für die Workstation-Plattformen, sind später Dateien als " Simple Character Vector" - Byte Streams:
"Each byte in the file is a single element in the character vector. Control characters, including line delimiters, are not handled in any special way. They are regular elements of the character vector." (APL2 User's Guide, S.165) Und so geht's:
"Warum nur, warum ..." vollständig lesen
Mit Service Level 8 wird es ohne Umwege über Java, C-Programmierung oder VB möglich sein, aus einem APL2-Interpreter heraus weiter Interpreter zu starten und zu nutzen. David nennt Letztere "Slave Interpreter".
Ich bin mir noch nicht vollkommen schlüssig, wozu das gut sein soll.
Eine Anwendung wäre "Namescope Isolation", Eingriffe in andere Workspaces ohne mögliche Namenskonflikte befürchten zu müssen. Dazu habe ich bisher Namespaces genutzt, und dazu wurden Namespaces auch erfunden.
Eine weitere Anwendung wäre "Multi-Threading". Dies scheint zumindest mit der vorgesehenen externen Funktion nicht ohne Weiteres zu funktionieren. Vielleicht ist dies irgendwann mal Anlass für ein Requirement.
Das Starten eines Slave Interpreters mit APL2PIA erzeugt keinen neuen Prozess und nicht mal einen eigenen Thread im aufrufenden APL2-Prozess. Es bleibt bei den beiden Threads, die APL2 für sich wofür auch immer anlegt. Nur etwas mehr Speicher für den Prozess des "Master Interpreters" wird allokiert, wenn dieser einen Slave Interpreter startet.
Auf jeden Fall ist (nicht nur) in diesem Zusammenhang die von mir vor Jahren gewünschte und inzwischen verfügbarer externe COPY-Funktion offensichtlich sehr nützlich.
Sunday, 16. April 2006
Ich dachte schon, ich könne Java loswerden, um das eine oder andere meiner APL2-Tools im Hintergrund laufen zu lassen.
Dieses kleine Helferlein gibt mir einen Überblick über die Umgebung meiner aktuellen APL2-Sitzung. Damit ich es von meiner Sitzung aus starten kann und es nicht sofort wieder beenden muss, um die Session für Eingaben wieder entsperrt zu bekommen, wird es über Java in einem eigenen Thread aufgerufen. Java wird also nur benötigt, um vom APL2 aus eine weitere APL2-Sitzung in einem eigenen Thread starten.
Nun wird es mit dem neuen Service Level eine externe Funktion geben, mit der aus einer APL2-Sitzung ein weiterer APL2-Interpreter gestartet werden kann. Dort können dann beliebige APL2-Anweisungen ausgeführt werden. Kling doch so, als könnte ich mit diesem neuen Feature den Umweg über Java loswerden.
"Schade ..." vollständig lesen
Monday, 10. April 2006
Ich hätte ihn fast vergessen: den APL2 Keyboard Handler.
Ich kann mich noch erinnern wie David ihn auf einer GSE Tagung vorstellte. Ich glaube, das war in Augsburg. Enger Tagungsraum, ich kam zu spät und war unkonzentriert. In der Folge habe ich den Keyboard Handler einige male gestartet, konnte aber so recht nichts damit anfangen.
Der APL2 User's Guide widmet dem Handler einen kompletten Abschnitt (Seite 36f):
"The APL2 keyboard handler can also enable you to type APL characters in other applications. To enable APL input in other applications, either open the APL2 Keyboard Handler icon in the IBM APL2 folder or run the APL2KEY.EXE program. Then, select an APL font in the application in which you want to type APL characters."
Das funktioniert auf jeden Fall mit Excel und mit Word, aber leider nicht mit Powerpoint. Auch mein Mail-Client zickt mehr oder weniger. Dafür macht Notepad keine Probleme.
"Vergoldet und Vergessen" vollständig lesen
|