Satimage Previous | Next
Release notes for Smile
Home page Information center Technical information Release notes for Smile  
New in 3.0.6 - Note: Smile 3.0.6 is the first public version of Smile following Smile 2.6.9, so this page gathers all evolutions from 2.6.9 to 3.0.6.

Smile 3.0 is only for Panther or Tiger (Mac OS X 10.3.x or 10.4.x).

Smile 3.0 brings numerous enhancements and new features. We present them here under a thematic classification. Click a theme below to jump to the corresponding section.

Data visualization
  • SmileLab makes a significant leap towards easier learning and easier use. To that effect SmileLab provides new entry points.
    • Using scripts is now optional for visualizing data with Smile/SmileLab. Scripts are required to use the advanced features or to automate tasks, yet you can get started without a script: the new Graphs > Import data menu item lets you visualize or plot data stored under a variety of formats, including formats for 3d data.
    • Furthermore when you use that menu to visualize data a show script button displays the script which would do the same thing, and that you can use as a starter to make a more specific or more sophisticated one.
    • An alternate route to get started with SmileLab is to use the samples provided: the SmileLab Sample Center was changed into an interactive document, SmileLab Samples (still in the Help menu), a handy and intuitive interface to browse the examples of data visualization graphs.
    • The dialogs for editing the settings of graphs and plots were completely revamped. All bugs and missing features were fixed, and the new interface is very intuitive, rich, and pleasant to use.
    • The settings dialogs also include a show script button to produce the script which would do the same thing as you just did manually with the dialog.
    • A new Graphs menu gathers the commands described above to make graphs, edit their settings, and also to perform advanced visualization (for instance, cross-sections) of 2D or 3D data.
    • For those not familiar with AppleScript and Smile, a new Tutorial (in the Help menu) provides in very little time the basics to feel easy with Smile and AppleScript's power.
  • You can now visualize data defined in a 3d domain (such as MRI scans) with isosurface and streamline (for vectorial 3d data). You can also easily view slices of 3d data.
  • You can now make double-y curve or scatter plots.
  • In a plot view (where you plot curves or scatter plots) you can now fill with color the area below the curves.
  • The plot views have a new legend height property to adjust the height of each line in the cartouche for the legend.
  • The plot views and the planar views have a new pen width property to adjust the thickness of the axes.
  • The surfaces now have a new draw palette property to show or hide their color palette.
  • The surface has a new usecolordata flag that you can set to false to render the surface monochrome.
  • The GLObjects (3D curves, triangles, polygons) now support to have a different color at each vertex. You provide a color as an indexed color, specified by a scalar and a palette. Providing different colors to the vertices of a facet induces a graded color on the facet.
  • The geometrical 3D objects (GLObjects and GLUTObjects) now support the four components: diffused, specular, ambient, and emitted, for describing their fill and stroke colors. For example they now have a diffused pen color property. The simpler properties pen color and fill color remain: they set both the ambient and the diffused colors.
  • All the 3D objects can now be wire-framed, using the new drawmode property. You can mix the normal and the wire-frame modes. The view3D's drawmode property forces all objects.
  • All the 3D objects now know the eight elementary colors by their index from 1 to 8.
  • You now have a much better control of the 3D rendering (surfaces, spheres, etc.) For instance, you can adjust the direct light's and the ambient light's colors separately. You can specify very completely how an object will interact with light, for instance you can dim out the specular reflection.
  • The name of a data visualization view (displayed by the window above the plot) can now include several CR-separated lines. In the dialog, use option-return (⌥↩) to make a new line.
  • You can now zoom in and out a graphic window by script using its new scale property.
Data processing
  • The computational features of the Smile environment were reviewed and significantly enriched. You find them now gathered as a single osax, Numerics.osax.
    The computational features now include five Suites: Linear algebra, FFT & convolution, Image files, 3D array handling, and Numerical data files. Most of the contents of these Suites is new.
    Linear algebra: transpose, multmatrix, invertmatrix, solve linear system, compute eigenvalues, LUdecomposition, pivot, determinant
    Basic linear algebra and basic commands for inverting, diagonalizing, and decomposing a matrix. These commands support complex matrices (you specify a complex matrix by providing a list of two matrices, for the real and imaginary parts.). multmatrix performs the product of matrices and/with vectors: M x M, M x v, v x M, <v,v>.
    FFT and convolution: fft1d, fft2d, filterarray, convolve, correlate, interpolate
    Fast Fourier transforms: 1d, grouped, n-dimensional, and 2d. Use algorithms which time like N.Log N. Not powers of 2-limited. Convolution and correlation of two arrays, support periodic boundary conditions. Interpolation, linear or spline, supports periodic boundary conditions.
    Image files: imagefile bounds, convert imagefile, create imagefile, create grayimagefile, particles
    Basic commands for doing image processing: getting an image's bounds, importing it as a numerical matrix and back, and doing particles analysis.
    • new create imagefile command, makes a matrix into a bitmap image file, either as gray levels, or using a color palette,
    • new create grayimagefile command, makes a matrix into a gray levels bitmap image file.
    • new with data option for the particles command, to return the contour of the particles (one list of points for each), in addition to the general information (sizes etc.) on the particle,
    • new maximum field in the results returned by the particles command, specifies whether the particle is a maximum or a minimum of the gray level,
    3D array handling: open3D, close3D, list3Darrays, info3D, contents3D, extract3D, isosurface, streamline
    This Suite is to cope with 3D data and visualize them conveniently. Instead of manipulating the data in your script, you load them into memory and specify a name for them. Using the name you can extract whatever fraction of the data you really need. Since there is no extra transfer of data between the C code and AppleScript, the speed is optimal. Visualization commands: for producing isosurfaces of a scalar field, and for producing the stream lines of a vectorial field.
    Numerical data files: XNFGetArray, XNFSave, XNFdelete, XNFtoc
    This Suite introduces a new extensible data format, XNF (eXtensible Numerical File format.), extension .xnf. XNF files store binary 1D, 2D, and 3D arrays. One XNF file may contain arbitrarily many arrays of various kinds, stored under a variety of formats: the XNF file manages a Table of contents which specifies the properties of each array. Access to arrays is simply by name. Since the Table of contents is an XML, you can apply XPaths to retrieve a particular set of data.
  • Smile 3.0 introduces a new polynomial data type.
    • polynomial is basically equivalent to a list or an array of real: use as to make a list or an array of real into or from a polynomial,
    • new evalpolynomial command to compute the value of a polynomial at a given point,
    • new composepolynomial command to compose polynomials,
    • addlist, sublist, multlist, and divlist (Euclidean quotient) work on polynomials,
    • the as string coercion returns the LaTeX-like string (for instance 1.0 + 2.0*x^2) suitable for instance as a graph's title or a curve's legend.
  • creatematrix now supports an additional "d" option, to make a diagonal matrix.
  • reversearray can now be used with a matrix, in order to flip it top to bottom. This lets you accomodate a matrix to a plot where y is oriented upwards,
  • addlist, sublist, multlist, and divlist now work on a matrix, in addition to a list of numbers or an array of real,
  • Smile now reads binary files of short or long integers, in addition to single- and double-precision reals,
  • Smile now reads little-endian (Intel) binary files, in addition to big-endian,
  • you can now specify a block size for read binary.
  • new masklist command, can "mask" ( = suppress items according to some other list computed after a condition) any kind of list (for instance, a list of strings). The previous verb mask is deprecated, use now maskarray to apply a mask to a numerical list or an arrays of real,
  • you can now apply the display verb to an array of real, to view it,
  • changearray now assumes at 1 if no at parameter is supplied.
  • extractcolumn supports a new optional encoding parameter when its in parameter is a file,
  • the sample Xcode projects now include routines to return AppleScript errors from your C code,
  • you can now browse a movie using the new current frame and current time properties of a movie window, and you can request the information about a given frame using the movie frame element, which returns a record.
  • the Installer now installs the sample Xcode projects as Xcode templates, so making a new project by duplicating an existing sample is much simpler.
