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.


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”).


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.


Fifth impression: Kicking Off MageUnconference!


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!


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).


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


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



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!


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 🙂

Updating PhpStorm Desktop/Launcher icon on Ubuntu

I keep forgetting how to edit my desktop entries after updating PhpStorm on my Ubuntu installation.

This is the file that needs to be edited: ~/.local/share/applications/jetbrains-phpstorm.desktop

Just update the paths for the Icon & Exec after the update:

cat ~/.local/share/applications/jetbrains-phpstorm.desktop
[Desktop Entry]
Exec=”/opt/PhpStorm-143.1184.87/bin/phpstorm.sh” %f
Comment=Develop with pleasure!


Windows 10: VPN settings not available & DNS problem

Update: Windows Update 1511 solved the problem with the non-accessible DNS settings. You might need to set the Standardgateway though:
VPN Connection > Properties > Network >  IPv4 > Properties > Advanced > IP-Settings
[X] Use default gateway for remote network


The Problem

The network settings window of my VPN adapter was not accessible. Means: It was there, not greyed out but clicking on it did not open the settings tab.

First stop(s):


The File

The first place to get rid of my problem after the first recommendation: Adjust stettings in this file:


Change the following settings:

IpPrioritizeRemote=1 => IpPrioritizeRemote=0
IpInterfaceMetric=0 => IpInterfaceMetric=1

I was looking for some fast fix but: Nothing changed. Enabled/disabled the connection: not better.


Run the PowerShell as Admin:

Check VPN connection:


Set SplitTunneling:

Set-VpnConnection -Name "YOURVPNNAME" -SplitTunneling $True

Again: nothing happened.

Enabled/disabled the connection again, nothing happened.

Back to the config file

I tried to set the DnsAddresses in there:


(note: these are not the real DNS settings)

as well as setting it via command prompt:

netsh int ip set address "YOURVPNNAME" gateway=

Disconnecting + Connecting again: no luck.


After some more research I found out it could also be a DNS issue. I ran “nslookup” form the command prompt and checked the gateway.
This showed my local gateway.

Getting closer?

IPv6 & Split tunneling

Some hints on that from the Microsoft forum:

No. 1:

This seems to be IPv6 related.
It keeps using my ISP’s IPv6 DNS server instead of my company’s (IPv4 only) DNS server.
If I disable IPv6 on my LAN network adapter, it starts working.

No. 2.:

Ok, it works, when SplitTunneling is disabled (Remote Gateway on) and IPv6 disabled.

I disabled SplitTunneling (again) and IPv6 on my WiFi and VPN. No luck.


Maybe these settings about help someone else resolving the issue. Some lucky users were able to resolve the problem after the very first step by editing the config file.

To be continued.

Creating the best small Web-App I can

I was requested to create one little form for my father-in-law who runs a online radio in his free time. The feature is called “Wunschbox” so basically an input form were the listeners of the radio can leave their request for a certain song. The admins of the radio should be provided with the list of incoming requests and mark them as “done” (=played on the radio). Sure, not a problem.

Right after creating the project in PHPStorm I wondered if I should just continue in basic PHP or use a cool and fancy framework for this. I love working with frameworks and as I work with Magento as daily business – which provides a big toolset – I wondered if there was something out there that would please my requirements for this small project. It would have taken me about one hour to hack these two pages together but I decided to ask that question on twitter and got some replies. My little journey started.

TL;DR: I was looking for good ways to create a small web-app. After trying Silex and Lumen I decided to go back to basic PHP and finally to TDD.

Looking for the better

I started googling and one of the first frameworks that popped up was Silex which was also recommended in the first replies on twitter.


Silex is a PHP micro framework based on Symfony2 Components. I knew Silex a bit from digging into Bolt CMS some weeks ago. Also the first replies on twitter recommended Silex. So I added it via composer and got started. After adding the Symfony Form Component as a new dependency to my repository it had about 19M in size. That felt just wrong for my little small web-app and would have been an overkill. Meanwhile some new Tweets about Lumen (which I didn’t know before) arrived and I decided to have a look at it, as the website seemed pretty promising.


Lumen is a PHP micro-framework by Laravel. It can also be installed quite easily via composer. You can easily create new projects via command line by calling lumen new projectname. That’s what I did and I found myself again in a project folder with 20MB. The structure looked good but I didn’t want to continue at this point. Again: It was way too much and too big.

The better: Keep it simple – back to basic PHP

Silex and Lumen are really cool Frameworks (as far as I can tell from testing them both for about 30 Min.). But both of them felt just way too big for my two small PHP pages. At this point I reminded myself about some basic principles and one of them was: Keep it simple & stupid. In no way both of these two frameworks which had about 20M each were simple enough for my need as I expected my small web-app to have a few Kilobyte of Code. So I started with the frontend and created the first form in basic HTML. After that, I went to bed.

I tweeted my findings: “Conclusion after 1h of trying Silex and Lumen (which are awesome btw!): I should stick to my own principles and keep it simple > Basic PHP”.


I woke up in the moring with a reply from Vinai on twitter (thanks for that!) who recommended also basic PHP plus TDD!

I didn’t think of creating this “app” in a TDD way, but the size of the project was just perfect for REAL TDD! So I set up phpunit for my two pages and wrote the first test(s) this morning. At this time I have 6 tests, 2 classes (one for the application + one test class) and that basic HTML form from last night. Nothing big, I know. But I’m really happy with it.

Thanks for the inspiration, Vinai!

There’s some garden work waiting to be done today but I will continue in the evening.

Why a blogpost?

I found the way of finding and deciding really interesting as well as the factors time and quality related to this.

“That’s cool, but you could have been done with that already”

This was my husbands quote when I told him I’ve set up tests for my small web-app this morning 🙂

