F*ck COVID

Thanks for opening this article because or despite of the click-bait heading. I’m sorry about the title if it offends you, but I hope over the course of the article I can clarify how I mean it. Regarding the curse word itself, I’m German, and in my language this is not a big deal – I still put the asterisk in there, hoping that’s more acceptable. 🙂

This post is a very emotional, contradictory, and honest attempt to capture my personal impressions, thoughts, and feelings during this pandemic. If you are worried about this being a conspiracy article, rest assured it isn’t. If you were looking for a conspiracy article, I’m sorry. This is really just a personal dump of thoughts – maybe some of this will sound controversial, maybe you’ll disagree on some points, but hopefully you’ll find things you agree with too.

Accepting the reality of coronavirus

As you may know, I moved across the big pond, from Switzerland to California, in early February – so I basically had a month before COVID-19 arrived here on a large scale. I have to admit, I was initially very sceptical of it. But I also have to admit I was proven wrong.

When WordCamp Asia was cancelled at the end of February, it was certainly a bummer, probably for all of us. To a certain degree it was also a relief for me, because I would have had a connection through Hong Kong which at that point was already highly affected by the virus. I honestly wasn’t that afraid to even catch the virus, but I was afraid that maybe they would not let me re-enter the US again because the travel restrictions were all a big unknown at this point – which I would not want to imagine how terrible this would have been, just two weeks after I had originally arrived here.

I was never someone who followed the news much (this really helps my personal sanity, I have to say), but of course the topic of COVID-19 was so omnipresent that I was still getting a sense of what was happening. I knew there were cases in the US, including some in San Francisco specifically, but at that point I was certainly underestimating the impact. Over the years I have become very wary of the media making people panic, and one specific reason for that has been the fact that every couple of years, the news would heavily report about some virus, causing people in the world to panic – without any such virus ever becoming a real threat. To be clear, I don’t doubt by any means that other viruses such as SARS are or were real and had a terrible impact on parts of the world. However, my problem was with how the media made people freak out about something that was never going to have an effect on their life because they lived in a completely different part of the world. For a long time, I would carry on these impressions about COVID-19 as well.

In early March, at Google we were told to work from home. When that happened, my initial reaction was really that this was getting way too far. How the heck are people overreacting so much? Or am I just completely delusional here? That was really what I thought back then – if you’re going to judge me for that, please do, I hope you don’t. Turns out it was probably more towards me being delusional back then. It was also super-bad timing because basically the first day I had to work from home was also the day I moved into my new apartment. At that point, the only furniture I had was a mattress to sleep, a TV (priorities, I guess 🙃), and two cheap balcony chairs and a low balcony table that I had spontaneously bought the day before at Target. So I sat on one of the chairs inside, laptop on my lap (after all, that’s what it’s named after right), taking video meetings standing by my kitchen counter. I was still going out at the time, and I had to hear some comments on how this may not be a good idea, which really bugged me – I hope you are not going to judge me for that I went to work in coffee shops and breweries for most of that week, with this ridiculous WFH setup. By now I know this was overall unreasonable, but given the circumstances back then, I probably would still do it the same way, because working from a chair at home, with barely anything else even in your home, is not good for productivity, sanity, and your back. Fortunately I got a dining table and chairs on the Friday that week, which have been my working desk since then. And over time more furniture has been delivered. BTW rest assured, while I still have to wait for some things, like my bed frame, my apartment is honestly in a good-to-live-in state now (I am so grateful for the workers that still delivered the furniture despite obvious complications).

A first major turning point for my superficial impression about the world overreacting on the virus was, and that may sound ridiculous, when Trump announced that no Europeans would be allowed to enter the US anymore. This really hit me in a way. While the announcement had some political side-comments that I don’t want to get into here, it was such a drastic call to me at the time that I thought there must be something more to the virus than I had been assuming. It hit me even more because it could have directly affected me. I feel beyond lucky that my relocation had happened sufficiently before then – I would not want to imagine what weird and complicated situation I would be stuck in if my relocation had been planned for just a single month later. Hearing about the situation in Italy made my concerns about my previous judging of the reactions stronger (this post is going to deal with judging a lot, please read on).

