Discussing ‘open design’ at iadlab15

Andy and I lately got invited to host a ‘lab session’ at the iadlab15 interaction design conference in Bern. We proposed to animate a discussion on a quite abstract topic: open design.

What the true meaning of our topic was, we didn’t know by the time we proposed it. Yet we had a strong feeling that the ‘open’ culture wasn’t as strong in the design scene as it is in the tech scene and wanted to discuss that assumption, openly.

We thus introduced the open design notion with a big question mark: opensource we know since ages, opendata is now proving its value to the world, what about open design?

It turned out the discussions went fantastically well and we got thanked many times for having brought the topic onto the table.

Even more astonishing to us, what we encountered is a generational gap: digital-native creatives showed interest and seem to integrate open practices whereas their elders tended to disregard – if not despise – them.

Continue reading about Discussing ‘open design’ at iadlab15

Tags: ,

Writing iOS Layout Constraints The Easy Way

Coming from a web-development background, native iOS development always feels a bit clunky to me when it comes to creating the layouts.

Yes, there is the Interface Builder and it is a great tool, but sometimes,
things get more generic and building the views and layouts can be more efficiently done by hand.

Except – layout constraints! Writing layout constraints can be tedious work.

Example, making an element the half of the width of its parent element in objective-c:

It is not much better in C# with Xamarin either:

But behold! There is our ConstraintHelper!

The ConstraintHelper is a small C# library to help with the layout constraints and it brings less common concepts like Method Chaining to the layout constraints.

ConstraintHelper is Open Source and can be forked from GitHub.

Tags: , , , ,

Playing well with others

I was invited to speak at the T3DD15, the TYPO3 Developer Days 2015, on the topic of community collaboration. Indeed my presence there was also made happen because there was a big interest both from the TYPO3 CMS as well as from Neos CMS to explore adopting Symfony. Another topic was adopting of PHPCR, again both TYPO3 and Neos CMS expressed an interest in this topic, though not as urgently as adopting Symfony. In fact the Symfony adoption is already under way with TYPO3 CMS developers having already integrated the Console component and looking towards the Routing component next. Neos CMS has long ago adopted the Yaml component and are looking towards the Process component next. Indeed especially Neos CMS might be beginning to adopt quite a few more Symfony, and other components. They are even willing to explore going to Symfony full stack, though it would need to be made compatible with their unique Proxy based AOP solution that enables them to effectively overload the “new” operator.

Anyway, back to the title of this blog post. I did in fact choose the same title for my talk in which I tried to give some considerations about legal but more importantly community topics related to working with third party projects. I tried to make it clear that there valid points for choosing to not adopt third party solutions in every case. I also tried to address a bit how to get people from other communities more involved into the TYPO3 and Neos CMS communities. Overall I must say I am still not quite as fluent with soft topic talks compared to hard topic, ie. code related, talks. I still do not know how much content to put on the slides and how much I can free style. I also still have a hard time estimating how long my talk will last. I guess I will get better with practice.

It was also an interesting time to give this talk, as TYPO3 and Neos CMS only recently decided to part ways. It is not clear if this will be the last joint conference. During my talk I wanted to make things a bit more concrete, especially when discussing points about what might prevent people from collaborating with TYPO3 and Neos CMS. It felt a bit strange as I was mentioning issues with each of the projects. I was worried that I might set of a flamewar, but everything seemed to stay quite civil :)

At any rate, I spend two great days with lots of interesting discussions. The location was awesome, essentially right in the Nürnburg castle, with lots of rooms for people to gather to discuss and hack. Aside from the Symfony and PHPCR related discussions I also entered into a session on diversity as well as on CQRS. Overall it was a very productive environment and a fun exchange with lots of old and new faces!

Tags: , , ,

“Time for Coffee!” open sourced!

The public transport app “Time for Coffee!”, made by some Liipers, was finally published at Github under the MIT License. Furthermore the Apple Watch app for it was also released last week, just in time for the watch release in Switzerland this Friday.

Read more about it at the Time for Coffee! blog post.

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.

Rails Girls Summer of Code

The Rails Girls Summer of Code is a global initiative that provides 3-month stipends to women to work full-time on an Open Source project of their choice. The students work in teams of two from July 1st to September 30th, aided by local coaches; applications are still open until April 14th, 23:59 UTC (that’s tomorrow!) and anyone can apply if they fulfil the requirements.

The program is now in its third year and has successfully collected enough money to fund 10 student teams for 2015, thanks to wonderful sponsors (one of which is Liip!) and individuals, through a crowd funding campaign  For the first time in RGSoC’s history, we are attempting to fund an 11th team. The crowd funding campaign is still open, and we’d love to have your support  Follow us on twitter or check out our blog to stay up to date.

Help us foster diversity in Open Source!


Swisscom open-sources CleanerVersion

An interesting Django package was recently open-sourced by Swisscom. Manuel Jeckelmann wrote an interesting article about how the process of open-sourcing this worked at Swisscom. In the context of work on a security data warehouse at Swisscom, Liip has also worked on developing this package. I’ll briefly describe here what’s special about this package and how it can be used.

CleanerVersion lets you maintain a history of model instances and their relations. There are a number of packages that can be used for versioning in Django. What makes this one different?

Continue reading about Swisscom open-sources CleanerVersion


Improving the User Experience of the Symfony CMF Backend

Contrary to frontend experience, CMS backend experience is rarely adapted to the needs and tasks of its real users: the few people who publish and administrate the site. Standard backend themes often remain untouched after installation. The most common adaptations are the addition of menus and shortcuts, often due to addition of functionalities to the CMS.

We (David Buchmann and Benoit Pointet) spent some time to look into the backend we have for the liip.ch website, built with the Symfony CMF. We ran user testing sessions to collect our website’s editors painpoints, a community survey to collect the pain points of other CMF users, then did a lot of small tweaks both to the public bundles and in liip.ch specific code, and identified and documented improvements that needed more development work.

Continue reading about Improving the User Experience of the Symfony CMF Backend

Tags: ,

Webnesday St. Gallen

Before I started working for Liip I did my apprenticeship in St. Gallen. It was not until I started working in Zürich, that I discovered, companies here liked sharing knowledge with each other. This concept was new to me and I thought it was a great idea. There are plenty of events in Zürich to learn from like-minded people. There’s Webtuesday, JSZurich and Coders Only, just to name a few.

Once I started working in St. Gallen again, I was eager to bring this spirit with me and start such an event in St. Gallen.

People from St. Gallen seemed to like the idea. Peter joined the Webnesday Team and Roman offered us the Namics St. Gallen office for the first Webnesday.

What is Webnesday?

Webnesday is an open forum, for web interested people from and around St. Gallen. It’s scheduled every 2 months. Every odd Webnesday is a full talk between 30 and 45 minutes. Every even Webnesday consists of a few Lightning talks between 10 and 15 minutes.

On the first Webnesday, I held a talk about AngularJS. It was a success. About 21 people showed up and asked interesting questions. The slides can be found on Speakerdeck.

When is the next Webnesday?

The next Webnesday will be held on the 5. November. It will take place at Haufe-Umantis’ office in St. Gallen. Since it’s an even Webnesday, we will do Lightning talks.

You can sign up here for the next Webnesday.

We are still looking for additional speakers. If you discovered something cool that you would like to share with the crowd, please contact us.

Tags: , , , , ,

getting to know Cassandra

We did a small two person hackday to get to know Cassandra a bit. Lukas already learned a bit about Cassandra at Berlin Buzzwords but it was time to get some hands on experience to better understand how Cassandra would work out in a real client project. Our agenda for the day was however essentially: get it to run, see how to get it connected with PHP and then import some data and do some queries.

Brief summary

But first a very brief summary of what Cassandra is about:

Getting started

To get up and running we tried different approaches. One was just to download one of the VMs provided by DataStax (the main company driving Cassandra). That sort of works but the VM operating system is not really nicely configured. But it was at least enough to run a first few queries we found in the Cassandra wiki.

Now we wanted to install the PDO driver for Cassandra. So we setup a new VM and installed Cassandra. Compiling the PDO driver proofed to be a bit more complicated. We messed around for a while until Henrik saved us by uploading debian packages for us compatible for Ubuntu 14.04 64bit:

Playing around

We then started playing a bit. We looked for some interesting data sources and found this blog post listing a bunch of options for us, we ended up going with a dump of reddit posts. Not a particularly challenging data set for Cassandra, but enough to get a feel for things. Cassandra provides a PostgreSQL insipired variant of COPY to import CSVs. Using the following table definition, we started writing some queries against the dataset.

We quickly realized that for index supported queries, one needs to define composite key indexes. With a bit of time we got it to work.

We then played with a counter, but realized that counters cannot be in a composite index. Finally we briefly looked at their “transactions”, which however require every query essentially specify a condition for concurrency.

Pros and cons

  • Write speed
  • High availability due to decentralisation, no master node
  • Linearly scalable without downtime
  • Consistency highly controllable, use when needed
  • Ad-hoc queries possible via SQL-ish language (*)
  • Index supported queries need to be planned in advance, may require denormalization to support different index supported queries in the same data-set
  • Not all queries possible (very limited aggregation capabilities), so in practice other systems might need to be attached for searching

Tags: ,