Cologne 2050

Wer Visionen hat, soll zum Arzt gehen.

Helmut Schmidt, “eine pampige Antwort auf eine dusselige Frage”, Wikiquote

“Someone with visions should go to the doctor” is a popular quote by a former German chancellor, in a way representing modern politics pretty well. While improving the world in increments has gotten us a long way, I miss positive visions in mainstream politics (too few like this or this). As Adam Curtis puts it in this Economist interview:

Politics gave up saying that it could change the world for the better and became a wing of management, saying instead that it could stop bad things from happening. The problem with that is that it invites all the politicians to imagine all the bad things that could possibly happen—at which point, you get into a nightmare world where people imagine terrible things, and say that you have to build a system to stop them.

The antidote to civilisational collapse, The Economist, 6th December 2018

How could the city I live in look like in 31 years, if we weren’t restricted by practical concerns, but could come up with a more free form vision?

Daily Life in 2050

Below I’ll describe five areas of daily life: Transport, Jobs, Shopping, Housing and Health. While those are separate topics, some of their viability depends on synergies between these areas.

Topics not covered can be assumed to not change that much in this vision. I also know even less about those potential other topics and don’t want to stretch this too far.

Transportation

Traffic within cities is running on renewable electricity, powered by small lithium-ion batteries, but individual transport is primarily human-powered, with electric motors enhancing various forms of small vehicles like bicycles. Lots of variations exist to support parents with babies or toddlers, people with physical disabilities, or people transporting bigger items. For trips across city quarters, these vehicles can be attached to bigger electric vehicles like busses (which are mostly running on software, with remote operators monitoring and supporting as needed).

Individual highway traffic in and out of the city is also running on renewable electricity, powered by hydrogen fuel cells. Vehicles are driven by software when conditions are fine, or remote controlled by trained operators when conditions are really bad. The amount of this type of traffic is pretty low, as most people live within the city quarter where they work (see Jobs belows).

Most vehicles are owned and shared by the public. They are stored in towers above or below ground, with most of the process of storage and retrieval automated. This in turn removes the need for massive spaces and buildings for parking large, combustion-engine based vehicles, giving way to a decent mix of small and big parks and living quarters.

Transport on medium distances is covered by a non-profit* train network with reliable schedules. Long distance travel is still the domain of airplanes and one of the last industries burning fossil fuels. Yet thanks to strict regulations, business travel, especially of the “cross an ocean twice a day” type, is massively reduced, resulting in a large decrease of air travel and related pollution.

Jobs

A vast majority of people (like lawyers, accountants, designers, programmers, engineers, architects, insurance agents) work from home, with their employer covering the costs of the home office, or work in the city quarter where they live (see Housing). A lot of jobs, that used to require people to stay in one location to offer services to other people coming to that location, are now much more flexible or don’t exist anymore. Doctors see their patients remotely or at their own homes (see Health). Most shopping is decentralized (see Shopping). Garbage disposal, while generally a much smaller concern thanks to all kinds of reusable containers and packaging (in contrast to still energy intensive recycling), is heavily automated, also with remote monitoring and operators. Deliveries are grouped per building and across orders, getting the amount of delivery traffic and related jobs under control.

Shopping

Grocery shopping in stores doesn’t exist anymore, instead groceries are delivered on an ongoing basis, per apartment block or street. Daily use items are subscribed to, with storage units (fridge, freezer) suggesting increases or decreases based on consumption, and recipe apps automatically ordering special items. Various seasonal fruits and vegetables don’t need to be delivered at all, since they grow on walls, balconies, and roofs. They’re mostly planted and maintained automatically, with interested residents helping out where needed.

Other food is also available according to the regional and seasonal options, avoiding shipping blueberries half way around the world. The amount of food that is inefficient to produce in huge quantities (beef, pork, salmon) is rarely consumed, with most of the population preferring other options.

Other shopping, for example for clothing, furniture or gadgets, is also heavily decentralized. Instead of people going to stores, designers come to their clients home, take the necessary measurements and recommend items to order. Customizations take longer, but can accommodate all kinds of particular needs.

