Smalltalk - Mehr als nur eine Sprache

Smalltalk - Mehr als nur eine Sprache

Posts 1-10 of 13
  • User photo
    Friedrich Dominicus
    (not a XING member)
    Squeak user interface
    Keine Ahnung ob da jemand etwas kennt was eher dem "tradtionellen" windows oder Linux desktip entspricht und/oder den vorhandenen Entwicklungstools.

    Obwohl ich mich inzwischen schon etwas mehr an Squeak gewöhnt habe stösst mit der ganze GUI Kram doch sauer auf. Außerdem finde ich die Bücher die ich so über squeak gefunden habe einfach nur "grottenschlecht" als da wären:
    "Squeak Object-Oriented Deisng with Multimedia Applications" und
    SQUEAK A Quick trip to ObjectLand....

    Offentsichtlich ist das Interface kein Problem für die squeaker selber aber ich finde es ziemlich schlecht.
    - Ich kann mich an keine Stelle erinnern wo es mal eine brauchbar Erläuterung zum Erstellen des GUI gibt. es ist ein Gehacke mit irgendwelchen vertikalen, horiizontalen Containern bis es "irgendwie" läuft
    - es scheint nicht ein brauchbares Tool zu GUI Erstellung zu geben (wenn Sie mir das wiederlegen können bitte legen Sie los
    - Docu der Klassen ist sowas voin nicht existent das es einen schüttelt.
    - Ich habe bisher keinerlei Programs gesehen wo man "traditionelle" Firmendinge wie Projekte, Adressen, Termine etc behandelt.

    Bin ich da der einzige, der nichts findet.

    MfG
    Friedrich
  • Dr. Markus Gälli
    Dr. Markus Gälli    Premium Member
    The company name is only visible to registered members.
    Re: Squeak user interface
    Hallo Herr Dominicus,

    ich weiss nicht, welche Art Anwendung Sie entwicklen wollen.
    Wenn es aber nicht unbedingt eine "fat-client"-Lösung sein muss, dann werfen Sie doch mal einen Blick auf das Web-Entwicklungswerkzeug namens Seaside.
    http://www.seaside.st/
    Das Interface sieht dann so aus, wie alle gängigen Web-Anwendungen, inklusive einer Implementierung neuester Buzzwords wie "Ajax".

    Um die GUI zu entwickeln, kann ich auch das Framework "Magritte" empfehlen. Mit Hilfe dessen definieren Sie eine (oder auch mehr Arten) wie sich ein Objekt darstellen soll, und kommen mit einer minimalen Anzahl von Methoden auf der GUI-Seite sehr "business-getrieben" zu einer mächtigen GUI.

    Diese können Sie beispielsweise dann sogar auch als "fat client" rendern, wobei ich doch die Web-Lösung empfehlen würde.

    http://www.lukas-renggli.ch/smalltalk/magritte/tutorial.pdf

    Beispiele für Seaside mit Magritte im Einsatz finden Sie hier:
    http://www.cmsbox.ch/

    Übrigens auch im Einsatz beim Juniorwebaward vom den "Schweizer Denics" namens "Switch":
    http://info.juniorwebaward.ch/?page=31

    Eine andere, äusserst professionelle Lösung, die ""traditionelle" Firmendinge wie Projekte, Adressen, Termine etc behandelt" und mit Squeak/Seaside (von den Erfindern von Seaside) erstellt wurde, finden Sie mit DabbleDB.
    http://www.dabbledb.com/

    Schliesslich gibt es noch Zukunfsmusik, die zeigt, wie Firmendinge nicht ganz so traditionell erledigt werden können, unter
    http://www.qwaq.com/content/Qwaq%20Forums%20v1.0.pdf

    Liebe Grüsse,

    Markus Gälli
  • User photo
    Friedrich Dominicus
    (not a XING member)
    Re^2: Squeak user interface
    Nein ich meinte explizit kein Webinterface. Und auch bei einem ersten überfliegen von Margritte scheint mit der "web" Aspekt im Vordergrund zu stehen. Ich meine einen einfachen GUI Builder mir den Menüs an den "erwarteten" Stellen etc.

    Der ganze Morph Krams mag ja nett und schön sein aber er ist nirgendwo veständlich erklär....

    MfG
    Friedrich Dominicus
  • Clemens Soltau
    Clemens Soltau
    (not a XING member)
    Re^3: Squeak user interface
    Tag, Herr Dominicus!

    Der ganze Morph Krams mag ja nett und schön sein aber er ist nirgendwo veständlich erklär....
    Nun, vielleicht haben Sie nur das Konzept von Squeak und der GUI "Morphic" noch nicht verstanden. Squeak ist alles in einem Anwendungsprogramm, Benutzeroberfläche, Programmierwerkzeug mit Sourcecode, Debugger, Profiler, Library, Betriebssystem in einem.

    Für jedes Objekt, welches Sie in Squeak öffnen können, können sie den Quellcode betrachten, den Code nach eigenem Belieben verändern oder korrigieren. Öffnen Sie z.B. einfach das Menü "Welt", indem Sie einfach auf den Desktop klicken. Nun können Sie mit ALT+Linke-Maustaste die zugehörigen Halo's aufmachen. In dem roten Halo dann finden Sie ein Untermenü - Programmieren und darunter dann "Browser für Morph" können sie den Quellcode zu dem Objekt untersuchen, kopieren, verändern, und beliebig selber austesten.
    Es gibt in Smalltalk eine Konvention: Alles, was mit Großbuchstaben beginnt, ist eine Klasse, und was mit Kleinbuchstaben beginnt, ist ein Objekt (Instanz) in dem Browser können Sie ja zwischen Klasse und Instanz auch hin - und herschalten.
    So finden sie heraus, welche Objekte in Squeak gerade "instantiiert" wurden, also aktiv im Geschehen teilnehmen, und sie können die Klassenhierarchien hochklicken, bis sie verstehen, welcher Morph von welchem abgeleitet wurde.

    Ich muß sagen, daß ich zuvor keine Ahnung hatte, wie Programmieren in Smalltalk funktioniert, aber es ist wirklich kinderleicht, wenn man erst einmal das mentale Modell dahinter verstanden hat.

    Markus Schlager hat unter

    http://signalbscw.tcs.informatik.uni-muenchen.de/pub/bscw.cg...

    ein Tutorial veröffentlicht, in welchem Sie lernen können, z.B. den WatchMorph zu kopieren, zu verändern, Quellcode zu lesen, eigene Klassen anzulegen, zu schaffen, u.s.w.

    Das Interessante an Squeak ist, daß Libraries, Anwendungsprogramme, Code in einem einzigen Image versammelt wurden. Es gibt keine Grenzen mehr zwischen Betriebssystem und Anwendung, alles ist miteinander verzahnt. So bedarf es bei Microsoft z.B. in die aufwändige Einarbeitung z.B. der MAPI (schlecht dokumentiert sogar), was mitunter 1/2 Jahr dauern kann, nur um eine Schnittstelle zu verstehen. Solange brauchen Sie auch, um Smalltalk zu erlernen, und sich in Squeak perfekt einzuarbeiten.

    Recht interessant ist, daß sie auch langsam den Einstieg in Smalltalk vollziehen können. Haben sie z.B. ein Skript auf dem Desktop laufen, so können sie in den Quellcode - Modus umschalten, und darin dann selber kurze Skripte hineinprogrammieren. So habe ich z.B. gelernt, wie ich ein Textfenster öffne, und darin einfach mit ein paar wenigen Zeilen die Daten aus einer Datei auf dem Filesystem oder einer SQL oder OO-Datenbank einlesen.

    So gibt es z.B. den PDA - Morph (siehe unter Geräte -> Objektkatalog->Nützliches) , welcher Adressverwaltung, Projekt/Terminplaner, Notizblock ... gleichzeitig ist. Sie können ihn einfach erweitern.

    Unter Lager finden sie einen Morph "Buch" (nicht den Karteikasten, der ist kapputt) Ziehen Sie einfach ein paar Textfenster und Beschriftungen hinein, öffnen Sie mit ALT-Linke-Maustaste das rote Halo, und unter Buch->Prototyp für neue Seite können sie damit diese von ihnen gemalte Datenbank festzurren. Sobald sie dann mit + eine neue Seite anlegen, finde sie da die Felder , um neue Datenbankeinträge vorzunehmen. Ein Klick auf den mittleren Punkt oben im Menü öffnet das Suchfenster um nach beliebigen Daten in allen Feldern zu suchen. Fertig ist die Access-Datenbank.
    Und wenn Sie dann noch einen Anschluß an eine CSV - Datei im Filesystem haben wollen, dann verändern sie doch einfach den Buch - Morph, (vorher in MyBookMorph kopieren) daß dieser die Felder in einer CSV - Datei ablegt. Alternativ ist Magma zu empfehlen (schon eingebaut!) In diese Datenbank können sie sogar Bilder, Video's oder Anwendungen ablegen .... ganz wie sie möchten. Es gibt keine Grenzen. Letztendlich ist dieser Buch-Morph (Book-Morph) auch nur eine "OrderedCollection", etwas verziert mit Grafik ...Wo und wie sie die Daten dann ablegen, ist Squeak egal, ODBC, PostgreSQL, MySQL, Magma, SOAP, XML-RPC, ... oder via HTTP-Post ... völlig egal.

    Was die GUI "Morphic" angeht. Natürlich erscheint es Ihnen so, als wäre da ein Mangel an Dokumentation. Bernd Oldenbüttel hat die Squeak Klassenbibliotheken in HTML umgewandelt, siehe auch Links unter http://www.squeak.de

    Da Squeak vollständig in Smalltalk geschrieben ist, der Quellcode also quasi im System steckt -> Alternativ holen Sie sich den Quellcode aus dem Netz, installieren sie ihn in das vorgesehene Verzeichnis neben dem Image,
    sehe ich überhaupt keinen Grund zu klagen. ("Einstellungsmanager" -> warnIfNoSourcesFile ... beachten) Die Programmiersprache Smalltalk ist kinderleicht zu erlernen, sie ist der menschlichen Sprache sehr ähnlich, und die Effizienz immer noch ungeschlagen. Auch ohne "GUI-Builder"...der Massen an XML-Code überflüssigerweise erzeugt, sodaß eine Mini-Anwendung schon 20 MByte verbraucht, mehr, als Squeak jemals haben wird...
    Ein kleines Manko ist der Mangel der Mehrfach-Vererbung und die fehlenden Mixins, wo man Methoden aus verschiedenen Klassen zu einer neuen Klasse zusammenfasst ... wie bei Ruby, z.B.

    (So, ich hoffe, ich habe nun keinen Unsinn erzählt, lieber Markus Gaelli.... bitte korrigier mich... bin noch Einsteiger)

    Wünsche viel Spaß

    Clemens Soltau
    This post was modified on 29 Mar 2007 at 08:38 am.
  • User photo
    Friedrich Dominicus
    (not a XING member)
    Re^4: Squeak user interface
    Clemens Soltau schrieb:
    Tag, Herr Dominicus!
     
    Der ganze Morph Krams mag ja nett und schön sein aber er ist nirgendwo veständlich erklär....
     
    Nun, vielleicht haben Sie nur das Konzept von Squeak und der GUI "Morphic" noch nicht verstanden.
    Das it ja wohl offensichtlich ;-)


    >Squeak ist alles in einem
    Anwendungsprogramm, Benutzeroberfläche, Programmierwerkzeug mit Sourcecode, Debugger, Profiler, Library, Betriebssystem in einem. Ja, das ist mir schon klar, es geht nämlich fast ebenso in Emacs ;-)

     
    Für jedes Objekt, welches Sie in Squeak öffnen können, können sie den Quellcode betrachten, den Code nach eigenem Belieben verändern oder korrigieren. Öffnen Sie z.B. einfach das Menü "Welt", indem Sie einfach auf den Desktop klicken. Nun können Sie mit ALT+Linke-Maustaste die zugehörigen Halo's aufmachen. In dem roten Halo dann finden Sie ein Untermenü - Programmieren und darunter dann "Browser für Morph" können sie den Quellcode zu dem Objekt untersuchen, kopieren, verändern, und beliebig selber austesten.
    Nun wenn man weiß, was man ändern möchte.



    So bedarf es bei Microsoft z.B. in die aufwändige Einarbeitung z.B. der MAPI (schlecht dokumentiert sogar), was mitunter 1/2 Jahr dauern kann, nur um eine Schnittstelle zu verstehen. Solange brauchen Sie auch, um Smalltalk zu erlernen, und sich in Squeak perfekt einzuarbeiten. Bei Microsoft ist fast nichts wirklich einfach....


     
    (So, ich hoffe, ich habe nun keinen Unsinn erzählt, lieber Markus Gaelli.... bitte korrigier mich... bin noch Einsteiger)
    Nun Sie haben meine ursprüngliche Frage nicht beantwortet. Somit kann ich Ihnen zwar bei den meisten Punkten beifplichten, es hilft mir aber nicht ein bisschen wenn ich selber eine Anwendung schreiben möchte. Also ganz einfach erläutern Sie mir wie ich eine Morph mit einem Eingabefeld vesehe und zwei button.

    Und wenn Sie mir dann nur mit AlignmntMorphs kommen und nich mit einer Art GUI-Builder mit der ich mir dieses Ding einfach zusammenstoppeln kann, dann dürfte meine ursprüngliche Frage klar sein....

    MfG
    Friedrich
  • Clemens Soltau
    Clemens Soltau
    (not a XING member)
    Re^5: Squeak user interface
    Friedrich Dominicus schrieb:

    Nun Sie haben meine ursprüngliche Frage nicht beantwortet. Somit kann ich Ihnen zwar bei den meisten Punkten beifplichten, es hilft mir aber nicht ein bisschen wenn ich selber eine Anwendung schreiben möchte. Also ganz einfach erläutern Sie mir wie ich eine Morph mit einem Eingabefeld vesehe und zwei button.
    Indem sie ein Textfenster einfach hineinziehen, beschriften, einbetten. Und wenn der Knopf eine Funktion haben soll, also an ein Programm/Skript gekoppelt sein soll, erstellen Sie sich eines, klicken oben in das Menü des Skriptes und lassen sich einen Kopf geben, betten diesen dann auch ein.

    Fertig ist die Anwendung. Ich brauche keine 3 Minuten, um eine fertige Applikation für z.B. Bruchrechnung, Zinsrechnung, Dreisatz, Datenbank oder einen Taschenrechner zusammen zu bauen ... Ohne auch nur eine Zeile Smalltalk Code einzugeben. Nur durch Mausschubsen. Für einen Funktionenplotter, der mir beliebige Kurven zeichnet, brauche ich 5 Minuten.

    Als Morph dann speichern und per Mail diese Applikation an andere versenden.

    Für Anschluß an SQL oder OO-Datenbanken muß ich mal ein paar Zeilen Code eintippen ...

    Und wenn Sie mir dann nur mit AlignmntMorphs kommen und nich mit einer Art GUI-Builder mit der ich mir dieses Ding einfach
    Squeak ist der GUI-Builder!

    zusammenstoppeln kann, dann dürfte meine ursprüngliche Frage klar sein....
    Nehmen Sie Abschied von den mentalen Modellen von Microsoft und Konsorten. Squeak ist durchgängig OO, mit voller Konsequenz. Und einen GUI-Builder ... kenne ich auch, nur - sie sind überflüssig in Squeak ... Und wenn man mal riesige Formulare zu füllen hat -> "Maker Button" (aus Connectoren Flap ziehen)

    MfG
    Friedrich

    MfG, Clemens Soltau
  • User photo
    Friedrich Dominicus
    (not a XING member)
    Re^6: Squeak user interface
    Wenn es alles so einfach ist dann posten Sie doch einfach mal code für
    eine Dialog Box mit einem Edit Text Feld einem Label und einem Button auf Button click wird der Text aus dem Edit Text Feld in das Label eingetragen.

    Ich sehe mich dazu in fast allen Sprachen ausser Squeak direkt in der Lage das zu lösen. Aber in squeak...

    Sie dürften ruhig auch die "Deppen"-schritte mit einbauen. Denn offensichtlich brauche ich sie.

    MfG
    Friedrich Dominicus
  • Dr. Markus Gälli
    Dr. Markus Gälli    Premium Member
    The company name is only visible to registered members.
    Re^7: Squeak user interface
    Hallo,

    hab mal eben was gebastelt. Unten stehenden Text in eine halbwegs akutelle Squeak Version "ein-filen", und dann mittels

    GUIDemo new openInWorld

    starten.
    Kommentare siehe Smalltalk-Code.
    Hoffe, das hilft.

    Viele Grüsse,

    Markus Gälli

    'From Squeak3.10alpha of 30 March 2007 [latest update: #7081] on 17 April 2007 at 2:03:13 pm'!
    PasteUpMorph subclass: #GUIDemo
    instanceVariableNames: 'modelText'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'UI-Demo'!
    !GUIDemo commentStamp: 'mga 4/17/2007 14:03' prior: 0!
    A demo for using pluggable textMorphs.!


    !GUIDemo methodsFor: 'initialization' stamp: 'mga 4/17/2007 14:02'!
    initialize
    | aFont |
    super initialize.
    "Use Layout mechanism to render all from top to bottom"
    self layoutPolicy: TableLayout new;
    listDirection: #topToBottom;
    wrapCentering: #topLeft;
    hResizing: #shrinkWrap;
    vResizing: #shrinkWrap;
    layoutInset: 2;
    rubberBandCells: true;
    enableDragNDrop: false;
    color: Color white;
    borderWidth: 0.

    "Set the model here..."
    modelText := 'Enter some text here..and press enter..'.

    "Font used for both the label and the input field"
    aFont := (TextStyle named: 'BitstreamVeraSans')
    fontOfSize: 24.

    "Add the label, note that the parameter for accept is empty, and that it
    is locked to prevent writing"
    self addMorphBack: ((PluggableTextMorph
    on: self
    text: #modelText
    accept: nil) font: aFont;
    extent: 200 @ aFont pointSize + 8;
    hideScrollBarsIndefinitely;
    setTextColor: Color gray;
    borderWidth: 0;
    lock).

    "Add the input field, connect it's accept to modelText, and set it to accept
    when enter is pressed."
    self addMorphBack: ((PluggableTextMorph
    on: self
    text: #modelText
    accept: #modelText:) font: aFont;
    extent: 200 @ aFont pointSize + 8;
    selectAll;
    acceptOnCR: true;
    hideScrollBarsIndefinitely;
    beSticky;
    enableDragNDrop: false)! !


    !GUIDemo methodsFor: 'accessing' stamp: 'mga 4/17/2007 12:25'!
    modelText
    ^modelText! !

    !GUIDemo methodsFor: 'accessing' stamp: 'mga 4/17/2007 12:28'!
    modelText: aText
    modelText:= aText string.
    self changed: #modelText ! !
  • Dr. Markus Gälli
    Dr. Markus Gälli    Premium Member
    The company name is only visible to registered members.
    Re^8: Squeak user interface
    Themaverfehlung...hatte keinen Button eingabaut, diesmal aber:

    'From Squeak3.10alpha of 30 March 2007 [latest update: #7081] on 17 April 2007 at 2:35:36 pm'!
    PasteUpMorph subclass: #GUIDemo
    instanceVariableNames: 'modelText input'
    classVariableNames: ''
    poolDictionaries: ''
    category: 'UI-Demo'!
    !GUIDemo commentStamp: 'mga 4/17/2007 14:03' prior: 0!
    A demo for using pluggable textMorphs.!


    !GUIDemo methodsFor: 'initialization' stamp: 'mga 4/17/2007 14:31'!
    initialize
    | aFont |
    super initialize.
    "Use Layout mechanism to render all from top to bottom"
    self layoutPolicy: TableLayout new;
    listDirection: #topToBottom;
    wrapCentering: #topLeft;
    hResizing: #shrinkWrap;
    vResizing: #shrinkWrap;
    layoutInset: 2;
    rubberBandCells: true;
    enableDragNDrop: false;
    color: Color white;
    borderWidth: 0.

    "Set the model here..."
    modelText := 'Enter some text here..and press enter..'.
    "Font used for both the label and the input field"
    aFont := (TextStyle named: 'BitstreamVeraSans')
    fontOfSize: 24.

    "Add the label, note that the parameter for accept is empty, and that it
    is locked to prevent writing"
    self addMorphBack: ((PluggableTextMorph
    on: self
    text: #modelText
    accept: nil) font: aFont;
    extent: 200 @ aFont pointSize + 8;
    hideScrollBarsIndefinitely;
    setTextColor: Color gray;
    borderWidth: 0;
    lock).

    "Add the input field, connect it's accept to modelText, and set it to accept
    when enter is pressed."
    self addMorphBack: ((input:=PluggableTextMorph
    on: self
    text: #modelText
    accept: #modelText:) font: aFont;
    extent: 200 @ aFont pointSize + 8;
    selectAll;
    acceptOnCR: true;
    hideScrollBarsIndefinitely;
    beSticky;
    askBeforeDiscardingEdits: true;
    enableDragNDrop: false).

    "And add the button"
    self addMorphBack: ((
    PluggableButtonMorph
    on: input
    getState: #canDiscardEdits
    action: #accept
    ) onColor: Color white offColor:Color gray;
    label: 'Update')! !


    !GUIDemo methodsFor: 'accessing' stamp: 'mga 4/17/2007 12:25'!
    modelText
    ^modelText! !

    !GUIDemo methodsFor: 'accessing' stamp: 'mga 4/17/2007 14:24'!
    modelText: aText
    modelText:= aText string.
    self changed: #modelText ! !
  • Dr. Markus Gälli
    Dr. Markus Gälli    Premium Member
    The company name is only visible to registered members.
    Re^7: Squeak user interface
    Mit Etoys geht das ganze tatsächlich mit einer Zeile, (wenn man auf die Abfrage von <Enter> verzichtet).
    Schade, dass man hier keine Screenshots posten kann...
    Als, ein kleines Rezept:

    Aus "Widgets" einen Holder hohlen.
    In dieses Holder zwei Texte reinziehen (auch wieder aus Widgets)
    Den obersten Text als Label "locken" (rotes Menu Handle->lock).
    Dann noch ein kleines Playfield als Button reinziehen (auch wieder ausd Widgets).
    In dieses Playfield einen Text ziehen, entsprechend benennen und diesen Text (!) "locken".

    Dann einen Viewer auf den Button (das Playfield, vielleicht vorher entsrpechend als "Button" benennen) öffnen (mit dem blauen Augen-Halo).
    Dort von "Scripts" ein neues Script holen (Template auf Desktop ziehen)
    Den Event dieses Skripts von "Normal" auf "Mouse Down" ändern.
    Einen Viewer auf den Label Text öffnen.
    Von dort einen Setter auf die Characters in das vorher erzeugte Skript holen (auf den Pfeil rechts von "TextXYZ characters" drücken und gedrückt ziehen).
    Auf die so entstandene rechte Seite im Skript noch den "Getter" auf den Text vom INput-Feld holen. (Analog wie letzer Schritt, nur diesmal eben aus dem Viewer für das Inputfeld holen, ausserdem eben den "Getter" und nicht den "Setter", das heisst, den Text _links_ vom Pfeil holen.

    Hört sich komplizierter an als es ist, hier doch noch ein ein Link auf ein kleines Bild mit GUI und Programm...:
    http://scgwiki.iam.unibe.ch:8080/SCG/687

    Viele Grüsse,

    Markus