A few days later, San Francisco put the shelter-at-home order in place, with a few other counties in the Bay Area, as the very first areas in the US. While this was a major letdown and I was still loaded with occasional emotions like “WTF is happening here?”, there had definitely been a change in my perception. I was starting to understand more how the virus had become a threat impossible to ignore – and particularly that, even if I was fairly unlikely to be affected by it directly, there were severe implications for certain parts of the population and, based on that, potential overload of hospitals in ways I had only heard of in apocalyptic movies before. Later in the same week, the order for stores and most public places to be closed as well as for the population to mostly stay at home and especially away from other people expanded to all of California. At that point I was largely accepting the measures taken (despite the emotional side of me wanting to punch me in the face for that acceptance, read more below), and I was certainly at least more willing to understand the implications of the virus. I don’t want to say I was truly understanding them, and I probably still am not today – I believe that is something you are probably only capable of if you or someone close to you actually gets the virus in one of the worst ways.

Being socially isolated

My first month in San Francisco was freaking amazing! End of the quick update. TLDR, I went from an extreme emotional high of being in this new environment, getting to know new people, having fun with my new coworkers, and so much more, to a state of social isolation, everything shutting down, everybody worrying.

I’m now in my seventh week “sheltering at home”, and it is devastating. I am just going to mention some facts – some of them are terrible, some of them are just odd. I have not been to a restaurant or bar in seven weeks. I have not entered any vehicle in seven weeks. I have talked to a single person I know in-person in seven weeks (“person I know” being defined as broadly as family member, friend, colleague, acquaintance). Not knowing how long this state of the world will last is another big factor. Originally, I would have been in Germany these days, today I’m missing my mom’s 60th birthday. And it’s not unlikely that my own 30th birthday in a few months will be far from spectactular too, depending on how things will be then. But either way, the social isolation is definitely the worst thing.

I am mostly an introvert, and I enjoy spending a ton of time by myself. That’s also why I was never someone who enjoyed the idea of living with “random” roommates. But I still need social interaction like we all do, and like we all know, video calls will never be able to satisfy that in the same way like in-person contact. The fact that I live by myself has made this virus situation a massive challenge. I would have never thought I’d say that, but right now I wish I had roommates. Or I wish I had a wife (that sounds even weirder to say, but you probably get the gist). I just wish there was someone else living in my household. Depending on who it was maybe I would regret it after a few days or a few weeks. But right now, in the times of social distancing, this is probably the “I wish I had…” thing that applies to me the most.

I feel like a lot of what’s being talked about is how the stay-at-home orders may be hard for families that now have to spend basically 24/7 with each other, especially those living in smaller apartments. If there were issues before in a family, they would get worse now. I understand these are real problems, but my impression is that there are many other people with different problems that are not as much in the focus. Like those living by themselves, who now as a result of social distancing have nobody to talk to in person. I think none of these problems is worse than the other, they are just different problems. That also carries over to those of us who are fortunate enough to be able to work from home: With family at home, your productivity is probably suffering from distractions. With nobody else at home, your productivity is probably suffering from lack of motivation due to social isolation. That’s over-simplified though. If those were the only factors affecting us, I would blatantly say “those of you who live with a partner, but no kids and other family members are probably best off” – if this applies to you, you probably want to punch me in the face for that comment, at least mentally. What I want to convey here is that probably nobody is left unaffected by the coronavirus situation. Probably all of us have our mental health, our productivity, or something else suffering from distractions, isolation, lack of motivation, and other things of any kind – we all are facing major struggles because of this situation, and none is more or less severe than the other.

Remaining positive

For the first 3-4 weeks, the frustration with the overall situation and lack of social interaction were really dragging me down. I went from being super excited for being in a new place to being stuck at home, or more precisely, stuck from meeting new people. However, there was a point, yes there was really a point, in which I told myself to not let myself get dragged down as much from all the painful parts of the situation. I have no idea how I got there, and I have no idea what emotional force came over me then, but I have been better since that moment. I have been focusing on what good things are coming out of this situation: For example, I have been very active going for long walks and exploring the (locked-down) city. This is the one most important thing that honestly has been keeping my sanity. Another thing that makes me in a way even more happy is that I have started to focus on making music again. And there are tiny things as well, such as having more time to invest in planning my apartment to be the way I want it to be (even if some furniture is going to take a while).