Graphic library
  • The PDF graphic library experiences a significant evolution. Smile now uses an XML description of the PDF graphic. You do not really care, except that this makes it natural to introduce a set of interesting new commands. New features include:
    • DrawImage: imports into the graphic a (possibly remote) bitmap image (JPEG, PNG, etc.),
    • DrawPDF: imports into the graphic a (possibly remote) PDF file,
    • BeginContext, BeginPath, BeginGroup: define a persistent graphical object with a name, a named object,
    • UseReference: recalls a named object which was stored previously,
    • BeginLayer: defines a layer. You use layers to apply a transparency or a shadow to a group of graphical objects as a whole,
    • SetShadow: defines a shadow,
    • BeginPattern: defines a named pattern,
    • SetPenPattern, SetFillPattern: apply a named pattern to the stroke or to the filling,
    • SetTurbulence, SetFractalNoise: define turbulent patterns, and multi-scale patterns (for instance, to draw clouds or fabrics),
    • LinearGradient, RadialGradient: fill with a gradient (linear or radial).
    • ClosedCurve(p1, p2, etc.): makes a smooth closed curve,
    • SetUserTransformation({mxx, mxy, myx, myy, tx, ty}): same as SetTransformation, but applies only to the coordinates that the script defines,
    • SetScale(x), SetRotation(a), SetTranslation(dx): shorter commands that you can use instead of SetTransformation to define elementary transformations,
    • SetUserScaling(x), SetUserRotation(a), SetUserTranslation(dx): shorter commands that you can use instead of SetUserTransformation to define elementary transformations,
    These new commands are documented in the Graphic Kernel Palette: when the mouse is over the button for a command the Message window will display information for the command.
  • Another set of new commands provides more control on PDF files.
    • count pages: returns the number of pages in a PDF file,
    • pdf boxes: returns the boxes (the rectangles) defined in the PDF, optionally those for a given page.
  • SmoothLineTo was renamed into CurveTo (the old term remains effective.)
  • DrawPath now accepts the strings "fill", "eofill", "stroke", "fill-stroke", and "eofill-stroke" in addition to the integers 0, 1, 2, 3, and 4.
  • SetTextMode now accepts the strings "fill", "stroke", "fill-stroke", "invisible", "fill-clip", "stroke-clip", "fill-stroke-clip", and "clip" in addition to the integers 0, 1, 2, 3, 4, 5, 6, and 7.
  • You can now zoom in and out a graphic window by script using its new scale property.
Interface and interface customization
  • to rotate a 3D view, you would drag the mouse with the ⌘ key pressed. You can now select auto drag in the contextual menu so that just moving the mouse moves the view.
  • any graphic window now has a eye position property, which changes when you drag the mouse in the graphic window, as if you were using a trackball. You can use the eye position property to simulate a trackball and have a 3D drawing in the graphic window adapt according to the user's mouse moves.
  • the toolbar items (buttons and menus that can be installed in a window's toolbar) and the menus (in the menu bar) now fully conform to the object model. You can address them by name, and address (get and set) their properties: name, menu, and menu command for the toolbar items, name, enabled, checked and visible for the menus and menu items.
  • the Handlers menu now correctly opens at the location of the current selection,
  • the text windows support a new call script property, (false by default). When true, the window's script receives the keydown event when the user types, and the usual behavior (entering text, running a script, moving the cursor, etc.) does not occur: the script must handle all keystrokes.
  • the new volatile extras property, that any object in Smile can have, may store any AppleScript quantity, and will not be saved with the object (while the extras property is saved.)
  • you can now adjust the range of the scrollbars in a graphic window with its new margins property. Setting margins to {0, 0} suppresses the scrollbar: the size of the window is strictly the graph's frame.
  • you can specify a standard location for a new window with the new «class PoWi» property of windows. Set it to 1 for centered, 7 for the alerts' position, and 4 to apply the cascade-on-main-screen method.
  • custom dialogs support a new referencing system for the items of the dialog, where you use a four-character code as the key for a given item. The four-character code is the new tag property of the dialog item. The dialog's new tagged data property returns (and accepts) a record where the keys are the tag properties with the «class atag» notation and the values are the data contained in the tagged items. The dialog's contained data property is now deprecated. The dialog item's contained data property remains unchanged.
    There is no problem using already existing tags, as provided for instance by the Property & class to raw code command.
    Groups (dialog items which may contain others) support the tagged data property as well as dialogs do. Note that the tagged data property flattens the dialog items' structure: whatever the hierarchy where a dialog item belongs, its key and value will be returned in the tagged data property of the dialog.
  • a new contextual menu for dialog items in edit mode provides specific help.
  • you can now let the user enter return in an editable text field by setting its new accept return property to true.
  • the list dialog item now receives the click in event whenever the user clicks in the list (previously it would send the event only for double-clicks.)
  • you can now provide dynamically the list of the items for a pop-up menu and have the menu, neither attempt to localize the list, nor to save it when you save the dialog. To that effect, provide the list as the «class lmnu» property (instead of menu) of the dialog item. Use «class lmnu», for instance, to display faster the list of the fonts (my «class FLST».)
  • the new Graphs menu provides data visualization (Smile full edition only). You can import data and have them plotted, you can edit the settings of a graph, and you can perform operations on 3D data and visualize them.
  • the Record menu item used to be disabled because AppleScript recording was not fully functional under Jaguar. Now it is enabled again.
  • the parchment icon menu has moved from the left to the right of the Window.
  • the parchment icon menu's first item now opens the user guide about that menu.
  • the SmileLab item of the parchment icon menu was removed, its content and much more is now provided in the new Graphs menu.
  • the Message floating window now displays correctly Unicode.
XML and text processing
  • new XMLGetNodePath command: returns a valid XPath to specify a given node,
  • new XMLCheckDTD command: checks a DTD file's syntax,
  • new XMLExtendedChar command: toggles between the 1.0 and 1.1 XML recommendations for character definition. 1.1 supports an extended characters set which includes the characters lower than ASCII 32,
  • XMLTransform can now return the result as string, which is how you get rid of a useless <?xml ...> header.
  • XMLTransform can now return the result directly in a file with the optional in parameter.
  • new XMLErrorLevel command: specifies the level of error supported without failure of your script. Replaces the failure level parameter of XMLOpen: the error level is now global.
  • XMLGetAttribute and XMLSetAttribute now handle correctly any namespace,
  • XMLXLink was improved and it takes a new baseURL parameter.
  • pressing the 'Enter' (⌅) key in a DTD open as a Unicode window now checks the DTD file,
  • the commands of the plist Suite now detect and handle the binary format for p-lists, and you can force-save a p-list as binary.
  • new printf command, does like printf in the C language. In addition to the C syntax (for instance, %s), printf supports a positional syntax (for instance, %1$s, %2$s) which provides more versatility (for instance, strings are easier to translate.)
  • cformat now supports lists of numbers (and arrays of real).
  • new unicode character and unicode number commands provide the translation between Unicode codes and characters. The encoding parameter lets you select the UTF-8 or UTF-16 mapping. Codes are returned (and can be passed) as a list of integers, and (so) codes spanning more than 2 bytes are correctly handled.
More comfort
  • Several of the built-in dialogs were revamped with the help of Kurt Klamp. (See for instance Enhanced Find.)
  • Kurt Klamp is thoroughly reviewing the German translation of Smile. Most of the changes could be installed into Smile 3.0.6, the last missing ones will ship to you with the next public version.
Installation and documentation
  • Smile now has a splash screen to help beginners select their preferred way. Maybe the splash screen is not active in your version: you can activate it in the Preferences.
  • The Help menu provides a new Tutorial item which opens in your preferred browser to provide in very little time the basics to feel easy with Smile and AppleScript's power.
  • There is now a Read me file for the sample projects, both online and in the download, at
  • The use of Xcode projects is now documented, both online and in the internal documentation. Use the contextual menu on the keyword xcode.
  • Smile now comes with an Installer. The Installer copies Smile's folder and Smile's companion Scripting additions, and moves any obsolete Scripting addition from a previous Smile distribution into the Trash. By default, the Installer of the full version installs the most usual sample Xcode projects and you can choose to install also the optional sample Xcode projects (the projects for a scriptable threaded application and for scriptability in FORTRAN programs.)
    The name of the folder installed in the Applications folder is now simply Smile (instead of Smilexyz with the version number.) Further versions of the Installer will move the older version to the trash, and now on you should not need to replace the alias of Smile in the Dock when you upgrade.
  • Smile's Read me file is now also online, at
Productivity enhancement
  • A new great time-saver available in the user scripts menu: Open snapback, opens a minuscule floating window with two buttons: mark, which retains the current location of the cursor in the active window, and go, which moves the cursor in the active window to the location last marked.
  • Smile now supports Dictiobrary, an addition by Julio Sancho which keeps record of dictionaries you use.
  • You can now adjust the number of items in the File > Recent files menu, in the Preferences dialog window.
  • In addition to checking parentheses etc., to auto-completing structures (if etc.), to auto-completing the syntax (verbs, commands), Balance now also closes XML tags (in Unicode windows only.)
  • backup now resolves the aliases (files and folders) located at the first level of the destination folder, in addition to resolving the aliases located at the first level of the source folder.
  • Smile now supports negative indexes in the selection, to select the whole text in a window you can now do set selection of w to {0, -1},
  • the Sort paragraph command now works on any number of paragraphs, it now works very fast, and it was given a companion command, Remove duplicates (works on sorted lists.)
  • Smile's bundles now automatically have the ".bundle" file name extension. This will make it easier to compress and expand a bundle (and not getting finally a folder.)
  • When you open a ".bundle" file and the corresponding object does not have a name, the object will assume the file's name, without the extension. (All other file name extensions are preserved in an object's name.)
  • PDF documents made with Smile no longer have the "CARO" (Acrobat's) signature.
  • Smile now notifies BBEdit to update its menus when you make a new script for BBEdit with Smile.
Bugs fixed in 3.0
  • changearray now accepts a single real as its into parameter.
  • measuretext would return fancy results when used with the empty string. Now it returns the data for the white space.
  • The Graphic Kernel Palette would not remember the last window it wrote a piece of script into. Now it does.
  • In some circumstances, Smile could be confused with some scripts saved with the .scpt extension. This is fixed.
  • The data visualizers 2D analyzer, Map explorer, and Surface explorer would have impredictible behaviors when the graph would contain non-trivial x and y data (for instance, a surface given in polar coordinates.) This is fixed.
  • The data visualizer File plotter would have an unfriendly behavior while not yet given a data file or window. This is fixed.
  • When an XML contained high-Unicode text, XMLLib's error messages could display unreadable characters. This is fixed.
  • The return character would not "close" a 2-bytes character entry, making it harder than necessary to write in some languages such as Japanese. This is fixed.
  • The text windows and the script windows would not accept that you paste Unicode text such as kanjis from other applications. This is fixed.
  • In some circumstances, the colors displayed onscreen would not be accurate (the printed color being always correct.) This is fixed.
  • Smile did not open correctly a PDF with special boundaries (such as a PDF made by rotating an image with Preview.) This is fixed.
  • extractarray would return results in single precision instead of double. This is fixed.
  • When the want idle property of an object was set to true, and you toggled it to false, then true again, the timer would retain the previous call date instead of calling immediately idle. This is fixed.
  • fitpolynomial (and the related features) would return results in single precision instead of double. This is fixed.
  • fft1d (1-dimensional fast Fourier transform) would compute in single precision instead of double. This is fixed.
  • save as a bundle would omit to copy some of the possible attached files. This is fixed.
  • Undo would undo even the data loading, leaving the window blank. This is fixed.
  • PDF files used not to show in the Recent files menu. This is fixed.
  • Reopening a file saved with the library browser menus installed would result in the Handlers menu missing. This is fixed.
  • Menus in the toolbar would not work if the toolbar was too short so that the menu be in the chevron menu in the right of the toolbar. This is fixed.
  • Pressing the shift key (⇧) would not interrupt the re-opening of the files at startup time. This is fixed.
  • In some circumstances, the information dialog window for a data plot would load the first view of the window while you were expecting to set another one. This is fixed.
  • When synchronizing a bundle with backup, newly copied bundles would have a wrong (older) modification date. This is fixed.
  • Several memory leaks were fixed. A significant leak could in some circumstances cause a repeated use of the change command on large texts consume lots of memory.
Known features and caveats for 3.0
  • Because of a minor bug in Mac OSX, making a new toolbar item may leak ca.20 KB. Now you can change the properties of toolbar items: do not run an automate which would periodically delete and rebuild the toolbar.
  • When you use Cformat, follow thoroughly the instructions found in man printf. In some circumstances a bad usage may crash Smile.
Release notes for the previous versions of Smile
The release notes for the previous versions of Smile are available in separate pages.
Previous | Next
Copyright ©2007 Paris, Satimage