Wed, 26 Jun 2019 11:00:53 +0200 
CSS :focus-within - DWB
Using :hover to display additional information or elements is a very useful technique but a big drawback to using the hover pseudo-class is that they are usually not accessibility-friendly. Not everyone uses a mouse and some users have visual impairments, so they rely on screen readers or the keyboard -- two functionality that don't technically hover.
Luckily the CSS spec gives us a gift to pair with :hover: :focus-within. With :focus-within developers can modify styles of elements when an element or its parent has keyboard focus!

lost Wave

 Tue, 05 Feb 2019 18:20:32 +0100 
Introducing Wave theme in OXID eShop • OXIDforge
With #OXID eShop release 6.1.2 all editions we introduce the new Wave theme to the public which will be packaged with compilation. Read more about it.

In the storefront, only minor adjustments were made in comparison to the Flow theme: our aim is not to restyle or redesign the existing Flow theme – rather our duty is to deliver a lightweight, slender and willowy (yet functional) basis for your projects that you don’t have to purge first. However, we want to improve and update some frontend components. In this manner, Wave is more a progression than an evolution.

:shrug I still don't get it. They copy all the legacy JavaScript from the pre-predecessor theme, switch from #Bootcrap 3 to Bootcrap 4 and call it a new theme? #WTF?!?

Styling placeholder

 Mon, 04 Feb 2019 20:56:12 +0100 
CSS :placeholder-shown - DWB
One of the first plugins that would hit a new framework in the early days of JavaScript frameworks was a placeholder plugin, which is why we were so excited when HTML5 brought us the placeholder attribute. Then CSS lovers like me were thrilled when the CSS spec allowed us to style placeholders.


 Mon, 10 Dec 2018 12:31:57 +0100 
What is wrong with web browsers? FF, Edge and IE11 show the same result. This strange Chrome browser warps images when resizing the window, extends the viewport when moving something out to the right, etc. I am getting to old for this shit.

When a database dump is not a complete dump ...

 Fri, 10 Aug 2018 18:18:01 +0200 
Serious? Are you fucking kidding me? #SQLite3 #Drupal #WTF

With a bit python it was possible to transform a Druapl 8's sqlite3 dump into a sql file that I could import into MariaDB 10.3. Surprisingly the whole multi domain and multi language website seemed to work quite fine in frontend and backend on a first and second look. Just the dblog is filling with unserialize errors from the key value store. :-(
Looks like there are entries which do not get out of sqlite3 correctly. Neither through dump, nor cli.

A sqlite3 database dump
$ sqlite3 sites/default/files/.ht.sqlite .dump | grep user.entity_type
INSERT INTO "key_value" VALUES('entity.definitions.installed','user.entity_type','O:36:"Drupal\Core\Entity\ContentEntityType":37:{s:15:"');

Query the database directly with the sqlite3 cli
$ sqlite3 sites/default/files/.ht.sqlite "SELECT * FROM key_value WHERE name = 'user.entity_type'"

Actually this is the same like the sqlite3 cli
$ ../bin/drush sql-query "SELECT * FROM key_value WHERE name = 'user.entity_type'"

