My name is Ismael Chang Ghalimi. I build the STOIC platform. I am a stoic, and this blog is my agora.

Back on the blog after a couple of days of real work.

See this beautiful View Editor? Well, it’s about to be replaced by a totally re-designed alternative, courtesy of Fran├žois. Why is that? Well, because after nine months of work on it, we realized that is wasn’t really working, for two main reasons.

First, users did not understand it. We thought it was pretty intuitive, but our experience on the ground proved us wrong. Users simply did not get that filtering, sorting, and grouping rules had to be defined at the intersection of a column for a field and a row for a rule type.

Second, we realized that the innovative visual metaphor that we were so proud of was massively inefficient in terms of screen real estate utilization. On one hand, most of the cells in the view configuration grid are usually empty, because a view isn’t made of very many rules. On the other hand, whenever a rule needs to be defined, it is constrained by the space offered by a single cell, which isn’t very large, especially for filtering and grouping rules.

Third, some of our customers started to develop very large objects made of hundreds of fields, and creating a complex view for such objects required massive amounts of horizontal scrolling through the fields of the object, which was quite inefficient as well.

Conclusion, we’ve developed a brand-new alternative, which will be unveiled later today.

Dynamic UI library loading

One of the reasons why Florian could reduce our UI loading time for perspectives from 10s down to 1s is that we’re now loading the libraries for different perspectives dynamically, instead of loading all of them at once when the UI gets loaded. This powerful refactoring also brings a really nice side-benefit: instead of hard-coding the set of perspectives into our code, we’re now dynamically loading a perspective’s library on demand, based on the information captured in its meta-data. As a result, it will be much easier to let users add custom client-side JavaScript code for implementing their own perspectives. Now that we’ve done that for perspectives, we’ll do something very similar for all our form controls and charts.

Florian recently refactored a lot of our CSS code, especially with respect to form controls and the vertical alignment of labels and placeholders. It’s not yet perfect, but it’s a lot better than it used to be, and through the diligent use of LESS our styles should be a lot easier to maintain.
Florian recently refactored a lot of our CSS code, especially with respect to form controls and the vertical alignment of labels and placeholders. It’s not yet perfect, but it’s a lot better than it used to be, and through the diligent use of LESS our styles should be a lot easier to maintain.

Florian recently refactored a lot of our CSS code, especially with respect to form controls and the vertical alignment of labels and placeholders. It’s not yet perfect, but it’s a lot better than it used to be, and through the diligent use of LESS our styles should be a lot easier to maintain.

Images library

We will create a library of images that are suitable for splash screens and website backgrounds. All these images will be licensed under Creative Common Attribution License 3.0. Most of them will come from 500px. Images will be tagged with keywords and will have a sentiment rating, using STOIC Ontology in the background. The goal is to automate the selection of images according to certain criteria. When we have a baseline collection, we will extend our random value generator in order to support the random selection of images.

Barcode libraries loading

We now support 82 types of barcodes, but that required the loading of dozen of libraries for them. In order to improve the performance of our user interface, we’re now loading these libraries only when a barcode needs to be displayed.

Victory! We’ve successfully migrated to AngularJS 1.3.0. It would be quite reasonable to expect a few regressions from this migration over the next couple of weeks, but things seem to have gone a lot smoother than originally expected.

UI loading time

Currently, the initial loading of our user interface takes about 9s when you have a solid Internet connection and when our iconic font has been already cached. As a point of comparison, Gmail takes about 4s. Our goal is to get down to 2s. Here is how we should be able to achieve it, hopefully within a couple of months, and by the end of the year at the latest:

  • Migrating to AngularJS 1.3 (almost done)
  • Fixing a lot of sub-optimal uses of AngularJS constructs
  • Loading our meta-data cache incrementally (by far, the biggest gain)
  • Modularizing our user interface (thanks to our Tools initiative)
  • Reducing the number of files to be downloaded
  • Compressing all JavaScript libraries
  • Using a CDN whenever possible

Game on!