29+1.2 impressions from MageUnconference in Cologne 2017

On the 4th and 5th of March the 3rd MageUnconference in Germany took place. Carmen, Sonja, Fabian, Rico, and Tobias did a great job organizing this awesome event again, this time in a new city (the first and second Unconference took place in Berlin). Who wonders what an Unconference is, read this FAQ about MageUnconference which I posted after the first one.

Just as with the Unconference last year, I missed the preparty (which meant this time I nearly missed to see Jisse), however, I had a fantastic wedding anniversary dinner with my lovely husband instead 🙂 Going to Cologne in the morning means getting up early: In my case the alarm went off at 3:15am, a time where some MageUnconferencers (new word!) were still partying.


For those who missed the Unconference (due to sleeping or or not attending), here are my impressions:

First impression after leaving the train at Cologne main station: Cologne Cathedral. Huge. Yep, just like I imagined it.

157,38m high so it’s 22,38m higher than our St. Stephens Cathedral in Vienna (136 m). You won, Cologne Cathedral.

Kölner Dom. #mageuc17 #latergram #cologne #köln

A post shared by Anna Völkl (@rescueann) on

As I had some time in the morning left, I decided to walk to the Unconference location where I got a second impression about Cologne:

Seems they also have them in Cologe (the best english translation is probably “do-gooder” or “good mind”).

Irgendwo zwischen Kölner Dom und #mageuc17 #köln #cologne #gutmensch

A post shared by Anna Völkl (@rescueann) on

Third impression: Walking by the Motel One which was full of MageUnconferencers! I didn’t take a picture as I was busy saying ‘Good morning’ to everyone.

Fourth impression (right after checkin and saying Hi to a lot of people): The place nearly everyone took a picture of during the weekend: MediaPark. The location of MageUnconference 2017.

Mediapark. Der meist-fotografierteste Ausblick der MageUnconferene. #mageuc17 #latergram #cologne

A post shared by Anna Völkl (@rescueann) on

Fifth impression: Kicking Off MageUnconference!

MageUnconference 2017! #mageuc17 #realmagento #cologne

A post shared by Anna Völkl (@rescueann) on

Sixth impression: How to calm a group of people down?! Use the power of Schweigefuchs (“silent fox”)! I did not take a picture of Sonja, but here is a nice video of the Schweigefuchs used in the German Bundestag:

Sixth and a half impression (even though this should deserve a full impression but I added this picture later and I don’t want to rename all impressions): Everyone attending the Unconference for the 3rd time got a certificate. REALLY AWESOME, GUYS! Thanks a lot!

A certificate for all 3-timers at MageUnconference! #mageuc17

A post shared by Anna Völkl (@rescueann) on

Seventh impression: Presenting topics (which basically means half of the people are in the front and half of the people are still stitting on their seats).

Explaining topics at #mageuc17

A post shared by Anna Völkl (@rescueann) on

Eight impression: VOTING (which basically means: too many people trying to glue their “Klebchen” all at once on various sheets of paper).

Voting time at #mageuc17

A post shared by Anna Völkl (@rescueann) on

Ninth and tenth impression: Rico and Fabian collecting the topics with the most votes to make an agenda out of it.

Collecting the topics with the most votes #mageuc17 #latergram #cologne

A post shared by Anna Völkl (@rescueann) on

Agenda on the fly #mageuc17

A post shared by Anna Völkl (@rescueann) on

Eleventh impression: Being overwhelmed by so many awesome topics on the agenda. I WANT TO SEE ALL OF THEM.

If there is one drawback at an Unconference, then it’s this one: If you attend one session, you will miss 2, 3, 4 others.

Twelvth impression (‘twelvth’ as a written word looks weird): Ahhh! (read that as a sound of relieve/victory): FIRST SESSION about the Future of Magento with Andreas von Studnitz (who has the same wedding date as I do but we’re not married to each other) and Sylvain in Room Hello Kitty (impression 12.2). Main finding from this session for me: Quite some people still build (new) Magento 1 shops and according to Max Magento 1 has more issues than Magento 2 (but the Magento 1 issues aren’t public).

Thirteenth impression: Second session: “Dependendy Injection 101” with Stephan Hochdörfer. I just went there to see Stephan live after following him on Twitter for a while 😉 It was a really interesting and entertaining session.

Thirteen-and-a-third impression: AOE people hacking behind me:

