Changes between Version 4 and Version 5 of squeak_faq


Ignore:
Timestamp:
10/14/2013 02:51:06 PM (11 years ago)
Author:
willi.mueller
Comment:

CamelCase escaping and removing newlines in headings to render them as headings

Legend:

Unmodified
Added
Removed
Modified
  • squeak_faq

    v4 v5  
    44== Wie werden Grafiken im Image verwendet? ==
    55
    6 Der Dreh und Angelpunkt ist hier die Klasse Form. Die Basis von Form ist die "Squeak Canvas", eine Bitmap, die Bilder enthält, oder auf der gezeichnet werden kann. Diese Objekte können dann in ImageMorphs verwendet werden. Bei größeren oder vielen Bildern lohnt ein Blick auf die Klassenseite von Form. Da gibt es eine Methode, die aus einer Datei direkt ein Form-Objekt lädt. Ähnliches findet sich auch auf den Klassenseiten von den Klassen !PNGReadWriter, !JPEGReadWriter, !GIFReadWriter und weitere für spezielle Bildformate. Mit Klassen wie !FileDirectory oder !FileUrl kann im Dateisystem navigiert werden. Hierbei gilt es auch zu bedenken, dass die "Pathdelimiter" der Betriebssysteme unterschiedlich sein können (/ oder \). Bilder können auch im Image gespeichert werden. Das hat den Vorteil, das ihr die Bilder über Monticello verwalten könnt und so alle Teammitglieder über das Repository die aktuellen Bilder bekommen. Der große Nachteil ist, dass ihr die Größe des Images aufbläht. Wenn trotz ihr trotz dieses Nachteils Bilder in Methoden und damit im Image speichern wollt, könnt ihr Array-Repräsentationen gewinnen. Dazu laded ihr das Bild, wie oben beschrieben, zuerst in eine Form und aus dieser erzeugt ihr dann das Array (siehe. z.B. Form>>storeOn). Es gibt in Squeak den !ImageReadWriter als abstrakte Klasse und dazu verschiedene Implementierungen für z.B. BMP und PNG (!PNGReadWriter, !BMPReadWriter). Auf Klassenseite von !ImageReadWriter findet sich dann auch >>formFromFileNamed: fileName, was in der konkreten Implementierung genutzt werden kann.
     6Der Dreh und Angelpunkt ist hier die Klasse Form. Die Basis von Form ist die "Squeak Canvas", eine Bitmap, die Bilder enthält, oder auf der gezeichnet werden kann. Diese Objekte können dann in !ImageMorphs verwendet werden. Bei größeren oder vielen Bildern lohnt ein Blick auf die Klassenseite von Form. Da gibt es eine Methode, die aus einer Datei direkt ein Form-Objekt lädt. Ähnliches findet sich auch auf den Klassenseiten von den Klassen !PNGReadWriter, !JPEGReadWriter, !GIFReadWriter und weitere für spezielle Bildformate. Mit Klassen wie !FileDirectory oder !FileUrl kann im Dateisystem navigiert werden. Hierbei gilt es auch zu bedenken, dass die "Pathdelimiter" der Betriebssysteme unterschiedlich sein können (/ oder \). Bilder können auch im Image gespeichert werden. Das hat den Vorteil, das ihr die Bilder über Monticello verwalten könnt und so alle Teammitglieder über das Repository die aktuellen Bilder bekommen. Der große Nachteil ist, dass ihr die Größe des Images aufbläht. Wenn trotz ihr trotz dieses Nachteils Bilder in Methoden und damit im Image speichern wollt, könnt ihr Array-Repräsentationen gewinnen. Dazu laded ihr das Bild, wie oben beschrieben, zuerst in eine Form und aus dieser erzeugt ihr dann das Array (siehe. z.B. Form>>storeOn). Es gibt in Squeak den !ImageReadWriter als abstrakte Klasse und dazu verschiedene Implementierungen für z.B. BMP und PNG (!PNGReadWriter, !BMPReadWriter). Auf Klassenseite von !ImageReadWriter findet sich dann auch >>formFromFileNamed: fileName, was in der konkreten Implementierung genutzt werden kann.
    77
    88
    99== Welche Dateiformate für Bilder sind für Squeak geeignet? ==
    1010
    11 Benutzt hier am besten PNG, JPG oder BMP. Zum Einlesen bietet sich dann beispielweise die ReadWriter Klassen an. Übrigens können Forms auch mit Transparenz umgehen.
    12 
    13 
    14 == Können ImageMorph bzw. deren enthaltene Form mit Alphatranparenz umgehen? Wie können ganze Morphs ausgeblendet werden? ==
     11Benutzt hier am besten PNG, JPG oder BMP. Zum Einlesen bietet sich dann beispielweise die !ReadWriter Klassen an. Übrigens können Forms auch mit Transparenz umgehen.
     12
     13
     14== Können !ImageMorph bzw. deren enthaltene Form mit Alphatranparenz umgehen? Wie können ganze Morphs ausgeblendet werden? ==
    1515
    1616Verwendet die Methode hide, um einen Morph sofort ohne Fade Out zu verstecken. Denkt bitte daran, dass ausgeblendete Morphs dennoch im Speicher verbleiben. Eine Squeak-Methoden-Suche nach "alpha" (eine Nachricht, die wahrscheinlich Konstrukte haben wird, bei denen man eine Transparenz einstellen kann) liefert eine Klasse namens: !AnimAlphaBlendingCanvas.
     
    101101== Wie werden Transformationen auf einen Morph angewandt? ==
    102102
    103 Transformationen können mit einem TransformationMorph realisiert werden:
     103Transformationen können mit einem !TransformationMorph realisiert werden:
    104104
    105105{{{
     
    190190
    191191
    192 == Hat Squeak einen integrierten Eventhandler für Netzwerkevents? Wie kann man eine Methode aufrufen, sobald Daten
    193 angekommen sind? ==
     192== Hat Squeak einen integrierten Eventhandler für Netzwerkevents? Wie kann man eine Methode aufrufen, sobald Daten angekommen sind? ==
    194193
    195194Das kommt sehr auf eure Netzwerkimplementierung an. Nutz ihr ein Standardprotokoll, so sollte die verwendete Bibliothek im Allgemeinen auch entsprechende Methoden bereitstellen. Häufig sind diese transparent, so dass die Methoden automatisch gerufen werden, sobald ein neuer Request eintrifft. Um Beispiele dafür zu sehen, schaut euch einmal im Image den WAListener an, welcher den Webserver für Seaside implementiert. Dort wird auch gezeigt wie man Prozesse "forked" um mehrere Requests gleichzeitig zu behandeln.
     
    285284
    286285
    287 == Gibt es in Squeak so etwas wie eine FileDialog Klasse? ==
     286== Gibt es in Squeak so etwas wie eine !FileDialog Klasse? ==
    288287
    289288Helfen kann euch hier die Klasse !FileList.
     
    312311
    313312
    314 == Wie kann man einige Farben in einem Array speichern, und diese einer Variablen zuweisen, die für die Hintergrundfarbe eines Morphs
    315 zuständig ist?==
    316 
    317 Das ColorArray scheint seiner Implementierung zu Folge etwas speicherfreundlicher zu sein als ein normales Array mit Color Objekten. Diese besondere Art kodiert Farben in ihre 32 Bit Repräsentation und speichert diese ab also genau 4 Byte. Beim näheren betrachten der Color Class fällt allerdings auf, dass Farben durchaus mehr Speicher in Anspruch nehmen können (durch cache Mechanismen usw.). Daher kann es in bestimmten Situation sinnvoll sein (wenn viele Farben benötigt werden z.B. in einem Bitmap oder einer Colorform) diese in nur 4 Byte abzulegen. Vermutlich kann hier auch die VM etwas optimieren, wenn grundsätzlich 4 Byte pro Element festgelegt sind.
     313== Wie kann man einige Farben in einem Array speichern, und diese einer Variablen zuweisen, die für die Hintergrundfarbe eines Morphs zuständig ist?==
     314
     315Das !ColorArray scheint seiner Implementierung zu Folge etwas speicherfreundlicher zu sein als ein normales Array mit Color Objekten. Diese besondere Art kodiert Farben in ihre 32 Bit Repräsentation und speichert diese ab also genau 4 Byte. Beim näheren betrachten der Color Class fällt allerdings auf, dass Farben durchaus mehr Speicher in Anspruch nehmen können (durch cache Mechanismen usw.). Daher kann es in bestimmten Situation sinnvoll sein (wenn viele Farben benötigt werden z.B. in einem Bitmap oder einer Colorform) diese in nur 4 Byte abzulegen. Vermutlich kann hier auch die VM etwas optimieren, wenn grundsätzlich 4 Byte pro Element festgelegt sind.
    318316
    319317
     
    321319
    322320Dafür ist die instanzseitige Klassenvariable die richtige Wahl. Die klassenseitige Instanzvariable existiert nur auf Grund der Tatsache, dass Squeak ein Metaobjectprotocol besitzt und somit Klassen selbst wieder Instanz einer anderen Klasse sind. Daher besitzen sie auch Instanzvariablen. Allerdings sind die Instanzvariablen auch nur für die Klasse und nicht für Ihre Instanzen einsehbar.
    323 Um Klassenvariablen im eigentlichen Sinne -- Sowohl Klasse als auch Instanzen der Klasse können in Methoden darauf zugreifen -- zu erhalten, sind somit die instanzseitigen Klassenvariablen die richtige Wahl.
     321Um Klassenvariablen (sowohl Klasse als auch Instanzen der Klasse können in Methoden darauf zugreifen) zu erhalten, sind somit die instanzseitigen Klassenvariablen die richtige Wahl.
    324322Uns hatte man damals für den Singletonfall auch geraten, die Instanzseite zu nehmen, um die Singletoninstanz zu speichern.
    325323
    326324Erklärung nach http://www.faqs.org/faqs/smalltalk-faq/:
    327325
    328 Q6. What are class instance variables?
    329 Ans. Class instance variables are similar to class variables, except that they are created for eachsubclass of the defining class. When a class declares a class instance variable, a new variable is created for each subclass of that class. Each subclass then has its own instance of the variable and retains its own value for the variable, but each subclass has a variable with the same name. Only class methods of a class and its subclasses can refer to class instance variables; instance methods cannot.
     326    Q6. What are class instance variables?
     327    Ans. Class instance variables are similar to class variables, except that they are created for eachsubclass of the defining class. When a class declares a class instance variable, a new variable is created for each subclass of that class. Each subclass then has its own instance of the variable and retains its own value for the variable, but each subclass has a variable with the same name. Only class methods of a class and its subclasses can refer to class instance variables; instance methods cannot.
    330328
    331329
     
    362360
    363361
    364 == Gibt es in Squeak eine Möglichkeite Bilder in eine Package einzubetten
    365 als Ressource? Oder kann man Bilder nur aus Dateien laden? ==
     362== Gibt es in Squeak eine Möglichkeite Bilder in eine Package einzubetten als Ressource? Oder kann man Bilder nur aus Dateien laden? ==
    366363
    367364Die Klasse !SystemWindow besitzt eine Reihe von Class-methods, die allesamt auf *Image enden. (z.B. SystemWindow>>menuBoxImage)
     
    453450
    454451
    455 == Ist es nun guter Stil, wenn man in Squeak nach dem return einen Punkt macht
    456 oder nicht? ==
     452== Setzt man in Smalltalk nach dem return einen Punkt oder nicht? ==
    457453
    458454Der Punk separiert Ausdrücke und ist deswegen nach dem letzten Ausdruck nicht mehr notwendig. Im Allgemeinen ist es nur wichtig, dass ihr es konsequent überall gleich macht. Wir bevorzugen zwar die Variante ohne Punkt aber dies sollte auf eure Wahl keine Auswirkung haben.