<?xml version="1.0" encoding="UTF-8" ?><!-- generator=Zoho Sites --><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><atom:link href="https://www.reflektis.nl/blogs/Smalltalk/feed" rel="self" type="application/rss+xml"/><title>reflektis - Blog , Smalltalk</title><description>reflektis - Blog , Smalltalk</description><link>https://www.reflektis.nl/blogs/Smalltalk</link><lastBuildDate>Mon, 07 Sep 2026 14:32:00 +0200</lastBuildDate><generator>http://zoho.com/sites/</generator><item><title><![CDATA[Resurrecting the Beehive Simulator]]></title><link>https://www.reflektis.nl/blogs/post/resurrecting-the-beehive-simulator</link><description><![CDATA[Over the past few months I've had several requests for an old project of mine, one that I did a long time ago on the University of Groningen: The Beeh ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_7WBqQH-gQ9Gn6WUk2ZjqTg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_wGWLPPTPT6Gvf1_-n_8SDw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_HxWEPUPsTvuwkOHulgfBkA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_4khqBTzgQUGkwLpcnSLqsQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p class="has-drop-cap">Over the past few months I've had several requests for an old project of mine, one that I did a long time ago on the University of Groningen: <a href="https://blog.reflektis.nl/the-beehive-simulation-an-ecological-simulation/">The Beehive Simulator</a>.</p><p>In this article I share with you some considerations on resurrecting the project, a very interesting and, I think, very useful thing to do.</p><figure class="wp-block-image size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/2854fb6190fa48d6a20d-2.jpg" alt="" class="wp-image-11878"/></figure><p>The Beehive Simulator, just to recap, is a software application that does three things:</p><ol><li><span style="line-height:13px;">Build a complete apiary with beehives</span></li><li>Simulate the apiary, as in a game: the bees will collect food, the queen will lay eggs, etc. All that you can monitor in the program. It even simulates infections with the varroa mite!</li><li>Part of the system is a knowledge system with diagnostic capabilities: you answer several questions about an apiary and the bees, and problems that you have found, and the system will tell you what may have caused these problems and how you should deal with them.</li></ol><p>The original ambition of the project was to use the program to help in monitoring the biological environment, because bees (as we are currently learning to our detriment) are very sensitive to disturbances, especially the use of chemicals.</p><p>However, the combination of elements of the simulator should make the product very interesting as well for beekeepers around the world as an educational aid.</p><p>Porting the software to another programming language would be possible, but for several reasons I would not like it it or even advise it. The software was written in Smalltalk, using a very sophisticated (because written by me :-)) simulation framework, and the same for a backward inferencing knowledge system. Rebuilding that in say C# would be a very large and complex project. The Beehive Simulator consists of more than 100.000 lines of code, and most of that code can be used in modern Smalltalk environments. Remember: Smalltalk is not dead, on the contrary! It has evolved and as I recently re-tweeted from a tweet by Grady Booch, still the environment in which it all happens (to be seen later in the mainstream languages such as Java or C#). Think of Refactoring, Test-Driven-Development, DDD to name just a few.</p><p>So yes I would consider resurrecting the project. But it must be in Smalltalk.</p><p>I'll keep you posted. Now I'm out looking for sponsors…</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Fri, 19 Jul 2013 17:17:47 +0200</pubDate></item><item><title><![CDATA[Smalltalk and the TIOBE index]]></title><link>https://www.reflektis.nl/blogs/post/smalltalk-and-the-tiobe-index</link><description><![CDATA[Three years ago Smalltalkers were somewhat worried about the drop-out from the TIOBE index of Smalltalk. http://bpieber.wordpress.com/2010/08/27/bad-n ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_H0mljyVTRC2dAtSaUDgZKA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_tw8pi_9ERzu85Ux9Pv7Vpg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_b_POpJIsQz-IvCg3xQ0VFg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_wcu-krwbRCqQG2o1ZM5ZAw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p>Three years ago Smalltalkers were somewhat worried about the drop-out from the TIOBE index of Smalltalk. <a href="http://bpieber.wordpress.com/2010/08/27/bad-news-smalltalk-falls-off-top-50-of-tiobe-index/" target="_blank">http://bpieber.wordpress.com/2010/08/27/bad-news-smalltalk-falls-off-top-50-of-tiobe-index/</a></p><p>However this years' index show Smalltalk is back at a reasonable 37th place. From the ranking it is not clear what the move is, and I was unable to find the TIOBE index of last year to compare with:</p><p><a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank">http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html</a></p><p>Interestingly enough btw is the first place of C (yes: C)! And with the rising of Objective-C and C++, and the lowering of Java I wouldn't be surprised if next year we would see the top three occupied by the C language family.</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Mon, 07 Jan 2013 21:35:50 +0100</pubDate></item><item><title><![CDATA[Deploying VisualWorks Applications]]></title><link>https://www.reflektis.nl/blogs/post/deploying-visualworks-applications</link><description><![CDATA[How do you create a deployment process that automatically creates packages to deliver to your users for all supported platforms with as little fuss as ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_iYV1o1r8RVqh4qnujp-tGA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_dogaWKgHQxuij-1bF2TaTQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_0xl5JtInQUGb18xWfNQttg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm__TDTTEK4Rc2sasRqqWTZnA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p>How do you create a deployment process that automatically creates packages to deliver to your users for all supported platforms with as little fuss as possible?</p><p>The content of this guide has been created with version 7.9 of VisualWorks.</p><h2>Introduction</h2><p>This article tries to provide a concise guide for standalone VisualWorks application developers. If you, like me, are building standalone apps that need to deploy on all supported platforms, you will encounter some interesting challenges. I have reached a strategy that works reasonably well, and I would like to share that strategy, hopefully benefiting others.</p><p>I invite VisualWorks developers to participate in making this article better. Files used in the article will be provided as downloads in a .zip archive.</p><h2>Credits</h2><p>I have used some (sparse) material already available on the internet. I try to give due credits:</p><ul><li>James Robertson created several video’s describing parts of the process</li><li>Emiliano Pérez has an article at <a href="http://cag.lifia.info.unlp.edu.ar/cag/Wiki/05.%2BTutorials/Deploying%2Bwith%2BVisualWorks">http://cag.lifia.info.unlp.edu.ar/cag/Wiki/05.+Tutorials/Deploying+with+VisualWorks</a></li><li>There has been a discussion on the VisualWorks mailing list, instigated by me: <a href="http://forum.world.st/Installing-end-user-applications-on-Windows-and-ACL-td1599163.html">http://forum.world.st/Installing-end-user-applications-on-Windows-and-ACL-td1599163.html</a></li></ul><h2>VisualWorks image preparation</h2><p>The image you want to deploy has to be ready for deployment. This chapter summarises a few reminders.</p><h3>Window icons</h3><p>If your application has windows (that is, it is not headless) you will want to have those windows show your nicely designed icons. This is not applicable for all platforms (on the Mac your windows do not have icons) but it is on Windows.</p><p>For that you use the Assets packages. There are two of them, one (<code>Assets</code>) is loaded by default in the image (7.7 up), and one (<code>Assets-IDE</code>) needs to be loaded.</p><div class="wp-block-image"><figure class="aligncenter size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/deploy-1.png" alt="" class="wp-image-11947"/></figure></div>
<p>Read the doc. I usually create an application assets class, <code>LogSimAssets</code> for example. Create a folder containing the artwork in the form of png files you want to use, including the image you want to use as your window icon, and sync your assets class with this folder.</p><div class="wp-block-image"><figure class="aligncenter size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/deploy-2.png" alt="" class="wp-image-11948"/></figure></div>
<p>VisualWorks will ask you for the folder you want your assets class to sync with, and it will import all readable image files in that folder. The result is a set of class methods in the protocol category png imports</p><p>Now you have all the images from that folder available in your image as Smalltalk objects, that you can reach by sending messages to the class like:</p><pre class="wp-block-code"><code>LogSimAssets applicationWindowIcon</code></pre><p>The icon you want to be your application window icon can be installed in two locations:</p><ol><li>the application window</li><li>all windows (the default icon to replace the one from Cincom) — this is handy since you do not need to do this manually for every application window in your application, and also it modifies the icon in any standard windows you want to reuse, such as the directory browser.</li></ol><p>The first way is simple. Go to your application class’ postOpenWith: method:</p><pre class="wp-block-code"><code>LogSimApplication&gt;&gt;postOpenWith: aBuilder

  super postOpenWith: aBuilder.
  aBuilder window application: self.
  &quot;Your own initialisation code.&quot;
  aBuilder window icon: self class windowIcon</code></pre><p><br/> Create the windowIcon method in your application class and let it refer to your pretty icon in the assets you imported. </p><h3>Building your image</h3><p>My strategy is rather straightforward: after I have checked-in my sources into Store, with a comment like “Released version LogSim 4.2”, I file-out my sources into one or more special directories. <br/> Let us say that for my LogSim application I need three components:</p><ol><li>General code that I keep in a folder called <span style="font-family:monospace;">Reflektis</span> (my company’s name)</li><li>A framework for simulations in a folder called <span style="font-family:monospace;">Simulations</span></li><li>The application-specific code in a folder called <span style="font-family:monospace;">LogSim</span></li></ol><p>All folders have the same structure:</p><ol><li>all packages/bundles in <span style="font-family:monospace;">.st</span> files</li><li>a <span style="font-family:monospace;">fileIn.st</span> file that loads the .st files in the directory in the correct order.</li></ol><p>Now if I want to create my runtime image I only need to file in the fileIn.st file in the application-specific directory, which will call all dependent file-ins. <br/> There are a few extra’s:</p><ol><li>I create a method <span style="font-family:monospace;">prepareForDeployment</span> in my application class. This method will be sent when deploying to prepare my class for deployment. More on that later.</li></ol><h3>Runtime Packager</h3><p>This chapter describes the use of Runtime Packager to prepare a minimal image for deployment.</p><ol><li>Load Runtime Packager</li></ol><h3>The Simple Approach</h3><p>This chapter describes an image preparation strategy that does not use Runtime Packager, and (almost) no stripping of the image. This is useful for simple applications, that do not profit much from stripping.</p><h2>Setup</h2><p>For successfully deploying your VisualWorks application I am assuming the following:</p><ol><li>You have a deployment image, created by using Runtime Packager or any other means.</li><li>You have a Windows icon for your application, in the form of a <span style="font-family:&quot;andale mono&quot;, times;">.ico</span> file with several icon sizes (for Vista and later make sure you include a 256x256 size)</li><li>You are able to use VisualStudio 2010 Professional, to create the setup project in (probably need to chart a deployment strategy without the need of VisualStudio as well). Our approach here will elaborate on using the standard Windows Installer for your application, and not the VisualWorks Install framework. I have never been able to understand how I could use that.</li></ol><h2>Summary</h2><p>Preparation involves some one-time actions. Note: to be able to do everything described below you need a Mac with XCode and a Windows PC with VisualStudio. Both OS’s can run inside a virtual machine of course (my setup is a Mac with Windows running in a vm).</p><figure class="wp-block-image size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/deploy03.png" alt="" class="wp-image-11950"/></figure><ol><li>Create a standard folder structure. <br/> The <span style="font-family:monospace;">buildscripts</span> folder will contain the <span style="font-family:monospace;">.cmd</span> files I talk about later. The <span style="font-family:monospace;">messages</span> directory will contain all the message folders/files you need for multilanguage projects. The <span style="font-family:monospace;">uploads</span> directory will contain the files you want to deliver to your users. You will notice I used the same naming convention Cincom uses for the platform folders.</li></ol><p>Now we will go through the following steps.</p><ol><li>Create your runtime image. I name it specific for the application I am creating: <span style="font-family:monospace;">logsim.im</span>.</li><li>Run the ImageWriter from any VisualWorks image to convert the 32-bit image to a 64 bit one. For simplicity in the build scripts this one is now named <span style="font-family:monospace;">resource64.im</span></li><li>Now run the build script for the application, in this case it will be <span style="font-family:monospace;">buildLogSim.cmd</span>. It will perform the following tasks: <ol><li>compress the image with <span style="font-family:monospace;">ImageCompress</span>, and rename the 32-bit image to <span style="font-family:monospace;">resource.im</span></li><li>it will call all platform-specific build command files, including the Windows build command files <span style="font-family:monospace;">buildwin</span> and <span style="font-family:monospace;">buildwin64</span>. These platform builds all do the following: <ol><li>copy <span style="font-family:monospace;">resource.im</span> or <span style="font-family:monospace;">resource64.im</span> into the platform-specific target platform folder. For example for the *nix targets I place the image together with the executable into a folder <span style="font-family:monospace;">system</span>. However for Windows this is different, since the VisualStudio Installer project will place these files in the correct destination. So for Windows all build artefacts will be placed in one target folder (<span style="font-family:monospace;">win</span> and <span style="font-family:monospace;">win64</span> in my case). The Windows Installer project in VisualStudio will reference these files later. For Mac OS X this is also different since the image (and some other artefacts) need to be placed inside a hidden <span style="font-family:monospace;">.app</span> folder. More on Mac OS X in a separate chapter.</li><li>copy the platform-specific runtime into the target folder</li><li>copy other resources into the correct location in the target folder, such as readme files or anything you want to deploy with your application.</li><li>I will mention separately the <span style="font-family:monospace;">messages</span> directory, containing all message files you may want to deploy if you are delivering a multilanguage solution. This <span style="font-family:monospace;">messages</span> directory in my case is always placed in the same folder as the image.</li><li>For Mac OS X the builder placed the output artefacts directly into the application package, here LogSim.app. On creating the correct layout for Mac OS X, and how to create a user-friendly installer for Mac users I will add a special chapter later.</li><li>the Windows builder does a few more things: <ol><li>it uses <span style="font-family:monospace;">ResHacker</span> to add the following files as a resource to the executable: <ol><li>the image file (<span style="font-family:monospace;">resource.im</span> or <span style="font-family:monospace;">resource64.im</span>)</li><li>the icon for your application, which I always call <span style="font-family:monospace;">app.ico</span></li><li>an application name as resource 325</li><li>a version from a Windows resource file <span style="font-family:monospace;">version.rc</span> that is compiled with the Windows resource compiler</li><li>the <span style="font-family:monospace;">logsim.exe.manifest</span> file which is compiled with the Windows resource compiler as well</li></ol></li><li>For the 32-bit runtime that is the result of the previous steps I use <span style="font-family:monospace;">upx</span> to compress the runtime exe as much as possible. Since <span style="font-family:monospace;">upx</span> is not yet able to do this for 64-bit Windows executables this is omitted for the 64-bit Windows target.</li><li>I sign the resulting executable with <span style="font-family:monospace;">signtool</span>. For this, I realise, you will need to have a developer certificate. However you can ignore this, and tell your users that the install may warn for the unsigned installer.</li></ol></li></ol></li><li>it will package the results from the build phase and place the files you will going to provide to your users in a special directory called <span style="font-family:monospace;">uploads</span>. Packaging will do the following: <ol><li>For the *nix platforms it will use 7-zip to create a <span style="font-family:monospace;">.tar</span> file with the folder you want to provide to your user, and <span style="font-family:monospace;">gzip</span> that <span style="font-family:monospace;">.tar</span> file.</li><li>For Windows this phase does nothing, since packaging, resulting in a Windows Installer <span style="font-family:monospace;">.msi</span> file, will be done by VisualStudio.</li></ol></li><li>Finally some cleanup, to remove all intermediate files. The result is an uploads directory containing all deployments, except for Windows and Mac OS X. This is described next.</li></ol></li><li>Go to VisualStudio on your Windows machine and build the installer using the setup I describe below.</li><li>Go to XCode on the Mac and build the application using the setup I describe below.</li><li>Finally for the Mac installer you want to build a nice-looking .dmg file, more on that also below.</li></ol><h2>Creating the Windows Installer</h2><p>For this you need Microsoft VisualStudio. The examples in this chapter are created in VisualStudio Professional 10.</p><h2>Creating the Mac OS X Installer</h2><p>For Mac OS X you might deliver the .tar.gz file produced by the packaging phase described above, but your users will appreciate the common .dmg installer strategy. The file they download is a .dmg file, which is nothing more than a disc image. They can open the file which results in mounting the image on their desktop as a disk. This will open and create a window which shows what you have seen above for the MijnGeldConverter installer. Installation on a Mac involves nothing else than dragging the application to a folder, usually the Applications folder which is mounted as well but as an alias so that users can drag there instead of the “real” application folder on their desktop. <br/> For building the actual application you will need to lay out a specific folder structure, and I have found it easiest to do this in XCode.</p><h3>The XCode application project</h3><p>As I mentioned above you will need a Macintosh, either a real one or one running inside a VM, and XCode, the Apple development environment. <br/> This chapter is work-in-progress.</p><h3>Building the dmg installer</h3><p>I use <a href="http://www.araelium.com/dmgcanvas/">DMG Canvas</a> for that, but there are several ways to create a Macintosh disk image. <br/> Here is a screen grab from the result of that for one of my applications, MijnGeldConverter:</p><figure class="wp-block-image size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/deploy-04.png" alt="" class="wp-image-11949"/></figure><p><br/> This chapter is work-in-progress. </p><h2>Build Scripts</h2><p>I am using build scripts. These are <span style="font-family:monospace;">.cmd</span> files containing scripts that do the following:</p><ol><li>Compress the image</li><li>Build the various platform deployment structures <ol><li>For Windows, this phase uses <span style="font-family:monospace;">ResHacker</span> (which is part of the VisualWorks installation, in the folder <span style="font-family:monospace;">/packaging/win</span>) to create an <span style="font-family:monospace;">.exe</span> that contains the image and possibly some resources like the nice icons you have created for your application). Also it creates a resource for the <span style="font-family:monospace;">manifest</span> file you need on modern versions of Windows for the ACL (Access Control List).</li><li>This phase fills a series of output folders for each platform you want to support (i.e. <span style="font-family:monospace;">hpux11</span>, etc.).</li></ol></li><li>Package the the produced output into a folder called <span style="font-family:monospace;">uploads</span> in the form of zipped archives or (for the Mac) <span style="font-family:monospace;">.dmg</span> disk images. These archives are the ones you deliver to your users, for Windows users this will be a Windows Installer <span style="font-family:monospace;">.msi</span> file, or a <span style="font-family:monospace;">setup.exe</span>.</li></ol><p>You might implement the same functionality in some Smalltalk classes, and I may be doing that in the near future myself, but the build script strategy is the one I am using for the moment, also because I want easy command line access to some command-line utilities such as ResHacker, the Windows resource compiler, etc. <br/> For the application name I am using <span style="font-family:monospace;">MyApp</span>.</p><h3>build.cmd</h3><pre class="wp-block-code"><code>set vwhome=x:Cincomvw7.9
set messages=x:Cincomvw7.9messagesvisualworks
call compress
call buildHPUX11
call buildLinux86
call buildLinuxPPC
call buildLinux86_64
call buildMacX
call buildMacX11
call buildSolaris
call buildSolarisx86
call buildSolarisx86_64
call buildWin
call buildWin64
call package
set vwhome=</code></pre><h3>compress.cmd</h3><pre class="wp-block-code"><code>&quot;%vwhome%packagingwinimageCompress&quot; &quot;%vwhome%imagemyapp.im&quot; ..winmyapp.imcopy &quot;%vwhome%imagemyapp.im&quot; ..winmyapp.im</code></pre><h3>buildWindows.cmd</h3><pre class="wp-block-code"><code>set sdktools=C:Program Files (x86)Microsoft SDKsWindowsv7.0ABin
set tools=Z:DevelopmentTools

cd ..win
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite &quot;%VWHOME%binwinvisual.exe&quot;, myapp.exe, mgc.im, 332, 332,
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite myapp.exe, myapp.exe, &quot;splash.bmp&quot;, bitmap, 324,
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite myapp.exe, myapp.exe, &quot;myapp.ico&quot;, icon, 323,0
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite myapp.exe, myapp.exe, myapp.txt, 325,325,

&quot;%sdktools%rc.exe&quot; version.rc
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite myapp.exe, myapp.exe, version.RES, ,,
&quot;%sdktools%rc.exe&quot; manifest.rc
&quot;%VWHOME%packagingwinResHackResHacker&quot; -addoverwrite myapp.exe, myapp.exe, manifest.RES, ,,
&quot;%tools%upx304wupx&quot; --best myapp.exe
&quot;%sdktools%signtool&quot; sign /a myapp.exe
cd ..buildscripts</code></pre><h3><a id="mozTocId389973" class="mozTocH4" name="mozTocId389973"></a>package.cmd</h3><pre class="wp-block-code"><code>rem Set version number for myapp
set vn=4.00.00
cd ..
rem create compressed files from the source folders

