Impressions from the Moodle Conference

The annual Moodle conference for the UK and Ireland took place at the Dublin City University,  March 11th to 14th, 2015. Due to the flu that got me down as I got back, this post comes with a slight delay.

The main topics of this years UK & Ireland Moodle conference in Dublin were Learning Analytics and the Moodle Association. Further notable topics were (the more technical) inclusion of Bootstrap 3 in Moodle, the working groups for the simplification of forms and for designing a student dashboard.

As Moodle HQ are in the process of taking ownership of a couple of key Moodle conferences (Dublin was not one of them, but there was strong collaboration), the new format of “working groups” was tested on a larger scale. The idea of a working group is for Moodle users to work on a a specific topic in order to come up with specifications for Moodle HQ to implement as improvements to the Moodle core. The topics here were “form simplification” and “student dashboard”. These working groups have a certain weight, as a delegate from HQ will take part, with the task to make sure the outcomes can (and will) actually be implemented. An interesting observation here was, that at the hackday at the end of the conference, as the working group findings were presented and discussed, the tasks were heavily challenged by developers who naturally prioritise and approach things differently. I could sense a bit of frustration there when a response from HQ representatives would be “this is what the working group was for and basically you’re too late now with your input”. I think it is early days for the working group approach and it will take some time to get used to it.

The most heated discussions were on the initiation of the Moodle Association, as presented by Martin Dougiamas. Martin has been looking for new ways to fund Moodle development for some time now and this is what he decided to do. The Moodle Association is a non profit organisation (and therefore excempt from taxation). It will be completely separate from Moodle HQ after the initial work necessary to launch it. The idea is, for members of the association to come up with specifications and funding for Moodle core development and then to contract HQ to do the work. Martin would like to see instituions to be members in order to comission large junks of development work. There will be a correlation between how much money an entity puts into the association and how many votes it will have. All projects will be up for the association members to vote on. The projects with the highest votes will have the association’s funds allocated to it and will be developed by Moodle HQ. There will be some sort of cap on how many votes individual association members can have.

The idea of this associations opens a lot of questions of course, especially on what it means for Moodle partners who are currently the sole source of funding for Moodle (10% of revenue from Moodle related work by partners goes to Moodle HQ).

The keynote on learning analytics by Bart Rientes from the Open University gave a very interesting insight into what Open University do with their attempt at predictive analytics. The idea there is to show learners which areas of the curriculum they should focus on for the best outcome, based on data analysis. This topic raised two main questions: How do students get to see and use this data and what are the questions we want the (analytics-) system to answer. In a hands-on example with Gavin Henrick I experienced how difficult it is to come up with this question. Without this question being sensibly formulated though, learning-analytics somewhat remains a buzz-word.

The best example of a customised Moodle was presented by Thomas Bell with the United for Wildlife MOOC platform they launched as beta on that day (…). The platform comes with a rather beautiful user interface. Check it out!

David Mudrak gave a good overview of how the plugins universe works, with a plea for more support on reviewing third party plugins. This reminded me of our initiative to collaborate and publish security reviews of plugins we do for our clients. Somehow it seems hard to motivate developers or companies to collaborate on this.

Davo Smith eloquently convinced us how easy it is to use Behat testing and Dan Poltawski demonstrated how Moodle HQ do continuous integration.

The hackday brought some excellent discussion and follow-up work on the integration of Bootstrap 3 and the state of renderers and templates in Moodle. This was once again the most inspiring part of the Moot, there’s some very talented people that are passionately involved in making Moodle the best VLE out there. This is no easy task, considering the massive amount of code and all those legacy bits still lingering. One of the reasons Moodle needs more funding is to make it the best possible option on the VLE market. The competition is there and work needs to be done. The difficulty here is the generic nature of Moodle: changes need to work for all the users, not just one specific site.

Thanks to Gavin Henrick and the team for making this great MoodleMoot possible. And thanks to Liip for giving this little bit extra to allow me to travel to Ireland by train, bus and boat.

leaving Ireland on the ferry

Tags: , ,

Magento Config Search

Working with Magento configuration it is always a chore. To make a change, you have to find a necessary section, then open it, then open its subsection, then sub-subsection and probably some more… and only after a dozen of cliсks you can finally change necessary Magento configuration item.
Once, while testing new functionality, after routine search of some rarely used settings, I finally got tired and decided to improve this process a little bit.
My attention was drawn to the search field at the top of the admin panel. Existing ‘admin search’ already knew how to perform search among customers, products and orders, so why not to add configuration section to this list as well? As always, I expected that I would have to rewrite basic functionality to achieve the desired result, but I found out a nice way to extend this functionality.