Housing

To allow people to live well, close to where they need to, housing is now a non-profit public service everywhere, focused on providing decent living space for everyone. Moving from one place to another is almost trivial, as living spaces are both heavily standardized and highly customizable.

Lamps can be exchanged with two simple motions, lightbulbs can all be adjusted to whatever brightness and color temperature are prefered. Bed frames are flexible in their dimensions to accept various mattress sizes and depths and can be decorated to anything from industrial to fantasy style. Wardrobes can eject their content into compact boxes ready for transport. Wallpapers don’t need any glue or scraping to replace. Couches can be reassembled to the preferred layout, the covers quickly replaced. The kitchen is pretty much the same everywhere, with energy efficient appliances being kept up to date by the building administration.

Grocery subscriptions are transferred when moving, though adjustments may be necessary based on local availability of some products.

Health

Most doctor visits are replaced by a self check up at home, supported by an app and a health kit. People are supported by the app in checking for common issues themselves, talking remotely to a doctor (that currently has a low workload) to clarify details. When that isn’t enough, doctors and therapists visit their patients at home, with schedules optimized for short wait times and by medical priorities.

When that isn’t enough either, non-profit hospitals provide all the other necessary care, focused solely on the health of their patients of employees. Since emergency rooms no longer have to deal with any non-emergencies, waiting times and work load are significantly reduced. Staff is hired based on the population and demography of the city quarter the hospital is located in. For uncommon conditions and diseases, experts from around the world can join discussions and operations remotely. Any mistakes or accidents are always captured and reviewed in a blameless post-mortem process (think of how air traffic has been doing that for decades). No one ever dies from an infection caught in a hospital.

Closing notes

This is obviously incomplete in infinite ways – zooming in on any of these topics will necessarily provides a fractal increase of details and issues, as with any complex system. And then there’s all the various topics missing.

I enjoyed this as a valve to process the many articles and podcasts I’ve consumed in last months and years. I might expand on some of these topics or others in the future.

I’m curious what others think about these ideas. Maybe some are already happening elsewhere? What’s missing? How much of this could (really) work in other regions of the world?

For feedback:

*) There’s several mentions of “non-profit”, while leaving it open if these are state or privately owned. I don’t think it matters that much, since there’s good and bad examples of both types. They need to be decentralized enough to be able to serve their community well.

Ideas for better data privacy usability

This morning I got an email like this:

Hi [customer],

If your inbox is anything like ours, it’s recently been filled with emails like this one: a company updating its policies. You’re probably going to receive many more before May 25 because of a new European privacy law called the General Data Protection Regulation (or GDPR). Companies are updating their policies to meet GDPR requirements, and are sending their customers notices about the changes. Today, we are releasing our own updated Privacy Policy, which provides greater clarity and detail about the information we collect, how we use it, and how we comply with GDPR. […]

Our new Privacy Policy has added some detail around what you can do with data we collect about you, and how you can exercise your privacy rights. It also provides increased transparency around the different purposes for which we use this data. […].

I don’t appreciate the meta comment about getting lots of emails like this. Its only a reminder of something I despise, hardly welcome.

Though it got me thinking: What’s so wrong with this? Isn’t it nice that companies are updating their privacy policies to the benefit of consumers?

The problem I have with this process is the asymmetric power and burden. As a consuming customer, the only leverage I have is to stop using their service. That’s an all-or-nothing game I don’t want to play. For example, I despise many things about Facebook, but I’m not yet taking the only leave-completely option, since there’s still too many things that I don’t want to miss out on.

Given that its a good thing for companies to pay attention to their data use and make their policies public, how could we remove the current burden from customers, and shift it somewhere else?