&quot;C:Program Files7-Zip7z&quot; a -ttar linuxPPC-%vn%.tar linuxPPC -r0
&quot;C:Program Files7-Zip7z&quot; a -tgzip uploadslinuxPPC-%vn%.tar.gz linuxPPC-%vn%.tar -aoa
del linuxPPC-%vn%.tar

&quot;C:Program Files7-Zip7z&quot; a -ttar linux86-%vn%.tar linux86 -r0
&quot;C:Program Files7-Zip7z&quot; a -tgzip uploadslinux86-%vn%.tar.gz linux86-%vn%.tar -aoa
del linux86-%vn%.tar

&quot;C:Program Files7-Zip7z&quot; a -ttar solaris-%vn%.tar solaris -r0
&quot;C:Program Files7-Zip7z&quot; a -tgzip uploadssolaris-%vn%.tar.gz solaris-%vn%.tar -aoa
del solaris-%vn%.tar

&quot;C:Program Files7-Zip7z&quot; a -ttar hpux11-%vn%.tar hpux11 -r0
&quot;C:Program Files7-Zip7z&quot; a -tgzip uploadshpux11-%vn%.tar.gz hpux11-%vn%.tar -aoa
del hpux11-%vn%.tar

del uploadsmacx-%vn%.zip
&quot;C:Program Files7-Zip7z&quot; a -tzip uploadsmacx-%vn%.zip macx -r0 -aoa