Is this Drupal 8 Magic? :-!
$ ../bin/drush php-eval "\$r=db_query('SELECT * FROM key_value WHERE name = \"user.entity_type\"')->fetchAll(); print_r(\$r[0]->value);"
O:36:"Drupal\Core\Entity\ContentEntityType":37:{s:15:"*static_cache";b:1;s:15:"*render_cache";b:1;s:19:"*persistent_cache";b:1;s:14:"*entity_keys";a:6:{s:2:"id";s:3:"uid";s:8:"langcode";s:8:"langcode";s:4:"uuid";s:4:"uuid";s:8:"revision";s:0:"";s:6:"bundle";s:0:"";s:16:"default_langcode";s:16:"default_langcode";}s:5:"*id";s:4:"user";s:16:"*originalClass";s:23:"Drupal\user\Entity\User";s:11:"*handlers";a:9:{s:7:"storage";s:23:"Drupal\user\UserStorage";s:14:"storage_schema";s:29:"Drupal\user\UserStorageSchema";s:6:"access";s:36:"Drupal\user\UserAccessControlHandler";s:12:"list_builder";s:27:"Drupal\user\UserListBuilder";s:10:"views_data";s:25:"Drupal\user\UserViewsData";s:14:"route_provider";a:1:{s:4:"html";s:36:"Drupal\user\Entity\UserRouteProvider";}s:4:"form";a:3:{s:7:"default";s:23:"Drupal\user\ProfileForm";s:6:"cancel";s:31:"Drupal\user\Form\UserCancelForm";s:8:"register";s:24:"Drupal\user\RegisterForm";}s:11:"translation";s:37:"Drupal\user\ProfileTranslationHandler";s:12:"view_builder";s:36:"Drupal\Core\Entity\EntityViewBuilder";}s:19:"*admin_permission";s:16:"administer users";s:25:"*permission_granularity";s:11:"entity_type";s:8:"*links";a:4:{s:9:"canonical";s:12:"/user/{user}";s:9:"edit-form";s:17:"/user/{user}/edit";s:11:"cancel-form";s:19:"/user/{user}/cancel";s:10:"collection";s:13:"/admin/people";}s:17:"*label_callback";s:16:"user_format_name";s:21:"*bundle_entity_type";N;s:12:"*bundle_of";N;s:15:"*bundle_label";N;s:13:"*base_table";s:5:"users";s:22:"*revision_data_table";N;s:17:"*revision_table";N;s:13:"*data_table";s:16:"users_field_data";s:15:"*translatable";b:1;s:19:"*show_revision_ui";b:0;s:8:"*label";O:48:"Drupal\Core\StringTranslation\TranslatableMarkup":3:{s:9:"*string";s:4:"User";s:12:"*arguments";a:0:{}s:10:"*options";a:0:{}}s:19:"*label_collection";s:0:"";s:17:"*label_singular";s:0:"";s:15:"*label_plural";s:0:"";s:14:"*label_count";a:0:{}s:15:"*uri_callback";N;s:8:"*group";s:7:"content";s:14:"*group_label";O:48:"Drupal\Core\StringTranslation\TranslatableMarkup":3:{s:9:"*string";s:7:"Content";s:12:"*arguments";a:0:{}s:10:"*options";a:1:{s:7:"context";s:17:"Entity type group";}}s:22:"*field_ui_base_route";s:22:"entity.user.admin_form";s:26:"*common_reference_target";b:1;s:22:"*list_cache_contexts";a:0:{}s:18:"*list_cache_tags";a:1:{i:0;s:9:"user_list";}s:14:"*constraints";a:1:{s:13:"EntityChanged";N;}s:13:"*additional";a:0:{}s:8:"*class";s:23:"Drupal\user\Entity\User";s:11:"*provider";s:4:"user";s:20:"*stringTranslation";N;}

How to get a complete dump from the sqlite3 database?

Where has my beloved TYPO3 gone? :sigh

Measure Sitespeed

 Wed, 20 Jun 2018 17:41:42 +0200 
Wonderful tool(s)! The Docker image is 1,6GB big, but it does combine quite a lot of things and makes it very convenient to use. In contrast to other such performance tools sponsored by a big company, Sitespeed.io complains about GA and GTM usage. ;-)

#^Sitespeed.io - Welcome to the wonderful world of Web Performance
Sitespeed.io is a set of Open Source tools that makes it easy to monitor and measure the performance of your web site.

Measuring performance shouldn’t be hard: you should be able to have full control of your metrics, own your own data and you should be able to do it without paying top dollars.

That’s why we created sitespeed.io.

The TSDB is something I want add to our monitoring server.

Add pagination to TYPO3 default File Links Content Element

 Bonn, GermanyFri, 20 Apr 2018 01:19:46 +0200 
Ever wondered how to add a Fluid paginate widget to a non Extbase extension in TYPO3 #CMS? For example a core Content Element (CE) and fluid_styled_content? It is straight forward when you are familiar with TYPO3, but there was one not quite obvious workaround needed to make it complete. The following solution is tested in TYPO3 v9.1 and v9.2, but it is possible that there will be another solution in core in the future.

I have a TYPO3 default File Links [uploads] Content Element (CE) and wanted to output a collection from a folder with a lot of files. I was surprised, that there was no pagination available, but it is a fluid styled template, so it was easy to add a paginate widget.

Add a template override path to your Template constants:
# Add Fluid Styled Content template override path
styles.templates.templateRootPath = EXT:myext/Resources/Private/ContentTemplates/

Add to your ext Template setup following TypoScript to set an alternative template name for File Links CE. Also add a workaround for non-extbase elements like the File Links CE [uploads]. This is needed so that the Fluid paginate ViewHelper will also work. Otherwise you have pagination, but only results from the first page are shown, because no controller is executed.
# Customised TYPO3's File Links Content Element with pagination template.
# CType: uploads

# Use a customised fluid styled content template
tt_content.uploads.templateName = MyFilePagination

# Workaround to add functionality for non-extbase elements (https://forge.typo3.org/issues/79430)
tt_content.uploads.extbase {
    pluginName = filelist
    controllerName = filelist
    controllerExtensionName = myext
    controllerActionName = show

You can take the default template from typo3/sysext/fluid_styled_content/Resources/Private/Templates/Uploads.html and save it at typo3conf/ext/myext/Resources/Private/ContentTemplates/MyFilePagination.html. In your customised template add the Fluid paginate widget ViewHelper around the for ViewHelper and change the variable according:
<f:widget.paginate objects="{files}" as="paginatedFiles" configuration="{itemsPerPage: 10, insertAbove: 1, insertBelow: 1, maximumNumberOfLinks: 10}">
  <f:for each="{paginatedFiles}" as="file" iteration="fileIterator">

That's it. ;-)

Drupal webform mail template override

 Wed, 18 Apr 2018 13:32:49 +0200 
The default #Drupal swiftmailer mail template override works something like this:

I was struggling how to configure a module which actually needed more than just module--key identifiers. For example when you have several Drupal webforms or even several handlers for one webform. It was not directly obvious how to access each handler, but actually it is quite simple:


TYPO3 v9.2

 Wed, 11 Apr 2018 01:00:21 +0200 
Was fighting with Drupal8 half of my work day just to get stupid alternative mail templates for webform handlers with swiftmailer in production. And then in the evening I updated a private project to the new TYPO3 9.2 release and it was such a relief. ;-)

Off to go Site-Seeing!
Packed with awesome features and perfectly on time, we released a new version of TYPO3 v9.
 Thu, 22 Mar 2018 23:37:44 +0100 
The more I have to work with Drupal the less I understand people complaining about TYPO3. Fascinating how quick you get used to such pre security advisories. ;-)

#^Drupal 7 and 8 core highly critical release on March 28th, 2018 PSA-2018-001
Advisory ID: DRUPAL-PSA-2018-001
Project: Drupal Core
Version: 7.x, 8.x
Date: 2018-March-21

There will be a security release of Drupal 7.x, 8.3.x, 8.4.x, and 8.5.x on March 28th 2018 between 18:00 - 19:30 UTC, one week from the publication of this document, that will fix a highly critical security vulnerability. The Drupal Security Team urges you to reserve time for core updates at that time because exploits might be developed within hours or days.

Digital Experience

 Wed, 07 Feb 2018 01:00:27 +0100 
creepy. Eine ziemlich einseitige und komische Argumentationslinie. Klar finde ich das aus technischer Sicht auch sehr spannend und hilfreich, aber als Besucher einer solch überwachten Application sträuben sich mir alle Haare.

#^Application Performance Management: Vom Nice-to-have zum Must-have

Kontextbezogenes Monitoring, Log- und Fehleranalyse mit KI-Unterstützung sowie die User Experience standen im Fokus der diesjährigen Perform-Konferenz des APM-Spezialisten Dynatrace.


 Thu, 18 Jan 2018 18:52:14 +0100 
I already had a dockerized Selenium-Grid but it was a good idea to replace it with Selenoid. The state of automation and the video recording feature are really impressive.

Selenoid is a powerful implementation of Selenium hub using Docker containers to launch browsers.

Lightweight and Lightning Fast
Suitable for personal usage and in big clusters:
* Consumes 10 times less memory than Java-based Selenium server under the same load
* Small 7 Mb binary with no external dependencies (no need to install Java)
* Browser consumption API working out of the box
* Ability to send browser logs to centralized log storage (e.g. to the ELK-stack)
* Fully isolated and reproducible environment

#^Scalable Selenium Cluster: Up & Running | Ivan Krutov
by seleniumconf on YouTube


 Tue, 10 Oct 2017 15:18:24 +0200 
#^Zahlen, bitte! Die 3-Faltigkeit der Cascading Style Sheets