Here’s some ideas:

  • Companies have to provide a fact sheet, like insurance or investment products. On a single, well-formatted and readable page, list what data the company gathering, who its being shared with, how long its stored it and similar details. Optimize this for a quick read, in a standardized format (e.g., retention policy always in the upper-right box).
  • Companies have to submit their updated policies to a 3rd party, that they need to pay to have their documents reviewed. The contact details and review date are then added to the full public policy, so that consumers with doubts about the companies policies can contact the reviewer and have them confirm the review. This 3rd party could use a low-effort support system like Intercom (you can handle a lot of requests with chat), to provide free answers, with a paid phone support in addition.
  • Companies have to use standardized policy templates. ALL UPPERCASE LEGALESE IS STRICTLY FORBIDDEN. A clear and predictable structure makes it easy to find specific details.
  • Companies have to provide diffs when updating their policies. To keep the diff simple, the updates need to be kept under control, too.
  • Companies have to provide a machine readable version of the privacy policy, that your browser or a plugin can read and evaulate according to your preferences. The result could be displayed with an icon similar to the SSL-lock.

What I expect to happen instead:

Lach- und Sachgeschichten vom Baumarkt

Heute mit Bauhaus! Alle anderen Namen sind frei erfunden.

Vor ein paar Tagen kaufte ich beim Bauhaus um die Ecke eine Sackkarre. Eine solche hatte sich beim Umzug als sehr wertvoll erwiesen, da damit schwere Geräte wie der Kühlschrank wesentlich leichter zu transportieren sind. Da bei uns endlich die Küchenmontage anstand und wir unsere temporären Geräte (Kühlschrank, Spülmaschine) ausräumen mussten, schien eine Sackkarre eine sinnvolle Investition.

Als wir dann heute den Kühlschrank raus rollten, fiel auf, dass einer der Reifen platt war. Das machte die Sackkarre deutlich weniger nützlich, da sie mehr am schleifen als am rollen war. Da ich ohnehin noch ein paar Sachen besorgen wollte, beschloß ich kurzerhand, nochmal zu Bauhaus zu fahren, um dort die Reifen aufpumpen zu lassen.

Da ich nicht mal wieder mit der Sackkarre durch den riesigen Laden laufen wollte, fuhr ich direkt in die “Drive-In Arena” hinein – dort hatte ich die Sackkarre ursprünglich gefunden. Im Verkauf, ein beheizter, abgetrennter Raum innerhalb der sonst eiskalten “Arena”, fand ich Erwin, dem ich nach etwas Warten den Sachverhalt erklären konnte. Der delegierte das Aufpumpen dann an seinen Kollegen Anton, der sich der Sache annahm. Nachdem ich meinen PKW etwas weniger blockierend geparkt hatte, fand ich Anton mit der Sackkarre und einer mit Kompressor betriebenen Pumpe. Einen Moment später war er auch schon fertig und ich kehrte zum Wagen zurück. An der Kasse konnte ich schließlich erklären, dass ich das Gerät schon vorher gekauft hatte und nichts zu bezahlen habe. Nach Kontrolle des Kofferraums durfte ich dann auch wieder raus.

Nachdem ich die anderen Einkäufe erledigt hatte, rollte ich die Sackkarre wieder in die Wohnung und stellte sie erstmal zur Seite. Es gab noch einiges umzuräumen, bevor wir die Spülmaschine abmontieren und ebenfalls rausrollen könnten. Währenddessen gab es plötzlich einen sehr lauten Knall. Eine Tasche, die neben der Sackkarre lag, war sogar kurz in Bewegung. Nach einer Inspektion stellte sich schnell raus: Der linke Reifen war geplatzt! Wenn dieser auch ohne Belastung platzen konnte, hatte Anton offensichtlich zu viel Druck auf den Reifen gegeben.

Also fuhr ich zurück zu Bauhaus: Wieder in die Arena, wieder parken, wieder zum Verkauf, wieder warten, wieder Erwin den Sachverhalt erklären. Seine erste Erwiderung, ungefähr: “Du hättest die Reifen ja selber aufpumpen können!”. Zum Glück brachte mich das nicht aus der Fassung, stattdessen erwiderte ich nur, dass es ja wohl nicht meine Schuld ist, wenn ein Mitarbeiter die Reifen mit zu viel Druck befüllt.