Configurations for the search is stored in the file below:


So, the injection was very easy. I had to add my search model only into the adminhtml/global_search node.

My ConfigSearch model is looking for the matches in the config fields labels, also it takes into account translations. The search result shows you the full config field label and its full path. When matches are found, you’ll see something like this:


When you click on one of the displayed results, you’ll be redirected to the page with this configuration section opened. The field will also be highlighted, so you can find and edit it even more quickly. Task is done!


I hope that this extension will help you a little bit with the navigation in the Magento Admin panel.
source code

Tags: , ,

The Roadshow comes to Zurich

How can you ensure that your deployments will be successful? What should you look for when assessing cloud hosting providers? And where can you find the ideal toolset for cloud-based PHP hosting, especially for Drupal and Symfony applications?

All these questions and more were answered when Liip AG played host to the team recently, giving us the chance to present our revolutionary Git-based cloud hosting solution to customers, partners and like-minded agencies during an evening event on the eve of May Day.

Miro Dietiker kicked the evening off with a presentation on Drupal 8, underlining that the new CMS’s advanced technology stack will challenge practices and require an optimal hosting solution and toolset. Miro went on to explain how is integral to the MD Systems approach to Drupal 8.

The second speaker, Tom Schneider, took up the Drupal 8 topic, describing how his team at the Südostschweiz newspaper worked with MD Systems to build a ready-to-use Drupal 8 news portal distribution known as NP8. Remarkably, this system is already live, stable and highly performant on, despite Drupal 8’s beta status. You can read more about this in our press release.

By this time the audience had heard enough hype: it was time to see a demo. Robert Douglass,’s VP of Customer Success provided just that, showing how can speed onboarding, optimise development workflows, lower risk in deployment, and offer remarkable flexibility in terms of technology compared with other PaaS offerings.

Last, but definitely not least, came Liip’s very own Lukas Smith, who provided some great insight into how provides an ideal environment for Symfony hosting, and how easily newbies can get to grips with the solution. He provided the example of a fellow Liiper who had a few hours left over before a vacation, and managed to get up and running with and integrate a complete ecommerce solution before it was time to go home.

The assembled guests had plenty to discuss once the talks were over, and fuelled by the delicious canapés and the excellent wine, discussions across a range of topics continued until dinner time.

Find out more about at:

The User Experience of APIs

After having read how some people can hold and transmit the terrible misconception that designing APIs has nothing to do with designing great experiences, I felt one could provide a few insights into the benefits of shaping an API around its consumers – the developers and the machines – as much as around the data.

APIs are for humans what websites are for machines

Like a website, a point-of-sale, …, a web API is just another service touchpoint. And as any web-based touchpoint nowadays, its audience is part humans, part machines.

Interestingly, the audience and content structures of an API are diametrically opposed to those of a website.

A website is explored by machines – called bots – who precede and orient a (hopefully) larger number of human visits. A website main content targets its main human audience, while its metadata targets its secondary audience: machines.

For an API, it’s just the opposite.

An API is explored by humans – developers, mostly – who precede and orient a larger number of machine visits. An API main content targets its main machine audience, while its metadata targets its secondary audience: humans.

Design APIs with the developer experience in mind

So how can user experience design help with APIs? Think of it as a kind of “Developers Optimization” (like SEO helps machines on your website): by lowering the barrier for the developers to understand and code with your API, you raise chances of adoption, success and reuse.

Suppose that you work for some bank and are designing some kind of money API. The information and action points that this API will convey belong to the banking business domain, maybe evenmore specifically to the field of mortgages, maybe even to a specific understanding of that specific field within that specific domain, an understanding that only exists within your bank.

Yet this future money API is certainly not aimed at you, nor at your business colleagues. What if one of that API’s purposes is to support monetary transactions on gaming platforms? Then game developers might reasonably be your primary human audience, right? and game developers don’t know much about the way your bank thinks and deals with money, right?

As for any service touchpoint, don’t design an API around your business, but around the needs and understandings of those who will consume it.

A few design methods that can really help you designing great API experiences

  1. interview target developers : what do they expect from the API and what do they understand about the business behind it,
  2. build personas out of the insights from these interviews,
  3. benchmark other APIs and their documentation to see what conventions are at play there,
  4. prototype and user test the API before the single line of API logic. Provide the developers with a static mockup of the API response and do a walkthrough with them.

Further readings