To be honest, I am still in an emotional rollercoaster. My overall perception, if I am honest with myself, is that I hope that this situation resolves as soon as possible, that things open up again, that people go outside and meet other people again. I know we all want this the most. It’s just something we cannot have at this point, unless all people become unreasonable. I am still doing my best to focus on the positive emotions around the situation – deep inside I’m definitely less happy then I pretend to be, but in this strange time, trying to force myself to be positive has proven to be the best thing for me personally. Some days it works better than others, but that’s just how it is.

The other thing that I want to mention is that I am grateful. Whenever I get lost in too many negative thoughts, I have to remind myself how fortunate I actually am. Coronavirus and its effects have hit so many people way harder than they have hit me. With people losing loved ones, with people losing their jobs, with people struggling in so many worse ways than I do. I don’t know the right words to send your way, and maybe there are none – I cannot imagine your feelings, I wish you strength to cope with the situation. Sometimes it even makes me feel awkward for struggling or telling others that I am struggling because compared to others, my pains are so little.

Sticking together

The effects of social distancing orders around the world likely affect everyone in some sort of negative way. For most of us the negative effects result from the social distancing orders, for some of us the negative effects result from the virus itself. Whether it means mental, financial or any other struggles, we all suffer from it. Likely we all want this situation to end. Likely we all want it to never have happened. At the same time, we all have to be reasonable about the potentially worse impact of coronavirus in case we just cancel all social distancing efforts right away. Some of us are demanding to open up the world again, right now. While I rationally think this is not the right way, emotionally I can probably understand many of the people who demand that. I’m sure for some there is some political agenda involved, and that is not what I’m hinting at. But after all, we’re human, and we always have to find a balance between rationality and emotion. Does it make sense to cancel all social distancing orders today for all the world? Definitely not. Do I want this? Heck yes!

I see a lot of people judging other people these days, based on whether they are going outside, based on whether they meet other people (whether 6ft apart or not), based on whether they wear a face mask, based on whether they are protesting for the world to reopen. Whatever makes sense here or not, in certain moments some people act more on their emotions than others. Political agenda aside, if you are on the edge of losing your home because you lost your job, to take just one example, I can certainly see why you’re on the fence wanting the world to reopen. Whether it makes sense is not the question here. None of us actually knows whether it makes sense. None of us knows this virus. Better be safe than sorry. Long story short, I would love if we started reasoning with each other rather than pointing the finger.

Empathy is the key here. We need to reason with empathy. I’d appreciate if those of us who want to cancel all shelter-at-home orders immediately were more empathic with those people that are actually affected by coronavirus directly. I’d appreciate if those who call others idiots because they want to cancel shelter-at-home orders immediately (again, political agenda aside) were more empathic with how those orders affect them potentially worse than they affect you. Let’s try to really understand each other before judging – or maybe even not judge at all.

We are all affected by coronavirus. And as often said during this pandemic, we are all in this together. There is some idealistic sentiment going around how maybe the situation can bring us as humans closer together. So let’s do our best to get closer to that. If you think someone is reacting overly emotional, try to understand them. If someone is reacting overly rational (may sound strange, but that exists), try to understand them. I want to circle back to the title of this post. The reason I chose it, and I could not think of a better one over the course of writing this, is that this virus has probably affected (almost?) everyone’s life in a negative way. We all would have been better off without it. Hence, {insert post title here}! Deep down, this sentiment probably applies to most of us (although many wouldn’t necessarily phrase it that way 🙂). So let’s get through this together. Let’s try to avoid judging, although judging is as human as emotions are, so it’s not going to be easy. Let’s try to be more empathic with each other’s situation, which is different than yours. Maybe we can really come out of this more powerful and united than before.

Moving Continents

I just passed my first night as a resident of the United States. More precisely, yesterday I took my overseas flight to San Francisco, California, which is where I’ll be living now, at least for the near future. It is certainly still surreal that I am here now and not going to leave in foreseeable time, and it will probably be a while until I have fully grasped it, let alone fully settled in.

If you’re wondering now, I am still a Developer Programs Engineer for Google, and I am still working in the CMS ecosystem, mostly WordPress. And my primary focus is still going to be engineering the Site Kit plugin. Only from now on, I’m going to work from the offices in San Francisco, in person with the team that is located here.

So how did this happen?

Continue reading “Moving Continents”

Storing Confidential Data in WordPress

When using a content management system like WordPress, it is obvious that the content site owners and collaborators create and manage needs to be persistently stored somewhere. In WordPress, this storage space is typically a MySQL database. For most WordPress sites, every single request to the site results in several queries to the database so that the content stored can be displayed.

When extending the capabilities of WordPress through plugins, such plugins usually leverage that same database to store their own data. As a plugin developer you are probably already familiar with the many APIs that WordPress provides to integrate with database storage; for example the Options API to store and retrieve options, or the Meta API to store and retrieve metadata. However, do you ask yourself what the consequences of storing data in a WordPress database are?

Not all data is equal. Certain types of data that plugins (or WordPress core itself) need to store are more sensitive than others. Think about personal data from all the customers of your WooCommerce shop, the figures of revenue you are making from affiliate links, or API credentials to access personal information from your Google account. For any data you deal with in WordPress, you should ask yourself:

  1. How sensitive or potentially confidential is the information I would like to store?
  2. What can I do to store the information safely?

In this post, we will look more closely at how we can deal with more sensitive information in WordPress from a security perspective.

Continue reading “Storing Confidential Data in WordPress”

Using CSS Custom Properties for better UX in Frontend and Gutenberg

If you are a WordPress theme developer, chances are high that you’re working with the Customizer to provide certain design options to your themes’ users – whether it is for colors, fonts, spacing or else. Providing customization opportunities is crucial for a theme’s adoption as you will never be able to please every user with your theme’s out-of-the-box design. As widely known, most WordPress users look for feature-rich solutions when assembling their site. They may find your theme’s base design very appealing, but if they cannot modify it to e.g. use their brand colors, they’ll quickly move on to something else. Long story short: Allowing users to customize your theme is crucial for adoption.

Now there’s an issue with that though: Most of these design options affect the site’s CSS, and CSS is a largely static resource. Therefore the typical approach to integrate these Customizer controls with the theme’s actual appearance is to copy the pieces of CSS that would be affected by the respective options from the stylesheet into a PHP file, and from there generate that stylesheet on the fly. This results in three major problems:

  1. You are most likely sending a whole bunch of duplicate CSS down the line, negatively affecting performance of the site.
  2. Because you are duplicating CSS, the approach is quite error-prone. For example when modifying CSS later, you need to remember to also make the exact same change in the Customizer CSS, if it applies there too.
  3. This also affects the WYSIWYG experience in the editor, as you also need to manually maintain the CSS for the editor (Gutenberg / classic) in the same way.

There is a solution to all of these problems though, and its name is “CSS Custom Properties”. In this post we will look at how to use this CSS feature to improve UX for both website visitors and content creators, all at once.

Continue reading “Using CSS Custom Properties for better UX in Frontend and Gutenberg”

Native Lazy-Loading for WordPress

A few weeks ago, it was announced that Google Chrome started supporting the new loading attribute, which allows websites to have their images and iframes lazy-loaded without any custom JavaScript. Support for the feature will most likely be extended to further browsers soon, but you can already use it today without any negative impact for browsers where it isn’t supported yet.

If you have a WordPress site, our team at Google has just released a new plugin “Native Lazyload” which you can install, activate, and your site will support native lazy-loading instantly.

Continue reading “Native Lazy-Loading for WordPress”

Customizing Google Analytics Configuration in the Site Kit Plugin

The Site Kit plugin by Google makes it trivial to integrate your WordPress site with various publisher-facing Google services such as Google Analytics. In addition to exposing key insights from these services directly in your WordPress dashboard, it also automatically places the necessary code snippets on your page to ensure these metrics can be gathered properly.

In this post we will look at Google Analytics specifically and how you can customize its behavior in the Site Kit plugin. While the default configuration already gives you access to many valuable metrics, Google Analytics becomes really powerful when you have tailored it to your specific use-cases. With Site Kit currently still in Beta, the user-facing configuration options for Google Analytics are minimal. While we are exploring how we can expose more customization opportunities through the plugin’s settings UI, it may be a while until these improvements are included in a new plugin’s release. Since its beta 1.0.4 release though, the plugin includes filters to modify the Google Analytics configuration, so as a developer you can tweak it in almost any way you like already today.

Continue reading “Customizing Google Analytics Configuration in the Site Kit Plugin”

Exploring Sitewide Gutenberg Usage Today

