An opensource Drupal theme for the Swiss Confederation

After having contributed to the official styleguide of the Swiss Federal Government and having implemented it on a couple of websites, we decided to go further and bring these styleguide into a theme for Drupal, a well-known, pluripotent and robust CMS we implement regularly at Liip.

bundrupal-screenshot

Continue reading about An opensource Drupal theme for the Swiss Confederation

Tags: , , ,

A quick look on the current state of Drupal 8 (ecosystem)

Eight months ago Drupal 8.0.0 was released. Exciting news for drupalists. Since then comparing D8’s features to its predecessor is a topic in daily business. «Can drupal 8 do what we can do now with 7 today?”. After playing around with D8 i get the feeling some crucial features are missing. Dries invited people to tell ”why we not use or migrate to drupal 8” – and got a clear answer: A majority of drupalist (60%) are waiting for certain modules. So the follow up question would be what are these modules.

Continue reading about A quick look on the current state of Drupal 8 (ecosystem)

Tags: , , ,

Mobile apps – Our 3 best advice for your success

Everyone wants a mobile app that people will own, love and use every day. Before you jump in, ask yourself, and your team, these 3 basic questions to avoid the most common mistakes. This is our guide to help you focus on your strategy and make sure that you invest in a mobile app effective for your business.

1 – What is your objective? – Strategize and test

Do you want a mobile app, because during a meeting, the CEO/CMO/Head of Marketing or whoever proposes ideas you have to follow said ‘we should have one’?
Or because a mobile app seems to be a symbol of innovative, modern or digital enterprises, you want one? Maybe because an app is the symbol of your enterprise taking on the digital turn, you need one?
It is time to rethink.
You should not ‘decide’ to have a mobile app. A mobile app should not be a ‘one shot’, it should be part of a marketing mix, which means, it belongs to a strategy.

Start by focusing on the needs of your business and identify the blockers in the customers’ journey. Ask yourself, what added-value would this app offer your customers. If it is a mere duplication of the content of your website, you should not start developing one.
An app needs a user centric design or is meant to fail. Make sure that the objectives of your mobile app are as clearly as possible defined. Skipping this step is taking the risk of developing something useless and/or having to modify it afterwards.

Keep in mind that the further you are in the project, the more expensive it is to modify. Investing time at the beginning of a project to strategize or, in the best scenario, even test with real users the first wireframes is not wasted time.

2 – Who and where are your customers?

Your app will be effective at its best if it answers your customers need. It is essential to know them and their behavior and where you find them. Then, you will maximise your targeting.

If your product or service uses a specific feature available on smartphones, for instance a live positioning system, like Uber, you will obviously launch it via an app as it will provide a better user experience. However, you should coordinate your app launch with a web strategy.

Advertisement on the web will allow you various forms of visibility (SEO/SMO) only partially available for mobile apps. Google recently started to display apps to download as search results, but only via searches carried out on smartphones.

If your product or service is not specifically based on an app and could be launched on the web, you should prioritise the web. The web allows broader forms of advertising (SEO/SMO) and to reach a wider public.

3 – What is your domain?

We identified five main domains that apps fall into and five inspiring examples:

  • A business app addressing a daily issue: for instance the app Houston which allows bus drivers to not only communicate with each other but also with the central communication system (as it is an internal app, it is not available to the public),
  • An app for “grand public” addressing a daily life issue: for instance FairtiQ, allowing to easily buy tickets,
  • An app for all channels : like an app for UEFA.com, providing push infos and highlights,
  • A m-commerce app: like QoQa,
  • An app designed to increase customer engagement and loyalty : Politbox is allowing live content creation during television broadcast, linking polls participants to TV speakers,
  • A game: like Patchie, the fun therapy app for children suffering from cystic fibrosis.

Ask for advices
While you are in the process of deciding to invest in an app, do not hesitate to ask for professional advices. A simple strategy workshop might help you precise your project, objectives and target. When you start the development with an agency, it should be as clearly defined as possible. Investing in a few hours of consulting will bring you valuable targeted advices.

 

More information about apps at Liip.

Written together with Thomas Botton, our Product Owner specialized in the development of mobile applications. Contact him: Thomas.Botton (at) liip.ch ! We are happy providing you the advices you need for your business!

Tags: , , , ,

Personal report about Drupal Developer Days Milano 2016

DDD is mostly for – surprise! – Drupal developers. This year it took place between 21 and 26 of June in Milan. People were on code sprints all week long and on Thursday, Friday and Saturday there were sessions and workshops as well.

I went to 2 sessions. The keynote of Bojan Živanović was about building reusable php libraries. Bojan is the architect behind Drupal Commerce 2 which is a prominent example of adopting the “leave the Drupal island” principle. They are not only advocating the usage of external solutions in Drupal but also creating libraries that are usable outside Drupal.

The session of Major Zsófi about organizing Drupal events could not have come from a more authentic source. She shared her experience about the practical aspects of building a community and the importance of providing coffee.

All session recordings are or will be available online.

I attended three workshops. A really excellent one by Florian Loretan was about the trending search solution, elasticsearch. Pieter Frenssen had a workshop about Automated testing in Drupal 8. For me this proved to be the most valuable one since I could not keep up with the changes in this field since Drupal 7 and I need it in my contrib work. All my respects to Pieter who was able to present for 3.5 hours in a way that noone fell asleep even though we were just after lunch.

The third workshop I attended was my own 2 hours workshop about Caching in Drupal 8. I learnt a lot about this important topic during preparation and since only around one person left the room it might have been useful for the audience as well.

In the sprint room I joined the Commerce team. The team seemed to have been cursed. A laptop was stolen from the sprint site on Wednesday. Then on Thrusday night Bojan’s MacBook got also stolen from a restaurant with days of uncommitted work. Fortunately, with the effective help of the organizers (which among others included providing the victims a spare laptop and taking them to the police to file a report) they could participate in the sprints only with a minimal amount of delay. As a result we could finish several issues in the Commerce, Commerce Migrate, Token and Address modules.

Sightseeing with drupalists

Sightseeing with drupalists

But the most important part of DDD was the social aspects. I met old friends and got to know new interesting people. Wednesday evening there was a quantitywise challenging dinner for speakers. On other nights we visited several parts of the beautiful city of Milano. Huge thanks to all the organisers, you did an amazing job! Hope to see you next year!

Tags:

Generator for Google Tag Manager

In the past two years, tag management evolved and became the leading technology used to manage tracking (and more) on the web. Meanwhile Google Tag Manager has established itself as a key player in the field of tag management.

While tag management empowers online marketers to do “powerful things”, it also adds a layer of complexity to their practice of web analytics.

For the marketers who have never setup tag management, the new concepts are repelling.
For the ones who have done it before, there is still no guarantee of quality.
For the ones who have done it more than a couple of times, most of the “clicking-through” of a container can feel repetitive.

Many reasons to come up with a boilerpate container for Google Tag Manager. We first used it internally for client work, and soon decided to share with the community in the form of a container generator.

Continue reading about Generator for Google Tag Manager

Tags: ,

Let’s debug in Drupal 8 !

It has been nearly 7 months since Drupal 8 first release and as a developer, I am still in the learning process. It can be hard sometimes to know what is going wrong with your code and how to solve it. I will tell you about few things to know on how to develop and debug Drupal 8 projects and continue learning, learning and learning !

Disabling cache

First of all, to avoid having a crazy terminal with thousands of drupal cr hits, you can disable Drupal caching during development. You need to copy and rename sites/example.settings.local.php file to sites/default/settings.local.php. Then uncomment/update some values:

  • uncomment this line to enable the “null cache service”:
  • uncomment these lines to disable CSS/JS aggregation:
  • uncomment these lines to disable the render cache and the dynamic page cache:
  • you can allow test modules and themes to be installed if needed with:

To include this file as part of Drupal’s settings file, open sites/default/settings.php file and uncomment these lines:

Then, to disable Twig caching, open sites/development.services.yml file and add the following settings:

Finally, rebuild the Drupal cache and it is done !

Continue reading about Let’s debug in Drupal 8 !

Tags: , ,

A recommender system for Slack with Pandas & Flask

Recommender systems have been a pet peeve of me for a long time, and recently I thought why not use these things to make my life easier at liip. We have a great community within the company, where most of our communication takes place on Slack. To the people born before 1990: Slack is something like irc channels only that you use it for your company and try to replace Email communication with it. (It is a quite debated topic if it is a good idea to replace Email with Slack)

So at liip we have a slack channel for everything, for #machine-learning (for topics related to machine learning), for #zh-staff (where Zürich staff announcments are made), for #lambda (my team slack channel) and so on. Everybody can create a Slack channel, invite people, and discuss interactively there. What I always found a little bit hard was «How do I know which channels to join?», since we have over 700 of those nowadays.

Bildschirmfoto 2016-06-16 um 11.34.12

Wouldn’t it be cool if I had a tool that tells me, well if you like machine-learning why don’t you join our #bi (Business Intelligence) channel? Since Slack does not have this built in, I thought lets build it and show you guys how to integrate the Slack-API, Pandas (a multipurpose data scientist tool), Flask (a tiny python web server) and Heroku (a place to host your apps).

Continue reading about A recommender system for Slack with Pandas & Flask

Tags: , , , , ,

Testing in the Cloud – Using Bamboo with Amazon AWS

Bamboo is the continous integration service by Atlassian, the company owning the code management service Bitbucket (as well as the Jira issue tracker and Confluence wiki). Bamboo can run test suites and build any kind of artefact like generated documentation or installable packages. It integrates with Amazon Web Services, allowing to spin up EC2 instances as needed. So far, I mostly worked with travis-ci, because of open source projects I maintain on github.com. What Bamboo does really better than travis-ci – besides supporting other code repository SaaS than github.com – is the dynamic allocation of your own EC2 instances. Bamboo is just the manager, and can be configured to spin up EC2 instances when the number of tests to run increases. This keeps the costs at Amazon to a minimum while offering large capabilities to run tests when needed.

Besides licensing a Bamboo CI server to run yourself, you can also use it as a cloud service. I recently helped set up tests with this. Unfortunately, the documentation is really worse than expected, and the integration hampered by really silly mistakes that we had to dig up in discussion boards and on stackoverflow. This blog post contains a few notes if you want to do the same that hopefully will help others facing the same challenges. A word of caution: we did most of this in March and April 2016 – things might get fixed or change over time…

Continue reading about Testing in the Cloud – Using Bamboo with Amazon AWS

Tags: , , ,

Order fulfillment with Swiss Post and YellowCube

Setting the stage

We live in a time where more and more goods are purchased online. May it be your airline ticket or the diapers for your newborn, many things are often cheaper and more conveniently purchased online. As comfortable it is for the customer buying things this way, as challenging it can be for the seller. They need to have an online presence that is easy to use and need to have all goods in stock to sell and send them quickly.

This means that selling physical products requires sufficient storage space on-site, people that handle picking, packing and shipping and someone that handles returned goods. All this factors can sum up to a costly venture, especially when you don’t have any infrastructure from other sales channels already.

Architekture PostLogistics YellowCube Connector

The PHP-YellowCube interface is part of all YellowCube extensions for PHP based web stores

What is order fulfillment?

This is where YellowCube comes in handy. YellowCube is a fulfillment service offered and run by Swiss Post. But what is a fulfillment service anyway? In the case of YellowCube it means everything to do with the storing and shipping of the products you sell on your store. This means receiving and storing of the products, handling of the inventory, picking, packing, shipping and handling of returns.

How to implement it into your web shop?

So far so good, but how does this translate into real life? Liip has, in close collaboration with Swiss Post, developed a PHP-YellowCube-SDK and also the integration for Magento and Drupal web shops. The PHP-YellowCube interface provides an object-oriented wrapper to the SOAP based interface provided by Swiss Post. The code is readily available on Github. Please feel free to contribute to the PHP-YellowCube-SDK, as well as the Magento extension or the Drupal extension.

Please explain…

Now that we know about the SDK, we need to know how the basic process works. I want to show you what needs to happen in order to implement YellowCube successfully into a web shop. The process is agnostic to a certain integration, so I won’t go into details how it is integrated in a specific shop extension. I will explain the basic process, which applies to all web shop integrations in the same manner (more or less).

Continue reading about Order fulfillment with Swiss Post and YellowCube

Tags: , , , ,

What’s your twitter mood?

The idea

  • Analyze tweets of a user for being positive, negative or neutral using machine learning techniques
  • Show how the mood of your tweets change over time

Why?

  • Fun way to experiment with Sentiment Analysis
  • Experiment with language detection

How

Gathering data

We analyzed tweets from Switzerland, England, and Brazil. We put extra care to make sure our model can do well against Swiss-German text.

Make awesome model in node

We created custom fast Natural Language Processor in node.js. Why node? It has very good run-time when dealing with lots and lots of strings. We used unsupervised machine learning techniques to teach our model the Swiss German and English writing model. Once we had a working model, we added couple other models using Bayesian inference to create an ensemble https://en.wikipedia.org/wiki/Ensemble_learning

Make nice front-end

portugese sentiment analysys

Once we got our server working we thought about adding some better UI. We asked our User Experience specialist Laura to suggest improvements. See for yourself:

mood-detector-graph1

Problems and learnings

Language detection is needed to use the right sentiment model

Design model for Swiss-German is especially hard: the language incorporates German, with a lot of French and Italian words. Also spelling of words changes from canton to canton. If we add that most people when writing tweets are forced to use abbreviation, we get the whole picture of the challenge.

An accurate model needs a lot of data

In order to get a good result we needed to incorporate data from various people and different nationalities. The good thing is that the more you use our model the more accurate it gets.

Training data is available

One of the problems is that for humans is hard to understand the irony or sarcasm. Especially in short tweets. So it’s also hard for a machine.

If you want to play with our results in this machine learning experiment:

http://liip.to/twittersentiment

 

I would like to thanks Andrey Poplavskiy for his “css love”, and Adrian Philipp for his huge contribution and encouragement towards this project.