Fourteenth impression: LUNCH! Nothing more than it was really good 🙂

Fifteenth impression: Checking in at Motel One and YESS I GOT ROOM NUMBER 404!

Sixteenth impression: Infos about the Magento 2 Community Engineering with Max. Not only did the new Community Engineering team an amazing job in February, also having Magento community members reviewing and merging pull requests is one of Magentos biggest achievements in the last years.

Seventeenth impression: The perfect payment module. I’ve been ranting so much about various payment modules in the past that I had to go there and share my constructive ideas. Good luck, Tobias, with creating the perfect module! 🙂

Eighteenth impression: First day over. Back to the hotel and trying to get a quick shower and nap (I did not manage to get a nap but hey, who needs sleep anyway).

Nineteenth, nineteenth-and-a-fifth, twentieth and twentyfirst impression: After-Party! We had Kölsch (lots of – actually you need to have lots of Kölsch because the glasses are so small) and a very tasty dinner! And we partied until the morning. (The 0.2 impression was the nice passage with green light on the way to the After-Party, someone took a picture of this.)

Twentysecond impression: Is it really 9am already? (Luckily there’s no picture for this impression).

Twentythird impression: Presenting topics again and Fabian is just the coolest:

Twentyfourth impression: This after-party pack at the women’s bathroom. The organizers took care of everything!

After-party pack at MageUnconference #mageuc17

A post shared by Anna Völkl (@rescueann) on

Twentyfifth impression: Very cool wake-up session on ‘Help, my shop is hacked! What now?’ with Peter Jaap!

Twentysixth impression: Giving an off-topic session about first aid and telling some stories from 12 years at the emergency service. Thank you David for being my patient who I put into recovery position, even though you moved when I told you to be unconscious 😛

Twentyseventh impression: Oleksii Korshenko presenting how to contribute to Magento 2!

Twentyeighth impression: Hallway talk. I missed the last sessions as it was too interesting to hang out with people in front of the rooms 😉

Twentyninth impression: We doubled the amount of Austrians at the MageUnconference! Actually we did this every year: At MageUnconference #1 I was the only one from Austria. For MageUnconference #2 Matthias joined me. At the third MageUnconference this year Walter and Roman joined as well! This means: We have to be back with 8 Austrians at MageUnconference 2018 😉

Edit: Fabian made a remark on Twitter regarding the number of Austrians:

The answer is easy: As there are about 8.6 mio. Austrians currently we won’t have enough Austrians after 23 years (2^23 = 8.3 mio). So in 20 years from now we will run out of Austrians to join MageUnconference (good luck with organizing MageUnconference for 8 mio. Austrians though) 😛

Magento CE 2.1.3 database diagram

About a year ago I released the Magento CE database diagram and since then, also with the increasing popularity of Magento 2, there have been requests for a Magento 2 database diagram.

This is the database diagram of a fresh CE 2.1.3 installation.

Some statistics (because I love numbers):

  • Magento CE 2.1.3 consists of 315 tables (that’s 18 tables less compared to Magento CE
  • 1 table starts with core_* (compared to 19 tables in M1)
  • 38 tables start with sales_* (compared to 47 tables in M1)
  • 76 tables start with catalog_* (compared to 84 tables in M1)

What’s new?

These are the changes I found so far:


  • core_resource can was renamed to setup_module
  • the core_* prefix was removed: core_layout_link is now layout_link, core_layout_update is now layout_update
  • sales_flat_*/sales_* was removed as prefix. For example sales_flat_order is now sales_order.
  • setup_module (former core_resource)
  • authorization_role (former admin_role)
  • authorization_rule (former admin_rule)

New tables:

  • admin_system_messages
  • customer_grid_flat
  • design_change
  • design_config_grid_flat
  • eav_attribute_option_swatch
  • googleoptimizer_code
  • password_reset_request_event (part of the Security module)
  • quote_id_mask
  • reporting_* tables (for NewRelic Reporting)
  • sales_sequence_meta
  • sales_sequence_profile
  • sequence_order_0 (SalesSequence module manages sequences for next system entities and flows for order, invoice, shipment and credit memos)
  • sequence_order_1
  • sequence_invoice_0
  • sequence_invoice_1
  • sequence_shipment_0
  • sequence_shipment_0
  • sequence_creditmemo_0
  • sequence_creditmemo_1
  • theme
  • theme_file
  • ui_bookmark

Removed (=tables you won’t find in the M2 database diagram any more):

  • admin_assert
  • All api_* tables
  • core_email_queue
  • core_email_queue_recipients
  • permission_block
  • permission_variable
  • All tag_* tables (no more Mage_Tag!)
  • wee_discount

Database diagram

Here’s the DB diagram of a fresh Magento Community Edition 2.1.3.

I tried to keep at least the bigger parts of the DB diagram similar to the version of the CE db diagram to make it easier to understand what has changed.

The big yellow part on the left are the catalog tables, the big blue part on the right are the sales tables. Inbetween them there are the EAV tables and core tables. The smaller modules are on the bottom part of the db diagram.

If you like it, go an upvote my answer(s) on Magento Stackexchange:

Magento Community Edition 2.1.3 database diagram
Magento Community Edition 2.1.3 database diagram


Inofficial Magento 2 Roadmap

As there is no official Magento 2 Roadmap (yet), I initiated an official inofficial Magento 2 Roadmap. The idea is to have a single point where you can find new stuff that is planned for Magento 2. This should make it easier for everyone of us dealing with Magento 2 to plan ahead.

You can find it at http://mage2roadmap.com

Contributions in form of Pull Requests are highly welcome to keep this list up to date. If you add a new item to the roadmap list, please provide a link to the source as well. Thanks!

Magento Report: Find out number of orders per day

Today I was curious to find out about the days where most of the orders were placed.

If you want to find out about the same, use this SQL query:

SELECT COUNT(*) as orders_per_day, date(created_at) as day
FROM sales_flat_order
GROUP BY date(created_at)
ORDER BY orders_per_day DESC

See also: http://magento.stackexchange.com/questions/120854/report-showing-the-days-with-the-most-orders-per-day/120855#120855

Upgrade to Ubuntu 16.04 and bringing Magento 2 back to life

I upgraded from Ubuntu 14.04 to Ubuntu 16.04 lately. This brings the joy of PHP 7.0.4 and Apache 2.4. As I run Magento 2 locally for testing purposes, I found it did not work anymore after the upgrade.

Actually I had 3 problems:

1.) Missing PHP extensions

I decided to start a new Magento 2.0.5 setup to check the requirements. From there I found out that I was missing some PHP extensions, so I installed them:

sudo apt-get install php-curl
sudo apt-get install php-intl
sudo apt-get install php-mbstring
sudo apt-get install php-zip

2.) MySQL

After reloading the Magento 2 front page, I got a strange SQL error on the fronted (sorry, I did not copy the error message). I found out that also MySQL workbench did not like to connect to my local MySQL server (“[ERROR] Native table ‘performance_schema’.’session_variables’ has the wrong structure” and some more). Somehow it seemed that also MySQL was not running, so I started and restarted MySQL and everything was fine again. Hm.

3.) Enable Apache 2.4 rewrites

The homepage came back on screen, but I was not able to open the admin login page or any other pages. I thought this would have been caused by a missing mod_rewrite, but this was in place.

Somehow I ended up on the devdocs where a solution for the Apache 2.4 rewrites was in place:

Just add the following piece to your 000-default.conf file:

sudo nano /etc/apache2/sites-available/000-default.conf
<Directory "/var/www/>
 AllowOverride All

Hope this helps anyone running into the same problems.

Oh, and btw: Make sure you run at least Magento 2.0.1 for PHP7 fun 🙂

The perfect Magento 2 setup for development

Please note: This article is work in progress!


I had the pleasure to attend MageUnconference again this year (thanks to Modulwerft – Simon Sprankel for the ticket btw!). As usual for an Unconference, we collected the topics for our daily programme in the morning. Out of some discussions I had with Matthias at the office regarding the easiest/best/most painless way to set up an environment for M2 module development, we decided to put this as a topic on the wall for voting and discussion with other attendees.

A few minutes and a lot of votes later, we’ve found ourselves in a packed room full of developers who wanted to hear and discuss with us about this topic as well.

Spoiler: You’re maybe not gonna find the perfect Magento 2 setup for module development in this article. This is a collection of things that can be useful for your setup and what we discussed during our session at MageUnconference.

Out of scope: This article is not about setting up a new project with Magento 2. I do only focus on the development of a single module here.


Various M2 module development methods

Seperate Repository

The first method I’d like to share here is the method of setting up a single repository for your new module: This can either be a local repository or a remote one on GitHub/Bitbucket.

Add this module to your composer.json just as any 3rd party module and you’re good to go.

    "require": { "avoelkl/mymodule": "*" },
    "repositories": [
            "type": "git",
            "url": "https://github.com/avoelkl/mymodule.git"


+ Easy way to start and set up

+ There’s only the need to add your module to composer.json, no additional registration/modification needed.


– You have to do a lot of git commits/push/pulls/composer updates for your changes to take effect

– You’ll generate a lot of unneccessary commits during development (especially if you’re new to M2 development and trying out some stuff)


Working in the vendor dir

This approach it pretty straight forward: Set up a new Git repository, add it to the composer.json and run composer update. You’ll find your module files in the vendor directory afterwards, where you can edit them.

While I personally do not prefer this method as it feels rather dirty to me, applying changes and developing directly in the vendor folder seems not to be so unusual among Magento developers present in the MageUnconference session.


+ no need to commit every change to test it


– It’s not very obvious where the extension development happens.

– When someone else/you decide to remove the vendor folder completely (which should not be a problem usually, as you can always get the recent packages via composer install/upadte), you will lose all your uncommitted changes.

At least composer warns you if you have got modified content in the vendor dir when running a “composer update” so you don’t lose your changes without confirming before.

Symlink to your module

Another easy way, which requires no Git repo at all to get started (but seriously, who wants that?) is to create a symlink in app/code to your module files outside the Magento folder structure.


You could also be interested in including a local repo via composer path https://getcomposer.org/doc/05-repositories.md#path

    "repositories": [
            "type": "path",
            "url": "../../avoelkl/mymodule",
            "options": {
                "symlink": false

Folder Structure

From Magento 1 we’re used to work with our own folder structures and symlink them later via modman file.

Most of the current M1 modules I know either have the `app/` folder directly in their extension repo or a `src/` folder above them:

Version 1:

  • app/ modman

Version 2:

  • src/
  • src/app
  • test
  • modman

It seems to me (from what I can see in the official Magento 2 sample modules) that such a folder structure is not the default somewhat suggested, I think this is not very flexible.

  • .git
  • Block/
  • etc/
  • Model/
  • Observer/
  • view/
  • registration.php
  • composer.json

Different Ways of Setups

Fabian Schmengler (@fschmengler)

Fabian explained his current structure during the session.
The folder structure looks like this:

/var/www/m2.local/MyExt <= this folder also contains the .git dir

registration.php & Subfolders


Daniel Falke (@flyingmana)


David Verholen (@david_verholen)


Max Pronko

Max wrote a Blogpost about how to develop a Magento 2 module with modman

Präsentation beim 15. Magento Stammtisch Wien

Beim 15. Magento Stammtisch in Wien habe ich eine modifzierte Form meines “Secure input and output handling” Talks präsentiert. Nachdem die Teilnehmer des Magento Stammtisches nicht nur Entwickler, sondern auch Projektmanager, Händler und Agenturen sind, habe ich ihn etwas weniger technisch gestaltet 🙂

Vierter MageStackDay am 15. und 16. Jänner 2016

MageStackDayNach zwei sehr erfolgreichen Online-Events und einer Pause im Herbst 2015 ist es im Jänner Zeit für eine neue Auflage des MageStackDays!

Am 15. und 16. Jänner treffen wir uns wieder online, um gemeinsam Fragen auf magento.stackexchange.com zu beantworten, zu schließen, zu verbessern, aufzuräumen und die Qualität dieser Plattform zu verbessern.

Abgesehen von der Plattform arbeiten wir derzeit an der neuen Version unserer Webseite, über die die Registrierung möglich sein wird.

Als nettes Extra gibt es MageStackDay sticker, die entweder persönlich bei den Organisatoren des MageStackDays erhältlich sind (Sander Mangel, Anna Völkl, David Manners) oder online via StickerMule bestellt werden können.

500 dieser wunderbaren Sticker, die wir weltweit verteilen, verdanken wir dem Sponsoring der CopeX GmbH!

Zur Unterhaltung und Informationsaustausch verwenden wir unsere MageStackday Slack Team. Bitte kontaktiert mich, wenn ihr eine Einladung für die Gruppe möchtet.