The user experience of an API is a relatively new concern, yet – and as usual with new things – several people and organisations are developing it:

Tags: , , ,

React Native hackday

Yesterday we had a hackday on React Native. The goal was to find out how it feels to develop native iOS apps with Javascript and how much we have to learn to get started. GermainPedro and Adrian (myself) participated. Our combined knowledge of Javascript frameworks listed projects like Angular JS, Backbone, Exosjs, Ember, ReactJS and jQuery. Germain did a bit of Swift but basically we are web developers without iOS experience.

We started with setting up the sample app from the tutorial and played a bit with changing content and reloading the app. Live reloading worked for all three of us only for a few changes before it stopped reloading, we have to investigate further what the cause of that is. After setting up Apple Developer accounts we deployed the sample app on our phones which worked well. We liked how easy it was to get started thanks to the react-native-cli tool.

Since I already hacked on an example project with React Native before, I gave a short introduction of React, JSX and StyleSheets. We all got the UIExplorer example running which is great to see what React Native can do and to use as a reference when creating own applications. The examples felt great and well… native.

A hackday wouldn’t be called a hackday without hacking so we thought of something we could work on. We wanted to try to get a sliding menu and maybe hack a bit on the Guess the Liiper sample app. When sharing the Guess the Liiper code we had some issues with setting up the .gitignore file correctly for an XCode project and updating the react-library to the latest version. Pedro and Germain investigated the sliding menu and how to add images while I fixed the Guess the Liiper app to be actually usable. We found the react-native-slide-menu, integrated it into the sample app and used a background image for the content. When requiring the image we had some issues but that seems to be known. We ended up with a working app, see the source code. We went through the source code of Guess the Liiper and thought of how to create a circular progress bar like this. React-native-svg might be useful to create this.

React Native sliding menu sample app


Working with React Native is… reactive! It felt like developing for the web and we didn’t have to spend much time getting into it. With the tutorial, UIExplorer app and the sample app it was easy to get started. The Chrome Debugger and tooling like the great Chrome React extension was for us the usual way to debug javascript apps. When thinking about what to implement we found that many components already exist – mostly in a beta stage but the community is very active.

We had to get used to Xcode, digging into the native tools is necessary of course but finding things in Xcode wasn’t the most intuitive experience for us. With our existing knowledge we think we can get quite far to develop apps, especially for quickly prototyping. Probably it needs more iOS and Swift knowledge for specific functionality like applying filters to images, microphone and camera access etc.

When working on styling we noticed that it would be great to have live editing like in Chrome Developer Tools which we are used to. Since we don’t have any iOS development experience we can’t compare this to the normal way iOS apps are developed. But being able to immediately see style changes made in the Dev Tools would be awesome.

We think that the development experience with React Native is great for web developers. The project is very young and it is too early to tell how disruptive it will be. Many components are being developed and there is definitely traction in the community. We are especially looking forward to the Android version.

Tags: , , , ,

Google Analytics Metrics and Dimensions Cheatsheet

Google Analytics dimensions & metrics cheatsheet

There are times using Google Analytics when you don’t remember the name of a dimension, or wether it’s even a dimension or a metric … There also are times when you even wonder how much details does Google Analytics capture about a aspects of the user interaction on your website or app.

For such times, here’s a PDF cheatsheet of Google Analytics dimensions and metrics, as visual summary of the official documentation.

Tags: , ,

AEM dedicated squad @Liip LS

In 2013, two of our big clients started considering Adobe Experience Manager (AEM) for their CMS needs. In the market of integrated mega-CMS we at Liip came under the impression that Open Source solutions were most of the time not considered by potential clients. To continue collaboration with these key clients, and to offer our high-quality services in this specific market, we have decided to invest in the creation of a dedicated project squad.

We were in contact with AEM before, working on a PHP connector for its data-storage layer (Jackrabbit JCR). Also this new line of service complements rather than replaces our existing service offer.

The partnership with Adobe started at the beginning of 2014. It let us explore the product deeper and assess the market opportunity behind it. By february 2015, the “AEM Startup Squad” was launched. This squad is composed of Fabrice, a senior Java developer with an already solid AEM background, four experienced “bizdev”-people and myself. This is our task force dedicated to reach our goals.

We are presently working on a few business opportunities to realize complete AEM projects or to develop interconnected applications to plug on existing AEM systems. For example Richemont group, which has to resolve many interconnection issues between the brands. Some client projects will therefore start soon.