Yeah, I know: I already spent way too much time with it. More than I would have initially needed. But I’m really happy with the current state, it’s pretty clean, straight, minimalistic and there were some interesting responses related to it.

Initial time thought to create this little web-app: 1h

Time to give Silex and Lumen a try and tweet about it: 1.25h
Setting up the project, phpunit and writing first tests: 0.75h
Time to write this little blogpost about it: ~0.25h
To be continued.

Time for some garden work now. Really. Looking forward to your thoughts & replies on that.

FAQs about MageUnconference 2015

The first MageUnconference took place on March 7th & 8th in Berlin. You’d like to know how it was? Read the FAQs!

What’s an unconference?

Like an conference, but without any planned talks and with muuuch more and longer breaks. Someone Sander said to me in one of the breaks (sorry for not remembering, who it was I do SO remember it was Sander): “MageUnconference is a great combination of user group meeting and sessions”.

It was such a relaxed athmosphere according to conferences where people just rush from talk to talk and hardly have time to chat during breaks. It was my first unconference and – omg – unconferences are awesome! It was also the very first MageUnconference btw!

How was the preparty?

We had a few beers, we had food, I met a lot of people I already knew and a lot of new ones and some even not known from twitter before!

According to Fabian we didn’t manage to spend all the money that was sponsored for the preparty. Reminder for next time to all: Drink more beer or start earlier 😉

I also tried Ginger-Beer, I cannot recommend it.

The preparty took place in the Lindenbräu in the Sony-Center btw. After the last round of drinks we went for the After Pre-Party in the bar on the other side of the street of the Motel One.

2015-03-07 00.38.45 2015-03-07 00.38.53 2015-03-07 01.43.18 2015-03-07 02.14.13


Where did you stay?

After rumours on twitter, a lot of us booked their room in the Motel One at Ku’Damm (thanks Tobi for your tweet, i think everyone followed that). That was pretty cool as there was always someone around to go together to the Unconference and back.

I’m not sure which way was longer: The one from the elevator to my hotel room or the one to the toilets in the Abenteuerzentrum.

How did you get to the venue?

Driving with the bus from the Motel One! Despite my concerns beforehand it worked out better than I thought. My new favourite bus line in Berlin is now X10. Going with the bus, especially when going with a group of people, requires some attention from at least one of the group. Otherwise you will miss the station to get out. We had some near-misses.

2015-03-07 08.24.34

The Eichhörnchensteig is just right after the Waldmeisterstraße. The way to the Abenteuerzentrum was very idyllic.

Eichhörnchenweg 2015-03-08 14.13.19 2015-03-08 14.08.28

How was the venue?

The Abenteuerzentrum lies inbetween a lot of trees and green. It’s quite big and has a long way to the toilets (don’t forget to pass by when you’re in a session in the room “Bob”). We were lucky and the weather was very nice during MageUnconf which made it possible to sit outside, have breakfast outside and also sessions.

We had WIFI there which was reliable most of the time (depending on your location) and – for people like me without data plan in Germany – really essential to follow up all the tweets 🙂

2015-03-08 09.49.25 2015-03-08 14.07.24

What about the sessions?

Everyone had the chance to add topics he/she wanted to hear or talk about. The topics were collected on a wall, then introduced with a few words. A detailed picturized explanation about how that works can be found in Carmen’s Blogpost.

The good thing is: There are 3 (or even 4) dev-tracks.

The bad thing is: There are 3 (or even 4) dev-tracks.

Which means: You have to decide which one of all those cool sessions to attend! What I really liked were the discussions that evolved out of the sessions and also the quality of the topics was very good!

There were sessions about: Module testing, Magento search, Burnout, Magento and Bootstrap, Scaling Magento (day 1), Recommender systems, design patterns: abstract factory, Mistake Driven Development, Vagrant, Magento Meetups, Code Usablity, CRM and a lot more!

I even got to do my “First Aid – Survival Guide for web developers” session together with Benno which was really cool.


2015-03-07 11.21.56 2015-03-08 10.51.40

What did you eat aka How was the food?

There was lots of food! So much of it, that I cannot even list it all here. There was food all the time: apples, carrots, mandarines, cookies, cake, cereals, various kinds of break with various toppings. Lunch on saturday and sunday was vegan (the pumpkin soup on sunday was great btw!).

And there were a lot of softdrinks and 1337mate and Mischmasch and Coke and sparkling water (good quality sparking water from Vöslauer – Austrian company 😉 ) and much more!

2015-03-08 10.03.00 2015-03-08 10.03.05 2015-03-08 10.03.12

How was the afterparty?

There was a fireshow which was performed by “Feuer und Poesie” – omg, that voice! And omg, that fireshow!

After that we had delicious food from the barbecue.. For even more entertainment throughout the evening there was table tennis, dart and air hockey!

How many people attended the event?

I have no idea about the official number. Right before the event, 94 participants have been officially announced. Some didn’t show up or arrived later but there were still a lot of Magento people 🙂

Most of them were from Germany and the Netherlands, but there were also participants from Switzerland (2), UK (1.5, yeah, David, you’re the 0.5) and Austria (1). Hope I did not forget a country here.

There were a lot of cool Magento developers, but also project managers, sales & marketing guys/gals,… See #mageuc15 tweets for a list of people 🙂

One special thing I’d like to mention is that 3/4 of the MageStackDay-team met there 🙂


Did you like it?

Yes! And I hope there will be a #mageuc16!

Special thanks to the amazing team organizing MageUnconference: Fabian Blechschmidt, Rico Neitzel, Tobias Klose, Carmen Bremen and Vinai Kopp!

More information?

#mageuc15 Tweets

More Blogposts?

Check out these cool Blogposts: