ALLSTOCKER internals

Hi all,

>From Torsten, I've received a request to post about some technical
details of ALLSTOCKER ( .
I hope these notes will be interesting to Pharo web developers.

- Seaside / Teapot
We are using Seaside as a main framework for ALLSTOCKER marketplace.
Seaside's component architecture is great for extending application in
an organized way.
ALLSTOCKER prototype was originally composed of only 3 class
categories. Now these were gradually grown to 70 categories. But we
still feel that they are manageable.
We also use Teapot for building Web-based API in a quick way. Recently
we've built webhook handlers for integration with other services.

- Templating with Mustaside
We need a lot of responsive-design web pages for supporting various
mobile devices. (It is important especially for Southeast Asian
countries, where tablets are popular than PCs).
We would like to adopt existing Twitter Bootstrap templates for saving
time. So, Mustaside was our choice.!/~MasashiUmezawa/Mustaside
Before Mustaside, there were a lot of noisy #div: sends in our code.
Now they are gone.

- Localization
Our business target is world-wide. So localization is very important
topic. Currently ALLSTOCKER supports 4 languages and we will add
Chinese languages soon.
Translation strings are not only in Smalltalk code, but also in
Mustache templates. So we selected Soup for extracting translatable
strings in those templates.!/~PharoExtras/Soup
For managing translations, we use Gettext package.!/~PharoExtras/Gettext

- Databases
For transactional data, we chose Glorp. Although there are mapping
costs, we prefer RDB (Postgres). It is reliable for handling precious
order-related data.
However, for supporting complex search of machines, we use Neo4j - a
graph database. It supports very powerful query language called
We can avoid complex table joins and get aggregated results faster.!/~MasashiUmezawa/Neo4reSt

- Keyword search
ALLSTOCKER supports free keyword search. We selected Elasticsearch for
search-engine. Elasticsearch has elaborated searching facilities and
those are easily accessible via REST API.
We have extended the existing Elasticsearch client for Pharo 5.

- Deployment
We are using AWS Elastic Load Balancer and running Nginx as a
front-end web server. Two back-end Pharo images are running and
load-balanced with sticky sessions.
It was sort of difficult to find the appropriate simultaneous number
of database connections and Pharo processes. We feel ALLSTOCKER is
pretty stable for now, but we need to adjust more for expanding our

Best regards,
— [:masashi | ^umezawa]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: