Job offer in Hamburg, Germany (e.g. Gemstone/S)

The company I work for “dimap, Das Institut fĂĽr Markt und Politikforschung” (www.dimap.de) is looking for a developer (maybe student) here in Hamburg, Germany. We are developing software systems using various programming languages (C#, Java, Python, Javascript and Smalltalk (Gemstone)). It would be *very* nice, if the person would be interested to do development in Gemstone.

Posted in Smalltalk | Leave a comment

PUM 3 – directions to go

PUM 2 is more or less working, now considerations are done, how to improve and actually we are doing a little step back again.

PUM 2 started with Swagger-Support, but we never actually used it after that initial support. With Swagger 2.0 the Swagger-support (in PUM 2) did not work any more.

But now after swagger emerged to openapis.org (based on swagger), we will try to fix the problems and make it work again. That will lead to some changes:

  • DateTime exchange is now based on RFC3339 again and not Javascript ticks. We thought, that JS Ticks might be a good candidate as an exchange format but actually porting to other languages were now more difficult
  • Remove the Cookie-Support from the server/client runtime. This is a critical/breaking change, but removing cookie support will make it much easier to support other client languages/libraries. But this also means, that session information has to be given to each call by the client …

Java support is wanted by one of our customers and therefore we assume, that a Java codegenerator has to be done in 2017.

PUM in its current state is a Gemstone/S oriented tool and we will go further this direction, as long as we can create/get projects with Gemstone.

Posted in Smalltalk | Tagged , | Leave a comment

Dolphin 7 with Jade IDE under Wine/Ubuntu 16.04

As I mentioned earlier on the site I managed to install Dolphin 7 under Ubuntu 16.04 – but I had to install a much, much newer version of Wine and you get the latest version directly from the developer site of Wine.

Then you have Dolphin 7 available on your desktop and its time to try out the Jade IDE to import it into a running Dolphin7 image. James describes how to build a IDE from Github – but for that you need all development tools and one does not have that under Wine.

So we save our image and the core problem in the whole work is to find out, where the files are located.

Normally all stuff is located below the “.wine” folder in your home directory – but the documents directory of the wine current user (same name as your Ubuntu user) points to the normal Ubuntu “documents” (German: “Dokumente”) folder. Looking into this folder you might see a “Dolphin Smalltalk 7” folder.

Be sure to install the 7.0.32 version published several days ago from ObjectArts

Going into that directory you may find the Smalltalk image you just saved …

Now execute in that directory:

git clone https://github.com/jgfoster/Jade Jade

and all the Jade stuff is available. It turns out, that you just have to file in the “BootJade.st” file located in the “Jade” directory. That should it be.

But I do not know why – the loading failed. Can not find all the files …

I changed the “BootJade.st” file content to:

PackageManager current install: File workingDirectory, ‘\sources\’ , name , ‘.pax’.

and you can load all the stuff – bingo.

Under “Additional Tools” you may find the Jade Login GUI, start it and try to login.

Fails: reason seems to be, that all the low level libraries are not found.

Hmmm. It seems, that the working directory is not correctly set. I had to move all stuff within the Jade directory one level higher … and now you can connect.

 

 

 

Posted in Smalltalk | Tagged , , , , | Leave a comment

Gemstone/S application example

Here is another example for an application developed with the toolchain we developed over the time. It’s a CATI software system – get interviews by calling persons for different purposes.

The system is similiar to the election system I mentioned in spring this year on this site. The base component for this system is the oo-database Gemstone/S. Several external applications are communicating with the database via a HTTP-RPC API programming style.

The whole stuff is modelled with PUM, the API is defined via PUM and code is generated for the following actually used programming languages: for Topaz (Gemstone/S), Sencha ExtJS (Javascript) and Python 3.5.2. The domain model itself is about 1/3 larger (in terms of source code) than the election system mentioned in earlier postings.

The application itselfs is also pretty much different – its much more multitasking. Lots of concurrent users may connect to the database, background jobs are executing and so on.

The communication between clients and database is normally done via browser-based applications (written in Sencha ExtJS) and the database via HTTP. The database itself is not a frontend http-server, but all components are tunneled through the original HTTP-server: an Apache/2.

The requests are handled by several Topaz processes, with different memory contraints – all API calls are defined according to the “believed” memory consumption during requests execution. Load-Balancing is done by Apache/2 and it leads the requests to the Topaz process with the correct memory configuration.

The much more interesting part is the introduction of ZeroMQ. The database now sends “events” (indicating some domain events like login, logout, interview ended, ..) over a “publish-subscribe” socket pattern to external applications. Most of these service programs are written in Python 3.5.2.

But also the browser based application need some events and we wrote a Python based ZeroMQ <-> WebSocket relay. The relay is also tunneled through the Apache/2 server.

Now the browser application – when doing active work – may communicate with the database with HTTP, but are also awaiting informations via incoming events received via a WebSocket connection. In future we may only use WebSockets for all kind of application – we will see.

Some additional tools are written in Python scripts: interfaces to dialer systems, to time-management systems – and simulated interviewers 🙂

These simulated interviewer programs are the most interesting things – they show the concurrency problems within the whole structure. They also show, that 400 interviewers working against this application server are not a load problem. The problem will be the 1-5 supervisors doing lots of statistic data and to visualize the current state of a CATI studio. These few users produce much more CPU work !

The high concurrency of this system also pops up another interesting fact: simple jobs become difficult: transfering 100000 domain objects from one queue to another queue become now a candidate for conflicts. Such jobs have to be rewritten in a adapting way, so that the jobs can be done in multiple smaller jobs etc.

The longer the API calls needs, the more is the risc of conflicts and transactions are aborted.

And of course we also build fat clients from our www-clients by using the Election technology. They are working – but we still have to think about, how to improve such a fat client in contrast to a pure web-client.

Drawbacks found ? Well yes: a more structured query language would be nice.

 

 

 

Posted in Smalltalk | Tagged , , , , , , , , | Leave a comment

Ubuntu LTS 16.04 and Smalltalks under WINE

I just looked at several Smalltalks running under WINE under Ubuntu LTS 16.04. Ubuntu 16.04 initially ships a pretty old WINE version and I had several problems with the dsitributed WINE version (version 1.4?):

  • VASmalltalk 8.6.3 very often crashed
  • Dolphin7 could not be installed

Then this evening I installed the latest development version of WINE (version 2.0?) and now VASmalltalk 8.6.3 runs much better and Dolphin7 could be installed.

Just to mention Jade – the alternative IDE for Gemstone/S development can now run under Wine since version 2.0.12 (today published 2.0.14). That’s fantastic news, because I do not have to start a Windows image just to use Jade for Gemstone development – now all stuff is running under Linux.

Posted in Smalltalk | Tagged , , , , , | Leave a comment

PUM – Starting with a new stone

PUM based development means API-based development. You – as the developer – define a model and an API to change the persistent data on your Gemstone/S server.

From that model and API, PUM generates source code (actually a TOPAZ shell script) for Gemstone to have this model within Gemstone/S and partial code fragments for your API calls – all handled by REST calls into the Gemstone Server.

I actually do my development with Gemstone/S 3.3.1 – so the stuff I describe here is tested against this environment – running under Ubuntu LTS 16.04. I also use GsDevKit_home from Dale Henrichs. These are my runtime requirements.

One creates a new stone and then adds some additional libraries from GsDevKit to build a foundation for an appliation (mainly the communication part). The following code sequence shows the needed packages:

...
%
doit
GsDeployer deploy: [
  Metacello new
    baseline: 'ZincHTTPComponents';
    repository: 'github://GsDevKit/zinc:gs_master/repository';
    onLock: [:ex | ex honor ];
    load: 'REST' ].
%
doit
GsDeployer deploy: [
  Metacello new
    baseline: 'ZincHTTPComponents';
    repository: 'github://GsDevKit/zinc:gs_master/repository';
    onLock: [:ex | ex honor ];
    load: 'Zinc-WebSocket-Core' ].
%
doit
ZnConstants 
  defaultMaximumEntitySize: (8 * 1024 * 1024) ; 
  maximumEntitySize: (8 * 1024 * 1024).
%
...

The last lines are only added to maximize the file size a REST request may be.

The next part is needed to load my runtime files (general support packages (REST, Swagger), communication classes (ZeroMQ), model runtime etc).

...
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'Neo-JSON-Core' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKPlatformExtension' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSK-ModelBaseRuntime' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKJSONSchemaSupport' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKZeroMQBase' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKZeroMQGemstone' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKZeroMQWrapper' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKRESTSupport' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKSwaggerSupport' ;
   load.
%
doit
Gofer new
   url: 'http://www.schrievkrom.de/extfiles/public-smalltalk/gemstone' ;
   package: 'MSKExtensions' ;
   load.
%
...

The “Neo-JSON-Core” is my own version. I had problems with the official version and never had time to work it out … that is still work to do. You do not need ZeroMQ stuff to make it all work – but ZeroMQ plays an important role in the general communication failities of the programming model.

Now you have a stone with a fully suitable runtime environment for PUM development. In the next posting I want to define a simple model and simple API calls.

Posted in Smalltalk | Tagged , | Leave a comment

PUM 08.06.02 – 02.07.00

Time again to summarize the changes to PUM since I made an overview in January:

  • Work has been spent on the part of starting/creating a new project. This still needed manual work (on every new projekt) to make every thinks really work 🙂
  • Topaz: Storage Model changed. The persistent data is now stored in an isolated data Dictionary and not any more on a class side variable of the projekt class.
  • Topaz: Bug Fixing on Revision Counting, EnumClasses have now a general superclass, changes in Date and Time handling, BugFixing: Unicode handling
  • Python3: BugFixing
  • ExtJS: CodeGenerator now also creates examples of grid and forms for each Model definition, Dynamic calculation of the URLs (Electron support)
Posted in Smalltalk | Tagged , , , , | Leave a comment