move myapp.exe ..

set vn=

rem delete copied files from the packaging folders
cd buildscripts
call cleanfolders
rem DONE PACKAGING</code></pre><h3>cleanFolders.cmd</h3><pre class="wp-block-code"><code>rem delete copied files from the platform folders
rem hpux11
del hpux11*.rtf
del hpux11help* /s /q
del hpux11messages* /s /q
del hpux11system* /s /q</code></pre><p class="box-info">This article is work-in-progress, I welcome suggestions and input.</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Sun, 15 Apr 2012 09:55:43 +0200</pubDate></item><item><title><![CDATA[DDD Alive]]></title><link>https://www.reflektis.nl/blogs/post/ddd-alive</link><description><![CDATA[(article was never fleshed out, included here for completeness) Domain Driven Design has become, to my great joy, a mainstream practice. Various excell ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_yn9wFt9pSv-Jhb6jsEZTTA" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_Z00NtmQgQray_8CSuTot9g" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_7qK6dpwdT0-9S2u3V5E1zA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_eHcxzFMtQuWPvLnu8DRgjA" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p class="has-small-font-size" style="font-style:normal;font-weight:100;">(article was never fleshed out, included here for completeness)</p><p class="has-drop-cap">Domain Driven Design has become, to my great joy, a mainstream practice. Various excellent books have appeared on the subject, but for some reason I have constantly felt I missed something essential - or at least essential for me. So I decided to write on the subject myself. <br/> This article attempts to bring something entirely new into the subject of software development, or at least something that is, in my view, severely lacking from almost every book on the subject. We are living in a time when software is becoming increasingly essential in our society. The essence of software however is not lying in its technical applications, or the expertise needed to write software in programming languages designed for technical purposes. In fact, to remain focussed on that aspect of software will prove to be detrimental to further evolution. It will, even more than it is already doing, slow progress in a way that to me is unacceptable. I do not claim to have invented new thoughts or to have the copyright on the ideas you will encounter in this book. On the contrary: I am convinced most if not everything you will read here has been said in some form or another by other people. I will even endeavour to give honour where honour is due. My ambition will be to mix these various thoughts into a new amalgam, and by doing this in a way that while exposing them they will immediately be applied in practice, so they will win in power and impact. <br/> Enough on the introduction. Let's commence.</p><h2 id="h-typographical-conventions">Typographical conventions</h2><p id="footnotes-are-numbered-with-a-closing-bracket-1-these-can-be-found-at-the-bottom-of-the-page-and-relate-more-to-the-content-of-the-story">Footnotes are numbered with a closing bracket: 1). These can be found at the bottom of the page and relate more to the content of the story.</p><p id="smalltalk-source-code-is-in-syntax-coloured-sans-serif-font-not-fixed-sized-as-in-most-other-programming-languages-examples-in-other-books-this-has-been-the-custom-with-smalltalk-code-since-the-publication-of-the-smalltalk-books-by-adele-goldberg-1-i-have-added-the-custom-as-introduced-by-pugh-and-wilff-to-print-the-names-of-methods-in-bold">Smalltalk source code is in syntax coloured sans-serif font (not fixed-sized as in most other programming languages examples in other books - this has been the custom with Smalltalk code since the publication of the Smalltalk books by Adele Goldberg). I have added the custom as introduced by Pugh and Wilff to print the names of methods in bold.</p><h2 id="introduction-of-the-mijngeld-case-study">Introduction of the MijnGeld case study</h2><p>For the practical aspect of this article, one case study will be used: that of a bookkeeping program. While read this program will grow to a fully functional (and of course freely downloadable from my website 1) piece of software.</p><p>So what will this bookkeeping program do? <br/> At first I want to keep things as simple as possible, but not too simple. It would be too simple to make a program that would record my bank transactions, and offer reports on my income and spending. Why would this be too simple? Because it would lead to a piece of software that is dead from the start: it does nothing, it only records and playbacks. <br/> It would not be software as I define it – it would be hardware, a video recorder, a phone. There is nothing more pathetic than software trying to be hardware. <br/> So the bookkeeping program will not be a recorder. What then? An essential characteristic of living software is that it moves by itself. It will have a goal in life, it will take decisions and change itself by doing that. In a way, but this will be elaborated upon much more later in the book, software writes itself. It should not be the programmer writing it. <br/> The goal of the bookkeeping software will be simple in the beginning: it will do its utmost best to keep the balance of the account zero. Not positive (I will not yet want to save), not negative (I will not yet want to have debits). In the course of writing the book this functionality will grow, and we will pay special attention to the way in which this kind of growth is managed. <br/> Because the software is a living entity, or will be, the name “bookkeeping” is no longer appropriate. We will use another name for this software, one I think is very appropriate indeed: My Money, or, in Dutch: MijnGeld. This name is more appropriate because it designates the piece of evolutionary software we are going to work on as an entity in its own right that mirrors another entity in the outside world: my financial assets. And I guess many of you will agree that money is in itself already an almost living entity with very interesting biological characteristics. <br/> The theory of mirroring is introduced in the main text in the first chapter, The essence of software.</p><h2 id="the-essence-of-software">The essence of software</h2><p>I cannot really take off without making a best effort at conveying my thoughts on what comprises the essence of software. This chapter will contain a fair amount of philosophy, and I have done my best to write it in such a way that, if you so choose, you can skip this chapter without being unable to appreciate the following one, and later return to it in order to appreciate the approach even better.</p><h3 id="the-biological-metaphor">The biological metaphor</h3><p>We’ll say it again: software is not a technical thing. The closest metaphor could be the one Kevin Kelly uses 2 in defining technology as a new life form. Maybe it is true as he says that the biological metaphor for technology has become a cliché, but in my experience the consequences of thinking in this metaphor are seldom applied. Software is a complex, moving thing, never at rest, constantly adapting, morphing itself to work better or to offer more functionality. It is the spirit in the machine, itself it cannot be grasped, and it resists manipulation. We may devise as much controlling mechanisms as we want, in our software factories, assembly lines, software design methodologies or project management, but all will be in vain: software cannot be controlled. The only thing we will accomplish is a piece of software that consists mainly of controlling routines, and only an almost negligible portion of end-user functionality. <br/> The impossibility of control in complex systems is systematically denied in modern culture. We live in an age where we prefer to live convinced of our power over life and nature. We are in control, and if and when we are not, it is only a matter of time until we are. <br/> An example of the consequences of this mindset is the recent economic events leading to the worldwide collapse of financial systems in 2008. For years a economic belief system has ruled which declared economic processes to be completely controllable, and in fact even dared call itself “the final economic theory”. Economical systems are interesting examples of complex systems. And as such cannot be controlled or steered. <br/> Another example is the weather, for which we spend millions to set up better prediction models. It will be in vain, as meteorological scientist should be the first to admit. Were it not they have a vested interest in those funds… <br/> Gregory Bateson in his book (or rather a compilation of a series of papers) called “Steps to an Ecology of Mind” applied the biological metaphor to the area of thinking and mind. I often refer to the writings of Gregory Bateson, because his research is of special interest to people attempting to make computers to be actually useful. The whole area of Cybernetics was built on the groundbreaking work of Bateson and Norbert Wiener, and has been a first incarnation of the field of computers and software. To see the mind as a complex system avoids the vague and emotion-loaded notion of consciousness, but nevertheless succeeds in creating a wonderful and rich image of the uniqueness of our mind. <br/> The extent to which the ecological system is a complex system is one I want to give a little extra attention to.</p><h3 id="mirroring">Mirroring</h3><p>The biological metaphor is one common thread in the approach in this book. Another important one is mirroring. Some recent scientific theories claim than humans started to make use of language to communicate about a million years ago, and that the very process of employing language in a specific way that differs in a fundamental way from how animals communicate, has defined our physical as well our mental layout. Another research has shown that our brains, not only our brains but brains in general in all animals, contain specific neurones called “mirror neurones”. One can see these neurones as specialised devices to aid the organism in connecting with the surrounding world. <br/> In fact a whole scientific discipline has evolved around this theory, linking several scientific disciplines in an effort to understand more about what it is to be human, with interesting results in areas like autism therapy. <br/> A mirror is a device that reflects. Our mind is in essence a mirroring device: we are able to constantly reflect the outside world in our inner, mental world. <br/> This inner world is not a “perfect” reflection, that is it is not merely a replica of the outside world. It is in a sense more than that: for example our brains seem to be constantly at work “predicting” the future . <br/> One of the most intriguing writers that moulded my thoughts on the subject, is a Dutch psychiatrist, professor J.H. van den Berg. He became rather famous (in fact more famous internationally than in The Netherlands) with his first book, Metabletics, translated in English as The Changing Nature of Man . Jan Hendrik van den Berg introduced me to one of the purest phenomenological approaches to philosophical issues similar to the early Husserl. His writings showed me how intricately our observations are connected to our thoughts, our image of the world. This image is nothing else but the mirror of the world we create in ourselves. <br/> This book is a mirror in several senses:</p><ol><li>it mirrors my thoughts on the subject of computers and software</li><li>it mirrors in itself the theoretical aspects of those thoughts into the practical application of MijnGeld</li><li>it mirrors, as you read it, your own view of the world, and hopefully introduces some few gateways to enrich that view or that world</li></ol><p>An important characteristic of a mirror is that it is not an exact replica of the real world and should not attempt to be. I will not go deeply into this aspect here, except from mentioning that a mirror reflects the real world, and in reflecting will change a few things. It is easy to overlook, but a real mirror for example will exchange left and right: the face that looks at you in the mirror is not the face other people see! In a similar vein the software mirror of the thing is different in small but important ways. This will be referred to and further elaborated upon later in the two main patterns:</p><ol><li>The Time Reversal Pattern</li><li>The Active-Passive Pattern</li></ol><p>Software turns things around!</p><h3 id="quickening">Quickening</h3><p>We have talked about objects that are reflections of outside world concepts or things. We have tried to start describing these objects by defining them to be living entities, doing things on their own, and collaborating with a great deal of other objects to do their thing in an appropriate way. I will repeatedly come back to this image, this way of looking at software. Whenever you think of your problem domain, and how to morph it into a software program, you should try to think of this swarm of objects, this ant-hill of ant-like software components, each on its own so simple, but al together able to move mountains. <br/> But especially for those of you (which unfortunately will probably also be most of you…) already polluted by the machine-metaphor which is prevalent in computer science, this metaphor may sound interesting and even alluring, but impossible to understand in a way that is concrete enough to apply in practice. <br/> So let’s start play. <br/> What does a “living” object look like? <br/> One way of exploring this is by comparing “dead” objects (which, unfortunately, are the objects most of us software programmers are accustomed to) with “living” objects. <br/> An example of a dead object is a bank account like this:</p><figure class="wp-block-image size-full is-style-default"><img src="https://blog.reflektis.nl/wp-content/uploads/2022-01-26_15-44-07.png" alt="" class="wp-image-12745"/></figure><p>Entries into the account are made by Account::addEntry(newEntry). <br/> Why is this a “dead” domain? You can easily detect this property by noticing that things are done to the objects, not by the objects. They are passive themselves, they do not act on their own. They are, so to say, passive victims of whoever fancies to send them certain messages like addEntry().</p><p>An example of a domain which is a bit more alive is the next one:</p><figure class="wp-block-image size-large is-style-default"><img src="https://blog.reflektis.nl/wp-content/uploads/2022-01-26_15-45-51-1024x811.png" alt="" class="wp-image-12746"/></figure><p>In this model a bit more behaviour is introduced. The Transaction has two entries (a so-called two-legged transaction). The behaviour is in this class Transaction. It “executes itself”, that is:</p><ul><li>it is told some things (passive: amount, from account and to account)</li><li>it does some things (active: do some things with the accounts)</li></ul><p>This can be further explained by the code of method fromTo (in Smalltalk, which has keyword syntax for multi-argument methods, this becomes from:to:)3:</p><p><strong>from: firstAccount to: secondAccount withAmount: anAmount</strong><br/><em>“Create the entries in both accounts for both legs of the transaction.”</em></p><pre class="wp-block-code"><code>| firstEntry secondEntry |
firstEntry := Entry amount: anAmount negated.
secondEntry := Entry amount: anAmount.
firstAccount addEntry: firstEntry.
secondAccount addEntry: secondEntry</code></pre><p>You may have noticed that the complete passivity of objects in our first attempt has improved. Not much, I agree, but some. <br/> This may not seem much but there is actually quite some improvement. An important aspect of object-orientation is encapsulation. A transaction is told some basic things, but the manner in which it will subsequently perform its responsibilities is invisible from the outside. This can for example be illustrated by the necessity to deduct some transaction fees for each transaction. This could be implemented by adding one line to the previous method: 4</p><p><strong>from: firstAccount to: secondAccount withAmount: anAmount</strong><br/><em>“Create the entries in both accounts for both legs of the transaction.”</em></p><pre class="wp-block-code"><code>| firstEntry secondEntry |
firstEntry := Entry amount: anAmount negated.
secondEntry := Entry amount: anAmount.
firstAccount addEntry: firstEntry.
secondAccount addEntry: secondEntry.
self deductTransactionFee</code></pre><p>You may now appreciate this one level of added indirection since we can now change behaviour in one place, and all originally involved parties will not need to change in any way. <br/> But is this one step enough? Can we take our metaphor of living objects further? Because you may observe that although the second solution is a little better, it is still far removed from being “alive”, whatever that may mean. <br/> We will take a bold step here, of which I will hope that you are willing to follow me here. <br/> I will introduce time. And memory. Something living entities possess.</p><h2 id="living-in-time">Living in time</h2><p>Living objects have memory, an essential attribute to learn. <br/> Introducing time into the story can be very simple: <br/> timeLine &lt;SortedCollection of: Event&gt;</p><h2 id="smalltalk-syntaxthis-is-a-short-chapter-as-it-should-be-programming-is-difficult-enough-even-with-a-minimally-complex-language-with-thanks-to-travis-griggs-there-is-actually-two-parts-to-smalltalk-code">Smalltalk Syntax</h2><p id="smalltalk-syntaxthis-is-a-short-chapter-as-it-should-be-programming-is-difficult-enough-even-with-a-minimally-complex-language-with-thanks-to-travis-griggs-there-is-actually-two-parts-to-smalltalk-code">This is a short chapter, as it should be. Programming is difficult enough even with a minimally complex language. With thanks to Travis Griggs. <br/> There is actually two parts to Smalltalk code:</p><ul><li>The language syntax</li><li>The structure of the code base (classes, packages, etc.)</li></ul><h3 id="language-syntaxas-many-have-said-before-the-smalltalk-language-syntax-is-almost-ascetic-everything-you-encounter-well-almost-everything-is-messages-sent-to-receivers">Language Syntax</h3><p id="language-syntaxas-many-have-said-before-the-smalltalk-language-syntax-is-almost-ascetic-everything-you-encounter-well-almost-everything-is-messages-sent-to-receivers">As many have said before, the Smalltalk language syntax is almost ascetic. Everything you encounter (well, almost everything ;-)) is messages sent to receivers.</p><h3 id="code-structure">Code structure</h3><p>Different Smalltalk dialects have decided on different approaches to structure the Smalltalk class library. Depending on your dialect of choice you may encounter packages like in Java, Namespaces like in .NET, bundles, parcels, categories and what not. <br/> For this book we can discard these differences for the most part. The important thing is classes containing:</p><ul><li>Methods</li><li>Attributes, called Instance Variables in Smalltalk</li></ul><h2 id="bibliography">Bibliography</h2><p>Goldberg, A. and D. Robson, Smalltalk-80 : the language and its implementation. Addison-Wesley series in computer science. 1983, Reading, Mass.: Addison-Wesley. xx, 714 p.</p><p>Bateson, G., Steps to an ecology of mind; collected essays in anthropology, psychiatry, evolution, and epistemology. Chandler publications for health sciences. 1972, San Francisco,: Chandler Pub. Co. xxviii, 545 p.</p><p>Waldrop, M.M., Complexity: the emerging science at the edge of order and chaos. 1992, New York: Simon &amp; Schuster. 380 p.</p><p>Deacon, T.W., The symbolic species : the co-evolution of language and the brain. 1st ed. 1997, New York: W.W. Norton. 527 p.</p><p>Nehaniv, C.L. and K. Dautenhahn, Imitation in animals and artifacts. Complex adaptive systems. 2002, Cambridge, Mass.: MIT Press. xv, 607 p.</p><p>Hawkins, J. and S. Blakeslee, On intelligence. 1st ed. 2004, New York: Times Books. 261 p.</p><p>Berg, J.H.v.d., The changing nature of man; introduction to a historical psychology, Metabletica. 1st ed. 1961, New York,: Norton. 252 p.</p><p>Fowler, M., Analysis patterns : reusable object models. The Addison-Wesley series in object-oriented software engineering. 1997, Menlo Park, Calif.: Addison Wesley. xxi, 357 p.</p><h2 id="footnotes1-the-download-link-is-on-my-website-http-www-robvens-nl-but-note-there-are-two-versions-of-the-software-one-that-is-and-has-been-used-in-production-for-many-years-and-the-other-which-is-from-this-book-and-very-much-evolutionary-the-first-one-can-be-found-on-another-site-http-www-sepher-nl2-http-www-ted-com-index-php-talks-kevin-kelly-on-how-technology-evolves-html3-for-those-unfamiliar-with-smalltalk-syntax-take-a-short-trip-to-5-smalltalk-syntax">Footnotes</h2><ul><li>1 The download link is on my website: http://www.robvens.nl but note there are two versions of the software: one that is and has been used in production for many years, and the other which is from this book and very much evolutionary. The first one can be found on another site: http://www.sepher.nl</li><li>2 http://www.ted.com/index.php/talks/kevin_kelly_on_how_technology_evolves.html</li><li>3 For those unfamiliar with Smalltalk syntax, take a short trip to 5: Smalltalk Syntax</li><li>4 I will briefly mention an important pattern here which I explicitly did not apply, namely the Add, Don’t Modify pattern. That is, if this code would have been in production I would refrain from modifying the code in way I did it here, but create a wrapper solution that would leave the original code untouched but added the desired behaviour elsewhere. More about this pattern later.</li></ul></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Wed, 09 Sep 2009 14:56:00 +0200</pubDate></item><item><title><![CDATA[Presentatie op EngineeringWorld]]></title><link>https://www.reflektis.nl/blogs/post/presentatie-op-engineeringworld</link><description><![CDATA[Op 7 februari heb ik op EngineeringWorld 2009 een presentatie gegeven over Smalltalk en Seaside, genaamd &quot;Back to the Future with Smalltalk&quot; ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_yvJREMgCQWODymAHOH_pYg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_qQQ2-sJTS-yChaMfd3GLIg" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_NZuMlsZvSBqmtuuIlEq5Cw" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_Nhqgt9okQ26RZ6SrRaalig" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p class="has-drop-cap">Op 7 februari heb ik op <a href="http://engineering.sogeti.nl">EngineeringWorld 2009</a> een presentatie gegeven over Smalltalk en Seaside, genaamd &quot;Back to the Future with Smalltalk&quot;, met vooral een focus op de lessen van het verleden. De dia's van deze presentatie zijn hieronder als video te bekijken. De video's van Apple zijn ingekorte versies – bij het afspelen is geluid wel handig.</p><p>Adriaan van Os heeft wat <a href="http://www.a3aan.st/sew2009/index.php/list/0/01%2BRob%2BVens">foto's</a> gemaakt. Het publiek bestond uit een aantal Smalltalkers, maar ook tenminste voor een derde uit mensen die volkomen onbekend waren met Smalltalk en Seaside.</p><p>Hieronder de directe links naar de video's in de presentatie. Geheel onderin de dia's van mijn eigen presentatie.</p><figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">https://vimeo.com/12143596</div>
<figcaption>Apple's visionaire concept-film: The Knowledge Navigator (1981)</figcaption></figure><figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">https://vimeo.com/29984821</div>
<figcaption>Apple's Macintosh commercial, uitgezonden tijdens de Superbowl (1984)</figcaption></figure><figure class="wp-block-embed is-type-video is-provider-vimeo wp-block-embed-vimeo wp-embed-aspect-4-3 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">https://vimeo.com/41444639</div>
<figcaption>Slides van mijn presentatie</figcaption></figure></div></div></div></div>
</div></div></div></div> ]]></content:encoded><pubDate>Mon, 16 Feb 2009 21:09:19 +0100</pubDate></item><item><title><![CDATA[Slashdotting]]></title><link>https://www.reflektis.nl/blogs/post/slashdotting</link><description><![CDATA[Just wondering: what would you think would be the Slashdot &nbsp;response to an announcement like the following. Note that this is an imaginary post. A ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_K01PX2eITBiJePhAHGMiyQ" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_yuI4H_CFR_CDHNdDU7WmFA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_tf1R11W4SBqc7CjTF4WnGA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_aJlK7xmBSj-IsTzTJJiiQQ" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p>Just wondering: what would you think would be the <a href="http://slashdot.org">Slashdot</a>&nbsp;response to an announcement like the following. Note that this is an imaginary post.</p><blockquote class="wp-block-quote"><p><strong>A new open platform for devices is in the making.</strong></p><p>A group of several tens of developers are working hard on a new open platform that is an alternative for <a href="http://code.google.com/android/what-is-android.html">Android</a>.</p><p>But while Android is targeting mobile devices and will include an operating system, middleware and key applications, the MOSQ project is actually delivering a system that is targeting mobile devices, smartphones, ultra-light computers, laptops, desktops, mainframes, set-top boxes and what not. And it includes more: a complete embedded development environment is part of the system, making it much more open than the Android system which needs an SDK, usable only on a developer machine, and requires knowledge of Java, C, and C++ to develop applications in. The project is well under way to be deployable on the Apple iPhone as well, completely replacing the Apple software, or behaving like a more adaptable citizen by running on the iPhone operating system.</p><p>The system is not only open, but free of costs and licensing as well. The development community behind MOSQ is betting its business case on the selling of services and applications, comparable to the AppStore on the iPhone.</p><cite>Fictional Slashdot announcement</cite></blockquote></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 20 Jan 2009 21:26:40 +0100</pubDate></item><item><title><![CDATA[Meet WALL•S!]]></title><link>https://www.reflektis.nl/blogs/post/meet-walls</link><description><![CDATA[Though not called WALL•S by Michael Haupt who posted this blog , the little NXT robot in the picture immediately reminded me of WALL•E. So meet WALL•S, ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_cqVn1F-RQGqniqk43wg4tg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_I2oQg6cGQNOYYciurlCwnQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_uB_lwRikSfatrWGtmROjPA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_pc_ZNdMNRkGMwWLR5XJFWw" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><figure class="wp-block-image size-full"><img src="https://blog.reflektis.nl/wp-content/uploads/Wall-E.png" alt="" class="wp-image-12538"/></figure><p>Though not called WALL•S by Michael Haupt who posted <a href="http://haupz.blogspot.com/2008/11/its-alive.html">this blog</a>, the little <a href="http://www.mindstorms.com/">NXT</a> robot in the picture immediately reminded me of WALL•E. So meet WALL•S, the first robot that actually speaks and understands Smalltalk!</p><p>Some of you may know that Smalltalk originally was quite popular in the embedded world. Tektronix for example ran Smalltalk as their software for the oscilloscopes, running entirely in its own universe without an operating system to handicap the power of Smalltalk.</p><p>We also know that hardware power has evolved exponentially according to Moore''s Law. It is generally understood that software power does not follow this law at all, lagging behind so much that we still feel our computers are too slow. But few realise that Smalltalk has hardly grown to become slow and unwieldy!</p><p>So using Smalltalk as the semantic system of a robot to me feels almost inevitable: of course this should be done! (and, by the way, on the iPhone and GooglePhone as well!). Nice research project by Martin Beck!</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Thu, 13 Nov 2008 12:38:12 +0100</pubDate></item><item><title><![CDATA[Smalltalk on bare metal blog]]></title><link>https://www.reflektis.nl/blogs/post/smalltalk-on-bare-metal-blog</link><description><![CDATA[Nice blog by Cees de Groot about the SqueakNOS project that has been revitalised. This project has my special interest since it clearly demonstrates s ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_9rKBJ4ILSp212YYC5AtO-w" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_7Xgh7gWdSmqlxzkjYqqZUA" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_nNmkhJUGRb28eg35fd27nA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_PmLKZvnhSdGxgpbVinML8Q" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><a href="http://www.artima.com/weblogs/viewpost.jsp?thread=239339">Nice blog by Cees de Groot</a> about the SqueakNOS project that has been revitalised. This project has my special interest since it clearly demonstrates some features of Smalltalk in the sense of it's completeness. We are not talking programming language. We are talking <em>system</em>.</div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Thu, 25 Sep 2008 12:40:32 +0200</pubDate></item><item><title><![CDATA[The Smalltalk Trap]]></title><link>https://www.reflektis.nl/blogs/post/the-smalltalk-trap</link><description><![CDATA[Smalltalk's fundamental flaw Smalltalk's blessing - or curse? The writing is on the wall. The signs are unmistakeable. Smalltalk is back, on the beginni ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_JBN-naLMTCyx52G0evMJdg" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_7AlbcyD3TU-fyHtrT-Pblw" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_hjkrU8m8Qo-2HdADJvQOyg" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_2nUswSmASuOtS7pfJIn07Q" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><ul><li>Smalltalk's fundamental flaw</li><li>Smalltalk's blessing - or curse?</li></ul><p class="has-drop-cap">The writing is on the wall. The signs are unmistakeable. Smalltalk is back, on the beginning of a new success journey. I will not write about why I think this is so in this blog. I want to concentrate on my opinion that, unless as a Smalltalk community we make some radical moves, this success spiral will be a spiral into death. Not hibernation, which more or less defines what happened to Smalltalk in 1995. Death. Final and irrevocable. Let me first recap the main points I want to talk about:</p><ol><li>we cannot currently survive a greater than 10% increase in cash flow into the Smalltalk development effort</li><li>the Smalltalk community is it's greatest strength and it's greatest flaw</li></ol><h2>The price of success</h2><p>Companies are feeling it, individual Smalltalk programmers, especially those with some reputation are finding out they are suddenly dramatically increasing in value. Nothing wrong with that, how could there be? Growth is the holy grail in business, success is what we all dream about. Dynamic languages, metaprogramming and reflection — suddenly our treasured properties of the Smalltalk experience have gained status on corporate and mainstream computing. We knew we had the best thing in computing, and it is getting recognised (again...). A new generation of bright and creative programmers is bringing the cool back into Smalltalk, taking it away from Java. And even Ruby. But, as many start-up and even larger companies have found out to their peril, success can kill you. And there are several factors in the Smalltalk world that will guarantee death unless they are dealt with, and dealt with now, by a concerted and combined effort that is supported by the community as a whole, individual Smalltalkers and big and small Smalltalk companies.</p><p>Smalltalk is not one thing. There are several Smalltalk dialects and development environments. In itself this is not a bad thing, but it is crippling the community to have an open source Smalltalk in Squeak, and a commercial environment in VisualWorks from Cincom, to name the two in my view most important Smalltalks around. It is crippling the community that efforts to improve interoperability, like <a href="http://sourceforge.net/projects/sport/">Sport</a>, are consistently ignored and not utilised when interoperability (such as in Seaside) is needed. I see it as a sign on the wall that well-meant efforts are bubbling up again and again to create a new Smalltalk environment (for example <a href="http://code.google.com/p/syx/">Syx</a>).</p><p>I feel this must change: the Smalltalk kernel, that is the Smalltalk VM and the base Smalltalk syntax and metalevel definitions, should be placed under the umbrella of a small, preferable community-driven, group. Squeak had this group for a while, Squeak Central, with recognised leaders like Alan Kay and Dan Ingalls. While the existence of such a group in itself opens the door to politics, this cannot and should not be avoided. In the wake of success, politics will make attempts to strangle the blooming anyway, you can count on it. If greed is your motivating force, poverty will be your harvest. I will later on write on some of my ideas on how this may be managed, but I want to mention here that I think there <span style="font-style:italic;">are</span> ways to manage politics.</p><p>The Java story has many parallels to learn from, and is currently experiencing problems that may well be signalling its downfall. But one thing Java has been able to survive, is the immense growth curve in 1995 and following years. Java did not crumble, and the main reason for this was that two (and this is important: <span style="font-style:italic;">not </span><span style="font-style:italic;">one</span>) large companies, namely IBM and Sun, were massively pouring their assets into Java. Interestingly enough did IBM, while having declared allegiance to Smalltalk only a few years before (which resulted in the VisualAge suite of IBM products, all Smalltalk applications!) make this move on the corporate level already at the beginning of 1994, when Java was only in the design stage at Sun! Now I am not saying that unless we can find two large companies to pour assets into Smalltalk we will not survive the next growth spurt. In fact I will actively resist such an effort, because I think there is a better way. A 21st century way. A new way.</p><p>Smalltalk has reinvented computing, many times in fact. Smalltalk can also, in a way, reinvent the computing business. Aspects of this can be found in secondary properties of the Smalltalk experience, from which we have in the computing community as a whole, received agile processes, test-driven development, empowered teams, object oriented programming and design, to name a few. Smalltalk bigots may complain that test driven development in Java is crippled because it is not Smalltalk, but in fact it cannot be denied that the Java programming effort has immensely benefited from these Smalltalk-originated practices that are not a direct part of Smalltalk as a programming language. Which is why I name this the Smalltalk <span style="font-style:italic;">experience</span>.</p><p>Now let's raise this experience on to a different level: the business level. Aspects of this can be found in the Google business model. They provided a service for free that the customer wanted. They founded their financial model on the secondary aspects, the advertisement world. The search engine was the carrier wave, the advertisements income the modulation on it. In a way this is what the internet has been doing all the time. Money cannot be made by the infrastructure itself, and in fact I will advocate providing this to the world for free. But the services <span style="font-style:italic;">on</span> it are making the difference and paying the bills. Smalltalk as an experience has for some reason attracted <span style="font-style:italic;">empowered teams</span>, which exhibited many of the behaviours of empowered teams that result in success, often exceptional success. Alan Kay has talked about how 5-person teams like these can produce the equivalent of 500 person teams that do not have this empowerment. A business model can be harvested from Smalltalk, and in fact, although this cannot be directly traced to Smalltalk (I think this can more properly be attributed to what might be called <span style="font-style:italic;">Zeitgeist</span>), we are already seeing this business model gathering successes all over the world.</p><p>Examples of this model can be found in the <a href="http://www.joomla.org">Joomla</a> world. Joomla itself is an open source and free tool to build web sites, built itself in a dynamic (and standardised) language, <a href="http://www.php.net/">PHP</a>. Around this base (the carrier wave) has sprung up a whole ecosystem of add-ons and services (the modulation), where the money is made. But this is not a company-concentrated, multi-million dollar multinational bully making this money and driving the effort. It is a community-driven effort.</p><p>An equally valid example of this new business model is the Toyota community structure. It has been some years ago I encountered a report about the turn-over sums in the software industry, which showed that that the total of small companies made more money than the total of the large companies like Microsoft, Sun, Oracle and such. I think this distributed but massive business model should be adopted for the Smalltalk business model. We do not see this now. Smalltalkers consistently contribute &quot;goodies&quot; to the community for free. But these goodies have a bad track record of being maintained. By providing a business model for &quot;goodies&quot; we can improve this track record.</p><h2>Infect the Smalltalk community</h2><p>The Smalltalk community has always been very strong. The spirit of sharing, so contrasting with the C world of reinventing the wheel and the not-invented-here syndrome, has been permeating the community from the start and still is one of its main driving forces, from the start of the Smalltalk Archives hosted on the University of Urbana-Champain, one of the Smalltalk centres in the world. But the community as a whole is totally unequipped to manage the coming deluge of success.</p><p>The fact that it is fragmented is not the main flaw I think. The various mailing lists have some overlap, although not enough, and keeping up with the Squeak and the VisualWorks mailing lists alone may be asking too much from your average working day. We may certainly benefit from some kind of syndicating effort, separating environment-specific communications from Smalltalk-general stuff. But the main flaw is that there is no concertation. I want to introduce a proposal for this thing I call <span style="font-style:italic;">concertation</span>. It is an appropriate term I think, because what we want to do is make music to rock the planet. But we will create pandemonium if there is no concertation. The only effort remotely resembling this at this moment is <a href="http://stic.st/">STIC</a>, the Smalltalk Industry Council. But, and this should have been a sign on the wall, STIC has been stubbornly ignored by the Smalltalk community as a whole (and maybe vice-versa as well…). It has been more like a clique of Smalltalk companies, and the influx of success in these companies now and in the near future will create politic unrest in STIC that might be its downfall. And if that may not kill STIC, the lack of community support will. For this to change nothing less than a massive infection is needed. An infection with a common belief in the future, the power that Smalltalk can provide, an infectious enthusiasm that will create a synthesis where we direly need one.</p><h2>The tone of voice</h2><p>For a while I considered changing the tone of voice in this blog, because I usually detest cheap tricks to draw attention to blog articles by employing threatening or negative language. It is so easy to criticise and predict disasters. I decided to keep my original approach, but I want to postscript that by emphasising, yes, the problems we are facing as the Smalltalk community are quite serious, the opportunities are equally amazing. We are moving into an interesting future. Let's be part of it.</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Fri, 19 Sep 2008 12:43:03 +0200</pubDate></item><item><title><![CDATA[The Dead Simple Squeak Tablet For $200.]]></title><link>https://www.reflektis.nl/blogs/post/the-dead-simple-squeak-tablet-for-200</link><description><![CDATA[Michael Arrington has created a little buzz with his blog post We Want A Dead Simple Web Tablet For $200. Help Us Build It. We can do better. Instead of ]]></description><content:encoded><![CDATA[<div class="zpcontent-container blogpost-container "><div data-element-id="elm_IMr7vd64R3WLeHqO3P5pZw" data-element-type="section" class="zpsection "><style type="text/css"></style><div class="zpcontainer-fluid zpcontainer"><div data-element-id="elm_OxUld_1CTrSjajpBl4FItQ" data-element-type="row" class="zprow zprow-container zpalign-items- zpjustify-content- " data-equal-column=""><style type="text/css"></style><div data-element-id="elm_vsVosIJXSG64uRRFtI1NXA" data-element-type="column" class="zpelem-col zpcol-12 zpcol-md-12 zpcol-sm-12 zpalign-self- "><style type="text/css"></style><div data-element-id="elm_VGuJZbfkRhKqtcuvlUBP0g" data-element-type="text" class="zpelement zpelem-text "><style></style><div class="zptext zptext-align-center " data-editor="true"><div><p>Michael Arrington has created a little buzz with his blog post <a href="http://www.techcrunch.com/2008/07/21/we-want-a-dead-simple-web-tablet-help-us-build-it/">We Want A Dead Simple Web Tablet For $200. Help Us Build It.</a></p><p>We can do better.</p><p>Instead of Linux and Firefox, the Smalltalk system will provide an open-access environment on this thing, even for many end-users because the development environment will be part of the system.</p><p>It will of course be called the <em>Stablet</em>. It will contain a multi touch screen, which by the way will be running with probably no modifications on the iPhone and the Google Phone (or any other mobile device for that matter).</p><p>The ease of third party extensions should be a prime goal for this system. This will create a massive community of developers making money with services or small shareware applications licensed for a few dollars per user. No need to learn code and compile, just play around with your ideas, see it in action as you go, tweak it here and there, in a language that is simple by design.</p><p>What we really need for this is an unbiased comparison of the two platforms, Smalltalk and Linux. What are the various advantages/disadvantages, and even disadvantages that viewing at it from another angle can be advantages (like the old complaint &quot;programmers do not understand the Smalltalk syntax because it is too different&quot;).</p><p>We need centralised coordination of the effort, but the effort itself should be distributed to the max, making use of the vast potential of Smalltalk programmers out there, old or new.</p><p>We also need investment resources, someting which I am confident we will be able to get once we get our story straight. We can show that what we can do with Smalltalk can never be matched by any other environment!</p><p>Let's rise to the challenge!</p></div></div>
</div></div></div></div></div></div> ]]></content:encoded><pubDate>Tue, 22 Jul 2008 13:43:21 +0200</pubDate></item></channel></rss>