An dieser Stelle hätte die Geschichte zu Ende sein können: Defekte Ware ersetzen, fertig. Aber nein, eine solche Exekutiv-Entscheidung konnte Erwin unmöglich treffen, stattdessen musste er erstmal telefonieren. Beschluss: Kunde (mich) zur Eisenwaren-Abteilung schicken, dort passenden Reifen suchen lassen, damit zurückkommen und den geplatzten Reifen austauschen. Aus im Nachhinein nicht nachvollziehbaren Gründen habe ich es mitgemacht. Auf dem langen Weg (~5 Minuten Gehweg) beschloss ich, direkt dort zur Information zu gehen, da selber suchen in den riesigen Regalen ziemlich sinnlos ist.

An der Eisenwaren-Information war aber niemand, noch auf den anliegenden Gängen. Die Dame an der Selbstbedienungskasse daneben konnte mir lediglich sagen, man sei unterbesetzt und ich müsste in anderen Abteilungen oder an der Information fragen. Vorige Besuche hatten mir bereits gezeigt, das Abteilungs-fremde Mitarbeiter keine Ahnung haben, also suchte ich selber und fand irgendwann tatsächlich den Abschnitt mit einigen Reifen. Einige Minuten später entschied ich mich dann für einen Reifen, der zwar die passenden Maße, aber nicht denselben maximalen Druck (2 vs 2,5 bar) hatte. Damit machte ich mich dann auf den langen Rückweg…

Dort angekommen, entschloss Erwin immerhin, einen anderen Kunden erstmal warten zu lassen, und sich direkt mit meinem Fall zu beschäftigen. Zunächst machte er noch einen halbherzigen Versuch, das Thema loszuwerden (“Können Sie den Reifen selber wechseln?”). Mangels Werkzeug und Ahnung lehnte ich das ab. Mit einem winzigen Schraubenzieher bekam er die Kappe nicht ab, mit einem etwas größeren und viel Mühe löste er sich aber schließlich. Damit ließ sich dann der platte Reifen ab- und der neue aufziehen. Doch dann zeigte sich: Das passt nicht. Die Felge hatte die falsche Form, die Achse war so zu kurz und die Kappe passte auch nicht mehr.

An dieser Stelle hätte die Geschichte ebenfalls zu Ende sein können: Ersatz geben, fertig. Aber nein, Erwin überzeugte mich, doch nochmal zur Eisenwaren-Abteilung zurück zu kehren, und dort jemand zu finden, der den passenden Reifen ausfindig machen kann. Wie ihm auch diese Überzeugungsarbeit gelang, ist mir im Nachhinein völlig unklar. Ich machte mich also wieder auf den Weg, diesmal mit dem kaputten sowie dem unpassenden Reifen. Immerhin ohne die restliche Karre, die lehnte noch im Verkauf an einem Stapel Eimer.

Mir war schnell klar, das es die korrekten Reifen nicht gab, aber immerhin fand ich diesmal einen Verkäufer, der gerade einen anderen Kunden mit irgendwelchen Schrauben beriet. Also platzierte ich mich direkt neben ihm, um als nächstes dran zu sein. Als es soweit war, konnte ich dann Franz das Problem schildern. Auch Franz sah schnell ein, das er den richtigen Reifen nicht da hatte, aber ihm fiel eine Lösung ein: Schlauch austauschen! Ging aber auch nicht, da die passenden Schläuche nicht vorhanden waren. Da ich befürchtete, mit leeren Händen wieder zurück zu kehren, bekniete ich Franz, mich nicht im Stich zu lassen. Nachdem einem kurzen Telefonat mit Erwin beschloss er, mit mir mitzukommen, um von einer der anderen Sackkarren einen Reifen abzumontieren, und diesen an meine dran zu packen. Franz zeigte hier nicht nur Eigeninitiative, sondern auch etwas Vorrausicht: Er packte direkt passendes Werkzeug ein.

Nach ein paar weiteren Gehminuten in die allerletzte Arena-Ecke und etwas mehr Hebelei machten wir uns auf den Weg zurück zum Verkauf. An der Ecke fiel Franz dann auf, das dort allerhand Reifen gestapelt waren, inkl. dem passenden für meine Sackkarre. In der Arena! Und mich schickt man ganz woanders in! Franz grummelte etwas eher Unflätiges…

Als wir dann den Verkaufsraum betraten, wunderte ich mich, wieso sowohl der Stapel Eimer als auch die Sackkarre am Boden lagen. Die Karre hatte ja nur noch einen Reifen, bei einer näheren Untersuchung stellte sich raus: Jetzt war auch der andere platt! Der musste in meiner Abwesenheit geplatzt sein, und hatte dabei den Stapel Eimer mitgerissen. Erstaunlicherweise (oder auch nicht) ignorierte mich Erwin jetzt komplett. Auch Anton sagte kein Wort, obwohl zumindest einer von beiden den Knall mitbekommen haben musste.

Auch hier zeigte Franz wieder seine kompetente Seite und traf endlich die lange überfällige Entscheidung: “Holen Sie sich einfach einen Ersatz.”

Als ich dann damit nochmal in den Verkaufsraum zurück kehrte, wurde ich weiterhin ignoriert. Franz war inzwischen verschwunden. Nach einer Minute beschloss ich dann, die Karre wieder ins Auto zu packen und damit wieder zum Ausgang, respektive Kasse, zu fahren. Nach einer weiteren Kofferraum-Inspektion und der Erklärung, das ich jetzt Ersatz hätte, durfte ich dann auch wieder fahren…

Implementing HTTP/2 push in Java

This is another guest post by my friend Tobi. —Jörn

The story:

Some months ago I started to play around with HTTP/2 and wondered what should get better with this piece of technology, where are the limitations and pitfalls. So I first went to Wikipedia and read the Wikipedia article about HTTP/2 and the RFC 7540 standard. I was quite impressed about the idea to reduce the latency of web pages.

Because I am familiar with JEE development I just had a look at how to integrate this technology in an existing JEE application and read about PushBuilder API. Cool – a Java API which handles to push resources before the actual response is submitted to the client. I thought this sounds good and build up my first application with it.

First I tried to configure tomcat with SSL and HTTP/2, but I failed sadly as you can read within this mailing list topic Apache Tomcat 9.0.0-M4 and http/2 on Mac OS X 10.11.4 (If you have any hints what I did wrong please let me know!). Then I tried it by configure a Jetty Servlet Container which was a great straight forward implementation as you can see in this Sample.

Ok the first implementation was made.

Then I had a look into the console of my browser and saw the resources are pushed all the time and I thought this might cause a big impact on the network traffic which outweighs the latency benefit. So I posted a question at stackoverflow about “Jetty respond with status 200 instead of 304 while using http2” and happily Martin Grigorov (Tomcat Committer) and Simone Bordet (Jetty core developer) helped me within this question and a corresponding issue ticket jetty.project issues 801 to understand that it is up to the developer when a resource should be pushed and when the browser should use the cache. One sentence I want to quote: “I think there is a misunderstanding of what the push APIs do. Right now, they just push.”

By consolidating those new information I came up with a new Implementation for Apache Wicket to handle HTTP/2 push very easily. You can find the implementation in the corresponding PushHeaderItem class in the wicket git repository

Here are some facts / pitfalls that you should consider when using HTTP/2 push:

  1. Think about when should resources be pushed and when it makes more sense to get them out of the browser cache with a minor “overhead request” – depending on this you have to build up your own implementation
  2. Some browsers like Chrome do not cache resources if the SSL cert is self signed – consider this if you check the caching behavior of your implementation
  3. Try to implement your push API docile so that the browser can also use HTTP/1 and get the resources in a normal way as fallback
  4. You can check the push behavior of your implementation / example application. Chrome example: chrome://net-internals/#http2

Conclusion:

When using HTTP/2 and PushBuilder API you have to think about a lot of marginal conditions like Caching, SSL implementations, traffic impact to find a good solution that does exactly what you want.