At the same time, we continue building up our know how and get involved in the community by doing an internal project and by participating to learning sessions and meetups. It’s really a chance to have some time to grow up our skills without the constraints of client-projects. Thank to this, we are now confident to offer a very good expertise in AEM, with focus on following features:

  • The data storage layer and requests resolutions with JCR and Sling ;
  • Authoring concepts and processes ;
  • Components architecture and development ;
  • AEM Key features such as user management, client-context and workflows ;
  • Continuous Integration process & integration tests.

As new projects are coming very soon, we are still looking for developers to extend the squad and build many awesome project based on AEM at Liip. We are now well launched on our roadmap to have a cross-functional team focused on Adobe Marketing Cloud solutions at Liip.

Tags: , ,

Halve-halve-halve : a group prioritization method

Priorities matter at every step of an agile design and development process, yet setting priorities is a daunting task and prioritization in group within a workshop even more.

Reaching general consensus on priorities is always hard

I remember many workshops I facilitated where the mood was open and friendly until I invited the participants to set priorities in the ‘big cloud’ of needs and wishes postit-ed on the wall. At this crucial moment, two distinct group behaviours would occur:

  1. All participants would turn their heads at the ‘boss int the room’, because after all that’s her/his responsibility,
  2. or every participant would get ready to defend his stake.

Funnily, 90% of the identified scope would in both cases be marked as ‘absolut priority’. As a process moderator, if you reach the consensus that “everything is absolutely needed”, well … you failed.

Yet the goal was simple: no two things should have equal priority. But the trick is that this is almost impossible to reach through group discussions. A more reasonable goal for prioritization in group is to define a pyramid of priorities.

I’ve come up with a little method to reach that pyramid of priorities – even with challenging groups of participants – and guess what? it borrows from algorithmic: roughly halving a set is a lot easier than ordering it absolutely. And halving again is easy …

Solution: build iteratively a pyramid of priorities

Split. Ask the group of participants to split the set of things in two subsets of equal size: the important things, and the more important things. Crucial here: never speak of less or not important things, you might hurt feelings.

Split again. Then focus on the higher priority set – the set of more important things – and ask participants to identify within it the very important things, again halving the set in two subsets of equal size. Iterate again and identify the most important things from the very important ones, the super-absolutely important ones, … slowly building the pyramid of priorities, bottom-up.

Yes, in every iteration there can still be quite some discussions and negotiations, but every iteration ends with an agreement, which is a firm step towards your goal: a common agreement on priorities.

It helps to present it to the group as a clear challenge with clear rules and to clearly timebox every iteration, it will get participants to switch to “game mode” and perform the task with open minds. Also don’t explain to them that the goal of the exercise is to build a pyramid, because everyone will merely focus on his top thing. Simply tell them that “now has come the time to work a bit on priorities” and launch the first halving iteration.

That little prioritization method has done marvels in uneasy group settings. I hope it will help you too.

Tags: , ,

Drupal Dev Days 2015 wrap up

Last week, I was at Drupal Dev Days in Montpellier with a few other Liipers. It was, as often is with such conferences in the Drupal community, greatly encouraging to see the passion and effort of the many Drupal developers there.

Throughout the week, hundreds of people were working on different projects in the “sprints” (as such code-marathons are called in the Drupal community). Drupal 8 core was (unsurprisingly) the biggest group, but there were many other efforts related to Drupal 8. I was primary involved in the Rules for Drupal 8 effort, which was a fairly large group. We managed to get quite a few issues solved, and the road to a user interface for Rules in Drupal 8 was begun, which is one of the biggest outstanding issues.

It was challenging work, at times, but there was a good mood in the group, and the D8rules team were really great at helping beginners getting started, so many thanks to them for that.

I was unfortunately forced to forgo the conference part of the event due to illness, but I hear it was great. In total, I think the organisers of DDD did a great job – especially with the food. So thanks to them as well. See you in the issue queues.

This blog is now faster than ever

After we changed silently to using WordPress a few weeks ago for this blog (from the ageing Flux CMS software), we now also upgraded the server software to the latest and greatest versions. We finally use HHVM 3.6, nginx with SPDY 3.1 support, deliver everything in SSL only (but of course redirect from port 80), updated our certificate to use SHA256, disabled all “known-as-weak” ciphers and protocols (sorry IE 6 users), do OCSP Stapling and even send an HSTS header for being extra secure. We also switched to a server not on the edge of the continent anymore and deliver it additionally via IPv6.

With all that, this site should be faster and more secure than ever. Enjoy!

(We also applied the SSL/SPDY settings to, so you may enjoy a better experience there as well)

Tags: , ,