Phase 2 of Gutenberg is all about taking the compelling capabilities of the block editor to the site level. WordPress 5.0 introduced it as the new editor for post content, but that was only the beginning. Blocks are a powerful tool and inspired by the learnings of various other formats of editing that WordPress and other platforms have been using over the years, so it makes sense for them to provide a unified approach to reusable content. The difference between shortcodes and widgets for example has pretty much been non-existent, and it felt weird to create a certain UI component only for one of the two, or having to write some duplicate code to address both layers. With Gutenberg being expanded to become the editor for your entire WordPress site, beyond the post content bubble, this problem will be solved. Furthermore, it will bring the new editor much closer to being able to fully compete with existing layout builders.

Each of the steps to get there (e.g. migrating widgets, menus, and possibly even other elements fully controlled by the theme today) poses several challenges, so it might still be some time until we get to experience all this functionality in its proper implementation. Therefore, inspired by a conversation with Morten at WordCamp Europe a few weeks ago, I wrote a tiny experimental plugin that allows you to use blocks on a sitewide level and explore what the theming of tomorrow could look like already today.

Continue reading “Exploring Sitewide Gutenberg Usage Today”

Leveraging the Power of Custom Elements in Gutenberg

This is essentially a written version of the talk of the same name that I gave at WordCamp Europe 2019 (see the related slide deck).

As I’m sure we can all confirm, WordPress provides a strong toolset for creating awesome content. Particularly with the availability of the Gutenberg editor, publishers can now implement more interesting layouts and take their content quality to the next level. However, while the content itself is certainly the most important part of a website, there are a few other supporting pillars to ensure delightful content experiences for users consuming that content. Websites should be:

Performant
Secure

Integrated
Engaging

For more details on these four pillars, see the “Progressive WordPress Themes” talk by my colleagues Alberto Medina and Thierry Muller.

Unfortunately, satisfying each of these four requirements is anything but trivial. You might already know that just installing a performance or a security plugin is not actually going to magically solve these respective points.

Technologies and best practices on the web are constantly evolving: Regularly new APIs are introduced, new standards being established, former best practices being overruled. Add in all the popular frameworks that have come and gone over the years, and it becomes even more evident: Even the most senior rockstar full-stack developer cannot keep up with this technology complexity on their own.

In addition, even in the scope of a single website or application, maintaining a good overview of the different pieces can present a huge cognitive challenge. HTML, CSS, JavaScript, code for different areas shed across everywhere, with possible incompatibilities in functionality as well as in appearance with all thiese pieces being used in combination. This is what we can refer to as content complexity.

Fortunately, there are ways to reduce and work around both of these complexities. In this post we will look at a component-based approach and a relatively new technology called “Custom Elements” and how they address the aforementioned problems.

Continue reading “Leveraging the Power of Custom Elements in Gutenberg”

Vier

Last weekend I participated in WordCamp Europe 2019, my fifth one of these annual events for the European (and beyond!) WordPress communities to meet, exchange knowledge and celebrate themselves. This fifth WordCamp Europe also marks my fourth anniversary as part of the WordPress community, as the 2015 event in Sevilla was my very first interaction with the community. Hence, it is time for my annual personal recap of what has happened in the past 12 months.

Continue reading “Vier”

Introducing Feature Policy & Reporting API for WordPress

The web has been constantly evolving. Over the years we have seen milestones such as the introduction of responsive images, AJAX requests, or location access for some examples. More recently features like Add to Home Screen, which allows you to make websites easily accessible on your phone or desktop, or Web Payments, a standardized way of processing payments on the web, have been made available. Even lazy-loading media is likely to come natively to the web soon.

While all these features are very powerful, they also pose the challenge of using them responsibly, and making sure to not abuse them, which could harm user experience. For example, asking the user to grant location access to a website without making it obvious what this would be used for and without providing a clear user benefit, the resulting pop-up can be more of a distraction than the purpose would justify it. I’m sure you have seen websites where you had to go through way too many pop-ups and consent requests before getting to the content you actually intended to see.

Keeping track of all these web features can be a tedious task, especially in the context of a CMS like WordPress, where much of the codebase (probably even most of it) comes from third parties on many sites. Even if you yourself are a responsible citizen of the web, third-party plugins and themes might have flaws or might be misusing features in ways you aren’t  aware of.

This is where two new proposed web standards, Feature Policy and Reporting API, come into play.

Continue reading “Introducing Feature Policy & Reporting API for WordPress”