Der Siegeszug der Cascading Style Sheets für Webseiten begann vor 23 Jahren. Heute ist CSS aus dem Web nicht mehr wegzudenken. Wie CSS entstand und was die Zahl 3 für eine Rolle spielt:
Heute vor 23 Jahren stellte der norwegische Computerwissenschaftler Håkon Wium Lie, ein Kollege des HTML-Erfinders Tim Berners-Lee, den ersten Entwurf einer Sprache namens "Cascading HTML Style Sheets" vor. Das "HTML" fiel – ebenso wie einige der kühneren Ideen des Konzepts – bald weg, und als "CSS" eroberte die Sprache bald die Bildschirme der Welt.

under pressure

 Fri, 04 Aug 2017 19:01:05 +0200 
Technically interesting website.
The stories are a bit strange, but the results at the end are quite interesting.

#^Climate under pressure - Home

An interactive documentary experience giving you control over the climate stories and destinies of 6 individuals around the world.


 Wed, 02 Aug 2017 23:04:19 +0200 
I really like the experimental background-clip:text;. Such a nice effect!

The background-clip CSS property specifies whether an element's background, whether a color or an image, extends underneath its border.

inclusive design

 Wed, 02 Aug 2017 13:32:47 +0200 
#^Inclusive Components
A blog trying to be a pattern library. All about designing inclusive web interfaces, piece by piece.

What is inclusive-components.design?
A blog trying to be a pattern library, with a focus on inclusive design. Each post explores a common interface component and comes up with a better, more robust and accessible version of it.

Because the web is full of interfaces which don't consider the diversity of abilities, circumstances, and preferences of their users.

What do you mean by component?
A module, a part of your interface, an entry in your pattern library. A bit of what you make as a designer and developer.

CSS Grid Layout Module

 Mon, 03 Apr 2017 00:54:55 +0200 
Falls jemand einen Grund sucht sich die iX zu kaufen. ;-)

#^Hinter Gittern
Seit den Frühzeiten des Web wollen Designer Elemente in Zeilen und Spalten positionieren. Bis vor Kurzem mussten sie dafür Umwege über Tabellen oder umfließende Inhalte gehen. Mit neuen CSS-Attributen können sie gitterartige Layouts komfortabel aufbauen.


 Fri, 17 Mar 2017 13:27:25 +0100 
Schon ziemlich krank dieses AMP und was mit den ganzen Erweiterungen dafür noch geplant ist. Obwohl ich auch leider aus eigener Erfahrung feststellen muss, dass es doch einen ziemlichen Unterschied macht, ob man 1-2 Minuten wartet bis man etwas lesen kann, oder 5-10 Sekunden. :-/ Obwohl ich mit meinem Internetzugang auch eher die Ausnahme bin, als Googles eigentliche Absicht die sie damit bezwecken.

#^Kommentar zu Google AMP: Der goldene Käfig

AMP macht Websites schneller – aber es verstärkt zugleich die Abhängigkeit von Google in gefährlichem Maß, findet Herbert Braun.

Thou Shalt Not Depend on Me

 Mon, 13 Mar 2017 13:12:14 +0100 
#^Thou Shalt Not Depend on Me: Analysing the Use of Outdated JavaScript Libraries on the Web
Web developers routinely rely on third-party JavaScript libraries such as jQuery to enhance the functionality of their sites. However, if not  properly maintained, such dependencies can create attack vectors allowing a site to be compromised.

In this paper, we conduct the first comprehensive study of client-side JavaScript library usage and the resulting security implications across the Web. Using data from over 133k websites, we show  that 37% of them include at least one library with a known vulnerability; the time lag behind the newest release of a library is measured in the order of years. In order to better understand why websites use so many vulnerable or outdated libraries, we track causal inclusion relationships and quantify different scenarios. We observe sites including libraries in ad hoc and often transitive ways, which can lead to different versions of the same library being loaded into the same document at the same time. Furthermore, we find that libraries included transitively, or via ad and tracking code, are more likely to be vulnerable. This demonstrates that not only website administrators, but also the dynamic architecture and developers of third-party services are to blame for the Web’s poor state of library management.

The results of our work underline the need for more thorough approaches to dependency management, code maintenance and third-party code inclusion on the Web.


 Wed, 08 Mar 2017 22:10:19 +0100 
Damn, if I have to choose between flat design and brutalist I would choose the latter one.

#^Brutalist Framework
A simple framework for the brutalist web design trend.